mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-12-28 19:08:32 +08:00
commit
115dfe28a3
16 changed files with 2265 additions and 293 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -73,4 +73,10 @@ public/css/style.css
|
|||
public/css/style.css.map
|
||||
functions/serviceAccountKey.json
|
||||
functions/serviceAccountKey_live.json
|
||||
functions/serviceAccountKey_copy.json
|
||||
functions/serviceAccountKey_live_copy.json
|
||||
.firebaserc
|
||||
.firebaserc_copy
|
||||
functions/serviceAccountKey_copy.json
|
||||
functions/serviceAccountKey_live_copy.json
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ You can use `tab` and `enter` (or just `tab` if you have quick tab mode enabled)
|
|||
- acc - percentage of correctly pressed keys
|
||||
- key - correct characters / incorrect characters. Calculated after the test has ended
|
||||
|
||||
# discord bot
|
||||
Recently, a Discord bot was added to autoassign roles. You can find the code for it over at https://github.com/Miodec/monkey-bot
|
||||
|
||||
# bug report or feature request
|
||||
If you encounter a bug, or have a feature request - send me a message on Reddit, create an issue on GitHub or send me a message using the command line `esc`.
|
||||
|
||||
|
|
|
|||
|
|
@ -6,25 +6,22 @@
|
|||
"**/.*",
|
||||
"**/node_modules/**"
|
||||
],
|
||||
"redirects": [
|
||||
{
|
||||
"source": "/soon",
|
||||
"destination": "/",
|
||||
"type": 301
|
||||
}
|
||||
],
|
||||
"rewrites": [
|
||||
{
|
||||
"source": "**",
|
||||
"destination": "/index.html"
|
||||
}
|
||||
],
|
||||
"redirects": [{
|
||||
"source": "/soon",
|
||||
"destination": "/",
|
||||
"type": 301
|
||||
}],
|
||||
"rewrites": [{
|
||||
"source": "**",
|
||||
"destination": "/index.html"
|
||||
}],
|
||||
"cleanUrls": true,
|
||||
"trailingSlash": false
|
||||
},
|
||||
"functions": {
|
||||
"predeploy": [
|
||||
"npm --prefix \"$RESOURCE_DIR\" run lint"
|
||||
]
|
||||
}
|
||||
}
|
||||
// },
|
||||
// "functions": {
|
||||
// "predeploy": [
|
||||
// "npm --prefix \"$RESOURCE_DIR\" run lint"
|
||||
// ]
|
||||
// }
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -10,6 +10,15 @@
|
|||
/* Firefox */
|
||||
}
|
||||
|
||||
html {
|
||||
@extend .ffscroll;
|
||||
}
|
||||
|
||||
.ffscroll {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: var(--sub-color) transparent;
|
||||
}
|
||||
|
||||
input {
|
||||
outline: none;
|
||||
border: none;
|
||||
|
|
@ -85,7 +94,7 @@ html {
|
|||
|
||||
/* width */
|
||||
::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
width: 7px;
|
||||
}
|
||||
|
||||
/* Track */
|
||||
|
|
@ -135,6 +144,7 @@ a:hover {
|
|||
animation-iteration-count: infinite;
|
||||
animation-duration: 2s;
|
||||
animation-timing-function: cubic-bezier(0.38, 0.16, 0.57, 0.82);
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
@keyframes loader {
|
||||
|
|
@ -154,6 +164,127 @@ a:hover {
|
|||
}
|
||||
}
|
||||
|
||||
#leaderboardsWrapper {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, 0.75);
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: 1000;
|
||||
display: grid;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 5rem 0;
|
||||
|
||||
#leaderboards {
|
||||
width: 85vw;
|
||||
height: calc(100vh - 10rem);
|
||||
background: var(--bg-color);
|
||||
border-radius: var(--roundness);
|
||||
padding: 2rem;
|
||||
display: grid;
|
||||
gap: 2rem;
|
||||
grid-template-rows: 3rem auto;
|
||||
grid-template-areas: "title buttons"
|
||||
"tables tables";
|
||||
grid-template-columns: 1fr 1fr;
|
||||
|
||||
.mainTitle {
|
||||
font-size: 3rem;
|
||||
line-height: 3rem;
|
||||
grid-area: title;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 2rem;
|
||||
line-height: 2rem;
|
||||
margin-bottom: .5rem;
|
||||
}
|
||||
|
||||
.tables {
|
||||
grid-area: tables;
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
margin-bottom: 2rem;
|
||||
font-size: .8rem;
|
||||
|
||||
.titleAndTable {
|
||||
display: grid;
|
||||
|
||||
.title {
|
||||
grid-area: 1/1;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
grid-area: 1/1;
|
||||
align-self: center;
|
||||
justify-self: right;
|
||||
color: var(--sub-color);
|
||||
}
|
||||
}
|
||||
|
||||
.globalTableWrapper,
|
||||
.dailyTableWrapper {
|
||||
height: calc(100vh - 22rem);
|
||||
@extend .ffscroll;
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
|
||||
tr td:first-child {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: .25rem .5rem;
|
||||
|
||||
&.me {
|
||||
color: var(--main-color);
|
||||
font-weight: 900;
|
||||
}
|
||||
}
|
||||
|
||||
thead {
|
||||
color: var(--sub-color);
|
||||
font-size: .75rem;
|
||||
}
|
||||
|
||||
tbody {
|
||||
color: var(--text-color);
|
||||
|
||||
tr:nth-child(odd) td {
|
||||
background: rgba(0, 0, 0, .1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
grid-area: buttons;
|
||||
display: -ms-grid;
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
align-self: center;
|
||||
|
||||
.buttonGroup {
|
||||
display: grid;
|
||||
grid-auto-flow: column;
|
||||
gap: 1rem;
|
||||
grid-area: 1/2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#tagsWrapper {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
|
@ -230,6 +361,7 @@ a:hover {
|
|||
padding: 2rem;
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
@extend .ffscroll;
|
||||
overflow-y: scroll;
|
||||
|
||||
.tip {
|
||||
|
|
@ -346,6 +478,7 @@ a:hover {
|
|||
|
||||
.suggestions {
|
||||
display: block;
|
||||
@extend .ffscroll;
|
||||
overflow-y: scroll;
|
||||
max-height: calc(100vh - 10rem - 3rem);
|
||||
display: grid;
|
||||
|
|
@ -399,7 +532,7 @@ a:hover {
|
|||
width: 100vw;
|
||||
/* height: 0.5rem; */
|
||||
height: 0.5rem;
|
||||
background: var(--sub-color);
|
||||
background: black;
|
||||
/* background: #0f0f0f; */
|
||||
/* background: red; */
|
||||
// transition: 1s linear;
|
||||
|
|
@ -422,12 +555,39 @@ a:hover {
|
|||
}
|
||||
|
||||
#timerNumber {
|
||||
bottom: 4rem;
|
||||
bottom: 6rem;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
#liveWpm.timerMain,
|
||||
#timerNumber.timerMain {
|
||||
color: var(--main-color);
|
||||
}
|
||||
|
||||
#timer.timerMain {
|
||||
background: var(--main-color);
|
||||
}
|
||||
|
||||
#liveWpm.timerSub,
|
||||
#timerNumber.timerSub {
|
||||
color: var(--sub-color);
|
||||
}
|
||||
|
||||
#timer.timerSub {
|
||||
background: var(--sub-color);
|
||||
}
|
||||
|
||||
#liveWpm.timerText,
|
||||
#timerNumber.timerText {
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
#timer.timerText {
|
||||
background: var(--text-color);
|
||||
}
|
||||
|
||||
#liveWpm {
|
||||
top: 4rem;
|
||||
top: 6rem;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -791,7 +951,7 @@ key {
|
|||
|
||||
.stats {
|
||||
display: grid;
|
||||
gap: .5rem;
|
||||
column-gap: .5rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
grid-template-areas:
|
||||
|
|
@ -799,9 +959,13 @@ key {
|
|||
"wpm key"
|
||||
"raw time"
|
||||
"source source"
|
||||
"leaderboards leaderboards"
|
||||
"testType infoAndTags";
|
||||
|
||||
|
||||
.group {
|
||||
margin-bottom: .5rem;
|
||||
|
||||
.top {
|
||||
color: var(--sub-color);
|
||||
font-size: 1rem;
|
||||
|
|
@ -831,6 +995,22 @@ key {
|
|||
}
|
||||
}
|
||||
|
||||
.leaderboards {
|
||||
align-self: baseline;
|
||||
grid-area: leaderboards;
|
||||
color: var(--sub-color);
|
||||
|
||||
.top {
|
||||
font-size: 1rem;
|
||||
line-height: 1.25rem;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
font-size: 1rem;
|
||||
line-height: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.source {
|
||||
align-self: baseline;
|
||||
grid-area: source;
|
||||
|
|
@ -1200,6 +1380,7 @@ key {
|
|||
cursor: pointer;
|
||||
width: 0;
|
||||
height: 0;
|
||||
display: none;
|
||||
|
||||
&~.customCheckbox {
|
||||
width: 12px;
|
||||
|
|
@ -1333,6 +1514,33 @@ key {
|
|||
grid-area: buttons;
|
||||
}
|
||||
|
||||
&.discordIntegration {
|
||||
.code {
|
||||
justify-content: center;
|
||||
display: grid;
|
||||
|
||||
.top {
|
||||
font-size: 1rem;
|
||||
line-height: 1rem;
|
||||
color: var(--sub-color);
|
||||
}
|
||||
|
||||
.bottom {
|
||||
font-size: 2rem;
|
||||
line-height: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.info {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.howto {
|
||||
margin-top: 1rem;
|
||||
color: var(--text-color);
|
||||
}
|
||||
}
|
||||
|
||||
&.tags {
|
||||
.tagsList {
|
||||
display: grid;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<title>Monkey Type</title>
|
||||
<link rel="stylesheet" href="css/fa.css">
|
||||
<link rel="stylesheet" href="css/balloon.css">
|
||||
<link rel="stylesheet" href="css/style.css?v=24">
|
||||
<link rel="stylesheet" href="css/style.css?v=33">
|
||||
<link rel="stylesheet" href="themes/serika_dark.css" id="currentTheme">
|
||||
<link id="favicon" rel="shortcut icon" href="fav.png">
|
||||
<link rel="shortcut icon" href="fav.png">
|
||||
|
|
@ -52,6 +52,428 @@
|
|||
<div class="button confirmButton"><i class="fas fa-check"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="leaderboardsWrapper" class="hidden">
|
||||
<div id="leaderboards">
|
||||
<div class="mainTitle">
|
||||
Leaderboards
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<div class="buttonGroup">
|
||||
<div class="button active" board="time_15">time 15</div>
|
||||
<div class="button" board="time_60">time 60</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tables">
|
||||
<div class="titleAndTable">
|
||||
<div class="title">
|
||||
Global
|
||||
</div>
|
||||
<div class="globalTableWrapper">
|
||||
<table class="global">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>#</td>
|
||||
<td>name</td>
|
||||
<td>wpm</td>
|
||||
<td>raw</td>
|
||||
<td>acc</td>
|
||||
<td>test</td>
|
||||
<td>date</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="titleAndTable">
|
||||
<div class="title">
|
||||
Daily
|
||||
</div>
|
||||
<div class="subtitle">
|
||||
-
|
||||
</div>
|
||||
<div class="dailyTableWrapper">
|
||||
<table class="daily">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>#</td>
|
||||
<td>name</td>
|
||||
<td>wpm</td>
|
||||
<td>raw</td>
|
||||
<td>acc</td>
|
||||
<td>test</td>
|
||||
<td>date</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="versionHistoryWrapper" class="hidden">
|
||||
<div id="versionHistory">
|
||||
<div class="tip">Click anywhere to dismiss</div>
|
||||
|
|
@ -97,6 +519,11 @@
|
|||
<i class="fas fa-fw fa-keyboard"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="icon-button leaderboards" tabindex="2" onclick="this.blur();">
|
||||
<div class="icon">
|
||||
<i class="fas fa-fw fa-crown"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="icon-button" tabindex="2" href="/about" onclick="this.blur();">
|
||||
<div class="icon">
|
||||
<i class="fas fa-fw fa-info"></i>
|
||||
|
|
@ -228,6 +655,10 @@
|
|||
<div class="bottom">-</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="group leaderboards">
|
||||
<div class="top">leaderboards</div>
|
||||
<div class="bottom">-</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="chart">
|
||||
<!-- <div class="title">wpm over time</div> -->
|
||||
|
|
@ -242,14 +673,14 @@
|
|||
<div id="words" class=""></div>
|
||||
<div id="liveWpm">123</div>
|
||||
<div class="buttons">
|
||||
<div id="restartTestButton" aria-label="Restart test" data-balloon-pos="up" class="" tabindex="0"
|
||||
<div id="restartTestButton" aria-label="Restart test" data-balloon-pos="down" class="" tabindex="0"
|
||||
onclick="this.blur();"><i class="fas fa-fw fa-redo-alt"></i></div>
|
||||
<div id="resultExtraButtons" class="hidden">
|
||||
<div id="restartTestButtonWithSameWordset" aria-label="Repeat test" data-balloon-pos="up" tabindex="0"
|
||||
<div id="restartTestButtonWithSameWordset" aria-label="Repeat test" data-balloon-pos="down" tabindex="0"
|
||||
onclick="this.blur();"><i class="fas fa-fw fa-sync-alt"></i></div>
|
||||
<div id="showWordHistoryButton" aria-label="Show words history" data-balloon-pos="up" tabindex="0"
|
||||
<div id="showWordHistoryButton" aria-label="Show words history" data-balloon-pos="down" tabindex="0"
|
||||
onclick="this.blur();"><i class="fas fa-fw fa-align-left"></i></div>
|
||||
<div id="copyResultToClipboardButton" aria-label="Save screenshot" data-balloon-pos="up" tabindex="0"
|
||||
<div id="copyResultToClipboardButton" aria-label="Save screenshot" data-balloon-pos="down" tabindex="0"
|
||||
onclick="this.blur();"><i class="far fa-fw fa-image"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -278,7 +709,7 @@
|
|||
<p>wpm - total amount of characters in the correctly typed words, divided by 5</p>
|
||||
<p>raw wpm - calculated just like wpm, but also includes incorrect words</p>
|
||||
<p>acc - percentage of correctly pressed keys</p>
|
||||
<p>key - correct characters / incorrect characters. Calculated after the test has ended</p>
|
||||
<p>char - correct characters / incorrect characters. Calculated after the test has ended</p>
|
||||
</div>
|
||||
<div class="section">
|
||||
<h1>bug report or feature request</h1>
|
||||
|
|
@ -291,14 +722,15 @@
|
|||
<p><a href="https://www.reddit.com/user/montydrei" target="_blank">montydrei</a> - name suggestion</p>
|
||||
<p><a
|
||||
href="https://www.reddit.com/r/MechanicalKeyboards/comments/gc6wx3/experimenting_with_a_completely_new_type_of/"
|
||||
target="_blank">everyone</a> who provided
|
||||
target="_blank">Everyone</a> who provided
|
||||
valuable feedback on the original reddit post for the prototype of this website</p>
|
||||
<p><a href="https://github.com/Miodec/monkey-type/graphs/contributors">Contributors</a> on GitHub that
|
||||
have helped with implementing various features, adding themes and more.</p>
|
||||
</div>
|
||||
<div class="section">
|
||||
<h1>support</h1>
|
||||
<p>If you wish to support this project, help pay for hosting and fuel my caffeine addiction, you can find the
|
||||
support link in the <a href="https://github.com/Miodec/monkey-type/blob/master/README.md"
|
||||
target="_blank">GitHub's readme</a>.</p>
|
||||
<p>If you wish to support this project, help pay for hosting and fuel my caffeine addiction, you can donate <a
|
||||
href="https://www.paypal.me/jackbartnik" target="_blank">here</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page pageSettings hidden">
|
||||
|
|
@ -382,6 +814,27 @@
|
|||
<div class="addTagButton"><i class="fas fa-plus"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section discordIntegration">
|
||||
<h1>discord integration</h1>
|
||||
<div class="text">When you connect your monkey-type account to your Discord account, you will be automatically
|
||||
assigned a new role every time you achieve a new personal best in a 60 second test. <div
|
||||
class="howto hidden">To
|
||||
pair your accounts, direct message 'George' (our bot) on Discord with the message '!verify <span
|
||||
class="howtocode">-</span>'.</div>
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<div class="button generateCodeButton">Generate pairing code</div>
|
||||
</div>
|
||||
<div class="info hidden">
|
||||
<div><i class="fas fa-check"></i> Your accounts are paired!</div>
|
||||
</div>
|
||||
<div class="code hidden">
|
||||
<div style="width: min-content;white-space: nowrap;">
|
||||
<div class="top">code</div>
|
||||
<div class="bottom">-</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section layouts">
|
||||
<h1>layout override</h1>
|
||||
<div class="buttons">
|
||||
|
|
@ -422,6 +875,16 @@
|
|||
<div class="button" timer="text" tabindex="0" onclick="this.blur();">text</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section timerColor" section="">
|
||||
<h1>timer color</h1>
|
||||
<div class="text">Change the color of the timer number/bar and live wpm number.</div>
|
||||
<div class="buttons">
|
||||
<div class="button" color="black" tabindex="0" onclick="this.blur();">black</div>
|
||||
<div class="button" color="sub" tabindex="0" onclick="this.blur();">sub</div>
|
||||
<div class="button" color="text" tabindex="0" onclick="this.blur();">text</div>
|
||||
<div class="button" color="main" tabindex="0" onclick="this.blur();">main</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section flipTestColors">
|
||||
<h1>flip test colors</h1>
|
||||
<div class="text">By default, typed text is brighter than the future text. When enabled, the colors will be
|
||||
|
|
@ -797,7 +1260,10 @@
|
|||
<a tabindex="0" href="https://www.reddit.com/message/compose?to=Miodec" target="_blank">Miodec</a>
|
||||
</div>
|
||||
<div>
|
||||
Contribute to this project on <a href="https://github.com/Miodec/monkey-type" target="_blank">GitHub</a>
|
||||
Contribute on <a href="https://github.com/Miodec/monkey-type" target="_blank">GitHub</a>
|
||||
</div>
|
||||
<div>
|
||||
Support by <a href="https://www.paypal.me/jackbartnik" target="_blank">donating</a>
|
||||
</div>
|
||||
<div class="version">version</div>
|
||||
</div>
|
||||
|
|
@ -824,17 +1290,17 @@
|
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
|
||||
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></script> -->
|
||||
<script src="js/chart.js"></script>
|
||||
<script src="js/chartjs-plugin-trendline.js?v=25"></script>
|
||||
<script src="js/chartjs-plugin-trendline.js?v=33"></script>
|
||||
<script src="js/chartjs-plugin-annotation.js"></script>
|
||||
<script src="js/html2canvas.js"></script>
|
||||
<script src="js/words.js?v=25"></script>
|
||||
<script src="js/layouts.js?v=25"></script>
|
||||
<script src="js/db.js?v=25"></script>
|
||||
<script src="js/userconfig.js?v=25"></script>
|
||||
<script src="js/commandline.js?v=25"></script>
|
||||
<script src="js/settings.js?v=25"></script>
|
||||
<script src="js/account.js?v=25"></script>
|
||||
<script src="js/script.js?v=25"></script>
|
||||
|
||||
<script src="js/words.js?v=33"></script>
|
||||
<script src="js/layouts.js?v=33"></script>
|
||||
<script src="js/db.js?v=33"></script>
|
||||
<script src="js/userconfig.js?v=33"></script>
|
||||
<script src="js/commandline.js?v=33"></script>
|
||||
<script src="js/leaderboards.js?v=33"></script>
|
||||
<script src="js/settings.js?v=33"></script>
|
||||
<script src="js/account.js?v=33"></script>
|
||||
<script src="js/script.js?v=33"></script>
|
||||
|
||||
</html>
|
||||
|
|
@ -135,6 +135,11 @@ function signUp() {
|
|||
})
|
||||
.then(function () {
|
||||
// Update successful.
|
||||
firebase
|
||||
.firestore()
|
||||
.collection("users")
|
||||
.doc(usr.uid)
|
||||
.set({ name: nname }, { merge: true });
|
||||
showNotification("Account created", 2000);
|
||||
$("#menu .icon-button.account .text").text(nname);
|
||||
try {
|
||||
|
|
@ -147,11 +152,12 @@ function signUp() {
|
|||
})
|
||||
.catch(function (error) {
|
||||
// An error happened.
|
||||
console.error(error);
|
||||
usr
|
||||
.delete()
|
||||
.then(function () {
|
||||
// User deleted.
|
||||
showNotification("Name invalid", 2000);
|
||||
showNotification("An error occured", 2000);
|
||||
$(".pageLogin .preloader").addClass("hidden");
|
||||
})
|
||||
.catch(function (error) {
|
||||
|
|
@ -204,12 +210,13 @@ firebase.auth().onAuthStateChanged(function (user) {
|
|||
}
|
||||
});
|
||||
refreshTagsSettingsSection();
|
||||
updateDiscordSettingsSection();
|
||||
if (cookieConfig === null) {
|
||||
applyConfig(dbSnapshot.config);
|
||||
// showNotification('Applying db config',3000);
|
||||
updateSettingsPage();
|
||||
saveConfigToCookie();
|
||||
} else {
|
||||
} else if (dbSnapshot.config !== undefined) {
|
||||
let configsDifferent = false;
|
||||
Object.keys(config).forEach((key) => {
|
||||
if (!configsDifferent) {
|
||||
|
|
@ -396,6 +403,11 @@ Object.keys(words).forEach((language) => {
|
|||
" "
|
||||
)}</div>`
|
||||
);
|
||||
if (language === "english_expanded") {
|
||||
$(".pageAccount .content .filterButtons .buttons.languages").append(
|
||||
`<div class="button" filter="english_10k">english 10k</div>`
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
let activeFilters = ["all"];
|
||||
|
|
@ -650,9 +662,9 @@ function loadMoreLines() {
|
|||
|
||||
$(".pageAccount .history table tbody").append(`
|
||||
<tr>
|
||||
<td>${Math.round(result.wpm)}</td>
|
||||
<td>${Math.round(raw)}</td>
|
||||
<td>${Math.round(result.acc)}%</td>
|
||||
<td>${result.wpm}</td>
|
||||
<td>${raw}</td>
|
||||
<td>${result.acc}%</td>
|
||||
<td>${result.correctChars}</td>
|
||||
<td>${result.incorrectChars}</td>
|
||||
<td>${result.mode} ${result.mode2}${withpunc}</td>
|
||||
|
|
|
|||
|
|
@ -164,6 +164,15 @@ let commands = {
|
|||
showCommandLine();
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "changeTimerColor",
|
||||
display: "Change timer color...",
|
||||
subgroup: true,
|
||||
exec: () => {
|
||||
currentCommands.push(commandsTimerColor);
|
||||
showCommandLine();
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "changeTheme",
|
||||
display: "Change theme...",
|
||||
|
|
@ -291,6 +300,40 @@ let commandsTimerStyle = {
|
|||
],
|
||||
};
|
||||
|
||||
let commandsTimerColor = {
|
||||
title: "Change timer color...",
|
||||
list: [
|
||||
{
|
||||
id: "setTimerColorBlack",
|
||||
display: "black",
|
||||
exec: () => {
|
||||
setTimerColor("bar");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setTimerColorSub",
|
||||
display: "sub",
|
||||
exec: () => {
|
||||
setTimerColor("sub");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setTimerColorText",
|
||||
display: "text",
|
||||
exec: () => {
|
||||
setTimerColor("text");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setTimerColorMain",
|
||||
display: "main",
|
||||
exec: () => {
|
||||
setTimerColor("main");
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
let commandsWordCount = {
|
||||
title: "Change word count...",
|
||||
list: [
|
||||
|
|
|
|||
|
|
@ -47,13 +47,16 @@ async function db_getUserSnapshot() {
|
|||
.collection("users")
|
||||
.doc(user.uid)
|
||||
.get()
|
||||
.then((data) => {
|
||||
.then((res) => {
|
||||
// console.log('getting data from db!');
|
||||
let data = res.data();
|
||||
try {
|
||||
if (data.data().personalBests !== undefined) {
|
||||
snap.personalBests = data.data().personalBests;
|
||||
if (data.personalBests !== undefined) {
|
||||
snap.personalBests = data.personalBests;
|
||||
}
|
||||
snap.config = data.data().config;
|
||||
snap.discordId = data.discordId;
|
||||
snap.pairingCode = data.discordPairingCode;
|
||||
snap.config = data.config;
|
||||
} catch (e) {
|
||||
//
|
||||
}
|
||||
|
|
@ -139,6 +142,9 @@ async function db_saveLocalPB(
|
|||
function cont() {
|
||||
try {
|
||||
let found = false;
|
||||
if (dbSnapshot.personalBests[mode][mode2] === undefined) {
|
||||
dbSnapshot.personalBests[mode][mode2] = [];
|
||||
}
|
||||
dbSnapshot.personalBests[mode][mode2].forEach((pb) => {
|
||||
if (
|
||||
pb.punctuation == punctuation &&
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
[
|
||||
{
|
||||
[{
|
||||
"text": "You have the power to heal your life, and you need to know that.",
|
||||
"source": "Meditations to Heal Your Life",
|
||||
"id": 1
|
||||
|
|
@ -835,7 +834,7 @@
|
|||
"id": 167
|
||||
},
|
||||
{
|
||||
"text": "Then we saw him pick up all the things that were down.\r\nHe picked up the cake, and the rake, and the gown, \r\nand the milk, and the strings, and the books, and the dish,\r\nand the fan, and the cup, and the ship, and the fish.",
|
||||
"text": "Then we saw him pick up all the things that were down. He picked up the cake, and the rake, and the gown, and the milk, and the strings, and the books, and the dish, and the fan, and the cup, and the ship, and the fish.",
|
||||
"source": "The Cat in the Hat",
|
||||
"id": 168
|
||||
},
|
||||
|
|
@ -2145,7 +2144,7 @@
|
|||
"id": 429
|
||||
},
|
||||
{
|
||||
"text": "The Earth is a world, the world is a ball, a ball in a game with no rules at all. And just as I wonder at the beauty of it all, you go and drop it and it breaks and falls.",
|
||||
"text": "The Earth is a world, the world is a ball, a ball in a game with no rules at all. And just as I wonder at the beauty of it all, you go and drop it and it breaks and falls.",
|
||||
"source": "The Game",
|
||||
"id": 430
|
||||
},
|
||||
|
|
@ -3015,7 +3014,7 @@
|
|||
"id": 603
|
||||
},
|
||||
{
|
||||
"text": "Now I want you to think and stop being a smart aleck. A man's attitude goes some ways - the way his life will be. Is that something you agree with? So since you agree, you must be someone who does not care about the good life. ",
|
||||
"text": "Now I want you to think and stop being a smart aleck. A man's attitude goes some ways - the way his life will be. Is that something you agree with? So since you agree, you must be someone who does not care about the good life. ",
|
||||
"source": "Mulholland Drive",
|
||||
"id": 604
|
||||
},
|
||||
|
|
@ -3086,7 +3085,7 @@
|
|||
},
|
||||
{
|
||||
"text": "Getting into trouble is not a bad thing. It's proof that someone's watching you. I've got my eyes on you, so feel free to mess up as much as you want.",
|
||||
"source": "My Youth Romantic Comedy is Wrong, as I Expected",
|
||||
"source": "My Youth Romantic Comedy is Wrong, as I Expected",
|
||||
"id": 618
|
||||
},
|
||||
{
|
||||
|
|
@ -3670,7 +3669,7 @@
|
|||
"id": 734
|
||||
},
|
||||
{
|
||||
"text": "It is truly amazing what you can do when you believe in your own ability. That's why you need faith - a deep down, dogged belief that, regardless of the evidence, you are going to make it! You are going to achieve what you have set out to accomplish. You are going to make a difference in this life.",
|
||||
"text": "It is truly amazing what you can do when you believe in your own ability. That's why you need faith - a deep down, dogged belief that, regardless of the evidence, you are going to make it! You are going to achieve what you have set out to accomplish. You are going to make a difference in this life.",
|
||||
"source": "The Seven Keys To Success",
|
||||
"id": 735
|
||||
},
|
||||
|
|
@ -3960,7 +3959,7 @@
|
|||
"id": 792
|
||||
},
|
||||
{
|
||||
"text": "How sweet it is to love someone, how right it is to care. How long it's been since yesterday, what about tomorrow, and what about our dreams and all the memories we share?",
|
||||
"text": "How sweet it is to love someone, how right it is to care. How long it's been since yesterday, what about tomorrow, and what about our dreams and all the memories we share?",
|
||||
"source": "Poems, Prayers, and Promises",
|
||||
"id": 793
|
||||
},
|
||||
|
|
@ -4245,7 +4244,7 @@
|
|||
"id": 849
|
||||
},
|
||||
{
|
||||
"text": "Remembering you standing quiet in the rain as I ran to your heart to be near. And we kissed as the sky fell in holding you close how I always held close in your fear.",
|
||||
"text": "Remembering you standing quiet in the rain as I ran to your heart to be near. And we kissed as the sky fell in holding you close how I always held close in your fear.",
|
||||
"source": "Pictures of You",
|
||||
"id": 850
|
||||
},
|
||||
|
|
@ -4395,7 +4394,7 @@
|
|||
"id": 879
|
||||
},
|
||||
{
|
||||
"text": "Sometimes you concentrate more on racing the cars around you, rather than focusing on what you need to do. Having said that, some drivers actually perform best when there is a little extra incentive - like chasing another car. But be careful you don't get too caught up in what the competition is doing. Focus on your own performance rather than on the competition.",
|
||||
"text": "Sometimes you concentrate more on racing the cars around you, rather than focusing on what you need to do. Having said that, some drivers actually perform best when there is a little extra incentive - like chasing another car. But be careful you don't get too caught up in what the competition is doing. Focus on your own performance rather than on the competition.",
|
||||
"source": "Speed Secrets: Professional Race Driving Techniques",
|
||||
"id": 880
|
||||
},
|
||||
|
|
@ -5195,7 +5194,7 @@
|
|||
"id": 1039
|
||||
},
|
||||
{
|
||||
"text": "Living in the limelight, the universal dream for those who wish to seem. Those who wish to be must put aside the alienation, get on with the fascination, the real relation,\r\nthe underlying theme.",
|
||||
"text": "Living in the limelight, the universal dream for those who wish to seem. Those who wish to be must put aside the alienation, get on with the fascination, the real relation, the underlying theme.",
|
||||
"source": "Limelight",
|
||||
"id": 1040
|
||||
},
|
||||
|
|
@ -5255,7 +5254,7 @@
|
|||
"id": 1051
|
||||
},
|
||||
{
|
||||
"text": "No matter how bad things are, you can always make things worse. At the same time, it is often within your power to make them better. I learned this lesson well on New Year's Eve, 2001.",
|
||||
"text": "No matter how bad things are, you can always make things worse. At the same time, it is often within your power to make them better. I learned this lesson well on New Year's Eve, 2001.",
|
||||
"source": "The Last Lecture",
|
||||
"id": 1052
|
||||
},
|
||||
|
|
@ -5370,7 +5369,7 @@
|
|||
"id": 1074
|
||||
},
|
||||
{
|
||||
"text": "I don't believe in painted roses or bleeding hearts while bullets rape the night of the merciful. I'll see you again when the stars fall from the sky and the moon has turned red over One Tree Hill.",
|
||||
"text": "I don't believe in painted roses or bleeding hearts while bullets rape the night of the merciful. I'll see you again when the stars fall from the sky and the moon has turned red over One Tree Hill.",
|
||||
"source": "One Tree Hill",
|
||||
"id": 1075
|
||||
},
|
||||
|
|
@ -5605,7 +5604,7 @@
|
|||
"id": 1121
|
||||
},
|
||||
{
|
||||
"text": "These nights are endless, and a man can sleep through them,\r\nor he can enjoy listening to stories, and you have no need\r\nto go to bed before it is time. Too much sleep is only\r\na bore. And of the others, any one whose heart and spirit\r\nurge him can go outside and sleep, and then, when the dawn shows,\r\nbreakfast first, then go out to tend the swine of our master.",
|
||||
"text": "These nights are endless, and a man can sleep through them, or he can enjoy listening to stories, and you have no need to go to bed before it is time. Too much sleep is only a bore. And of the others, any one whose heart and spirit urge him can go outside and sleep, and then, when the dawn shows, breakfast first, then go out to tend the swine of our master.",
|
||||
"source": "The Odyssey",
|
||||
"id": 1122
|
||||
},
|
||||
|
|
@ -6035,7 +6034,7 @@
|
|||
"id": 1207
|
||||
},
|
||||
{
|
||||
"text": "When the light of life has gone, no change for the meter. Then the king of spivs will come, selling blood by the litre. When nothing's sacred anymore, when the demon's knocking on your door, you'll still be staring down at the floor.",
|
||||
"text": "When the light of life has gone, no change for the meter. Then the king of spivs will come, selling blood by the litre. When nothing's sacred anymore, when the demon's knocking on your door, you'll still be staring down at the floor.",
|
||||
"source": "Swamp Thing",
|
||||
"id": 1208
|
||||
},
|
||||
|
|
@ -6205,7 +6204,7 @@
|
|||
"id": 1241
|
||||
},
|
||||
{
|
||||
"text": "I wanna be inside your heaven. Take me to the place you cry from, where the storm blows your way. I wanna be earth that holds you. Every bit of air you're breathing in, a soothing wind,\r\nI wanna be inside your heaven.",
|
||||
"text": "I wanna be inside your heaven. Take me to the place you cry from, where the storm blows your way. I wanna be earth that holds you. Every bit of air you're breathing in, a soothing wind, I wanna be inside your heaven.",
|
||||
"source": "Inside Your Heaven",
|
||||
"id": 1242
|
||||
},
|
||||
|
|
@ -6535,7 +6534,7 @@
|
|||
"id": 1307
|
||||
},
|
||||
{
|
||||
"text": "I am learning about twenty new Italian words a day. Where am I getting the brain space to store these words? I'm hoping that maybe my mind has decided to clear out some old negative thoughts and sad memories and replace them with these shiny new words.",
|
||||
"text": "I am learning about twenty new Italian words a day. Where am I getting the brain space to store these words? I'm hoping that maybe my mind has decided to clear out some old negative thoughts and sad memories and replace them with these shiny new words.",
|
||||
"source": "Eat, Pray, Love",
|
||||
"id": 1308
|
||||
},
|
||||
|
|
@ -7745,7 +7744,7 @@
|
|||
"id": 1549
|
||||
},
|
||||
{
|
||||
"text": "I think you're gonna find - when all this stuff is over and done - I think you're gonna find yourself one smiling guy.\r\nThing is Butch, right now you got ability. But painful as it may be, ability don't last. Now that's a hard fact of life, but it's a fact of life you're gonna have to get realistic about.",
|
||||
"text": "I think you're gonna find - when all this stuff is over and done - I think you're gonna find yourself one smiling guy. Thing is Butch, right now you got ability. But painful as it may be, ability don't last. Now that's a hard fact of life, but it's a fact of life you're gonna have to get realistic about.",
|
||||
"source": "Pulp Fiction",
|
||||
"id": 1550
|
||||
},
|
||||
|
|
@ -7810,7 +7809,7 @@
|
|||
"id": 1562
|
||||
},
|
||||
{
|
||||
"text": "Images of broken light which dance before me like a million eyes - they call me on and on across the universe. Thoughts meander like a restless wind inside a letter box - they tumble blindly as they make their way across the universe.",
|
||||
"text": "Images of broken light which dance before me like a million eyes - they call me on and on across the universe. Thoughts meander like a restless wind inside a letter box - they tumble blindly as they make their way across the universe.",
|
||||
"source": "Across the Universe",
|
||||
"id": 1563
|
||||
},
|
||||
|
|
@ -7855,7 +7854,7 @@
|
|||
"id": 1571
|
||||
},
|
||||
{
|
||||
"text": "The one place where a man ought to get a square deal is in a courtroom, be he any color of the rainbow, but people have a way of carrying their resentments right into a jury box. As you grow older, you'll see white men cheat black men every day of your life, but let me tell you something and don't you forget it - whenever a white man does that to a black man, no matter who he is, how rich he is, or how fine a family he comes from, that white man is trash.",
|
||||
"text": "The one place where a man ought to get a square deal is in a courtroom, be he any color of the rainbow, but people have a way of carrying their resentments right into a jury box. As you grow older, you'll see white men cheat black men every day of your life, but let me tell you something and don't you forget it - whenever a white man does that to a black man, no matter who he is, how rich he is, or how fine a family he comes from, that white man is trash.",
|
||||
"source": "To Kill a Mockingbird",
|
||||
"id": 1572
|
||||
},
|
||||
|
|
@ -8075,7 +8074,7 @@
|
|||
"id": 1615
|
||||
},
|
||||
{
|
||||
"text": "The one place where a man ought to get a square deal is in a courtroom, be he any color of the rainbow, but people have a way of carrying their resentments right into a jury box. As you grow older, you'll see white men cheat black men every day of your life, but let me tell you something and don't you forget it - whenever a white man does that to a black man, no matter who he is, how rich he is, or how fine a family he comes from, that white man is trash.",
|
||||
"text": "The one place where a man ought to get a square deal is in a courtroom, be he any color of the rainbow, but people have a way of carrying their resentments right into a jury box. As you grow older, you'll see white men cheat black men every day of your life, but let me tell you something and don't you forget it - whenever a white man does that to a black man, no matter who he is, how rich he is, or how fine a family he comes from, that white man is trash.",
|
||||
"source": "To Kill a Mockingbird",
|
||||
"id": 1616
|
||||
},
|
||||
|
|
@ -8235,7 +8234,7 @@
|
|||
"id": 1647
|
||||
},
|
||||
{
|
||||
"text": "One man, one family driven from the land; this rusty car\r\ncreaking along the highway to the west. I lost my land, a\r\nsingle tractor took my land. I am alone and bewildered.",
|
||||
"text": "One man, one family driven from the land; this rusty car creaking along the highway to the west. I lost my land, a single tractor took my land. I am alone and bewildered.",
|
||||
"source": "The Grapes of Wrath",
|
||||
"id": 1648
|
||||
},
|
||||
|
|
@ -8280,7 +8279,7 @@
|
|||
"id": 1656
|
||||
},
|
||||
{
|
||||
"text": "I won't say another word - not one. I know I talk too much, but I am really trying to overcome it, and although I say far too much, yet if you only knew how many things I want to say and don't, you'd give me some credit for it.",
|
||||
"text": "I won't say another word - not one. I know I talk too much, but I am really trying to overcome it, and although I say far too much, yet if you only knew how many things I want to say and don't, you'd give me some credit for it.",
|
||||
"source": "Anne of Green Gables",
|
||||
"id": 1657
|
||||
},
|
||||
|
|
@ -8460,7 +8459,7 @@
|
|||
"id": 1692
|
||||
},
|
||||
{
|
||||
"text": "It's so warm and calm inside. I no longer have to hide.\r\nThere's talk about someone else. Sterling silver begins to melt. Nothing really bothers her. She just wants to love herself. I will move away from here. You won't be afraid of fear. No thought was put into this. I always knew it'd come to this. Things have never been so swell. And I have never failed to fail.",
|
||||
"text": "It's so warm and calm inside. I no longer have to hide. There's talk about someone else. Sterling silver begins to melt. Nothing really bothers her. She just wants to love herself. I will move away from here. You won't be afraid of fear. No thought was put into this. I always knew it'd come to this. Things have never been so swell. And I have never failed to fail.",
|
||||
"source": "You Know You're Right",
|
||||
"id": 1693
|
||||
},
|
||||
|
|
@ -8630,7 +8629,7 @@
|
|||
"id": 1726
|
||||
},
|
||||
{
|
||||
"text": "Rhymes trap you into saying things you don't want to say. A word like \"fire\" is a good example. Before you know it you're reaching for desire, or to get higher, or calling someone a liar, or putting them on a pyre, even if that wasn't what you were going to say.",
|
||||
"text": "Rhymes trap you into saying things you don't want to say. A word like \"fire\" is a good example. Before you know it you're reaching for desire, or to get higher, or calling someone a liar, or putting them on a pyre, even if that wasn't what you were going to say.",
|
||||
"source": "Lyrics: Writing Better Words for Your Songs",
|
||||
"id": 1727
|
||||
},
|
||||
|
|
@ -8845,7 +8844,7 @@
|
|||
"id": 1769
|
||||
},
|
||||
{
|
||||
"text": "Consider this: Is the pious being loved by the gods because it is pious, or is it pious because it is being loved by the Gods? We speak of something carried and something carrying, of something led and something leading, of something seen and something seeing, and you understand that these things are all different from one another and how they differ? So there is also something loved and - a different thing - something loving.",
|
||||
"text": "Consider this: Is the pious being loved by the gods because it is pious, or is it pious because it is being loved by the Gods? We speak of something carried and something carrying, of something led and something leading, of something seen and something seeing, and you understand that these things are all different from one another and how they differ? So there is also something loved and - a different thing - something loving.",
|
||||
"source": "Plato: Five Dialogues",
|
||||
"id": 1770
|
||||
},
|
||||
|
|
@ -9005,7 +9004,7 @@
|
|||
"id": 1801
|
||||
},
|
||||
{
|
||||
"text": "In detective work, there's no winning or losing... there's no being inferior or superior... that's because there's always one and only one truth.",
|
||||
"text": "In detective work, there's no winning or losing... there's no being inferior or superior... that's because there's always one and only one truth.",
|
||||
"source": "Meitantei Conan",
|
||||
"id": 1802
|
||||
},
|
||||
|
|
@ -9165,7 +9164,7 @@
|
|||
"id": 1833
|
||||
},
|
||||
{
|
||||
"text": "I thought I had the whole world in my mouth. I thought I could say what I wanted to say. For a second that thought became a sword in my hand. I could slay any problem that would stand in my way. I felt just like a crusader. Lion-heart, a Holy Land invader. But nobody can say what they really mean to say, and the impotency of speech came up and hit me that day, and I would have made this instrumental \r\nbut the words got in the way.",
|
||||
"text": "I thought I had the whole world in my mouth. I thought I could say what I wanted to say. For a second that thought became a sword in my hand. I could slay any problem that would stand in my way. I felt just like a crusader. Lion-heart, a Holy Land invader. But nobody can say what they really mean to say, and the impotency of speech came up and hit me that day, and I would have made this instrumental but the words got in the way.",
|
||||
"source": "No Language in Our Lungs",
|
||||
"id": 1834
|
||||
},
|
||||
|
|
@ -9185,7 +9184,7 @@
|
|||
"id": 1837
|
||||
},
|
||||
{
|
||||
"text": "Imagine for a moment if we once again knew these few unremarkable things: What it is we're eating. Where it came from. How it found its way to our table. And what, in a true\r\naccounting, it really cost. We would no longer need any reminding that however we choose to feed ourselves, we eat by\r\nthe grace of nature, not industry, and what we're eating is never anything more or less than the body of the world.",
|
||||
"text": "Imagine for a moment if we once again knew these few unremarkable things: What it is we're eating. Where it came from. How it found its way to our table. And what, in a true accounting, it really cost. We would no longer need any reminding that however we choose to feed ourselves, we eat by the grace of nature, not industry, and what we're eating is never anything more or less than the body of the world.",
|
||||
"source": "The Omnivore's Dilemma: A Natural History of Four Meals",
|
||||
"id": 1838
|
||||
},
|
||||
|
|
@ -9245,7 +9244,7 @@
|
|||
"id": 1849
|
||||
},
|
||||
{
|
||||
"text": "Language is one of the keys to being human. It allows us to communicate with other human beings and to leave a legacy of our thoughts and actions for future generations. The dominant temporal lobe helps to process sounds and written words into meaningful information.",
|
||||
"text": "Language is one of the keys to being human. It allows us to communicate with other human beings and to leave a legacy of our thoughts and actions for future generations. The dominant temporal lobe helps to process sounds and written words into meaningful information.",
|
||||
"source": "Change Your Brain, Change Your Life",
|
||||
"id": 1850
|
||||
},
|
||||
|
|
@ -9305,7 +9304,7 @@
|
|||
"id": 1861
|
||||
},
|
||||
{
|
||||
"text": "That's me in the corner, that's me in the spotlight losing my religion trying to keep up with you, and I don't know if I can do it.\r\nOh no, I've said too much, I haven't said enough.",
|
||||
"text": "That's me in the corner, that's me in the spotlight losing my religion trying to keep up with you, and I don't know if I can do it. Oh no, I've said too much, I haven't said enough.",
|
||||
"source": "Losing My Religion",
|
||||
"id": 1862
|
||||
},
|
||||
|
|
@ -9685,7 +9684,7 @@
|
|||
"id": 1937
|
||||
},
|
||||
{
|
||||
"text": "Well, all I can say Gerry is that some marches are for things and some are against things, but never has there been a march for absolutely nothing. Now is our chance to put that right. Grab your toaster and kettle and discover like me, how great it feels to devote yourself to something truly purposeless. By doing something with absolutely no point to it, we eliminate the possibility of failure, because in a sense the worse it may go then the more it can be considered a success.",
|
||||
"text": "Well, all I can say Gerry is that some marches are for things and some are against things, but never has there been a march for absolutely nothing. Now is our chance to put that right. Grab your toaster and kettle and discover like me, how great it feels to devote yourself to something truly purposeless. By doing something with absolutely no point to it, we eliminate the possibility of failure, because in a sense the worse it may go then the more it can be considered a success.",
|
||||
"source": "Round Ireland with a Fridge",
|
||||
"id": 1938
|
||||
},
|
||||
|
|
@ -9920,7 +9919,7 @@
|
|||
"id": 1984
|
||||
},
|
||||
{
|
||||
"text": "When I look up at the night sky, and I know that, yes, we are part of this Universe, we are in this Universe, but perhaps more important than both of those facts is that the Universe is in us. When I reflect on that fact, I look up - many people feel small, 'cause they're small and the Universe is big, but I feel big, because my atoms came from those stars.",
|
||||
"text": "When I look up at the night sky, and I know that, yes, we are part of this Universe, we are in this Universe, but perhaps more important than both of those facts is that the Universe is in us. When I reflect on that fact, I look up - many people feel small, 'cause they're small and the Universe is big, but I feel big, because my atoms came from those stars.",
|
||||
"source": "The Most Astounding Fact",
|
||||
"id": 1985
|
||||
},
|
||||
|
|
@ -10195,7 +10194,7 @@
|
|||
"id": 2039
|
||||
},
|
||||
{
|
||||
"text": "And in the world a heart of darkness, a firezone, where poets speak their hearts then bleed for it. Jara sang, his song a weapon, in the hands of love. You know his blood still cries from the ground. It runs like a river to the sea. We run like a river runs to the sea.",
|
||||
"text": "And in the world a heart of darkness, a firezone, where poets speak their hearts then bleed for it. Jara sang, his song a weapon, in the hands of love. You know his blood still cries from the ground. It runs like a river to the sea. We run like a river runs to the sea.",
|
||||
"source": "One Tree Hill",
|
||||
"id": 2040
|
||||
},
|
||||
|
|
@ -10380,12 +10379,12 @@
|
|||
"id": 2076
|
||||
},
|
||||
{
|
||||
"text": "No, the goal of war is not to kill. The goal of war is to win. By surrounding the enemy, you would force him only to fight more desperately. If you surround him on three sides and leave him an escape route, he will leave your land and there will be less blood spilled on both sides. For a warrior of the Mandinka, courage is not enough.",
|
||||
"text": "No, the goal of war is not to kill. The goal of war is to win. By surrounding the enemy, you would force him only to fight more desperately. If you surround him on three sides and leave him an escape route, he will leave your land and there will be less blood spilled on both sides. For a warrior of the Mandinka, courage is not enough.",
|
||||
"source": "Roots",
|
||||
"id": 2077
|
||||
},
|
||||
{
|
||||
"text": "Sometimes you're the windshield, sometimes you're the bug.\r\nSometimes it all comes together baby. Sometimes you're a fool in love. Sometimes you're the Louisville Slugger. Sometimes you're the ball. Sometimes it all comes together baby. Sometimes you're going to lose it all.",
|
||||
"text": "Sometimes you're the windshield, sometimes you're the bug. Sometimes it all comes together baby. Sometimes you're a fool in love. Sometimes you're the Louisville Slugger. Sometimes you're the ball. Sometimes it all comes together baby. Sometimes you're going to lose it all.",
|
||||
"source": "The Bug",
|
||||
"id": 2078
|
||||
},
|
||||
|
|
@ -10420,7 +10419,7 @@
|
|||
"id": 2084
|
||||
},
|
||||
{
|
||||
"text": "But the queen - too long she has suffered the pain of love,\r\nhour by hour nursing the wound with her lifeblood,\r\nconsumed by the fire buried in her heart. His looks, his words, they pierce her heart and cling - no peace, no rest for her body, love will give her none.",
|
||||
"text": "But the queen - too long she has suffered the pain of love, hour by hour nursing the wound with her lifeblood, consumed by the fire buried in her heart. His looks, his words, they pierce her heart and cling - no peace, no rest for her body, love will give her none.",
|
||||
"source": "The Aeneid",
|
||||
"id": 2085
|
||||
},
|
||||
|
|
@ -10910,7 +10909,7 @@
|
|||
"id": 2182
|
||||
},
|
||||
{
|
||||
"text": "It was hard to toss things I had once thought were valuable enough to spend money on and just as hard to separate myself from worn and ragged clothing I had for sentimental reasons. The first ten minutes of sorting through clothing was like choosing which child of mine should live or die. Once I'd passed through the first few tough decisions, though, the momentum had been built and it was a breeze.",
|
||||
"text": "It was hard to toss things I had once thought were valuable enough to spend money on and just as hard to separate myself from worn and ragged clothing I had for sentimental reasons. The first ten minutes of sorting through clothing was like choosing which child of mine should live or die. Once I'd passed through the first few tough decisions, though, the momentum had been built and it was a breeze.",
|
||||
"source": "The 4-Hour Workweek",
|
||||
"id": 2183
|
||||
},
|
||||
|
|
@ -10990,7 +10989,7 @@
|
|||
"id": 2198
|
||||
},
|
||||
{
|
||||
"text": "The math is compelling. Most of the people in the world are not your customers. They haven't even heard of you actually. And while many of these people are not qualified buyers or aren't interested in buying your product, many of them might be - if only they knew you existed, if they could be convinced that your offering is worth paying for.",
|
||||
"text": "The math is compelling. Most of the people in the world are not your customers. They haven't even heard of you actually. And while many of these people are not qualified buyers or aren't interested in buying your product, many of them might be - if only they knew you existed, if they could be convinced that your offering is worth paying for.",
|
||||
"source": "Small is the New Big",
|
||||
"id": 2199
|
||||
},
|
||||
|
|
@ -11905,7 +11904,7 @@
|
|||
"id": 2381
|
||||
},
|
||||
{
|
||||
"text": "Once you get into the processed foods you have to be a fairly determined ecological detective to follow the intricate and\r\nincreasingly obscure lines of connection linking the Twinkie, or the nondairy creamer, to a plant growing in the earth some place, but it can be done.",
|
||||
"text": "Once you get into the processed foods you have to be a fairly determined ecological detective to follow the intricate and increasingly obscure lines of connection linking the Twinkie, or the nondairy creamer, to a plant growing in the earth some place, but it can be done.",
|
||||
"source": "The Omnivore's Dilemma: A Natural History of Four Meals",
|
||||
"id": 2382
|
||||
},
|
||||
|
|
@ -12295,7 +12294,7 @@
|
|||
"id": 2459
|
||||
},
|
||||
{
|
||||
"text": "Is it really necessary to send that email? The more emails you send, the more work others will have to do to prioritize your requests. How many of the things you're mentioning are important? If you have 10 issues to discuss, break them into two groups and focus on the most important group.",
|
||||
"text": "Is it really necessary to send that email? The more emails you send, the more work others will have to do to prioritize your requests. How many of the things you're mentioning are important? If you have 10 issues to discuss, break them into two groups and focus on the most important group.",
|
||||
"source": "The Art of Project Management",
|
||||
"id": 2460
|
||||
},
|
||||
|
|
@ -12605,7 +12604,7 @@
|
|||
"id": 2521
|
||||
},
|
||||
{
|
||||
"text": "Space ain't man's final frontier. Man's final frontier is the soul\r\nguided by someone more powerful than any human being. Someone felt but never seen. You will be surprised of what resides in your insides.",
|
||||
"text": "Space ain't man's final frontier. Man's final frontier is the soul guided by someone more powerful than any human being. Someone felt but never seen. You will be surprised of what resides in your insides.",
|
||||
"source": "Man's Final Frontier",
|
||||
"id": 2522
|
||||
},
|
||||
|
|
@ -12630,7 +12629,7 @@
|
|||
"id": 2526
|
||||
},
|
||||
{
|
||||
"text": "A computer needs a manager to administer its operations, just as a company needs a manager. And that is what DOS is. A manager. It manages the operations in your computer.",
|
||||
"text": "A computer needs a manager to administer its operations, just as a company needs a manager. And that is what DOS is. A manager. It manages the operations in your computer.",
|
||||
"source": "Mastering Computer Typing (1995)",
|
||||
"id": 2527
|
||||
},
|
||||
|
|
@ -12715,7 +12714,7 @@
|
|||
"id": 2543
|
||||
},
|
||||
{
|
||||
"text": "Desmond? I heard your name once before Desmond, a long time ago. And now it lingers in my mind like an image from an old dream. I do not know where you are, or by what means you can hear me. But I know you are listening. I have lived my life as best I could, not knowing its purpose, but drawn forward like a moth to a distant moon. And here, at last, I discover a strange truth. That I am only a conduit for a message that eludes my understanding. Who are we, who have been so blessed to share our stories like this? To speak across centuries? Maybe you will answer all the questions I have asked. Maybe you will be the one to make all this suffering worth something in the end.",
|
||||
"text": "Desmond? I heard your name once before Desmond, a long time ago. And now it lingers in my mind like an image from an old dream. I do not know where you are, or by what means you can hear me. But I know you are listening. I have lived my life as best I could, not knowing its purpose, but drawn forward like a moth to a distant moon. And here, at last, I discover a strange truth. That I am only a conduit for a message that eludes my understanding. Who are we, who have been so blessed to share our stories like this? To speak across centuries? Maybe you will answer all the questions I have asked. Maybe you will be the one to make all this suffering worth something in the end.",
|
||||
"source": "Assassin's Creed 2",
|
||||
"id": 2544
|
||||
},
|
||||
|
|
@ -13040,7 +13039,7 @@
|
|||
"id": 2608
|
||||
},
|
||||
{
|
||||
"text": "When you are typing on a typewriter, your input appears directly on paper. When you are typing on a computer, your input appears on a screen and is transferred to paper after the proper command has been given.",
|
||||
"text": "When you are typing on a typewriter, your input appears directly on paper. When you are typing on a computer, your input appears on a screen and is transferred to paper after the proper command has been given.",
|
||||
"source": "Mastering Computer Typing (1995)",
|
||||
"id": 2609
|
||||
},
|
||||
|
|
@ -13180,12 +13179,12 @@
|
|||
"id": 2636
|
||||
},
|
||||
{
|
||||
"text": "Last night I dreamed of chickens,\r\nthere were chickens everywhere,\r\nthey were standing on my stomach,\r\nthey were nesting in my hair,\r\nthey were pecking at my pillow,\r\nthey were hopping on my head,\r\nthey were ruffling up their feathers\r\nas they raced about my bed.\r\n\r\nThey were on the chairs and tables,\r\nthey were on the chandeliers,\r\nthey were roosting in the corners,\r\nthey were clucking in my ears,\r\nthere were chickens, chickens, chickens\r\nfor as far as I could see...\r\nwhen I woke today, I noticed\r\nthere were eggs on top of me.",
|
||||
"text": "Last night I dreamed of chickens, there were chickens everywhere, they were standing on my stomach, they were nesting in my hair, they were pecking at my pillow, they were hopping on my head, they were ruffling up their feathers as they raced about my bed. They were on the chairs and tables, they were on the chandeliers, they were roosting in the corners, they were clucking in my ears, there were chickens, chickens, chickens for as far as I could see... when I woke today, I noticed there were eggs on top of me.",
|
||||
"source": "Last Night I Dreamed of Chickens",
|
||||
"id": 2637
|
||||
},
|
||||
{
|
||||
"text": "The robins were singing vespers in the high tree-tops, filling the golden air with their jubilant voices. The silver fluting of the frogs came from marshes and ponds, over fields where seeds were beginning to stir with life and thrill to the sunshine and rain that had drifted over them.",
|
||||
"text": "The robins were singing vespers in the high tree-tops, filling the golden air with their jubilant voices. The silver fluting of the frogs came from marshes and ponds, over fields where seeds were beginning to stir with life and thrill to the sunshine and rain that had drifted over them.",
|
||||
"source": "Anne of the Island",
|
||||
"id": 2638
|
||||
},
|
||||
|
|
@ -13265,7 +13264,7 @@
|
|||
"id": 2653
|
||||
},
|
||||
{
|
||||
"text": "We were playing checkers. I used to kid her once in a while because she wouldn't take her kings out of the back row. But I didn't kid her much though. You never wanted to kid Jane too much. I think I really like it best when you can kid the pants off a girl when the opportunity arises, but it's a funny thing. The girls I like best are ones I never feel much like kidding. Sometimes I think they'd like it if you kidded them - in fact I know they would - but it's hard to get started, once you've known them a pretty long time and never kidded them.",
|
||||
"text": "We were playing checkers. I used to kid her once in a while because she wouldn't take her kings out of the back row. But I didn't kid her much though. You never wanted to kid Jane too much. I think I really like it best when you can kid the pants off a girl when the opportunity arises, but it's a funny thing. The girls I like best are ones I never feel much like kidding. Sometimes I think they'd like it if you kidded them - in fact I know they would - but it's hard to get started, once you've known them a pretty long time and never kidded them.",
|
||||
"source": "The Catcher in the Rye",
|
||||
"id": 2654
|
||||
},
|
||||
|
|
@ -13450,7 +13449,7 @@
|
|||
"id": 2690
|
||||
},
|
||||
{
|
||||
"text": "Burning my bridges and smashing my mirrors, turning to see if you're cowardly. Burning the witches with modern religions, you'll strike the matches and shower me. In water games washing the rocks below. Taught and tamed in time with tear flow.",
|
||||
"text": "Burning my bridges and smashing my mirrors, turning to see if you're cowardly. Burning the witches with modern religions, you'll strike the matches and shower me. In water games washing the rocks below. Taught and tamed in time with tear flow.",
|
||||
"source": "Seven Seas",
|
||||
"id": 2691
|
||||
},
|
||||
|
|
@ -14070,7 +14069,7 @@
|
|||
"id": 2814
|
||||
},
|
||||
{
|
||||
"text": "However we choose to feed ourselves, we eat by\r\nthe grace of nature, not industry, and what we're eating is never anything more or less than the body of the world.",
|
||||
"text": "However we choose to feed ourselves, we eat by the grace of nature, not industry, and what we're eating is never anything more or less than the body of the world.",
|
||||
"source": "The Omnivore's Dilemma: A Natural History of Four Meals",
|
||||
"id": 2815
|
||||
},
|
||||
|
|
@ -14245,7 +14244,7 @@
|
|||
"id": 2849
|
||||
},
|
||||
{
|
||||
"text": "We go waiting for the stars to come showering down. From Moscow to Mars, universe falling down. You got to look real hard there's a fiery star hidden out there somewhere. Not the satellite of love but a laser shooting out its shiny tongue there.",
|
||||
"text": "We go waiting for the stars to come showering down. From Moscow to Mars, universe falling down. You got to look real hard there's a fiery star hidden out there somewhere. Not the satellite of love but a laser shooting out its shiny tongue there.",
|
||||
"source": "Star",
|
||||
"id": 2850
|
||||
},
|
||||
|
|
@ -15650,7 +15649,7 @@
|
|||
"id": 3130
|
||||
},
|
||||
{
|
||||
"text": "God help the man who ever really loves you. You'd break his heart, my darling, cruel, destructive little cat who is so careless and confident she doesn't even trouble to sheathe her claws.",
|
||||
"text": "God help the man who ever really loves you. You'd break his heart, my darling, cruel, destructive little cat who is so careless and confident she doesn't even trouble to sheathe her claws.",
|
||||
"source": "Gone with the Wind",
|
||||
"id": 3131
|
||||
},
|
||||
|
|
@ -16000,7 +15999,7 @@
|
|||
"id": 3200
|
||||
},
|
||||
{
|
||||
"text": "Now! This is it! Now is the time to choose. Die and be free of pain, or live and fight your sorrow! Now is the time to shape your stories! Your fate is in your hands!",
|
||||
"text": "Now! This is it! Now is the time to choose. Die and be free of pain, or live and fight your sorrow! Now is the time to shape your stories! Your fate is in your hands!",
|
||||
"source": "Final Fantasy X",
|
||||
"id": 3201
|
||||
},
|
||||
|
|
@ -16630,7 +16629,7 @@
|
|||
"id": 3326
|
||||
},
|
||||
{
|
||||
"text": "Commas and periods always go inside quotation marks. Colons and semicolons always go outside quotation marks. Question marks and exclamation points go inside quotation marks when they apply to the quoted material only. They go outside when they apply to the entire sentence.",
|
||||
"text": "Commas and periods always go inside quotation marks. Colons and semicolons always go outside quotation marks. Question marks and exclamation points go inside quotation marks when they apply to the quoted material only. They go outside when they apply to the entire sentence.",
|
||||
"source": "Mastering Computer Typing (1995)",
|
||||
"id": 3327
|
||||
},
|
||||
|
|
@ -16650,7 +16649,7 @@
|
|||
"id": 3330
|
||||
},
|
||||
{
|
||||
"text": "He was rough around the edges. He'd been to school, but never finished. He'd been to jail, but never prison. And it was his first day off in forever, man. The festival seemed like a pretty good plan: cruise some chicks and get a suntan. And his friend gave him four, but said only take one. But then he got bored and he ended up taking all four, so now my man ain't that bored anyways. The paramedics found him, he was shaking on the side of the stage.",
|
||||
"text": "He was rough around the edges. He'd been to school, but never finished. He'd been to jail, but never prison. And it was his first day off in forever, man. The festival seemed like a pretty good plan: cruise some chicks and get a suntan. And his friend gave him four, but said only take one. But then he got bored and he ended up taking all four, so now my man ain't that bored anyways. The paramedics found him, he was shaking on the side of the stage.",
|
||||
"source": "Chillout Tent",
|
||||
"id": 3331
|
||||
},
|
||||
|
|
@ -16660,7 +16659,7 @@
|
|||
"id": 3332
|
||||
},
|
||||
{
|
||||
"text": "From compositional considerations the tomato layer would be expected to have a relatively high heat capacity and low conductance. It thus serves as a buffer between the mozzarella and the baked dough.",
|
||||
"text": "From compositional considerations the tomato layer would be expected to have a relatively high heat capacity and low conductance. It thus serves as a buffer between the mozzarella and the baked dough.",
|
||||
"source": "The Thermodynamics of Pizza",
|
||||
"id": 3333
|
||||
},
|
||||
|
|
@ -16680,7 +16679,7 @@
|
|||
"id": 3336
|
||||
},
|
||||
{
|
||||
"text": "I was hugely impressed. Kirk, I mean Shatner, was the ultimate example of a man who knew what he didn't know, was perfectly willing to admit it, and didn't want to leave until he understood. That's heroic to me.",
|
||||
"text": "I was hugely impressed. Kirk, I mean Shatner, was the ultimate example of a man who knew what he didn't know, was perfectly willing to admit it, and didn't want to leave until he understood. That's heroic to me.",
|
||||
"source": "The Last Lecture",
|
||||
"id": 3337
|
||||
},
|
||||
|
|
@ -16790,7 +16789,7 @@
|
|||
"id": 3358
|
||||
},
|
||||
{
|
||||
"text": "Stab a sorry heart with your favorite finger. Paint the whole world blue and stop your tears from stinging. Hear the cavemen singing. Good news they're bringing. Seven seas, swimming them so well. Glad to see my face among them kissing the tortoise shell.",
|
||||
"text": "Stab a sorry heart with your favorite finger. Paint the whole world blue and stop your tears from stinging. Hear the cavemen singing. Good news they're bringing. Seven seas, swimming them so well. Glad to see my face among them kissing the tortoise shell.",
|
||||
"source": "Seven Seas",
|
||||
"id": 3359
|
||||
},
|
||||
|
|
@ -16910,7 +16909,7 @@
|
|||
"id": 3382
|
||||
},
|
||||
{
|
||||
"text": "It's a blue savanna song: somewhere cross the desert, sometime in the early hours, in a restless world, on the open highways. My home is where the heart is, sweet to surrender, to you only - I send my love to you.",
|
||||
"text": "It's a blue savanna song: somewhere cross the desert, sometime in the early hours, in a restless world, on the open highways. My home is where the heart is, sweet to surrender, to you only - I send my love to you.",
|
||||
"source": "Blue Savanna",
|
||||
"id": 3383
|
||||
},
|
||||
|
|
@ -16955,7 +16954,7 @@
|
|||
"id": 3391
|
||||
},
|
||||
{
|
||||
"text": "We have faced our enemies a thousand times or even more; still, they cannot make us kneel. One thousand years of constant war! The giants look for any chance to bring down Asgaard's mighty walls. No matter what they send at us, we will never let it fall!",
|
||||
"text": "We have faced our enemies a thousand times or even more; still, they cannot make us kneel. One thousand years of constant war! The giants look for any chance to bring down Asgaard's mighty walls. No matter what they send at us, we will never let it fall!",
|
||||
"source": "Guardians of Asgaard",
|
||||
"id": 3392
|
||||
},
|
||||
|
|
@ -17190,7 +17189,7 @@
|
|||
"id": 3438
|
||||
},
|
||||
{
|
||||
"text": "A giant inverted steel pyramid is perfectly balanced on its point. Any movement of the pyramid will cause it to topple over. Underneath the pyramid is a hundred dollar bill. How do you remove the bill without disturbing the pyramid? The only way you can get the answer is if it comes to you suddenly in the blink of an eye.",
|
||||
"text": "A giant inverted steel pyramid is perfectly balanced on its point. Any movement of the pyramid will cause it to topple over. Underneath the pyramid is a hundred dollar bill. How do you remove the bill without disturbing the pyramid? The only way you can get the answer is if it comes to you suddenly in the blink of an eye.",
|
||||
"source": "Blink",
|
||||
"id": 3439
|
||||
},
|
||||
|
|
@ -17520,7 +17519,7 @@
|
|||
"id": 3504
|
||||
},
|
||||
{
|
||||
"text": "Hope you're feeling better now, hope you got my letter, how is my stormy weather now, is it gonna change? Can I be like everyone, pretending that there's nothing wrong? Remember when we walked upon clouds that never rain? But every cloud must drain...",
|
||||
"text": "Hope you're feeling better now, hope you got my letter, how is my stormy weather now, is it gonna change? Can I be like everyone, pretending that there's nothing wrong? Remember when we walked upon clouds that never rain? But every cloud must drain...",
|
||||
"source": "Stormy Weather",
|
||||
"id": 3505
|
||||
},
|
||||
|
|
@ -17620,7 +17619,7 @@
|
|||
"id": 3524
|
||||
},
|
||||
{
|
||||
"text": "Now this is a story all about how my life got flipped - \r\nturned upside down. And I'd like to take a minute, just sit right there; I'll tell you how I became the prince of a town called Bel-Air.",
|
||||
"text": "Now this is a story all about how my life got flipped - turned upside down. And I'd like to take a minute, just sit right there; I'll tell you how I became the prince of a town called Bel-Air.",
|
||||
"source": "Fresh Prince of Bel Air (Theme Song)",
|
||||
"id": 3525
|
||||
},
|
||||
|
|
@ -17650,7 +17649,7 @@
|
|||
"id": 3530
|
||||
},
|
||||
{
|
||||
"text": "If you are given too many choices, if you are forced to consider much more than your unconscious is comfortable with, you get paralyzed. Snap judgments can be made in a snap because they are frugal, and if we want to protect our snap judgments, we have to take steps to protect that frugality.",
|
||||
"text": "If you are given too many choices, if you are forced to consider much more than your unconscious is comfortable with, you get paralyzed. Snap judgments can be made in a snap because they are frugal, and if we want to protect our snap judgments, we have to take steps to protect that frugality.",
|
||||
"source": "Blink",
|
||||
"id": 3531
|
||||
},
|
||||
|
|
@ -17775,7 +17774,7 @@
|
|||
"id": 3555
|
||||
},
|
||||
{
|
||||
"text": "Lucid but wholly false recollections can easily be induced by a few cues and questions. Memory can be contaminated. False memories can be implanted even in minds that do not consider themselves vulnerable and uncritical.",
|
||||
"text": "Lucid but wholly false recollections can easily be induced by a few cues and questions. Memory can be contaminated. False memories can be implanted even in minds that do not consider themselves vulnerable and uncritical.",
|
||||
"source": "The Demon-Haunted World: Science as a Candle in the Dark",
|
||||
"id": 3556
|
||||
},
|
||||
|
|
@ -18025,7 +18024,7 @@
|
|||
"id": 3605
|
||||
},
|
||||
{
|
||||
"text": "At first they had tried to keep the finding quiet. After all, they were not absolutely sure it was an extraterrestrial message. A premature or mistaken announcement would be a public relations disaster. But worse than that, it would interfere with the data analysis. If the press descended, the science would surely suffer.",
|
||||
"text": "At first they had tried to keep the finding quiet. After all, they were not absolutely sure it was an extraterrestrial message. A premature or mistaken announcement would be a public relations disaster. But worse than that, it would interfere with the data analysis. If the press descended, the science would surely suffer.",
|
||||
"source": "Contact",
|
||||
"id": 3606
|
||||
},
|
||||
|
|
@ -18085,7 +18084,7 @@
|
|||
"id": 3617
|
||||
},
|
||||
{
|
||||
"text": "Your ring finger is the most difficult of all fingers to control. You will notice that when you move your ring finger your other fingers will move involuntarily as well. This is something that will become less of a problem as you perfect your keyboarding skills.",
|
||||
"text": "Your ring finger is the most difficult of all fingers to control. You will notice that when you move your ring finger your other fingers will move involuntarily as well. This is something that will become less of a problem as you perfect your keyboarding skills.",
|
||||
"source": "Keyboarding Made Simple (1985)",
|
||||
"id": 3618
|
||||
},
|
||||
|
|
@ -18775,7 +18774,7 @@
|
|||
"id": 3755
|
||||
},
|
||||
{
|
||||
"text": "He started running, up and up, until he hurled himself into the air. As he was falling face down, somehow all the years of training in martial arts at once possessed him. His body instinctively adjusted itself and even his arms spread out, swinging to ensure that he wouldn't hurt himself fatally. With a thump his feet landed on the ground.",
|
||||
"text": "He started running, up and up, until he hurled himself into the air. As he was falling face down, somehow all the years of training in martial arts at once possessed him. His body instinctively adjusted itself and even his arms spread out, swinging to ensure that he wouldn't hurt himself fatally. With a thump his feet landed on the ground.",
|
||||
"source": "A Good Fall: Stories",
|
||||
"id": 3756
|
||||
},
|
||||
|
|
@ -19245,7 +19244,7 @@
|
|||
"id": 3849
|
||||
},
|
||||
{
|
||||
"text": "Listen to the watch. The way it's ticking synchronizes with your heartbeat. Look into my eyes. Not above them, not around them, but deep into their center. You are completely relaxed and are becoming weightless. Are you ready to do something impossible?",
|
||||
"text": "Listen to the watch. The way it's ticking synchronizes with your heartbeat. Look into my eyes. Not above them, not around them, but deep into their center. You are completely relaxed and are becoming weightless. Are you ready to do something impossible?",
|
||||
"source": "Gotham",
|
||||
"id": 3850
|
||||
},
|
||||
|
|
@ -19540,7 +19539,7 @@
|
|||
"id": 3908
|
||||
},
|
||||
{
|
||||
"text": "There was a stage and a PA up in western Massachusetts and the kids came from miles around to get messed up on the music. And she drove down from Bowdoin with a carload of girlfriends, to meet some boys and maybe eat some mushrooms. And they did, and she got sick, and now she's pinned and way too shaky.",
|
||||
"text": "There was a stage and a PA up in western Massachusetts and the kids came from miles around to get messed up on the music. And she drove down from Bowdoin with a carload of girlfriends, to meet some boys and maybe eat some mushrooms. And they did, and she got sick, and now she's pinned and way too shaky.",
|
||||
"source": "Chillout Tent",
|
||||
"id": 3909
|
||||
},
|
||||
|
|
@ -19715,7 +19714,7 @@
|
|||
"id": 3943
|
||||
},
|
||||
{
|
||||
"text": "Somewhere over the rainbow way up high, there's a land that I heard of once in a lullaby. Somewhere over the rainbow skies are blue, and the dreams that you dare to dream really do come true. Someday I'll wish upon a star and wake up where the clouds are far behind me. Where troubles melt like lemon drops away above the chimney tops, that's where you'll find me. Somewhere over the rainbow bluebirds fly.\r\nBirds fly over the rainbow. Why then, oh, why can't I?",
|
||||
"text": "Somewhere over the rainbow way up high, there's a land that I heard of once in a lullaby. Somewhere over the rainbow skies are blue, and the dreams that you dare to dream really do come true. Someday I'll wish upon a star and wake up where the clouds are far behind me. Where troubles melt like lemon drops away above the chimney tops, that's where you'll find me. Somewhere over the rainbow bluebirds fly. Birds fly over the rainbow. Why then, oh, why can't I?",
|
||||
"source": "The Wizard of Oz",
|
||||
"id": 3944
|
||||
},
|
||||
|
|
@ -20505,7 +20504,7 @@
|
|||
"id": 4101
|
||||
},
|
||||
{
|
||||
"text": "We don't need no education. We don't need no thought control. No dark sarcasm in the classroom - teachers leave them kids alone! All in all it's just another brick in the wall. \"If you don't eat yer meat, you can't have any pudding. How can you have any pudding if you don't eat yer meat?\"",
|
||||
"text": "We don't need no education. We don't need no thought control. No dark sarcasm in the classroom - teachers leave them kids alone! All in all it's just another brick in the wall. \"If you don't eat yer meat, you can't have any pudding. How can you have any pudding if you don't eat yer meat?\"",
|
||||
"source": "Another Brick in the Wall",
|
||||
"id": 4102
|
||||
},
|
||||
|
|
@ -20515,7 +20514,7 @@
|
|||
"id": 4103
|
||||
},
|
||||
{
|
||||
"text": "We don't read and write poetry because it's cute. We read and write poetry because we are members of the human race. And the human race is filled with passion. And medicine, law, business, engineering, these are noble pursuits and necessary to sustain life. But poetry, beauty, romance, love, these are what we stay alive for.",
|
||||
"text": "We don't read and write poetry because it's cute. We read and write poetry because we are members of the human race. And the human race is filled with passion. And medicine, law, business, engineering, these are noble pursuits and necessary to sustain life. But poetry, beauty, romance, love, these are what we stay alive for.",
|
||||
"source": "Dead Poets Society",
|
||||
"id": 4104
|
||||
},
|
||||
|
|
@ -21015,7 +21014,7 @@
|
|||
"id": 4203
|
||||
},
|
||||
{
|
||||
"text": "Most popular song lyrics have two sections - a verse and a bridge, where the bridge offers a contrast to the verse but is not the place where the song is summarized - or a verse and a chorus. A chorus is the high-point of a lyric's energy as well as the music's energy.",
|
||||
"text": "Most popular song lyrics have two sections - a verse and a bridge, where the bridge offers a contrast to the verse but is not the place where the song is summarized - or a verse and a chorus. A chorus is the high-point of a lyric's energy as well as the music's energy.",
|
||||
"source": "Lyrics: Writing Better Words for Your Songs",
|
||||
"id": 4204
|
||||
},
|
||||
|
|
@ -21060,7 +21059,7 @@
|
|||
"id": 4212
|
||||
},
|
||||
{
|
||||
"text": "I'm DEFINITELY NOT saying that Edley isn't a star, but I do say that people overstate the significance of small strings of statistical events based on their grouping. Granted this is the case in many, many competitive endeavors, but that doesn't mean that Joe Edley is the best player or that he was even the best player that week.",
|
||||
"text": "I'm DEFINITELY NOT saying that Edley isn't a star, but I do say that people overstate the significance of small strings of statistical events based on their grouping. Granted this is the case in many, many competitive endeavors, but that doesn't mean that Joe Edley is the best player or that he was even the best player that week.",
|
||||
"source": "Word Freak",
|
||||
"id": 4213
|
||||
},
|
||||
|
|
@ -21270,7 +21269,7 @@
|
|||
"id": 4254
|
||||
},
|
||||
{
|
||||
"text": "Quality humor doesn't just deliver one gag and then tax the audience's patience developing a new setup. Once you've got the audience laughing or on a roll, it's better to stay with toppers - a series of punch lines, each related to the previous one.",
|
||||
"text": "Quality humor doesn't just deliver one gag and then tax the audience's patience developing a new setup. Once you've got the audience laughing or on a roll, it's better to stay with toppers - a series of punch lines, each related to the previous one.",
|
||||
"source": "Comedy Writing Secrets",
|
||||
"id": 4255
|
||||
},
|
||||
|
|
@ -21280,7 +21279,7 @@
|
|||
"id": 4256
|
||||
},
|
||||
{
|
||||
"text": "Our world, with its rules of causality, has trained us to be miserly with forgiveness. By forgiving them too readily, we can be badly hurt. But if we've learned from a mistake and became better for it, shouldn't we be rewarded for \r\nthe learning, rather than punished for the mistake?",
|
||||
"text": "Our world, with its rules of causality, has trained us to be miserly with forgiveness. By forgiving them too readily, we can be badly hurt. But if we've learned from a mistake and became better for it, shouldn't we be rewarded for the learning, rather than punished for the mistake?",
|
||||
"source": "Braid",
|
||||
"id": 4257
|
||||
},
|
||||
|
|
@ -21520,7 +21519,7 @@
|
|||
"id": 4304
|
||||
},
|
||||
{
|
||||
"text": "Sometimes you're the windshield, sometimes you're the bug.\r\nSometimes it all comes together baby. Sometimes you're a fool in love.",
|
||||
"text": "Sometimes you're the windshield, sometimes you're the bug. Sometimes it all comes together baby. Sometimes you're a fool in love.",
|
||||
"source": "The Bug",
|
||||
"id": 4305
|
||||
},
|
||||
|
|
@ -21645,7 +21644,7 @@
|
|||
"id": 4329
|
||||
},
|
||||
{
|
||||
"text": "Since the infancy of computers, hackers have been creatively solving problems. In the late 1950s, the MIT model railroad club was given a donation of parts, mostly old telephone equipment. The club's members used this equipment to rig up a complex system that allowed multiple operators to control different parts of the track by dialing in to the appropriate sections. They called this new and inventive use of telephone equipment hacking; many people consider this group to be the original hackers.",
|
||||
"text": "Since the infancy of computers, hackers have been creatively solving problems. In the late 1950s, the MIT model railroad club was given a donation of parts, mostly old telephone equipment. The club's members used this equipment to rig up a complex system that allowed multiple operators to control different parts of the track by dialing in to the appropriate sections. They called this new and inventive use of telephone equipment hacking; many people consider this group to be the original hackers.",
|
||||
"source": "Hacking: The Art of Exploitation",
|
||||
"id": 4330
|
||||
},
|
||||
|
|
@ -21885,7 +21884,7 @@
|
|||
"id": 4377
|
||||
},
|
||||
{
|
||||
"text": "Some drivers actually perform best when there is a little extra incentive - like chasing another car. But be careful you don't get too caught up in what the competition is doing. Focus on your own performance rather than on the competition.",
|
||||
"text": "Some drivers actually perform best when there is a little extra incentive - like chasing another car. But be careful you don't get too caught up in what the competition is doing. Focus on your own performance rather than on the competition.",
|
||||
"source": "Speed Secrets: Professional Race Driving Techniques",
|
||||
"id": 4378
|
||||
},
|
||||
|
|
@ -22025,7 +22024,7 @@
|
|||
"id": 4405
|
||||
},
|
||||
{
|
||||
"text": "The study of global social phenomena raises several difficulties that are not commonly encountered when research questions are posed at less comprehensive levels. Problems of arising from aggregation, diffusion, and path dependence, to name three, plague any attempt at answering questions that are posed at a global level. Ultimately, all these problems arise from the fact that there is only one world available for us to study, and when the world itself is the scope of the analysis, additional worlds are not available for validating initial results.",
|
||||
"text": "The study of global social phenomena raises several difficulties that are not commonly encountered when research questions are posed at less comprehensive levels. Problems of arising from aggregation, diffusion, and path dependence, to name three, plague any attempt at answering questions that are posed at a global level. Ultimately, all these problems arise from the fact that there is only one world available for us to study, and when the world itself is the scope of the analysis, additional worlds are not available for validating initial results.",
|
||||
"source": "Global Social Change: Historical and Comparative Perspectives",
|
||||
"id": 4406
|
||||
},
|
||||
|
|
@ -23270,7 +23269,7 @@
|
|||
"id": 4654
|
||||
},
|
||||
{
|
||||
"text": "Some people thought we were at war with the Germans -\r\n incorrect. We were at war with the clock. Britain was literally starving to death. The Americans sent over 100,000 pounds of food each week, and every week the Germans would send our desperately needed bread to the bottom of the ocean. Our daily failure was announced at the chimes of midnight. And the sound would haunt our unwelcome dreams.",
|
||||
"text": "Some people thought we were at war with the Germans - incorrect. We were at war with the clock. Britain was literally starving to death. The Americans sent over 100,000 pounds of food each week, and every week the Germans would send our desperately needed bread to the bottom of the ocean. Our daily failure was announced at the chimes of midnight. And the sound would haunt our unwelcome dreams.",
|
||||
"source": "The Imitation Game",
|
||||
"id": 4655
|
||||
},
|
||||
|
|
@ -23325,7 +23324,7 @@
|
|||
"id": 4665
|
||||
},
|
||||
{
|
||||
"text": "And as the Strangefolk mined deeper and deeper into the mountain, holes began to appear. Bringing with them a cold and bitter wind that chilled the very soul of the Monkey. For the first time, the Happyfolk felt fearful, for they knew the Monkey would soon stir from its deep sleep. And then came a sound, distant first. It grew into castrophany, so immense it could be heard far away in space. There were no screams, there was no time. The mountain called Monkey had spoken, there was only fire. And then, nothing.",
|
||||
"text": "And as the Strangefolk mined deeper and deeper into the mountain, holes began to appear. Bringing with them a cold and bitter wind that chilled the very soul of the Monkey. For the first time, the Happyfolk felt fearful, for they knew the Monkey would soon stir from its deep sleep. And then came a sound, distant first. It grew into castrophany, so immense it could be heard far away in space. There were no screams, there was no time. The mountain called Monkey had spoken, there was only fire. And then, nothing.",
|
||||
"source": "Fire Coming Out of the Monkey's Head",
|
||||
"id": 4666
|
||||
},
|
||||
|
|
@ -23465,7 +23464,7 @@
|
|||
"id": 4693
|
||||
},
|
||||
{
|
||||
"text": "In order to become an elf I filled out ten pages' worth of forms, took a multiple choice personality test, underwent two interviews and a drug test. The first interview was general, designed to eliminate obvious sociopaths. During the second interview we were asked why we wanted to be elves.",
|
||||
"text": "In order to become an elf I filled out ten pages' worth of forms, took a multiple choice personality test, underwent two interviews and a drug test. The first interview was general, designed to eliminate obvious sociopaths. During the second interview we were asked why we wanted to be elves.",
|
||||
"source": "Holidays on Ice",
|
||||
"id": 4694
|
||||
},
|
||||
|
|
@ -23560,7 +23559,7 @@
|
|||
"id": 4712
|
||||
},
|
||||
{
|
||||
"text": "Corn is what feeds the steer that becomes the steak. Corn feeds the chicken and the pig, the turkey and the lamb, the catfish and the tilapia and, increasingly, even the salmon, a\r\ncarnivore by nature that the fish farmers are reengineering to tolerate corn. The eggs are made of corn. The milk and cheese and yogurt, which once came from dairy cows that\r\ngrazed on grass, now typically come from cows that spend their working lives indoors tethered to machines, eating corn.",
|
||||
"text": "Corn is what feeds the steer that becomes the steak. Corn feeds the chicken and the pig, the turkey and the lamb, the catfish and the tilapia and, increasingly, even the salmon, a carnivore by nature that the fish farmers are reengineering to tolerate corn. The eggs are made of corn. The milk and cheese and yogurt, which once came from dairy cows that grazed on grass, now typically come from cows that spend their working lives indoors tethered to machines, eating corn.",
|
||||
"source": "The Omnivore's Dilemma: A Natural History of Four Meals",
|
||||
"id": 4713
|
||||
},
|
||||
|
|
@ -23665,7 +23664,7 @@
|
|||
"id": 4733
|
||||
},
|
||||
{
|
||||
"text": "The only message I got was from the company that holds my student loan, Sallie Mae. Sallie Mae sounds like a naive and barefoot hillbilly girl but in fact they are a ruthless and aggressive conglomeration of bullies located in a tall brick building somewhere in Kansas. I picture it to be the tallest building in that state and I have decided they hire their employees straight out of prison.",
|
||||
"text": "The only message I got was from the company that holds my student loan, Sallie Mae. Sallie Mae sounds like a naive and barefoot hillbilly girl but in fact they are a ruthless and aggressive conglomeration of bullies located in a tall brick building somewhere in Kansas. I picture it to be the tallest building in that state and I have decided they hire their employees straight out of prison.",
|
||||
"source": "Holidays on Ice",
|
||||
"id": 4734
|
||||
},
|
||||
|
|
@ -23725,7 +23724,7 @@
|
|||
"id": 4745
|
||||
},
|
||||
{
|
||||
"text": "The treatment of atoms with more than one electron requires consideration of the effects of interelectronic repulsion, orbital penetration towards the nuclear shielding, and an extra quantum number which specifies the intrinsic energy of the electron in any orbital. All these considerations are necessary to allow construction of the modern form of the periodic classification of the elements.",
|
||||
"text": "The treatment of atoms with more than one electron requires consideration of the effects of interelectronic repulsion, orbital penetration towards the nuclear shielding, and an extra quantum number which specifies the intrinsic energy of the electron in any orbital. All these considerations are necessary to allow construction of the modern form of the periodic classification of the elements.",
|
||||
"source": "Structure and Bonding (Basic Concepts in Chemistry)",
|
||||
"id": 4746
|
||||
},
|
||||
|
|
@ -23785,7 +23784,7 @@
|
|||
"id": 4757
|
||||
},
|
||||
{
|
||||
"text": "The world of typing has changed. In the 1970s, every business had rooms full of secretaries whose job it was to type letters that had been hand-written. They were copying the writing into a more readable format. In the early 1980s, the personal computer became a common office machine.",
|
||||
"text": "The world of typing has changed. In the 1970s, every business had rooms full of secretaries whose job it was to type letters that had been hand-written. They were copying the writing into a more readable format. In the early 1980s, the personal computer became a common office machine.",
|
||||
"source": "Keyboarding Made Simple (1985)",
|
||||
"id": 4758
|
||||
},
|
||||
|
|
@ -23980,7 +23979,7 @@
|
|||
"id": 4796
|
||||
},
|
||||
{
|
||||
"text": "Milt, with the excellent timing of a master comedy writer, waited until the guns were loaded and the noose was knotted before he turned back to the class. First, he repeated himself. \"There is no such thing as writer's block.\" Then he went on, \"There is only failure to make a decision.\"",
|
||||
"text": "Milt, with the excellent timing of a master comedy writer, waited until the guns were loaded and the noose was knotted before he turned back to the class. First, he repeated himself. \"There is no such thing as writer's block.\" Then he went on, \"There is only failure to make a decision.\"",
|
||||
"source": "UnTechnical Writing",
|
||||
"id": 4797
|
||||
},
|
||||
|
|
@ -24035,7 +24034,7 @@
|
|||
"id": 4807
|
||||
},
|
||||
{
|
||||
"text": "Zigzagging back and forth through history this way can make you dizzy - you can get vertigo from moving through time as well as space - but it's a lovely disorientation.",
|
||||
"text": "Zigzagging back and forth through history this way can make you dizzy - you can get vertigo from moving through time as well as space - but it's a lovely disorientation.",
|
||||
"source": "Hamilton: the Revolution",
|
||||
"id": 4808
|
||||
},
|
||||
|
|
@ -24045,7 +24044,7 @@
|
|||
"id": 4809
|
||||
},
|
||||
{
|
||||
"text": "The day dawned bleak and chill, a moving wall of gray light out of the northeast which, instead of dissolving into moisture, seemed to disintegrate into minute and venomous particles, like dust that, when Dilsey opened the door of the cabin and emerged, needled laterally into her flesh, precipitating not so much a moisture as a substance partaking of the quality of thin, not quite congealed oil.",
|
||||
"text": "The day dawned bleak and chill, a moving wall of gray light out of the northeast which, instead of dissolving into moisture, seemed to disintegrate into minute and venomous particles, like dust that, when Dilsey opened the door of the cabin and emerged, needled laterally into her flesh, precipitating not so much a moisture as a substance partaking of the quality of thin, not quite congealed oil.",
|
||||
"source": "The Sound and the Fury",
|
||||
"id": 4810
|
||||
},
|
||||
|
|
@ -24425,7 +24424,7 @@
|
|||
"id": 4885
|
||||
},
|
||||
{
|
||||
"text": "And why the winter suns so rush to bathe themselves in the sea\r\nand what slows down the nights to a long lingering crawl.",
|
||||
"text": "And why the winter suns so rush to bathe themselves in the sea and what slows down the nights to a long lingering crawl.",
|
||||
"source": "The Aeneid",
|
||||
"id": 4886
|
||||
},
|
||||
|
|
|
|||
225
public/js/leaderboards.js
Normal file
225
public/js/leaderboards.js
Normal file
|
|
@ -0,0 +1,225 @@
|
|||
let currentLeaderboard = "time_15";
|
||||
|
||||
function showLeaderboards() {
|
||||
if ($("#leaderboardsWrapper").hasClass("hidden")) {
|
||||
$("#leaderboardsWrapper")
|
||||
.stop(true, true)
|
||||
.css("opacity", 0)
|
||||
.removeClass("hidden")
|
||||
.animate(
|
||||
{
|
||||
opacity: 1,
|
||||
},
|
||||
125,
|
||||
() => {
|
||||
updateLeaderboards();
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function hideLeaderboards() {
|
||||
$("#leaderboardsWrapper")
|
||||
.stop(true, true)
|
||||
.css("opacity", 1)
|
||||
.animate(
|
||||
{
|
||||
opacity: 0,
|
||||
},
|
||||
100,
|
||||
() => {
|
||||
$("#leaderboardsWrapper").addClass("hidden");
|
||||
}
|
||||
);
|
||||
focusWords();
|
||||
}
|
||||
|
||||
function updateLeaderboards() {
|
||||
$("#leaderboardsWrapper .buttons .button").removeClass("active");
|
||||
$(
|
||||
`#leaderboardsWrapper .buttons .button[board=${currentLeaderboard}]`
|
||||
).addClass("active");
|
||||
|
||||
// $(
|
||||
// `#leaderboardsWrapper .leaderboardMode .button[mode=${currentLeaderboard.mode}]`
|
||||
// ).addClass("active");
|
||||
|
||||
// $("#leaderboardsWrapper .leaderboardWords .button").removeClass("active");
|
||||
// $(
|
||||
// `#leaderboardsWrapper .leaderboardWords .button[words=${currentLeaderboard.words}]`
|
||||
// ).addClass("active");
|
||||
|
||||
// $("#leaderboardsWrapper .leaderboardTime .button").removeClass("active");
|
||||
// $(
|
||||
// `#leaderboardsWrapper .leaderboardTime .button[time=${currentLeaderboard.time}]`
|
||||
// ).addClass("active");
|
||||
|
||||
let boardinfo = currentLeaderboard.split("_");
|
||||
|
||||
// if (boardinfo[0] === "time") {
|
||||
// $("#leaderboardsWrapper .leaderboardWords").addClass("hidden");
|
||||
// $("#leaderboardsWrapper .leaderboardTime").removeClass("hidden");
|
||||
// } else if (currentLeaderboard.mode === "words") {
|
||||
// $("#leaderboardsWrapper .leaderboardWords").removeClass("hidden");
|
||||
// $("#leaderboardsWrapper .leaderboardTime").addClass("hidden");
|
||||
// }
|
||||
|
||||
// let mode2;
|
||||
// if (currentLeaderboard.mode === "words") {
|
||||
// mode2 = currentLeaderboard.words;
|
||||
// } else if (currentLeaderboard.mode === "time") {
|
||||
// mode2 = currentLeaderboard.time;
|
||||
// }
|
||||
|
||||
let uid = null;
|
||||
if (firebase.auth().currentUser !== null) {
|
||||
uid = firebase.auth().currentUser.uid;
|
||||
}
|
||||
|
||||
showBackgroundLoader();
|
||||
Promise.all([
|
||||
firebase.functions().httpsCallable("getLeaderboard")({
|
||||
mode: boardinfo[0],
|
||||
mode2: boardinfo[1],
|
||||
type: "daily",
|
||||
uid: uid,
|
||||
}),
|
||||
firebase.functions().httpsCallable("getLeaderboard")({
|
||||
mode: boardinfo[0],
|
||||
mode2: boardinfo[1],
|
||||
type: "global",
|
||||
uid: uid,
|
||||
}),
|
||||
])
|
||||
.then((lbdata) => {
|
||||
hideBackgroundLoader();
|
||||
let dailyData = lbdata[0].data;
|
||||
let globalData = lbdata[1].data;
|
||||
|
||||
//daily
|
||||
let diffAsDate = new Date(dailyData.resetTime - Date.now());
|
||||
|
||||
let diffHours = diffAsDate.getUTCHours();
|
||||
let diffMinutes = diffAsDate.getUTCMinutes();
|
||||
let diffSeconds = diffAsDate.getUTCSeconds();
|
||||
|
||||
let resetString = "";
|
||||
if (diffHours > 0) {
|
||||
resetString = `resets in ${diffHours} ${
|
||||
diffHours == 1 ? "hour" : "hours"
|
||||
} ${diffMinutes} ${diffMinutes == 1 ? "minute" : "minutes"}
|
||||
`;
|
||||
} else if (diffMinutes > 0) {
|
||||
resetString = `resets in ${diffMinutes} ${
|
||||
diffMinutes == 1 ? "minute" : "minutes"
|
||||
} ${diffSeconds} ${diffSeconds == 1 ? "second" : "seconds"}`;
|
||||
} else if (diffSeconds > 0) {
|
||||
resetString = `resets in ${diffSeconds} ${
|
||||
diffSeconds == 1 ? "second" : "seconds"
|
||||
}`;
|
||||
}
|
||||
|
||||
$("#leaderboardsWrapper .subtitle").text(resetString);
|
||||
|
||||
$("#leaderboardsWrapper table.daily tbody").empty();
|
||||
if (dailyData.board !== undefined) {
|
||||
dailyData.board.forEach((entry, index) => {
|
||||
let meClassString = "";
|
||||
if (entry.currentUser) meClassString = ' class="me"';
|
||||
$("#leaderboardsWrapper table.daily tbody").append(`
|
||||
<tr>
|
||||
<td>${
|
||||
index === 0 ? '<i class="fas fa-fw fa-crown"></i>' : index + 1
|
||||
}</td>
|
||||
<td ${meClassString}>${entry.name}</td>
|
||||
<td>${entry.wpm}</td>
|
||||
<td>${entry.raw}</td>
|
||||
<td>${entry.acc}%</td>
|
||||
<td>${entry.mode} ${entry.mode2}</td>
|
||||
<td>${moment(entry.timestamp).format("DD MMM YYYY<br>HH:mm")}</td>
|
||||
</tr>
|
||||
`);
|
||||
});
|
||||
}
|
||||
let lenDaily = 0;
|
||||
if (dailyData.board !== undefined) lenDaily = dailyData.board.length;
|
||||
if (dailyData.length === 0 || lenDaily !== dailyData.size) {
|
||||
for (let i = lenDaily; i < dailyData.size; i++) {
|
||||
$("#leaderboardsWrapper table.daily tbody").append(`
|
||||
<tr>
|
||||
<td>${i + 1}</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
//global
|
||||
$("#leaderboardsWrapper table.global tbody").empty();
|
||||
if (globalData.board !== undefined) {
|
||||
globalData.board.forEach((entry, index) => {
|
||||
let meClassString = "";
|
||||
if (entry.currentUser) meClassString = ' class="me"';
|
||||
$("#leaderboardsWrapper table.global tbody").append(`
|
||||
<tr>
|
||||
<td>${
|
||||
index === 0 ? '<i class="fas fa-fw fa-crown"></i>' : index + 1
|
||||
}</td>
|
||||
<td ${meClassString}>${entry.name}</td>
|
||||
<td>${entry.wpm}</td>
|
||||
<td>${entry.raw}</td>
|
||||
<td>${entry.acc}%</td>
|
||||
<td>${entry.mode} ${entry.mode2}</td>
|
||||
<td>${moment(entry.timestamp).format("DD MMM YYYY<br>HH:mm")}</td>
|
||||
</tr>
|
||||
`);
|
||||
});
|
||||
}
|
||||
let lenGlobal = 0;
|
||||
if (globalData.board !== undefined) lenGlobal = globalData.board.length;
|
||||
if (globalData.length === 0 || lenGlobal !== globalData.size) {
|
||||
for (let i = lenGlobal; i < globalData.size; i++) {
|
||||
$("#leaderboardsWrapper table.global tbody").append(`
|
||||
<tr>
|
||||
<td>${i + 1}</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-<br>-</td>
|
||||
</tr>
|
||||
`);
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
showNotification("Something went wrong", 3000);
|
||||
});
|
||||
}
|
||||
|
||||
$("#leaderboardsWrapper").click((e) => {
|
||||
if ($(e.target).attr("id") === "leaderboardsWrapper") {
|
||||
hideLeaderboards();
|
||||
}
|
||||
});
|
||||
|
||||
$("#leaderboardsWrapper .buttons .button").click((e) => {
|
||||
currentLeaderboard = $(e.target).attr("board");
|
||||
updateLeaderboards();
|
||||
});
|
||||
|
||||
// $("#leaderboardsWrapper .leaderboardWords .button").click((e) => {
|
||||
// currentLeaderboard.words = $(e.target).attr("words");
|
||||
// updateLeaderboards();
|
||||
// });
|
||||
|
||||
// $("#leaderboardsWrapper .leaderboardTime .button").click((e) => {
|
||||
// currentLeaderboard.time = $(e.target).attr("time");
|
||||
// updateLeaderboards();
|
||||
// });
|
||||
|
|
@ -29,6 +29,17 @@ let accuracyStats = {
|
|||
incorrect: 0,
|
||||
};
|
||||
|
||||
let keypressStats = {
|
||||
spacing: {
|
||||
current: -1,
|
||||
array: [],
|
||||
},
|
||||
duration: {
|
||||
current: -1,
|
||||
array: [],
|
||||
},
|
||||
};
|
||||
|
||||
let customText = "The quick brown fox jumps over the lazy dog".split(" ");
|
||||
let randomQuote = null;
|
||||
|
||||
|
|
@ -38,6 +49,9 @@ const editTag = firebase.functions().httpsCallable("editTag");
|
|||
const removeTag = firebase.functions().httpsCallable("removeTag");
|
||||
const updateResultTags = firebase.functions().httpsCallable("updateResultTags");
|
||||
const saveConfig = firebase.functions().httpsCallable("saveConfig");
|
||||
const generatePairingCode = firebase
|
||||
.functions()
|
||||
.httpsCallable("generatePairingCode");
|
||||
|
||||
function smooth(arr, windowSize, getter = (value) => value, setter) {
|
||||
const get = getter;
|
||||
|
|
@ -204,6 +218,12 @@ function verifyUsername() {
|
|||
});
|
||||
}
|
||||
|
||||
function getuid() {
|
||||
console.error("Only share this uid with Miodec and nobody else!");
|
||||
console.log(firebase.auth().currentUser.uid);
|
||||
console.error("Only share this uid with Miodec and nobody else!");
|
||||
}
|
||||
|
||||
function getLastChar(word) {
|
||||
return word.charAt(word.length - 1);
|
||||
}
|
||||
|
|
@ -567,16 +587,32 @@ function highlightBadWord(index, showError) {
|
|||
function showTimer() {
|
||||
if (!config.showTimerBar) return;
|
||||
if (config.timerStyle === "bar") {
|
||||
$("#timerWrapper").animate(
|
||||
let op = 0.25;
|
||||
if (
|
||||
$("#timerNumber").hasClass("timerSub") ||
|
||||
$("#timerNumber").hasClass("timerText") ||
|
||||
$("#timerNumber").hasClass("timerMain")
|
||||
) {
|
||||
op = 1;
|
||||
}
|
||||
$("#timerWrapper").stop(true, true).removeClass("hidden").animate(
|
||||
{
|
||||
opacity: 1,
|
||||
opacity: op,
|
||||
},
|
||||
250
|
||||
);
|
||||
} else if (config.timerStyle === "text" && config.mode === "time") {
|
||||
$("#timerNumber").animate(
|
||||
let op = 0.25;
|
||||
if (
|
||||
$("#timerNumber").hasClass("timerSub") ||
|
||||
$("#timerNumber").hasClass("timerText") ||
|
||||
$("#timerNumber").hasClass("timerMain")
|
||||
) {
|
||||
op = 1;
|
||||
}
|
||||
$("#timerNumber").stop(true, true).removeClass("hidden").animate(
|
||||
{
|
||||
opacity: 0.25,
|
||||
opacity: op,
|
||||
},
|
||||
250
|
||||
);
|
||||
|
|
@ -585,14 +621,14 @@ function showTimer() {
|
|||
|
||||
function hideTimer() {
|
||||
if (config.timerStyle === "bar") {
|
||||
$("#timerWrapper").animate(
|
||||
$("#timerWrapper").stop(true, true).animate(
|
||||
{
|
||||
opacity: 0,
|
||||
},
|
||||
125
|
||||
);
|
||||
} else if (config.timerStyle === "text") {
|
||||
$("#timerNumber").animate(
|
||||
$("#timerNumber").stop(true, true).animate(
|
||||
{
|
||||
opacity: 0,
|
||||
},
|
||||
|
|
@ -601,6 +637,34 @@ function hideTimer() {
|
|||
}
|
||||
}
|
||||
|
||||
function changeTimerColor(color) {
|
||||
$("#timer").removeClass("timerSub");
|
||||
$("#timer").removeClass("timerText");
|
||||
$("#timer").removeClass("timerMain");
|
||||
|
||||
$("#timerNumber").removeClass("timerSub");
|
||||
$("#timerNumber").removeClass("timerText");
|
||||
$("#timerNumber").removeClass("timerMain");
|
||||
|
||||
$("#liveWpm").removeClass("timerSub");
|
||||
$("#liveWpm").removeClass("timerText");
|
||||
$("#liveWpm").removeClass("timerMain");
|
||||
|
||||
if (color === "main") {
|
||||
$("#timer").addClass("timerMain");
|
||||
$("#timerNumber").addClass("timerMain");
|
||||
$("#liveWpm").addClass("timerMain");
|
||||
} else if (color === "sub") {
|
||||
$("#timer").addClass("timerSub");
|
||||
$("#timerNumber").addClass("timerSub");
|
||||
$("#liveWpm").addClass("timerSub");
|
||||
} else if (color === "text") {
|
||||
$("#timer").addClass("timerText");
|
||||
$("#timerNumber").addClass("timerText");
|
||||
$("#liveWpm").addClass("timerText");
|
||||
}
|
||||
}
|
||||
|
||||
function restartTimer() {
|
||||
if (config.timerStyle === "bar") {
|
||||
if (config.mode === "time") {
|
||||
|
|
@ -905,6 +969,9 @@ function showResult(difficultyFailed = false) {
|
|||
// 'margin-bottom': 0
|
||||
});
|
||||
|
||||
$("#result .stats .leaderboards .bottom").text("");
|
||||
$("#result .stats .leaderboards").addClass("hidden");
|
||||
|
||||
let mode2 = "";
|
||||
if (config.mode === "time") {
|
||||
mode2 = config.time;
|
||||
|
|
@ -1005,6 +1072,8 @@ function showResult(difficultyFailed = false) {
|
|||
blindMode: config.blindMode,
|
||||
theme: config.theme,
|
||||
tags: activeTags,
|
||||
keySpacing: keypressStats.spacing.array,
|
||||
keyDuration: keypressStats.duration.array,
|
||||
};
|
||||
if (
|
||||
config.difficulty == "normal" ||
|
||||
|
|
@ -1072,14 +1141,32 @@ function showResult(difficultyFailed = false) {
|
|||
);
|
||||
wpmOverTimeChart.update({ duration: 0 });
|
||||
}
|
||||
$("#result .stats .leaderboards").removeClass("hidden");
|
||||
$("#result .stats .leaderboards .bottom").html("checking...");
|
||||
testCompleted({
|
||||
uid: firebase.auth().currentUser.uid,
|
||||
obj: completedEvent,
|
||||
}).then((e) => {
|
||||
accountIconLoading(false);
|
||||
if (e.data === -1) {
|
||||
// console.log(JSON.stringify(e.data));
|
||||
if (e.data.resultCode === -1) {
|
||||
showNotification("Could not save result", 3000);
|
||||
} else if (e.data === 1 || e.data === 2) {
|
||||
} else if (e.data.resultCode === -2) {
|
||||
showNotification(
|
||||
"Possible bot detected. Result not saved.",
|
||||
4000
|
||||
);
|
||||
} else if (e.data.resultCode === -3) {
|
||||
showNotification(
|
||||
"Could not verify. Result not saved. Refresh or contact Miodec on Discord.",
|
||||
4000
|
||||
);
|
||||
} else if (e.data.resultCode === -999) {
|
||||
showNotification(
|
||||
"Internal error. Result not saved. Refresh or contact Miodec on Discord.",
|
||||
6000
|
||||
);
|
||||
} else if (e.data.resultCode === 1 || e.data.resultCode === 2) {
|
||||
dbSnapshot.results.unshift(completedEvent);
|
||||
try {
|
||||
firebase
|
||||
|
|
@ -1088,7 +1175,93 @@ function showResult(difficultyFailed = false) {
|
|||
} catch (e) {
|
||||
console.log("Analytics unavailable");
|
||||
}
|
||||
if (e.data === 2) {
|
||||
|
||||
//global
|
||||
let globalLbString = "";
|
||||
if (e.data.globalLeaderboard === null) {
|
||||
globalLbString = "global: not found";
|
||||
} else if (e.data.globalLeaderboard.insertedAt === -1) {
|
||||
globalLbString = "global: not qualified";
|
||||
} else if (e.data.globalLeaderboard.insertedAt >= 0) {
|
||||
if (e.data.globalLeaderboard.newBest) {
|
||||
let pos = e.data.globalLeaderboard.insertedAt + 1;
|
||||
let numend = "th";
|
||||
if (pos === 1) {
|
||||
numend = "st";
|
||||
} else if (pos === 2) {
|
||||
numend = "nd";
|
||||
} else if (pos === 3) {
|
||||
numend = "rd";
|
||||
}
|
||||
globalLbString = `global: ${pos}${numend} place`;
|
||||
} else {
|
||||
let pos = e.data.globalLeaderboard.foundAt + 1;
|
||||
let numend = "th";
|
||||
if (pos === 1) {
|
||||
numend = "st";
|
||||
} else if (pos === 2) {
|
||||
numend = "nd";
|
||||
} else if (pos === 3) {
|
||||
numend = "rd";
|
||||
}
|
||||
globalLbString = `global: already ${pos}${numend}`;
|
||||
}
|
||||
}
|
||||
|
||||
//daily
|
||||
let dailyLbString = "";
|
||||
if (e.data.dailyLeaderboard === null) {
|
||||
dailyLbString = "daily: not found";
|
||||
} else if (e.data.dailyLeaderboard.insertedAt === -1) {
|
||||
dailyLbString = "daily: not qualified";
|
||||
} else if (e.data.dailyLeaderboard.insertedAt >= 0) {
|
||||
if (e.data.dailyLeaderboard.newBest) {
|
||||
let pos = e.data.dailyLeaderboard.insertedAt + 1;
|
||||
let numend = "th";
|
||||
if (pos === 1) {
|
||||
numend = "st";
|
||||
} else if (pos === 2) {
|
||||
numend = "nd";
|
||||
} else if (pos === 3) {
|
||||
numend = "rd";
|
||||
}
|
||||
dailyLbString = `daily: ${pos}${numend} place`;
|
||||
} else {
|
||||
let pos = e.data.dailyLeaderboard.foundAt + 1;
|
||||
let numend = "th";
|
||||
if (pos === 1) {
|
||||
numend = "st";
|
||||
} else if (pos === 2) {
|
||||
numend = "nd";
|
||||
} else if (pos === 3) {
|
||||
numend = "rd";
|
||||
}
|
||||
dailyLbString = `daily: already ${pos}${numend}`;
|
||||
}
|
||||
}
|
||||
if (
|
||||
e.data.dailyLeaderboard === null &&
|
||||
e.data.globalLeaderboard === null &&
|
||||
e.data.lbBanned === false &&
|
||||
e.data.name !== false
|
||||
) {
|
||||
$("#result .stats .leaderboards").addClass("hidden");
|
||||
} else {
|
||||
$("#result .stats .leaderboards").removeClass("hidden");
|
||||
if (e.data.lbBanned) {
|
||||
$("#result .stats .leaderboards .bottom").html("banned");
|
||||
} else if (e.data.name === false) {
|
||||
$("#result .stats .leaderboards .bottom").html(
|
||||
"update your name to access leaderboards"
|
||||
);
|
||||
} else {
|
||||
$("#result .stats .leaderboards .bottom").html(
|
||||
globalLbString + "<br>" + dailyLbString
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (e.data.resultCode === 2) {
|
||||
//new pb
|
||||
if (!localPb) {
|
||||
showNotification(
|
||||
|
|
@ -1112,6 +1285,8 @@ function showResult(difficultyFailed = false) {
|
|||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
showNotification("Unexpected response from the server.", 4000);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -1139,6 +1314,7 @@ function showResult(difficultyFailed = false) {
|
|||
if (firebase.auth().currentUser != null) {
|
||||
$("#result .loginTip").addClass("hidden");
|
||||
} else {
|
||||
$("#result .stats .leaderboards").addClass("hidden");
|
||||
$("#result .loginTip").removeClass("hidden");
|
||||
}
|
||||
|
||||
|
|
@ -1257,6 +1433,16 @@ function restartTest(withSameWordset = false) {
|
|||
currentErrorCount = 0;
|
||||
currentTestLine = 0;
|
||||
activeWordJumped = false;
|
||||
keypressStats = {
|
||||
spacing: {
|
||||
current: -1,
|
||||
array: [],
|
||||
},
|
||||
duration: {
|
||||
current: -1,
|
||||
array: [],
|
||||
},
|
||||
};
|
||||
hideTimer();
|
||||
// restartTimer();
|
||||
let el = null;
|
||||
|
|
@ -1531,7 +1717,15 @@ function updateLiveWpm(wpm) {
|
|||
function showLiveWpm() {
|
||||
if (!config.showLiveWpm) return;
|
||||
if (!testActive) return;
|
||||
$("#liveWpm").css("opacity", 0.25);
|
||||
let op = 0.25;
|
||||
if (
|
||||
$("#liveWpm").hasClass("timerSub") ||
|
||||
$("#liveWpm").hasClass("timerText") ||
|
||||
$("#liveWpm").hasClass("timerMain")
|
||||
) {
|
||||
op = 1;
|
||||
}
|
||||
$("#liveWpm").css("opacity", op);
|
||||
}
|
||||
|
||||
function hideLiveWpm() {
|
||||
|
|
@ -1978,8 +2172,12 @@ $(document).on("click", "#top .config .mode .text-button", (e) => {
|
|||
|
||||
$(document).on("click", "#top #menu .icon-button", (e) => {
|
||||
if ($(e.currentTarget).hasClass("discord")) return;
|
||||
href = $(e.currentTarget).attr("href");
|
||||
changePage(href.replace("/", ""));
|
||||
if ($(e.currentTarget).hasClass("leaderboards")) {
|
||||
showLeaderboards();
|
||||
} else {
|
||||
href = $(e.currentTarget).attr("href");
|
||||
changePage(href.replace("/", ""));
|
||||
}
|
||||
});
|
||||
|
||||
$(window).on("popstate", (e) => {
|
||||
|
|
@ -2107,6 +2305,16 @@ $(document).keypress(function (event) {
|
|||
updateActiveElement();
|
||||
updateTimer();
|
||||
clearIntervals();
|
||||
keypressStats = {
|
||||
spacing: {
|
||||
current: -1,
|
||||
array: [],
|
||||
},
|
||||
duration: {
|
||||
current: -1,
|
||||
array: [],
|
||||
},
|
||||
};
|
||||
timers.push(
|
||||
setInterval(function () {
|
||||
time++;
|
||||
|
|
@ -2158,6 +2366,7 @@ $(document).keypress(function (event) {
|
|||
} else {
|
||||
accuracyStats.correct++;
|
||||
}
|
||||
|
||||
currentKeypressCount++;
|
||||
currentInput += event["key"];
|
||||
$("#words .word.active").attr("input", currentInput);
|
||||
|
|
@ -2172,10 +2381,29 @@ $(document).keypress(function (event) {
|
|||
updateCaretPosition();
|
||||
});
|
||||
|
||||
$(document).keydown((event) => {
|
||||
keypressStats.duration.current = performance.now();
|
||||
});
|
||||
|
||||
$(document).keyup((event) => {
|
||||
let now = performance.now();
|
||||
let diff = Math.abs(keypressStats.duration.current - now);
|
||||
if (keypressStats.duration.current !== -1) {
|
||||
keypressStats.duration.array.push(diff);
|
||||
}
|
||||
keypressStats.duration.current = now;
|
||||
});
|
||||
|
||||
//handle keyboard events
|
||||
$(document).keydown((event) => {
|
||||
//tab
|
||||
let now = performance.now();
|
||||
let diff = Math.abs(keypressStats.spacing.current - now);
|
||||
if (keypressStats.spacing.current !== -1) {
|
||||
keypressStats.spacing.array.push(diff);
|
||||
}
|
||||
keypressStats.spacing.current = now;
|
||||
|
||||
//tab
|
||||
if (event["keyCode"] == 9) {
|
||||
if (config.quickTab) {
|
||||
event.preventDefault();
|
||||
|
|
|
|||
|
|
@ -57,9 +57,12 @@ function updateSettingsPage() {
|
|||
setActiveDifficultyButton();
|
||||
setActiveCaretStyleButton();
|
||||
setActiveTimerStyleButton();
|
||||
setActiveTimerColorButton();
|
||||
setActiveThemeTab();
|
||||
setCustomThemeInputs();
|
||||
|
||||
updateDiscordSettingsSection();
|
||||
|
||||
if (config.showKeyTips) {
|
||||
$(".pageSettings .tip").removeClass("hidden");
|
||||
} else {
|
||||
|
|
@ -178,6 +181,15 @@ function setActiveTimerStyleButton() {
|
|||
).addClass("active");
|
||||
}
|
||||
|
||||
function setActiveTimerColorButton() {
|
||||
$(`.pageSettings .section.timerColor .buttons .button`).removeClass("active");
|
||||
$(
|
||||
`.pageSettings .section.timerColor .buttons .button[color=` +
|
||||
config.timerColor +
|
||||
`]`
|
||||
).addClass("active");
|
||||
}
|
||||
|
||||
function setSettingsButton(buttonSection, tf) {
|
||||
if (tf) {
|
||||
$(
|
||||
|
|
@ -246,6 +258,62 @@ function toggleTag(tagid, nosave = false) {
|
|||
if (!nosave) saveActiveTagsToCookie();
|
||||
}
|
||||
|
||||
function updateDiscordSettingsSection() {
|
||||
//no code and no discord
|
||||
if (firebase.auth().currentUser == null) {
|
||||
$(".pageSettings .section.discordIntegration").addClass("hidden");
|
||||
} else {
|
||||
if (dbSnapshot == null) return;
|
||||
$(".pageSettings .section.discordIntegration").removeClass("hidden");
|
||||
|
||||
if (
|
||||
dbSnapshot.pairingCode === undefined &&
|
||||
dbSnapshot.discordId === undefined
|
||||
) {
|
||||
//show button
|
||||
$(".pageSettings .section.discordIntegration .howto").addClass("hidden");
|
||||
$(".pageSettings .section.discordIntegration .buttons").removeClass(
|
||||
"hidden"
|
||||
);
|
||||
$(".pageSettings .section.discordIntegration .info").addClass("hidden");
|
||||
$(".pageSettings .section.discordIntegration .code").addClass("hidden");
|
||||
} else if (
|
||||
dbSnapshot.pairingCode !== undefined &&
|
||||
dbSnapshot.discordId === undefined
|
||||
) {
|
||||
//show code
|
||||
$(".pageSettings .section.discordIntegration .code .bottom").text(
|
||||
dbSnapshot.pairingCode
|
||||
);
|
||||
$(".pageSettings .section.discordIntegration .howtocode").text(
|
||||
dbSnapshot.pairingCode
|
||||
);
|
||||
$(".pageSettings .section.discordIntegration .howto").removeClass(
|
||||
"hidden"
|
||||
);
|
||||
$(".pageSettings .section.discordIntegration .buttons").addClass(
|
||||
"hidden"
|
||||
);
|
||||
$(".pageSettings .section.discordIntegration .info").addClass("hidden");
|
||||
$(".pageSettings .section.discordIntegration .code").removeClass(
|
||||
"hidden"
|
||||
);
|
||||
} else if (
|
||||
dbSnapshot.pairingCode !== undefined &&
|
||||
dbSnapshot.discordId !== undefined
|
||||
) {
|
||||
$(".pageSettings .section.discordIntegration .howto").addClass("hidden");
|
||||
$(".pageSettings .section.discordIntegration .buttons").addClass(
|
||||
"hidden"
|
||||
);
|
||||
$(".pageSettings .section.discordIntegration .info").removeClass(
|
||||
"hidden"
|
||||
);
|
||||
$(".pageSettings .section.discordIntegration .code").addClass("hidden");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//smooth caret
|
||||
$(".pageSettings .section.smoothCaret .buttons .button.on").click((e) => {
|
||||
setSmoothCaret(true);
|
||||
|
|
@ -429,6 +497,14 @@ $(document).on("click", ".pageSettings .section.timerStyle .button", (e) => {
|
|||
setActiveTimerStyleButton();
|
||||
});
|
||||
|
||||
//timer color
|
||||
$(document).on("click", ".pageSettings .section.timerColor .button", (e) => {
|
||||
let color = $(e.currentTarget).attr("color");
|
||||
setTimerColor(color);
|
||||
// showNotification('Timer style updated', 1000);
|
||||
setActiveTimerColorButton();
|
||||
});
|
||||
|
||||
//blind mode
|
||||
$(".pageSettings .section.blindMode .buttons .button.on").click((e) => {
|
||||
setBlindMode(true);
|
||||
|
|
@ -489,6 +565,26 @@ $(".pageSettings .section.randomTheme .buttons .button.off").click((e) => {
|
|||
setSettingsButton("randomTheme", config.randomTheme);
|
||||
});
|
||||
|
||||
//discord
|
||||
$(
|
||||
".pageSettings .section.discordIntegration .buttons .generateCodeButton"
|
||||
).click((e) => {
|
||||
showBackgroundLoader();
|
||||
generatePairingCode({ uid: firebase.auth().currentUser.uid }).then((ret) => {
|
||||
hideBackgroundLoader();
|
||||
if (ret.data.status === 1 || ret.data.status === 2) {
|
||||
dbSnapshot.pairingCode = ret.data.pairingCode;
|
||||
$(".pageSettings .section.discordIntegration .code .bottom").text(
|
||||
ret.data.pairingCode
|
||||
);
|
||||
$(".pageSettings .section.discordIntegration .howtocode").text(
|
||||
ret.data.pairingCode
|
||||
);
|
||||
updateDiscordSettingsSection();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//tags
|
||||
$(document).on(
|
||||
"click",
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ let defaultConfig = {
|
|||
timerStyle: "bar",
|
||||
colorfulMode: true,
|
||||
randomTheme: false,
|
||||
timerColor: "black",
|
||||
};
|
||||
|
||||
let cookieConfig = null;
|
||||
|
|
@ -45,6 +46,7 @@ let config = defaultConfig;
|
|||
//cookies
|
||||
function saveConfigToCookie() {
|
||||
// showNotification('saving to cookie',1000);
|
||||
if (config.freedomMode === null) config.freedomMode = false;
|
||||
let d = new Date();
|
||||
d.setFullYear(d.getFullYear() + 1);
|
||||
$.cookie("config", null);
|
||||
|
|
@ -127,6 +129,7 @@ function applyConfig(configObj) {
|
|||
setColorfulMode(configObj.colorfulMode, true);
|
||||
setMaxConfidence(configObj.maxConfidence, true);
|
||||
setTimerStyle(configObj.timerStyle, true);
|
||||
setTimerColor(configObj.timerColor, true);
|
||||
if (
|
||||
configObj.resultFilters == null ||
|
||||
configObj.resultFilters == undefined
|
||||
|
|
@ -303,6 +306,15 @@ function setTimerStyle(style, nosave) {
|
|||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
|
||||
function setTimerColor(color, nosave) {
|
||||
if (color == null || color == undefined) {
|
||||
color = "black";
|
||||
}
|
||||
config.timerColor = color;
|
||||
changeTimerColor(color);
|
||||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
|
||||
//key tips
|
||||
function setKeyTips(keyTips, nosave) {
|
||||
config.showKeyTips = keyTips;
|
||||
|
|
@ -424,7 +436,7 @@ function togglePunctuation() {
|
|||
|
||||
//freedom
|
||||
function setFreedomMode(freedom, nosave) {
|
||||
if (freedom === null) {
|
||||
if (freedom == null) {
|
||||
freedom = false;
|
||||
}
|
||||
config.freedomMode = freedom;
|
||||
|
|
|
|||
11
public/themes/hammerhead.css
Normal file
11
public/themes/hammerhead.css
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
:root {
|
||||
--bg-color: #030613;
|
||||
--main-color: #4fcdb9;
|
||||
--caret-color: #4fcdb9;
|
||||
--sub-color: #1e283a;
|
||||
--text-color: #e2f1f5;
|
||||
--error-color: #e32b2b;
|
||||
--error-extra-color: #A62626;
|
||||
--colorful-error-color: #e32b2b;
|
||||
--colorful-error-extra-color: #A62626;
|
||||
}
|
||||
|
|
@ -225,7 +225,7 @@
|
|||
},
|
||||
{
|
||||
"name": "dualshot",
|
||||
"bgColor": "#2d2e30",
|
||||
"bgColor": "#737373",
|
||||
"textColor": "#212222"
|
||||
},
|
||||
{
|
||||
|
|
@ -244,8 +244,13 @@
|
|||
"textColor": "#0c100e"
|
||||
},
|
||||
{
|
||||
"name": "red dragon",
|
||||
"name": "red_dragon",
|
||||
"bgColor": "#1a0b0c",
|
||||
"textColor": "#ff3a32"
|
||||
},
|
||||
{
|
||||
"name": "hammerhead",
|
||||
"bgColor": "#030613",
|
||||
"textColor": "#4fcdb9"
|
||||
}
|
||||
]
|
||||
Loading…
Add table
Reference in a new issue