mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-09-07 15:15:49 +08:00
Merge branch 'master' into misc
This commit is contained in:
commit
7342a01137
17 changed files with 22349 additions and 10405 deletions
|
@ -1783,8 +1783,11 @@ $("#commandInput input").keydown((e) => {
|
|||
|
||||
$("#commandLineWrapper #commandLine .suggestions").on("mouseover", (e) => {
|
||||
$("#commandLineWrapper #commandLine .suggestions .entry").removeClass(
|
||||
"active"
|
||||
"activeKeyboard"
|
||||
);
|
||||
if (isPreviewingTheme) {
|
||||
previewTheme(config.theme, false);
|
||||
}
|
||||
let hoverId = $(e.target).attr("command");
|
||||
try {
|
||||
let list = currentCommands[currentCommands.length - 1];
|
||||
|
@ -2037,14 +2040,15 @@ function updateSuggestedCommands() {
|
|||
|
||||
function displayFoundCommands() {
|
||||
$("#commandLine .suggestions").empty();
|
||||
let commandsHTML = "";
|
||||
let list = currentCommands[currentCommands.length - 1];
|
||||
$.each(list.list, (index, obj) => {
|
||||
if (obj.found && (obj.available !== undefined ? obj.available() : true)) {
|
||||
$("#commandLine .suggestions").append(
|
||||
'<div class="entry" command="' + obj.id + '">' + obj.display + "</div>"
|
||||
);
|
||||
commandsHTML +=
|
||||
'<div class="entry" command="' + obj.id + '">' + obj.display + "</div>";
|
||||
}
|
||||
});
|
||||
$("#commandLine .suggestions").html(commandsHTML);
|
||||
if ($("#commandLine .suggestions .entry").length == 0) {
|
||||
$("#commandLine .separator").css({ height: 0, margin: 0 });
|
||||
} else {
|
||||
|
|
|
@ -176,7 +176,7 @@ const layouts = {
|
|||
prog_dvorak: {
|
||||
keymapShowTopRow: true,
|
||||
keys: [
|
||||
"$~", "[%", "[7", "{5", "}3", "(1", "=9", "*0", ")2", "+4", "]6", "!8", "#`",
|
||||
"$~", "&%", "[7", "{5", "}3", "(1", "=9", "*0", ")2", "+4", "]6", "!8", "#`",
|
||||
";:", ",<", ".>", "pP", "yY", "fF", "gG", "cC", "rR", "lL", "/?", "@^", "\\|",
|
||||
"aA", "oO", "eE", "uU", "iI", "dD", "hH", "tT", "nN", "sS", "-_",
|
||||
"\\|", "'\"", "qQ", "jJ", "kK", "xX", "bB", "mM", "wW", "vV", "zZ",
|
||||
|
@ -220,7 +220,7 @@ const layouts = {
|
|||
keys: [
|
||||
"$#", "\"1", "«2", "»3", "(4", ")5", "@6", "+7", "-8", "/9", "*0", "=°", "%`",
|
||||
"bB", "éÉ", "pP", "oO", "èÈ", "^!", "vV", "dD", "lL", "jJ", "zZ", "wW", "mM",
|
||||
"aA", "uU", "iI", "eE", ",;", "cC", "tT", "sS", "rR", "sS", "nN",
|
||||
"aA", "uU", "iI", "eE", ",;", "cC", "tT", "sS", "rR", "nN", "mM",
|
||||
"êÊ", "àÀ", "yY", "xX", ".:", "kK", "’?", "qQ", "gG", "hH", "fF",
|
||||
" "
|
||||
]
|
||||
|
|
390
src/js/script.js
390
src/js/script.js
|
@ -310,6 +310,7 @@ function activateFunbox(funbox, mode) {
|
|||
memoryFunboxInterval = clearInterval(memoryFunboxInterval);
|
||||
memoryFunboxTimer = null;
|
||||
$("#wordsWrapper").removeClass("hidden");
|
||||
$("#words").removeClass("nospace");
|
||||
}
|
||||
|
||||
if (mode === "style") {
|
||||
|
@ -346,6 +347,9 @@ function activateFunbox(funbox, mode) {
|
|||
if (config.keymapMode === "next") {
|
||||
setKeymapMode("react");
|
||||
}
|
||||
} else if (funbox === "no_space") {
|
||||
$("#words").addClass("nospace");
|
||||
restartTest(false, true);
|
||||
}
|
||||
activeFunBox = funbox;
|
||||
}
|
||||
|
@ -607,82 +611,89 @@ function emulateLayout(event) {
|
|||
event.key = newKey;
|
||||
event.code = "Key" + newKey.toUpperCase();
|
||||
}
|
||||
if (config.layout === "default") {
|
||||
|
||||
let newEvent = event;
|
||||
|
||||
try {
|
||||
if (config.layout === "default") {
|
||||
//override the caps lock modifier for the default layout if needed
|
||||
if (config.capsLockBackspace && Misc.isASCIILetter(event.key)) {
|
||||
replaceEventKey(
|
||||
event,
|
||||
event.shiftKey
|
||||
? event.key.toUpperCase().charCodeAt(0)
|
||||
: event.key.toLowerCase().charCodeAt(0)
|
||||
);
|
||||
if (config.capsLockBackspace && Misc.isASCIILetter(newEvent.key)) {
|
||||
replaceEventKey(
|
||||
newEvent,
|
||||
newEvent.shiftKey
|
||||
? newEvent.key.toUpperCase().charCodeAt(0)
|
||||
: newEvent.key.toLowerCase().charCodeAt(0)
|
||||
);
|
||||
}
|
||||
return newEvent;
|
||||
}
|
||||
const keyEventCodes = [
|
||||
"Backquote",
|
||||
"Digit1",
|
||||
"Digit2",
|
||||
"Digit3",
|
||||
"Digit4",
|
||||
"Digit5",
|
||||
"Digit6",
|
||||
"Digit7",
|
||||
"Digit8",
|
||||
"Digit9",
|
||||
"Digit0",
|
||||
"Minus",
|
||||
"Equal",
|
||||
"KeyQ",
|
||||
"KeyW",
|
||||
"KeyE",
|
||||
"KeyR",
|
||||
"KeyT",
|
||||
"KeyY",
|
||||
"KeyU",
|
||||
"KeyI",
|
||||
"KeyO",
|
||||
"KeyP",
|
||||
"BracketLeft",
|
||||
"BracketRight",
|
||||
"Backslash",
|
||||
"KeyA",
|
||||
"KeyS",
|
||||
"KeyD",
|
||||
"KeyF",
|
||||
"KeyG",
|
||||
"KeyH",
|
||||
"KeyJ",
|
||||
"KeyK",
|
||||
"KeyL",
|
||||
"Semicolon",
|
||||
"Quote",
|
||||
"IntlBackslash",
|
||||
"KeyZ",
|
||||
"KeyX",
|
||||
"KeyC",
|
||||
"KeyV",
|
||||
"KeyB",
|
||||
"KeyN",
|
||||
"KeyM",
|
||||
"Comma",
|
||||
"Period",
|
||||
"Slash",
|
||||
"Space",
|
||||
];
|
||||
const layoutMap = layouts[config.layout].keys;
|
||||
|
||||
let mapIndex;
|
||||
for (let i = 0; i < keyEventCodes.length; i++) {
|
||||
if (newEvent.code == keyEventCodes[i]) {
|
||||
mapIndex = i;
|
||||
}
|
||||
}
|
||||
const newKeyPreview = layoutMap[mapIndex][0];
|
||||
const shift = emulatedLayoutShouldShiftKey(newEvent, newKeyPreview) ? 1 : 0;
|
||||
const newKey = layoutMap[mapIndex][shift];
|
||||
replaceEventKey(newEvent, newKey.charCodeAt(0));
|
||||
} catch (e) {
|
||||
return event;
|
||||
}
|
||||
const keyEventCodes = [
|
||||
"Backquote",
|
||||
"Digit1",
|
||||
"Digit2",
|
||||
"Digit3",
|
||||
"Digit4",
|
||||
"Digit5",
|
||||
"Digit6",
|
||||
"Digit7",
|
||||
"Digit8",
|
||||
"Digit9",
|
||||
"Digit0",
|
||||
"Minus",
|
||||
"Equal",
|
||||
"KeyQ",
|
||||
"KeyW",
|
||||
"KeyE",
|
||||
"KeyR",
|
||||
"KeyT",
|
||||
"KeyY",
|
||||
"KeyU",
|
||||
"KeyI",
|
||||
"KeyO",
|
||||
"KeyP",
|
||||
"BracketLeft",
|
||||
"BracketRight",
|
||||
"Backslash",
|
||||
"KeyA",
|
||||
"KeyS",
|
||||
"KeyD",
|
||||
"KeyF",
|
||||
"KeyG",
|
||||
"KeyH",
|
||||
"KeyJ",
|
||||
"KeyK",
|
||||
"KeyL",
|
||||
"Semicolon",
|
||||
"Quote",
|
||||
"IntlBackslash",
|
||||
"KeyZ",
|
||||
"KeyX",
|
||||
"KeyC",
|
||||
"KeyV",
|
||||
"KeyB",
|
||||
"KeyN",
|
||||
"KeyM",
|
||||
"Comma",
|
||||
"Period",
|
||||
"Slash",
|
||||
"Space",
|
||||
];
|
||||
const layoutMap = layouts[config.layout].keys;
|
||||
|
||||
let mapIndex;
|
||||
for (let i = 0; i < keyEventCodes.length; i++) {
|
||||
if (event.code == keyEventCodes[i]) {
|
||||
mapIndex = i;
|
||||
}
|
||||
}
|
||||
const newKeyPreview = layoutMap[mapIndex][0];
|
||||
const shift = emulatedLayoutShouldShiftKey(event, newKeyPreview) ? 1 : 0;
|
||||
const newKey = layoutMap[mapIndex][shift];
|
||||
replaceEventKey(event, newKey.charCodeAt(0));
|
||||
return event;
|
||||
return newEvent;
|
||||
}
|
||||
|
||||
function punctuateWord(previousWord, currentWord, index, maxindex) {
|
||||
|
@ -718,6 +729,20 @@ function punctuateWord(previousWord, currentWord, index, maxindex) {
|
|||
) {
|
||||
//1% chance to add quotes
|
||||
word = `"${word}"`;
|
||||
} else if (
|
||||
Math.random() < 0.01 &&
|
||||
getLastChar(previousWord) != "," &&
|
||||
getLastChar(previousWord) != "."
|
||||
) {
|
||||
//1% chance to add single quotes
|
||||
word = `'${word}'`;
|
||||
} else if (
|
||||
Math.random() < 0.01 &&
|
||||
getLastChar(previousWord) != "," &&
|
||||
getLastChar(previousWord) != "."
|
||||
) {
|
||||
//1% chance to add parentheses
|
||||
word = `(${word})`;
|
||||
} else if (Math.random() < 0.01) {
|
||||
//1% chance to add a colon
|
||||
word = word + ":";
|
||||
|
@ -835,14 +860,15 @@ function addWord() {
|
|||
function showWords() {
|
||||
$("#words").empty();
|
||||
|
||||
let wordsHTML = "";
|
||||
for (let i = 0; i < wordsList.length; i++) {
|
||||
let w = "<div class='word'>";
|
||||
wordsHTML += "<div class='word'>";
|
||||
for (let c = 0; c < wordsList[i].length; c++) {
|
||||
w += "<letter>" + wordsList[i].charAt(c) + "</letter>";
|
||||
wordsHTML += "<letter>" + wordsList[i].charAt(c) + "</letter>";
|
||||
}
|
||||
w += "</div>";
|
||||
$("#words").append(w);
|
||||
wordsHTML += "</div>";
|
||||
}
|
||||
$("#words").html(wordsHTML);
|
||||
|
||||
$("#wordsWrapper").removeClass("hidden");
|
||||
const wordHeight = $(document.querySelector(".word")).outerHeight(true);
|
||||
|
@ -969,6 +995,12 @@ function compareInput(showError) {
|
|||
for (let i = 0; i < currentWord.length; i++) {
|
||||
ret += `<letter class="${classString}">` + currentWord[i] + `</letter>`;
|
||||
}
|
||||
if (currentInput.length > currentWord.length && !config.hideExtraLetters) {
|
||||
for (let i = currentWord.length; i < currentInput.length; i++) {
|
||||
ret +=
|
||||
`<letter class="${classString}">` + currentInput[i] + `</letter>`;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (let i = 0; i < input.length; i++) {
|
||||
let charCorrect;
|
||||
|
@ -1714,7 +1746,7 @@ function showResult(difficultyFailed = false) {
|
|||
$("#result .stats .wpm .top .text").text("cpm");
|
||||
$("#result .stats .wpm .bottom").attr(
|
||||
"aria-label",
|
||||
stats.wpm * 5 + ` (${Misc.roundTo2(stats.wpm)} wpm)`
|
||||
Misc.roundTo2(stats.wpm * 5) + ` (${Misc.roundTo2(stats.wpm)} wpm)`
|
||||
);
|
||||
$("#result .stats .wpm .bottom").text(Math.round(stats.wpm * 5));
|
||||
$("#result .stats .raw .bottom").text(Math.round(stats.wpmRaw * 5));
|
||||
|
@ -3103,6 +3135,7 @@ function toggleResultWordsDisplay() {
|
|||
|
||||
async function loadWordsHistory() {
|
||||
$("#resultWordsHistory .words").empty();
|
||||
let wordsHTML = "";
|
||||
for (let i = 0; i < inputHistory.length + 2; i++) {
|
||||
let input = inputHistory[i];
|
||||
let wordEl = "";
|
||||
|
@ -3213,8 +3246,9 @@ async function loadWordsHistory() {
|
|||
wordEl += "</div>";
|
||||
} catch (e) {}
|
||||
}
|
||||
$("#resultWordsHistory .words").append(wordEl);
|
||||
wordsHTML += wordEl;
|
||||
}
|
||||
$("#resultWordsHistory .words").html(wordsHTML);
|
||||
$("#showWordHistoryButton").addClass("loaded");
|
||||
return true;
|
||||
}
|
||||
|
@ -4235,6 +4269,18 @@ $(document).keydown((event) => {
|
|||
}
|
||||
}
|
||||
|
||||
//blocking firefox from going back in history with backspace
|
||||
if (event.key === "Backspace") {
|
||||
let t = /INPUT|SELECT|TEXTAREA/i;
|
||||
if (
|
||||
!t.test(event.target.tagName) ||
|
||||
event.target.disabled ||
|
||||
event.target.readOnly
|
||||
) {
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
//only for the typing test
|
||||
if ($("#wordsInput").is(":focus")) {
|
||||
const isBackspace =
|
||||
|
@ -4265,6 +4311,9 @@ $(document).keydown((event) => {
|
|||
} else {
|
||||
currentInput = inputHistory.pop();
|
||||
currentCorrected = correctedHistory.pop();
|
||||
if (activeFunBox === "no_space") {
|
||||
currentInput = currentInput.substring(0, currentInput.length - 1);
|
||||
}
|
||||
}
|
||||
currentWordIndex--;
|
||||
currentWordElementIndex--;
|
||||
|
@ -4294,91 +4343,6 @@ $(document).keydown((event) => {
|
|||
if (currentInput === "") return;
|
||||
event.preventDefault();
|
||||
let currentWord = wordsList[currentWordIndex];
|
||||
if (!config.showAllLines || config.mode == "time") {
|
||||
let currentTop = Math.floor(
|
||||
document.querySelectorAll("#words .word")[currentWordElementIndex]
|
||||
.offsetTop
|
||||
);
|
||||
let nextTop;
|
||||
try {
|
||||
nextTop = Math.floor(
|
||||
document.querySelectorAll("#words .word")[
|
||||
currentWordElementIndex + 1
|
||||
].offsetTop
|
||||
);
|
||||
} catch (e) {
|
||||
nextTop = 0;
|
||||
}
|
||||
|
||||
if ((nextTop > currentTop || activeWordJumped) && !lineTransition) {
|
||||
//last word of the line
|
||||
if (currentTestLine > 0) {
|
||||
let hideBound = currentTop;
|
||||
if (activeWordJumped) {
|
||||
hideBound = activeWordTopBeforeJump;
|
||||
}
|
||||
activeWordJumped = false;
|
||||
|
||||
let toHide = [];
|
||||
let wordElements = $("#words .word");
|
||||
for (let i = 0; i < currentWordElementIndex + 1; i++) {
|
||||
if ($(wordElements[i]).hasClass("hidden")) continue;
|
||||
let forWordTop = Math.floor(wordElements[i].offsetTop);
|
||||
if (forWordTop < hideBound - 10) {
|
||||
toHide.push($($("#words .word")[i]));
|
||||
}
|
||||
}
|
||||
const wordHeight = $(document.querySelector(".word")).outerHeight(
|
||||
true
|
||||
);
|
||||
if (config.smoothLineScroll && toHide.length > 0) {
|
||||
lineTransition = true;
|
||||
$("#words").prepend(
|
||||
`<div class="smoothScroller" style="position: fixed;height:${wordHeight}px;width:100%"></div>`
|
||||
);
|
||||
$("#words .smoothScroller").animate(
|
||||
{
|
||||
height: 0,
|
||||
},
|
||||
125,
|
||||
() => {
|
||||
$("#words .smoothScroller").remove();
|
||||
}
|
||||
);
|
||||
$("#paceCaret").animate(
|
||||
{
|
||||
top:
|
||||
document.querySelector("#paceCaret").offsetTop - wordHeight,
|
||||
},
|
||||
125
|
||||
);
|
||||
$("#words").animate(
|
||||
{
|
||||
marginTop: `-${wordHeight}px`,
|
||||
},
|
||||
125,
|
||||
() => {
|
||||
activeWordTop = document.querySelector("#words .active")
|
||||
.offsetTop;
|
||||
|
||||
currentWordElementIndex -= toHide.length;
|
||||
lineTransition = false;
|
||||
toHide.forEach((el) => el.remove());
|
||||
$("#words").css("marginTop", "0");
|
||||
}
|
||||
);
|
||||
} else {
|
||||
toHide.forEach((el) => el.remove());
|
||||
currentWordElementIndex -= toHide.length;
|
||||
$("#paceCaret").css({
|
||||
top:
|
||||
document.querySelector("#paceCaret").offsetTop - wordHeight,
|
||||
});
|
||||
}
|
||||
}
|
||||
currentTestLine++;
|
||||
}
|
||||
} //end of line wrap
|
||||
if (activeFunBox === "layoutfluid" && config.mode !== "time") {
|
||||
const layouts = ["qwerty", "dvorak", "colemak"];
|
||||
let index = 0;
|
||||
|
@ -4483,8 +4447,97 @@ $(document).keydown((event) => {
|
|||
currentKeypress.count++;
|
||||
currentKeypress.words.push(currentWordIndex);
|
||||
}
|
||||
|
||||
correctedHistory.push(currentCorrected);
|
||||
currentCorrected = "";
|
||||
|
||||
if (!config.showAllLines || config.mode == "time") {
|
||||
let currentTop = Math.floor(
|
||||
document.querySelectorAll("#words .word")[currentWordElementIndex - 1]
|
||||
.offsetTop
|
||||
);
|
||||
let nextTop;
|
||||
try {
|
||||
nextTop = Math.floor(
|
||||
document.querySelectorAll("#words .word")[currentWordElementIndex]
|
||||
.offsetTop
|
||||
);
|
||||
} catch (e) {
|
||||
nextTop = 0;
|
||||
}
|
||||
|
||||
if ((nextTop > currentTop || activeWordJumped) && !lineTransition) {
|
||||
//last word of the line
|
||||
if (currentTestLine > 0) {
|
||||
let hideBound = currentTop;
|
||||
if (activeWordJumped) {
|
||||
hideBound = activeWordTopBeforeJump;
|
||||
}
|
||||
activeWordJumped = false;
|
||||
|
||||
let toHide = [];
|
||||
let wordElements = $("#words .word");
|
||||
for (let i = 0; i < currentWordElementIndex; i++) {
|
||||
if ($(wordElements[i]).hasClass("hidden")) continue;
|
||||
let forWordTop = Math.floor(wordElements[i].offsetTop);
|
||||
if (forWordTop < hideBound - 10) {
|
||||
toHide.push($($("#words .word")[i]));
|
||||
}
|
||||
}
|
||||
const wordHeight = $(document.querySelector(".word")).outerHeight(
|
||||
true
|
||||
);
|
||||
if (config.smoothLineScroll && toHide.length > 0) {
|
||||
lineTransition = true;
|
||||
$("#words").prepend(
|
||||
`<div class="smoothScroller" style="position: fixed;height:${wordHeight}px;width:100%"></div>`
|
||||
);
|
||||
$("#words .smoothScroller").animate(
|
||||
{
|
||||
height: 0,
|
||||
},
|
||||
125,
|
||||
() => {
|
||||
$("#words .smoothScroller").remove();
|
||||
}
|
||||
);
|
||||
$("#paceCaret").animate(
|
||||
{
|
||||
top:
|
||||
document.querySelector("#paceCaret").offsetTop - wordHeight,
|
||||
},
|
||||
125
|
||||
);
|
||||
$("#words").animate(
|
||||
{
|
||||
marginTop: `-${wordHeight}px`,
|
||||
},
|
||||
125,
|
||||
() => {
|
||||
activeWordTop = document.querySelector("#words .active")
|
||||
.offsetTop;
|
||||
|
||||
currentWordElementIndex -= toHide.length;
|
||||
lineTransition = false;
|
||||
toHide.forEach((el) => el.remove());
|
||||
$("#words").css("marginTop", "0");
|
||||
}
|
||||
);
|
||||
} else {
|
||||
toHide.forEach((el) => el.remove());
|
||||
currentWordElementIndex -= toHide.length;
|
||||
$("#paceCaret").css({
|
||||
top:
|
||||
document.querySelector("#paceCaret").offsetTop - wordHeight,
|
||||
});
|
||||
}
|
||||
}
|
||||
currentTestLine++;
|
||||
}
|
||||
} //end of line wrap
|
||||
|
||||
updateCaretPosition();
|
||||
|
||||
if (config.keymapMode === "react") {
|
||||
flashPressedKeymapKey(event.code, true);
|
||||
} else if (config.keymapMode === "next") {
|
||||
|
@ -4679,6 +4732,17 @@ $(document).keydown(function (event) {
|
|||
activeWordTopBeforeJump = activeWordTop;
|
||||
compareInput(!config.blindMode);
|
||||
|
||||
if (
|
||||
activeFunBox === "no_space" &&
|
||||
currentInput.length === wordsList[currentWordIndex].length
|
||||
) {
|
||||
jQuery.event.trigger({
|
||||
type: "keydown",
|
||||
which: " ".charCodeAt(0),
|
||||
key: " ",
|
||||
});
|
||||
}
|
||||
|
||||
let newActiveTop = document.querySelector("#words .word.active").offsetTop;
|
||||
if (activeWordTopBeforeJump < newActiveTop && !lineTransition) {
|
||||
activeWordJumped = true;
|
||||
|
|
|
@ -1867,6 +1867,12 @@ key {
|
|||
margin: 0.75rem;
|
||||
}
|
||||
|
||||
#words.nospace {
|
||||
.word {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
}
|
||||
|
||||
.word.error {
|
||||
/* margin-bottom: 1px; */
|
||||
border-bottom: 2px solid var(--error-color);
|
||||
|
|
|
@ -83,5 +83,10 @@
|
|||
"name": "memory",
|
||||
"type": "script",
|
||||
"info": "Test your memory. Remember the words and type them blind."
|
||||
},
|
||||
{
|
||||
"name": "no_space",
|
||||
"type": "script",
|
||||
"info": "Whoneedsspacesanyway?"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -3491,8 +3491,6 @@
|
|||
<script src="js/jquery.color.min.js"></script>
|
||||
<script src="js/easing.js"></script>
|
||||
<script src="js/jquery.cookie-1.4.1.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/jquery.gsap.min.js"></script>
|
||||
<script src="js/moment.min.js"></script>
|
||||
<script src="js/html2canvas.min.js"></script>
|
||||
<script src="js/monkeytype.js"></script>
|
||||
|
|
335
static/languages/code_html.json
Normal file
335
static/languages/code_html.json
Normal file
|
@ -0,0 +1,335 @@
|
|||
{
|
||||
"name": "code_html",
|
||||
"leftToRight": true,
|
||||
"words": [
|
||||
"action",
|
||||
"alt",
|
||||
"class",
|
||||
"fill",
|
||||
"for",
|
||||
"height",
|
||||
"href",
|
||||
"href",
|
||||
"href",
|
||||
"href",
|
||||
"id",
|
||||
"kind",
|
||||
"max",
|
||||
"media",
|
||||
"method",
|
||||
"min",
|
||||
"name",
|
||||
"src",
|
||||
"src",
|
||||
"src",
|
||||
"srclang",
|
||||
"srcset",
|
||||
"stroke",
|
||||
"stroke-width",
|
||||
"style",
|
||||
"stylesheet",
|
||||
"stylesheet",
|
||||
"title",
|
||||
"type",
|
||||
"type",
|
||||
"value",
|
||||
"width",
|
||||
"<!DOCTYPE",
|
||||
"<!--",
|
||||
"-->",
|
||||
"<a",
|
||||
"</a>",
|
||||
"<a",
|
||||
"</a>",
|
||||
"<a",
|
||||
"</a>",
|
||||
"<a",
|
||||
"</a>",
|
||||
"<abbr",
|
||||
"</abbr>",
|
||||
"<address>",
|
||||
"</address>",
|
||||
"<area",
|
||||
"<article>",
|
||||
"</article>",
|
||||
"<aside>",
|
||||
"</aside>",
|
||||
"<audio",
|
||||
"</audio>",
|
||||
"<b>",
|
||||
"</b>",
|
||||
"<b>",
|
||||
"</b>",
|
||||
"<b>",
|
||||
"</b>",
|
||||
"<b>",
|
||||
"</b>",
|
||||
"<base",
|
||||
"<bdi>",
|
||||
"</bdi>",
|
||||
"<bdo",
|
||||
"</bdo>",
|
||||
"<blockquote",
|
||||
"</blockquote>",
|
||||
"<body>",
|
||||
"</body>",
|
||||
"<body>",
|
||||
"</body>",
|
||||
"<body>",
|
||||
"</body>",
|
||||
"<body>",
|
||||
"</body>",
|
||||
"<br>",
|
||||
"<br>",
|
||||
"<br>",
|
||||
"<br>",
|
||||
"<button",
|
||||
"</button>",
|
||||
"<canvas",
|
||||
"</canvas>",
|
||||
"<caption>",
|
||||
"</caption>",
|
||||
"<cite>",
|
||||
"</cite>",
|
||||
"<code>",
|
||||
"</code>",
|
||||
"<colgroup>",
|
||||
"<col",
|
||||
"</colgroup>",
|
||||
"<data",
|
||||
"</data>",
|
||||
"<datalist",
|
||||
"</datalist>",
|
||||
"<dd>",
|
||||
"</dd>",
|
||||
"<dl>",
|
||||
"</dl>",
|
||||
"<del>",
|
||||
"</del>",
|
||||
"<details>",
|
||||
"</details>",
|
||||
"<dfn",
|
||||
"</dfn>",
|
||||
"<dialog",
|
||||
"</dialog>",
|
||||
"<div",
|
||||
"</div>",
|
||||
"<div",
|
||||
"</div>",
|
||||
"<div",
|
||||
"</div>",
|
||||
"<div",
|
||||
"</div>",
|
||||
"<dt>",
|
||||
"</dt>",
|
||||
"<em>",
|
||||
"</em>",
|
||||
"<embed",
|
||||
"<fieldset>",
|
||||
"</fieldset>",
|
||||
"<figcaption>",
|
||||
"</figcaption>",
|
||||
"<figure>",
|
||||
"</figure>",
|
||||
"<form",
|
||||
"</form>",
|
||||
"<footer>",
|
||||
"</footer>",
|
||||
"<label",
|
||||
"</label>",
|
||||
"<header>",
|
||||
"</header>",
|
||||
"<head>",
|
||||
"</head>",
|
||||
"<head>",
|
||||
"</head>",
|
||||
"<head>",
|
||||
"</head>",
|
||||
"<head>",
|
||||
"</head>",
|
||||
"<html",
|
||||
"</html>",
|
||||
"<html",
|
||||
"</html>",
|
||||
"<html",
|
||||
"</html>",
|
||||
"<html",
|
||||
"</html>",
|
||||
"<hr>",
|
||||
"<h1>",
|
||||
"</h1>",
|
||||
"<h2>",
|
||||
"</h2>",
|
||||
"<h3>",
|
||||
"</h3>",
|
||||
"<h4>",
|
||||
"</h4>",
|
||||
"<h5>",
|
||||
"</h5>",
|
||||
"<h6>",
|
||||
"</h6>",
|
||||
"<i>",
|
||||
"</i>",
|
||||
"<i>",
|
||||
"</i>",
|
||||
"<i>",
|
||||
"</i>",
|
||||
"<iframe",
|
||||
"</iframe>",
|
||||
"<img",
|
||||
"<img",
|
||||
"<img",
|
||||
"<img",
|
||||
"<input",
|
||||
"<ins>",
|
||||
"</ins>",
|
||||
"<kbd>",
|
||||
"</kbd>",
|
||||
"<legend>",
|
||||
"</legend>",
|
||||
"<li>",
|
||||
"</li>",
|
||||
"<li>",
|
||||
"</li>",
|
||||
"<li>",
|
||||
"</li>",
|
||||
"<li>",
|
||||
"</li>",
|
||||
"<link",
|
||||
"<link",
|
||||
"<main>",
|
||||
"</main>",
|
||||
"<map",
|
||||
"</map>",
|
||||
"<mark>",
|
||||
"</mark>",
|
||||
"<meta",
|
||||
"<meter",
|
||||
"</meter>",
|
||||
"<nav>",
|
||||
"</nav>",
|
||||
"<noscript>",
|
||||
"</noscript>",
|
||||
"<object",
|
||||
"</object>",
|
||||
"<ol>",
|
||||
"</ol>",
|
||||
"<ol>",
|
||||
"</ol>",
|
||||
"<ol>",
|
||||
"</ol>",
|
||||
"<ol>",
|
||||
"</ol>",
|
||||
"<optgroup",
|
||||
"</optgroup>",
|
||||
"<option",
|
||||
"</option>",
|
||||
"<output",
|
||||
"</output>",
|
||||
"<p>",
|
||||
"</p>",
|
||||
"<p>",
|
||||
"</p>",
|
||||
"<p>",
|
||||
"</p>",
|
||||
"<p>",
|
||||
"</p>",
|
||||
"<p>",
|
||||
"</p>",
|
||||
"<p>",
|
||||
"</p>",
|
||||
"<param",
|
||||
"<picture>",
|
||||
"</picture>",
|
||||
"<pre>",
|
||||
"</pre>",
|
||||
"<progress",
|
||||
"</progress>",
|
||||
"<q>",
|
||||
"</q>",
|
||||
"<rp>",
|
||||
"</rp>",
|
||||
"<ruby>",
|
||||
"</ruby>",
|
||||
"<rt>",
|
||||
"</rt>",
|
||||
"<s>",
|
||||
"</s>",
|
||||
"<samp>",
|
||||
"</samp>",
|
||||
"<script>",
|
||||
"</script>",
|
||||
"<script>",
|
||||
"</script>",
|
||||
"<section>",
|
||||
"</section>",
|
||||
"<select",
|
||||
"</select>",
|
||||
"<source",
|
||||
"<span",
|
||||
"</span>",
|
||||
"<span",
|
||||
"</span>",
|
||||
"<span",
|
||||
"</span>",
|
||||
"<span",
|
||||
"</span>",
|
||||
"<strong>",
|
||||
"<strong>",
|
||||
"<strong>",
|
||||
"<strong>",
|
||||
"</strong>",
|
||||
"<style",
|
||||
"<style>",
|
||||
"<style",
|
||||
"<style>",
|
||||
"<sub>",
|
||||
"</sub>",
|
||||
"<summary>",
|
||||
"</summary>",
|
||||
"<sup>",
|
||||
"</sup>",
|
||||
"<svg",
|
||||
"</svg>",
|
||||
"<table>",
|
||||
"</table>",
|
||||
"<tbody>",
|
||||
"</tbody>",
|
||||
"<td>",
|
||||
"</td>",
|
||||
"<template>",
|
||||
"</template>",
|
||||
"<textarea",
|
||||
"</textarea>",
|
||||
"<tfoot>",
|
||||
"</tfoot>",
|
||||
"<thead>",
|
||||
"</thead>",
|
||||
"<th>",
|
||||
"</th>",
|
||||
"<time",
|
||||
"<time>",
|
||||
"</time>",
|
||||
"<title>",
|
||||
"</title>",
|
||||
"<title>",
|
||||
"</title>",
|
||||
"<track",
|
||||
"<u>",
|
||||
"</u>",
|
||||
"<ul>",
|
||||
"</ul>",
|
||||
"<ul>",
|
||||
"</ul>",
|
||||
"<ul>",
|
||||
"</ul>",
|
||||
"<ul>",
|
||||
"</ul>",
|
||||
"<var>",
|
||||
"</var>",
|
||||
"<video",
|
||||
"</video>",
|
||||
"<wbr>",
|
||||
"</wbr>"
|
||||
]
|
||||
}
|
206
static/languages/filipino.json
Normal file
206
static/languages/filipino.json
Normal file
|
@ -0,0 +1,206 @@
|
|||
{
|
||||
"name": "filipino",
|
||||
"leftToRight": true,
|
||||
"words": [
|
||||
"sa",
|
||||
"na",
|
||||
"ang",
|
||||
"ng",
|
||||
"mga",
|
||||
"ko",
|
||||
"ay",
|
||||
"ako",
|
||||
"lang",
|
||||
"hindi",
|
||||
"pa",
|
||||
"mo",
|
||||
"may",
|
||||
"kung",
|
||||
"ni",
|
||||
"naman",
|
||||
"si",
|
||||
"ka",
|
||||
"ito",
|
||||
"ung",
|
||||
"para",
|
||||
"isa",
|
||||
"nga",
|
||||
"ba",
|
||||
"pero",
|
||||
"siya",
|
||||
"niya",
|
||||
"din",
|
||||
"kaya",
|
||||
"o",
|
||||
"kasi",
|
||||
"dahil",
|
||||
"wala",
|
||||
"nang",
|
||||
"lahat",
|
||||
"nila",
|
||||
"sila",
|
||||
"kami",
|
||||
"talaga",
|
||||
"ngayon",
|
||||
"ano",
|
||||
"alam",
|
||||
"po",
|
||||
"eh",
|
||||
"iyon",
|
||||
"kahit",
|
||||
"dito",
|
||||
"namin",
|
||||
"kaniya",
|
||||
"tao",
|
||||
"kay",
|
||||
"kayo",
|
||||
"daw",
|
||||
"pag",
|
||||
"akin",
|
||||
"sana",
|
||||
"natin",
|
||||
"buhay",
|
||||
"nung",
|
||||
"iyan",
|
||||
"tayo",
|
||||
"bakit",
|
||||
"sabi",
|
||||
"gusto",
|
||||
"dapat",
|
||||
"pala",
|
||||
"tapos",
|
||||
"mas",
|
||||
"lamang",
|
||||
"iba",
|
||||
"kanila",
|
||||
"upang",
|
||||
"araw",
|
||||
"atin",
|
||||
"nasa",
|
||||
"nito",
|
||||
"mula",
|
||||
"anak",
|
||||
"nyo",
|
||||
"noong",
|
||||
"maging",
|
||||
"doon",
|
||||
"diyos",
|
||||
"kapag",
|
||||
"hanggang",
|
||||
"baka",
|
||||
"bagay",
|
||||
"ikaw",
|
||||
"kasama",
|
||||
"taon",
|
||||
"mahal",
|
||||
"kita",
|
||||
"ninyo",
|
||||
"ha",
|
||||
"ngunit",
|
||||
"marami",
|
||||
"bahay",
|
||||
"nyan",
|
||||
"bilang",
|
||||
"siguro",
|
||||
"kailangan",
|
||||
"sarili",
|
||||
"bago",
|
||||
"sino",
|
||||
"saan",
|
||||
"habang",
|
||||
"minsan",
|
||||
"pinoy",
|
||||
"inyo",
|
||||
"loob",
|
||||
"basta",
|
||||
"muna",
|
||||
"ilan",
|
||||
"bansa",
|
||||
"panahon",
|
||||
"meron",
|
||||
"ayaw",
|
||||
"babae",
|
||||
"ano",
|
||||
"dating",
|
||||
"buong",
|
||||
"iyo",
|
||||
"lalo",
|
||||
"bayan",
|
||||
"ulit",
|
||||
"sobra",
|
||||
"oo",
|
||||
"mag",
|
||||
"wag",
|
||||
"tungkol",
|
||||
"tama",
|
||||
"galing",
|
||||
"pwede",
|
||||
"noon",
|
||||
"tulad",
|
||||
"medyo",
|
||||
"kaibigan",
|
||||
"bata",
|
||||
"dalawa",
|
||||
"kundi",
|
||||
"ayon",
|
||||
"paano",
|
||||
"oras",
|
||||
"nag",
|
||||
"puso",
|
||||
"maganda",
|
||||
"bawat",
|
||||
"masaya",
|
||||
"una",
|
||||
"salamat",
|
||||
"kapatid",
|
||||
"ama",
|
||||
"pati",
|
||||
"pamamagitan",
|
||||
"totoo",
|
||||
"tunay",
|
||||
"amin",
|
||||
"sapagkat",
|
||||
"lagi",
|
||||
"lalaki",
|
||||
"gawa",
|
||||
"kanina",
|
||||
"ganun",
|
||||
"pagkatapos",
|
||||
"irap",
|
||||
"problema",
|
||||
"pangalan",
|
||||
"ewan",
|
||||
"mundo",
|
||||
"grabe",
|
||||
"dati",
|
||||
"tuloy",
|
||||
"mahirap",
|
||||
"pangyayari",
|
||||
"panginoon",
|
||||
"trabaho",
|
||||
"gabi",
|
||||
"kaso",
|
||||
"eto",
|
||||
"buti",
|
||||
"pag-ibig",
|
||||
"tanong",
|
||||
"halos",
|
||||
"dami",
|
||||
"kuya",
|
||||
"sina",
|
||||
"daan",
|
||||
"ganito",
|
||||
"sige",
|
||||
"lugar",
|
||||
"syempre",
|
||||
"lang",
|
||||
"asawa",
|
||||
"laban",
|
||||
"bukas",
|
||||
"kahapon",
|
||||
"yata",
|
||||
"akala",
|
||||
"gaya",
|
||||
"hirap"
|
||||
]
|
||||
}
|
215
static/languages/greek.json
Normal file
215
static/languages/greek.json
Normal file
|
@ -0,0 +1,215 @@
|
|||
{
|
||||
"name": "greek",
|
||||
"leftToRight": true,
|
||||
"words": [
|
||||
"άρθρο",
|
||||
"στέψη",
|
||||
"βασικό",
|
||||
"εγώ",
|
||||
"εβδομάδα",
|
||||
"αστείο",
|
||||
"διάφορα",
|
||||
"πηγαίνω",
|
||||
"άσχημος",
|
||||
"εταιρεία",
|
||||
"νύχτα",
|
||||
"λουλούδι",
|
||||
"εφεύρεση",
|
||||
"κρεβάτι",
|
||||
"γελάω",
|
||||
"ζωή",
|
||||
"νόστιμο",
|
||||
"μπορώ",
|
||||
"έχει",
|
||||
"βουνό",
|
||||
"διαγωνισμός",
|
||||
"ειδικό",
|
||||
"μηχανικός",
|
||||
"τηλεόραση",
|
||||
"κάθε",
|
||||
"πλύση",
|
||||
"μαύρο",
|
||||
"όχι",
|
||||
"υπάρχω",
|
||||
"γιορτή",
|
||||
"άγριο",
|
||||
"εικόνα",
|
||||
"μητέρα",
|
||||
"πρόβατο",
|
||||
"κόκκινο",
|
||||
"στέγη",
|
||||
"μυστήριο",
|
||||
"ψάρι",
|
||||
"μπορεί",
|
||||
"ποδήλατο",
|
||||
"έργο",
|
||||
"ελπίδα",
|
||||
"πρέπει",
|
||||
"αδερφός",
|
||||
"κακός",
|
||||
"όμορφος",
|
||||
"πατέρας",
|
||||
"αρχαίο",
|
||||
"τρία",
|
||||
"λάμπα",
|
||||
"ιστορία",
|
||||
"χθές",
|
||||
"θα",
|
||||
"πτήση",
|
||||
"ώρα",
|
||||
"βλέπω",
|
||||
"τον",
|
||||
"ψηφιακός",
|
||||
"φως",
|
||||
"πρώτο",
|
||||
"χειμώνας",
|
||||
"πρωί",
|
||||
"αυτή",
|
||||
"κεφάλι",
|
||||
"άρωμα",
|
||||
"πιάτο",
|
||||
"τραγούδι",
|
||||
"κάνω",
|
||||
"αστυνόμος",
|
||||
"πριν",
|
||||
"γρήγορα",
|
||||
"κλήση",
|
||||
"ύπαρξη",
|
||||
"πράξη",
|
||||
"άνοιξη",
|
||||
"κόρη",
|
||||
"ομιλία",
|
||||
"ομάδα",
|
||||
"ένα",
|
||||
"δευτερόλεπτο",
|
||||
"φθινόπωρο",
|
||||
"εκείνη",
|
||||
"υπάρχεις",
|
||||
"την",
|
||||
"χτίσιμο",
|
||||
"η",
|
||||
"λαιμός",
|
||||
"καληνύχτα",
|
||||
"καλός",
|
||||
"ζυμαρικά",
|
||||
"οργανισμός",
|
||||
"φώκια",
|
||||
"κύριο",
|
||||
"στήθος",
|
||||
"νερό",
|
||||
"βαρετό",
|
||||
"χοιρινό",
|
||||
"χώρα",
|
||||
"ταξίδι",
|
||||
"έχω",
|
||||
"πολυθρόνα",
|
||||
"θάλασσα",
|
||||
"φτιάχνω",
|
||||
"σήμερα",
|
||||
"κοτόπουλο",
|
||||
"δίσκος",
|
||||
"μακριά",
|
||||
"εμπειρία",
|
||||
"σώμα",
|
||||
"επιτυχία",
|
||||
"γεύση",
|
||||
"σπουδές",
|
||||
"θέλεις",
|
||||
"υγεία",
|
||||
"γιος",
|
||||
"ήταν",
|
||||
"στομάχι",
|
||||
"όταν",
|
||||
"καλημέρα",
|
||||
"επιστήμη",
|
||||
"δύο",
|
||||
"τελευταίο",
|
||||
"κοινότητα",
|
||||
"χέρι",
|
||||
"καπέλο",
|
||||
"εκείνο",
|
||||
"φρούτο",
|
||||
"αγρότης",
|
||||
"ναι",
|
||||
"τυρί",
|
||||
"εκείνος",
|
||||
"βέλος",
|
||||
"μήνας",
|
||||
"πάγος",
|
||||
"θέλω",
|
||||
"δάκτυλο",
|
||||
"κλειστό",
|
||||
"αργά",
|
||||
"αυτός",
|
||||
"ορειβασία",
|
||||
"γεια",
|
||||
"αέρας",
|
||||
"είσαι",
|
||||
"φορητό",
|
||||
"διεθνής",
|
||||
"μάγειρας",
|
||||
"φτάνω",
|
||||
"αύριο",
|
||||
"κάνει",
|
||||
"καταγραφικό",
|
||||
"όξινο",
|
||||
"ψυχή",
|
||||
"φιλικό",
|
||||
"μονοπάτι",
|
||||
"μαχαίρι",
|
||||
"σκοτώνω",
|
||||
"βράδυ",
|
||||
"χρήσιμο",
|
||||
"καρέκλα",
|
||||
"άστρο",
|
||||
"έτος",
|
||||
"εποχή",
|
||||
"έπιπλο",
|
||||
"μεσημέρι",
|
||||
"κινητό",
|
||||
"διδάσκω",
|
||||
"χημικό",
|
||||
"πόλη",
|
||||
"πέψη",
|
||||
"του",
|
||||
"αγάπη",
|
||||
"ευχαριστώ",
|
||||
"καλησπέρα",
|
||||
"πωλητής",
|
||||
"οδηγός",
|
||||
"αρνί",
|
||||
"πλοίο",
|
||||
"ευτυχία",
|
||||
"εγγραφή",
|
||||
"ξενώνας",
|
||||
"νησί",
|
||||
"κωμωδία",
|
||||
"βρίσκομαι",
|
||||
"πλάτη",
|
||||
"υπάλληλος",
|
||||
"θάνατος",
|
||||
"τραγωδία",
|
||||
"αιώνια",
|
||||
"αυτό",
|
||||
"πρωταθλητής",
|
||||
"χρησιμοποιώ",
|
||||
"λίγο",
|
||||
"διάστημα",
|
||||
"κάνουμε",
|
||||
"φόρεμα",
|
||||
"ζωγραφιά",
|
||||
"πίνω",
|
||||
"ξεκούραση",
|
||||
"ανακάλυψη",
|
||||
"πόδι",
|
||||
"παιδί",
|
||||
"λεπτό",
|
||||
"είμαι",
|
||||
"ποιότητα",
|
||||
"επιπλέον",
|
||||
"καλοκαίρι",
|
||||
"ποδόσφαιρο",
|
||||
"φριχτό",
|
||||
"ήλιος"
|
||||
]
|
||||
}
|
1179
static/languages/italian_1k.json
Normal file
1179
static/languages/italian_1k.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -7,18 +7,23 @@
|
|||
,"french"
|
||||
,"arabic"
|
||||
,"mongolian"
|
||||
,"mongolian_10k"
|
||||
,"russian"
|
||||
,"russian_1k"
|
||||
,"russian_10k"
|
||||
,"portuguese"
|
||||
,"indonesian"
|
||||
,"german"
|
||||
,"greek"
|
||||
,"turkish"
|
||||
,"italian"
|
||||
,"italian_1k"
|
||||
,"thai"
|
||||
,"polish"
|
||||
,"czech"
|
||||
,"slovak"
|
||||
,"dutch"
|
||||
,"filipino"
|
||||
,"danish"
|
||||
,"danish_1k"
|
||||
,"danish_10k"
|
||||
|
@ -39,4 +44,5 @@
|
|||
,"code_python"
|
||||
,"code_c"
|
||||
,"code_javascript"
|
||||
]
|
||||
,"code_html"
|
||||
]
|
File diff suppressed because it is too large
Load diff
9225
static/languages/mongolian_10k.json
Normal file
9225
static/languages/mongolian_10k.json
Normal file
File diff suppressed because it is too large
Load diff
10006
static/languages/russian_10k.json
Normal file
10006
static/languages/russian_10k.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -77,7 +77,7 @@
|
|||
"yeni",
|
||||
"önce",
|
||||
"başka",
|
||||
"hâl",
|
||||
"hal",
|
||||
"orta",
|
||||
"su",
|
||||
"girmek",
|
||||
|
|
|
@ -136,7 +136,7 @@
|
|||
<ul>
|
||||
<li>
|
||||
The right to access – You have the right to request Monkeytype for
|
||||
copies of your personal data. We may limit the amount of times this
|
||||
copies of your personal data. We may limit the number of times this
|
||||
request can be made to depending on the size of the request.
|
||||
</li>
|
||||
<li>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
--bg-color: #000000;
|
||||
--main-color: #15ff00;
|
||||
--caret-color: #15ff00;
|
||||
--sub-color: #032700;
|
||||
--sub-color: #003B00;
|
||||
--text-color: #adffa7;
|
||||
--error-color: #da3333;
|
||||
--error-extra-color: #791717;
|
||||
|
|
Loading…
Add table
Reference in a new issue