mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-11-10 22:22:21 +08:00
Merge branch 'master' into lint
This commit is contained in:
commit
c5762d229a
18 changed files with 4120 additions and 575 deletions
|
|
@ -6,7 +6,7 @@
|
|||
"scripts": {
|
||||
"postinstall": "cd functions && npm install",
|
||||
"build": "npx gulp build",
|
||||
"start": "npm run build && concurrently --kill-others \"npx gulp watch\" \"firebase serve\"",
|
||||
"start:dev": "npm run build && concurrently --kill-others \"npx gulp watch\" \"firebase serve\"",
|
||||
"deploy:live:hosting": "npm run build && firebase deploy -P live --only hosting",
|
||||
"deploy:live:functions": "npm run build && firebase deploy -P live --only functions",
|
||||
"deploy:live": "npm run build && firebase deploy -P live"
|
||||
|
|
|
|||
|
|
@ -291,6 +291,31 @@ firebase.auth().onAuthStateChanged(function (user) {
|
|||
});
|
||||
}
|
||||
}
|
||||
let theme = findGetParameter("customTheme");
|
||||
if (theme !== null) {
|
||||
try {
|
||||
theme = theme.split(",");
|
||||
config.customThemeColors = theme;
|
||||
showNotification("Custom theme applied.", 1000);
|
||||
} catch (e) {
|
||||
showNotification(
|
||||
"Something went wrong. Reverting to default custom colors.",
|
||||
3000
|
||||
);
|
||||
config.customThemeColors = defaultConfig.customThemeColors;
|
||||
}
|
||||
setCustomTheme(true);
|
||||
setCustomThemeInputs();
|
||||
applyCustomThemeColors();
|
||||
// let save = [];
|
||||
// $.each(
|
||||
// $(".pageSettings .section.customTheme [type='color']"),
|
||||
// (index, element) => {
|
||||
// save.push($(element).attr("value"));
|
||||
// }
|
||||
// );
|
||||
// setCustomThemeColors(save);
|
||||
}
|
||||
});
|
||||
|
||||
function getAccountDataAndInit() {
|
||||
|
|
@ -1823,7 +1848,7 @@ function loadMoreLines() {
|
|||
} else if (result.chartData === "toolong") {
|
||||
icons += `<span class="hoverChartButton" aria-label="Chart history is not available for long tests" data-balloon-pos="up"><i class="fas fa-chart-line"></i></span>`;
|
||||
} else {
|
||||
icons += `<span class="hoverChartButton" filteredResultsId="${i}" style="opacity: 1"><i class="fas fa-chart-line"></i></span>`;
|
||||
icons += `<span class="hoverChartButton" aria-label="View graph" data-balloon-pos="up" filteredResultsId="${i}" style="opacity: 1"><i class="fas fa-chart-line"></i></span>`;
|
||||
}
|
||||
|
||||
let tagNames = "";
|
||||
|
|
|
|||
|
|
@ -196,6 +196,13 @@ let commands = {
|
|||
toggleFreedomMode();
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "toggleStrictSpace",
|
||||
display: "Toggle strict space",
|
||||
exec: () => {
|
||||
toggleStrictSpace();
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "toggleBlindMode",
|
||||
display: "Toggle blind mode",
|
||||
|
|
@ -210,6 +217,13 @@ let commands = {
|
|||
toggleIndicateTypos();
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "toggleHideExtraLetters",
|
||||
display: "Toggle hide extra letters",
|
||||
exec: () => {
|
||||
toggleHideExtraLetters();
|
||||
},
|
||||
},
|
||||
// {
|
||||
// id: "toggleReadAheadMode",
|
||||
// display: "Toggle read ahead mode",
|
||||
|
|
@ -277,6 +291,13 @@ let commands = {
|
|||
toggleAlwaysShowCPM();
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "toggleStartGraphsAtZero",
|
||||
display: "Toggle start graphs at zero",
|
||||
exec: () => {
|
||||
toggleStartGraphsAtZero();
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "toggleSwapEscAndTab",
|
||||
display: "Toggle swap esc and tab",
|
||||
|
|
@ -644,21 +665,28 @@ let commandsKeymapMode = {
|
|||
id: "setKeymapModeOff",
|
||||
display: "off",
|
||||
exec: () => {
|
||||
changeKeymapMode("off");
|
||||
setKeymapMode("off");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setKeymapModeStatic",
|
||||
display: "static",
|
||||
exec: () => {
|
||||
setKeymapMode("static");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setKeymapModeNext",
|
||||
display: "next",
|
||||
exec: () => {
|
||||
changeKeymapMode("next");
|
||||
setKeymapMode("next");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setKeymapModeReact",
|
||||
display: "react",
|
||||
exec: () => {
|
||||
changeKeymapMode("react");
|
||||
setKeymapMode("react");
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
@ -949,28 +977,28 @@ let commandsKeymapStyle = {
|
|||
id: "setKeymapStyleStaggered",
|
||||
display: "staggered",
|
||||
exec: () => {
|
||||
changeKeymapStyle("staggered");
|
||||
setKeymapStyle("staggered");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setKeymapStyleMatrix",
|
||||
display: "matrix",
|
||||
exec: () => {
|
||||
changeKeymapStyle("matrix");
|
||||
setKeymapStyle("matrix");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setKeymapStyleSplit",
|
||||
display: "split",
|
||||
exec: () => {
|
||||
changeKeymapStyle("split");
|
||||
setKeymapStyle("split");
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "setKeymapStyleSplitMatrix",
|
||||
display: "split matrix",
|
||||
exec: () => {
|
||||
changeKeymapStyle("split_matrix");
|
||||
setKeymapStyle("split_matrix");
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
@ -1118,7 +1146,7 @@ let commandsWordCount = {
|
|||
id: "changeWordCount10",
|
||||
display: "10",
|
||||
exec: () => {
|
||||
changeWordCount("10");
|
||||
setWordCount("10");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1126,7 +1154,7 @@ let commandsWordCount = {
|
|||
id: "changeWordCount25",
|
||||
display: "25",
|
||||
exec: () => {
|
||||
changeWordCount("25");
|
||||
setWordCount("25");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1134,7 +1162,7 @@ let commandsWordCount = {
|
|||
id: "changeWordCount50",
|
||||
display: "50",
|
||||
exec: () => {
|
||||
changeWordCount("50");
|
||||
setWordCount("50");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1142,7 +1170,7 @@ let commandsWordCount = {
|
|||
id: "changeWordCount100",
|
||||
display: "100",
|
||||
exec: () => {
|
||||
changeWordCount("100");
|
||||
setWordCount("100");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1150,7 +1178,7 @@ let commandsWordCount = {
|
|||
id: "changeWordCount200",
|
||||
display: "200",
|
||||
exec: () => {
|
||||
changeWordCount("200");
|
||||
setWordCount("200");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1159,7 +1187,7 @@ let commandsWordCount = {
|
|||
display: "custom...",
|
||||
input: true,
|
||||
exec: (input) => {
|
||||
changeWordCount(input);
|
||||
setWordCount(input);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1173,7 +1201,7 @@ let commandsQuoteLengthConfig = {
|
|||
id: "changeQuoteLengthAll",
|
||||
display: "all",
|
||||
exec: () => {
|
||||
changeQuoteLength(-1);
|
||||
setQuoteLength(-1);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1181,7 +1209,7 @@ let commandsQuoteLengthConfig = {
|
|||
id: "changeQuoteLengthShort",
|
||||
display: "short",
|
||||
exec: () => {
|
||||
changeQuoteLength(0);
|
||||
setQuoteLength(0);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1189,7 +1217,7 @@ let commandsQuoteLengthConfig = {
|
|||
id: "changeQuoteLengthMedium",
|
||||
display: "medium",
|
||||
exec: () => {
|
||||
changeQuoteLength(1);
|
||||
setQuoteLength(1);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1197,7 +1225,7 @@ let commandsQuoteLengthConfig = {
|
|||
id: "changeQuoteLengthLong",
|
||||
display: "long",
|
||||
exec: () => {
|
||||
changeQuoteLength(2);
|
||||
setQuoteLength(2);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1205,7 +1233,7 @@ let commandsQuoteLengthConfig = {
|
|||
id: "changeQuoteLengthThicc",
|
||||
display: "thicc",
|
||||
exec: () => {
|
||||
changeQuoteLength(3);
|
||||
setQuoteLength(3);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1219,7 +1247,7 @@ let commandsMode = {
|
|||
id: "changeModeTime",
|
||||
display: "time",
|
||||
exec: () => {
|
||||
changeMode("time");
|
||||
setMode("time");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1227,7 +1255,7 @@ let commandsMode = {
|
|||
id: "changeModeWords",
|
||||
display: "words",
|
||||
exec: () => {
|
||||
changeMode("words");
|
||||
setMode("words");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1235,7 +1263,7 @@ let commandsMode = {
|
|||
id: "changeModeQuote",
|
||||
display: "quote",
|
||||
exec: () => {
|
||||
changeMode("quote");
|
||||
setMode("quote");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1243,7 +1271,7 @@ let commandsMode = {
|
|||
id: "changeModeCustom",
|
||||
display: "custom",
|
||||
exec: () => {
|
||||
changeMode("custom");
|
||||
setMode("custom");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1256,7 +1284,7 @@ let commandsTimeConfig = {
|
|||
id: "changeTimeConfig15",
|
||||
display: "15",
|
||||
exec: () => {
|
||||
changeTimeConfig("15");
|
||||
setTimeConfig("15");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1264,7 +1292,7 @@ let commandsTimeConfig = {
|
|||
id: "changeTimeConfig30",
|
||||
display: "30",
|
||||
exec: () => {
|
||||
changeTimeConfig("30");
|
||||
setTimeConfig("30");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1272,7 +1300,7 @@ let commandsTimeConfig = {
|
|||
id: "changeTimeConfig60",
|
||||
display: "60",
|
||||
exec: () => {
|
||||
changeTimeConfig("60");
|
||||
setTimeConfig("60");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1280,7 +1308,7 @@ let commandsTimeConfig = {
|
|||
id: "changeTimeConfig120",
|
||||
display: "120",
|
||||
exec: () => {
|
||||
changeTimeConfig("120");
|
||||
setTimeConfig("120");
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1289,7 +1317,7 @@ let commandsTimeConfig = {
|
|||
display: "custom...",
|
||||
input: true,
|
||||
exec: (input) => {
|
||||
changeTimeConfig(input);
|
||||
setTimeConfig(input);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1357,7 +1385,7 @@ let commandsFontSize = {
|
|||
id: "changeFontSize1",
|
||||
display: "1x",
|
||||
exec: () => {
|
||||
changeFontSize(1);
|
||||
setFontSize(1);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1365,7 +1393,7 @@ let commandsFontSize = {
|
|||
id: "changeFontSize125",
|
||||
display: "1.25x",
|
||||
exec: () => {
|
||||
changeFontSize(125);
|
||||
setFontSize(125);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1373,7 +1401,7 @@ let commandsFontSize = {
|
|||
id: "changeFontSize15",
|
||||
display: "1.5x",
|
||||
exec: () => {
|
||||
changeFontSize(15);
|
||||
setFontSize(15);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1381,7 +1409,7 @@ let commandsFontSize = {
|
|||
id: "changeFontSize2",
|
||||
display: "2x",
|
||||
exec: () => {
|
||||
changeFontSize(2);
|
||||
setFontSize(2);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1389,7 +1417,7 @@ let commandsFontSize = {
|
|||
id: "changeFontSize3",
|
||||
display: "3x",
|
||||
exec: () => {
|
||||
changeFontSize(3);
|
||||
setFontSize(3);
|
||||
restartTest();
|
||||
},
|
||||
},
|
||||
|
|
@ -1577,7 +1605,7 @@ getLanguageList().then((languages) => {
|
|||
id: "changeLanguage" + capitalizeFirstLetter(language),
|
||||
display: language.replace(/_/g, " "),
|
||||
exec: () => {
|
||||
changeLanguage(language);
|
||||
setLanguage(language);
|
||||
restartTest();
|
||||
saveConfigToCookie();
|
||||
},
|
||||
|
|
@ -1614,7 +1642,7 @@ if (Object.keys(layouts).length > 0) {
|
|||
id: "changeLayout" + capitalizeFirstLetter(layout),
|
||||
display: layout.replace(/_/g, " "),
|
||||
exec: () => {
|
||||
changeSavedLayout(layout);
|
||||
setSavedLayout(layout);
|
||||
restartTest();
|
||||
saveConfigToCookie();
|
||||
},
|
||||
|
|
@ -1634,15 +1662,22 @@ let commandsKeymapLayouts = {
|
|||
|
||||
if (Object.keys(layouts).length > 0) {
|
||||
commandsKeymapLayouts.list = [];
|
||||
commandsKeymapLayouts.list.push({
|
||||
id: "changeKeymapLayoutOverrideSync",
|
||||
display: "override sync",
|
||||
exec: () => {
|
||||
setKeymapLayout("overrideSync");
|
||||
restartTest();
|
||||
},
|
||||
});
|
||||
Object.keys(layouts).forEach((layout) => {
|
||||
if (layout.toString() != "default") {
|
||||
commandsKeymapLayouts.list.push({
|
||||
id: "changeKeymapLayout" + capitalizeFirstLetter(layout),
|
||||
display: layout.replace("_", " "),
|
||||
display: layout.replace(/_/g, " "),
|
||||
exec: () => {
|
||||
changeKeymapLayout(layout);
|
||||
setKeymapLayout(layout);
|
||||
restartTest();
|
||||
saveConfigToCookie();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
|
|
|||
901
src/js/script.js
901
src/js/script.js
File diff suppressed because it is too large
Load diff
|
|
@ -87,7 +87,7 @@ settingsGroups.showTimerProgress = new SettingsGroup(
|
|||
);
|
||||
settingsGroups.keymapMode = new SettingsGroup(
|
||||
"keymapMode",
|
||||
changeKeymapMode,
|
||||
setKeymapMode,
|
||||
() => {
|
||||
settingsGroups.showLiveWpm.updateButton();
|
||||
},
|
||||
|
|
@ -101,13 +101,10 @@ settingsGroups.keymapMode = new SettingsGroup(
|
|||
}
|
||||
}
|
||||
);
|
||||
settingsGroups.keymapMatrix = new SettingsGroup(
|
||||
"keymapStyle",
|
||||
changeKeymapStyle
|
||||
);
|
||||
settingsGroups.keymapMatrix = new SettingsGroup("keymapStyle", setKeymapStyle);
|
||||
settingsGroups.keymapLayout = new SettingsGroup(
|
||||
"keymapLayout",
|
||||
changeKeymapLayout
|
||||
setKeymapLayout
|
||||
);
|
||||
settingsGroups.showKeyTips = new SettingsGroup(
|
||||
"showKeyTips",
|
||||
|
|
@ -128,6 +125,7 @@ settingsGroups.freedomMode = new SettingsGroup(
|
|||
settingsGroups.confidenceMode.updateButton();
|
||||
}
|
||||
);
|
||||
settingsGroups.strictSpace = new SettingsGroup("strictSpace", setStrictSpace);
|
||||
settingsGroups.confidenceMode = new SettingsGroup(
|
||||
"confidenceMode",
|
||||
setConfidenceMode,
|
||||
|
|
@ -140,6 +138,10 @@ settingsGroups.indicateTypos = new SettingsGroup(
|
|||
"indicateTypos",
|
||||
setIndicateTypos
|
||||
);
|
||||
settingsGroups.hideExtraLetters = new SettingsGroup(
|
||||
"hideExtraLetters",
|
||||
setHideExtraLetters
|
||||
);
|
||||
settingsGroups.blindMode = new SettingsGroup("blindMode", setBlindMode);
|
||||
settingsGroups.quickEnd = new SettingsGroup("quickEnd", setQuickEnd);
|
||||
settingsGroups.enableAds = new SettingsGroup("enableAds", setEnableAds);
|
||||
|
|
@ -230,9 +232,9 @@ settingsGroups.capsLockBackspace = new SettingsGroup(
|
|||
"capsLockBackspace",
|
||||
setCapsLockBackspace
|
||||
);
|
||||
settingsGroups.layout = new SettingsGroup("layout", changeSavedLayout);
|
||||
settingsGroups.language = new SettingsGroup("language", changeLanguage);
|
||||
settingsGroups.fontSize = new SettingsGroup("fontSize", changeFontSize);
|
||||
settingsGroups.layout = new SettingsGroup("layout", setSavedLayout);
|
||||
settingsGroups.language = new SettingsGroup("language", setLanguage);
|
||||
settingsGroups.fontSize = new SettingsGroup("fontSize", setFontSize);
|
||||
settingsGroups.pageWidth = new SettingsGroup("pageWidth", setPageWidth);
|
||||
settingsGroups.caretStyle = new SettingsGroup("caretStyle", setCaretStyle);
|
||||
settingsGroups.paceCaretStyle = new SettingsGroup(
|
||||
|
|
@ -269,7 +271,7 @@ async function fillSettingsPage() {
|
|||
languages.forEach((language) => {
|
||||
langEl.append(
|
||||
`<div class="language button" language='${language}'>${language.replace(
|
||||
"_",
|
||||
/_/g,
|
||||
" "
|
||||
)}</div>`
|
||||
);
|
||||
|
|
@ -280,18 +282,21 @@ async function fillSettingsPage() {
|
|||
Object.keys(layouts).forEach((layout) => {
|
||||
layoutEl.append(
|
||||
`<div class="layout button" layout='${layout}'>${layout.replace(
|
||||
"_",
|
||||
/_/g,
|
||||
" "
|
||||
)}</div>`
|
||||
);
|
||||
});
|
||||
|
||||
let keymapEl = $(".pageSettings .section.keymapLayout .buttons").empty();
|
||||
keymapEl.append(
|
||||
`<div class="layout button" keymapLayout='overrideSync'>override sync</div>`
|
||||
);
|
||||
Object.keys(layouts).forEach((layout) => {
|
||||
if (layout.toString() != "default") {
|
||||
keymapEl.append(
|
||||
`<div class="layout button" keymapLayout='${layout}'>${layout.replace(
|
||||
"_",
|
||||
/_/g,
|
||||
" "
|
||||
)}</div>`
|
||||
);
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@ let defaultConfig = {
|
|||
highlightMode: "letter",
|
||||
alwaysShowCPM: false,
|
||||
enableAds: "off",
|
||||
hideExtraLetters: false,
|
||||
strictSpace: false,
|
||||
};
|
||||
|
||||
let cookieConfig = null;
|
||||
|
|
@ -90,7 +92,7 @@ async function saveConfigToCookie(noDbCheck = false) {
|
|||
// showNotification('saving to cookie',1000);
|
||||
let d = new Date();
|
||||
d.setFullYear(d.getFullYear() + 1);
|
||||
$.cookie("config", null);
|
||||
// $.cookie("config", null);
|
||||
$.cookie("config", JSON.stringify(config), {
|
||||
expires: d,
|
||||
path: "/",
|
||||
|
|
@ -149,30 +151,38 @@ function saveActiveTagsToCookie() {
|
|||
}
|
||||
|
||||
function loadConfigFromCookie() {
|
||||
console.log("loading cookie config");
|
||||
let newConfig = $.cookie("config");
|
||||
if (newConfig !== undefined) {
|
||||
newConfig = JSON.parse(newConfig);
|
||||
applyConfig(newConfig);
|
||||
console.log("applying cookie config");
|
||||
cookieConfig = newConfig;
|
||||
saveConfigToCookie(true);
|
||||
console.log("saving cookie config");
|
||||
}
|
||||
restartTest(false, true);
|
||||
}
|
||||
|
||||
function applyConfig(configObj) {
|
||||
Object.keys(defaultConfig).forEach((configKey) => {
|
||||
if (configObj[configKey] === undefined) {
|
||||
configObj[configKey] = defaultConfig[configKey];
|
||||
}
|
||||
});
|
||||
if (configObj && configObj != null && configObj != "null") {
|
||||
setTheme(configObj.theme, true);
|
||||
setCustomTheme(configObj.customTheme, true);
|
||||
setCustomThemeColors(configObj.customThemeColors, true);
|
||||
setQuickTabMode(configObj.quickTab, true);
|
||||
setKeyTips(configObj.showKeyTips, true);
|
||||
changeTimeConfig(configObj.time, true);
|
||||
changeQuoteLength(configObj.quoteLength, true);
|
||||
changeWordCount(configObj.words, true);
|
||||
changeLanguage(configObj.language, true);
|
||||
setTimeConfig(configObj.time, true);
|
||||
setQuoteLength(configObj.quoteLength, true);
|
||||
setWordCount(configObj.words, true);
|
||||
setLanguage(configObj.language, true);
|
||||
setCapsLockBackspace(configObj.capsLockBackspace, true);
|
||||
changeSavedLayout(configObj.savedLayout, true);
|
||||
changeFontSize(configObj.fontSize, true);
|
||||
setSavedLayout(configObj.savedLayout, true);
|
||||
setFontSize(configObj.fontSize, true);
|
||||
setFreedomMode(configObj.freedomMode, true);
|
||||
setCaretStyle(configObj.caretStyle, true);
|
||||
setPaceCaretStyle(configObj.paceCaretStyle, true);
|
||||
|
|
@ -187,9 +197,9 @@ function applyConfig(configObj) {
|
|||
setTimerStyle(configObj.timerStyle, true);
|
||||
setTimerColor(configObj.timerColor, true);
|
||||
setTimerOpacity(configObj.timerOpacity, true);
|
||||
changeKeymapMode(configObj.keymapMode, true);
|
||||
changeKeymapStyle(configObj.keymapStyle, true);
|
||||
changeKeymapLayout(configObj.keymapLayout, true);
|
||||
setKeymapMode(configObj.keymapMode, true);
|
||||
setKeymapStyle(configObj.keymapStyle, true);
|
||||
setKeymapLayout(configObj.keymapLayout, true);
|
||||
setFontFamily(configObj.fontFamily, true);
|
||||
setSmoothCaret(configObj.smoothCaret, true);
|
||||
setSmoothLineScroll(configObj.smoothLineScroll, true);
|
||||
|
|
@ -217,8 +227,9 @@ function applyConfig(configObj) {
|
|||
setPunctuation(configObj.punctuation, true);
|
||||
setHighlightMode(configObj.highlightMode, true);
|
||||
setAlwaysShowCPM(configObj.alwaysShowCPM, true);
|
||||
changeMode(configObj.mode, true);
|
||||
config.startGraphsAtZero = configObj.startGraphsAtZero;
|
||||
setHideExtraLetters(configObj.hideExtraLetters, true);
|
||||
setStartGraphsAtZero(configObj.startGraphsAtZero, true);
|
||||
setMode(configObj.mode, true);
|
||||
// if (
|
||||
// configObj.resultFilters !== null &&
|
||||
// configObj.resultFilters !== undefined
|
||||
|
|
@ -285,11 +296,6 @@ function applyConfig(configObj) {
|
|||
$("#ad3").remove();
|
||||
}
|
||||
}
|
||||
Object.keys(defaultConfig).forEach((configKey) => {
|
||||
if (config[configKey] == undefined) {
|
||||
config[configKey] = defaultConfig[configKey];
|
||||
}
|
||||
});
|
||||
updateTestModesNotice();
|
||||
}
|
||||
|
||||
|
|
@ -676,6 +682,20 @@ function toggleColorfulMode() {
|
|||
saveConfigToCookie();
|
||||
}
|
||||
|
||||
//strict space
|
||||
function setStrictSpace(val, nosave) {
|
||||
if (val == undefined) {
|
||||
val = false;
|
||||
}
|
||||
config.strictSpace = val;
|
||||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
|
||||
function toggleStrictSpace() {
|
||||
config.strictSpace = !config.strictSpace;
|
||||
saveConfigToCookie();
|
||||
}
|
||||
|
||||
function setPageWidth(val, nosave) {
|
||||
if (val == null || val == undefined) {
|
||||
val = "100";
|
||||
|
|
@ -782,6 +802,22 @@ function setHighlightMode(mode, nosave) {
|
|||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
|
||||
function setHideExtraLetters(val, nosave) {
|
||||
if (val == null || val == undefined) {
|
||||
val = false;
|
||||
}
|
||||
config.hideExtraLetters = val;
|
||||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
|
||||
function toggleHideExtraLetters() {
|
||||
config.hideExtraLetters = !config.hideExtraLetters;
|
||||
// if (config.keymapMode !== "off") {
|
||||
// config.keymapMode = "off";
|
||||
// }
|
||||
saveConfigToCookie();
|
||||
}
|
||||
|
||||
function setTimerStyle(style, nosave) {
|
||||
if (style == null || style == undefined) {
|
||||
style = "bar";
|
||||
|
|
@ -795,7 +831,40 @@ function setTimerColor(color, nosave) {
|
|||
color = "black";
|
||||
}
|
||||
config.timerColor = color;
|
||||
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");
|
||||
|
||||
$("#miniTimerAndLiveWpm").removeClass("timerSub");
|
||||
$("#miniTimerAndLiveWpm").removeClass("timerText");
|
||||
$("#miniTimerAndLiveWpm").removeClass("timerMain");
|
||||
|
||||
if (color === "main") {
|
||||
$("#timer").addClass("timerMain");
|
||||
$("#timerNumber").addClass("timerMain");
|
||||
$("#liveWpm").addClass("timerMain");
|
||||
$("#miniTimerAndLiveWpm").addClass("timerMain");
|
||||
} else if (color === "sub") {
|
||||
$("#timer").addClass("timerSub");
|
||||
$("#timerNumber").addClass("timerSub");
|
||||
$("#liveWpm").addClass("timerSub");
|
||||
$("#miniTimerAndLiveWpm").addClass("timerSub");
|
||||
} else if (color === "text") {
|
||||
$("#timer").addClass("timerText");
|
||||
$("#timerNumber").addClass("timerText");
|
||||
$("#liveWpm").addClass("timerText");
|
||||
$("#miniTimerAndLiveWpm").addClass("timerText");
|
||||
}
|
||||
|
||||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
function setTimerOpacity(opacity, nosave) {
|
||||
|
|
@ -828,13 +897,13 @@ function toggleKeyTips() {
|
|||
}
|
||||
|
||||
//mode
|
||||
function changeTimeConfig(time, nosave) {
|
||||
function setTimeConfig(time, nosave) {
|
||||
if (time !== null && !isNaN(time) && time >= 0) {
|
||||
} else {
|
||||
time = 15;
|
||||
}
|
||||
time = parseInt(time);
|
||||
if (!nosave) changeMode("time", nosave);
|
||||
if (!nosave) setMode("time", nosave);
|
||||
config.time = time;
|
||||
$("#top .config .time .text-button").removeClass("active");
|
||||
if (![15, 30, 60, 120].includes(time)) {
|
||||
|
|
@ -847,13 +916,13 @@ function changeTimeConfig(time, nosave) {
|
|||
}
|
||||
|
||||
//quote length
|
||||
function changeQuoteLength(len, nosave) {
|
||||
function setQuoteLength(len, nosave) {
|
||||
if (len !== null && !isNaN(len) && len >= -1 && len <= 3) {
|
||||
} else {
|
||||
len = 1;
|
||||
}
|
||||
len = parseInt(len);
|
||||
if (!nosave) changeMode("quote", nosave);
|
||||
if (!nosave) setMode("quote", nosave);
|
||||
config.quoteLength = len;
|
||||
$("#top .config .quoteLength .text-button").removeClass("active");
|
||||
$(
|
||||
|
|
@ -862,13 +931,13 @@ function changeQuoteLength(len, nosave) {
|
|||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
|
||||
function changeWordCount(wordCount, nosave) {
|
||||
function setWordCount(wordCount, nosave) {
|
||||
if (wordCount !== null && !isNaN(wordCount) && wordCount >= 0) {
|
||||
} else {
|
||||
wordCount = 10;
|
||||
}
|
||||
wordCount = parseInt(wordCount);
|
||||
if (!nosave) changeMode("words", nosave);
|
||||
if (!nosave) setMode("words", nosave);
|
||||
config.words = wordCount;
|
||||
$("#top .config .wordCount .text-button").removeClass("active");
|
||||
if (![10, 25, 50, 100, 200].includes(wordCount)) {
|
||||
|
|
@ -892,6 +961,11 @@ function toggleSmoothCaret() {
|
|||
}
|
||||
|
||||
//startgraphsatzero
|
||||
function toggleStartGraphsAtZero() {
|
||||
config.startGraphsAtZero = !config.startGraphsAtZero;
|
||||
saveConfigToCookie();
|
||||
}
|
||||
|
||||
function setStartGraphsAtZero(mode, nosave) {
|
||||
config.startGraphsAtZero = mode;
|
||||
if (!nosave) saveConfigToCookie();
|
||||
|
|
@ -1238,7 +1312,7 @@ function updateFavicon(size, curveSize) {
|
|||
$("#favicon").attr("href", canvas.toDataURL("image/png"));
|
||||
}
|
||||
|
||||
function changeLanguage(language, nosave) {
|
||||
function setLanguage(language, nosave) {
|
||||
if (language == null || language == undefined) {
|
||||
language = "english";
|
||||
}
|
||||
|
|
@ -1265,39 +1339,42 @@ function toggleCapsLockBackspace() {
|
|||
setCapsLockBackspace(!config.capsLockBackspace, false);
|
||||
}
|
||||
|
||||
function changeLayout(layout, nosave) {
|
||||
function setLayout(layout, nosave) {
|
||||
if (layout == null || layout == undefined) {
|
||||
layout = "qwerty";
|
||||
}
|
||||
config.layout = layout;
|
||||
updateTestModesNotice();
|
||||
if (config.keymapLayout === "overrideSync") {
|
||||
refreshKeymapKeys(config.keymapLayout);
|
||||
}
|
||||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
|
||||
function changeSavedLayout(layout, nosave) {
|
||||
function setSavedLayout(layout, nosave) {
|
||||
if (layout == null || layout == undefined) {
|
||||
layout = "qwerty";
|
||||
}
|
||||
config.savedLayout = layout;
|
||||
changeLayout(layout, nosave);
|
||||
setLayout(layout, nosave);
|
||||
}
|
||||
|
||||
function changeKeymapMode(mode, nosave) {
|
||||
function setKeymapMode(mode, nosave) {
|
||||
if (mode == null || mode == undefined) {
|
||||
mode = "off";
|
||||
}
|
||||
if (mode === "react") {
|
||||
$(".active-key").removeClass("active-key");
|
||||
}
|
||||
if (mode === "next") {
|
||||
$(".keymap-key").attr("style", "");
|
||||
}
|
||||
// if (mode === "react" ||) {
|
||||
$(".active-key").removeClass("active-key");
|
||||
// }
|
||||
// if (mode === "next") {
|
||||
$(".keymap-key").attr("style", "");
|
||||
// }
|
||||
config.keymapMode = mode;
|
||||
if (!nosave) restartTest(false, nosave);
|
||||
if (!nosave) saveConfigToCookie();
|
||||
}
|
||||
|
||||
function changeKeymapStyle(style, nosave) {
|
||||
function setKeymapStyle(style, nosave) {
|
||||
$(".keymap").removeClass("matrix");
|
||||
$(".keymap").removeClass("split");
|
||||
$(".keymap").removeClass("split_matrix");
|
||||
|
|
@ -1370,27 +1447,45 @@ function keymapShowIsoKey(tf) {
|
|||
}
|
||||
}
|
||||
|
||||
function changeKeymapLayout(layout, nosave) {
|
||||
function setKeymapLayout(layout, nosave) {
|
||||
if (layout == null || layout == undefined) {
|
||||
layout = "qwerty";
|
||||
}
|
||||
config.keymapLayout = layout;
|
||||
refreshKeymapKeys(layout);
|
||||
if (!nosave) saveConfigToCookie();
|
||||
// layouts[layout].forEach((x) => {
|
||||
// console.log(x);
|
||||
// });
|
||||
// console.log(all.join());
|
||||
}
|
||||
|
||||
function refreshKeymapKeys(layout) {
|
||||
try {
|
||||
if (layouts[layout].keymapShowTopRow) {
|
||||
let lts = layouts[layout]; //layout to show
|
||||
let layoutString = layout;
|
||||
if (config.keymapLayout === "overrideSync") {
|
||||
if (config.layout === "default") {
|
||||
lts = layouts["qwerty"];
|
||||
layoutString = "default";
|
||||
} else {
|
||||
lts = layouts[config.layout];
|
||||
layoutString = config.layout;
|
||||
}
|
||||
}
|
||||
|
||||
if (lts.keymapShowTopRow) {
|
||||
$(".keymap .r1").removeClass("hidden");
|
||||
} else {
|
||||
$(".keymap .r1").addClass("hidden");
|
||||
}
|
||||
|
||||
$($(".keymap .r5 .keymap-key .letter")[0]).text(layout.replace(/_/g, " "));
|
||||
$($(".keymap .r5 .keymap-key .letter")[0]).text(
|
||||
layoutString.replace(/_/g, " ")
|
||||
);
|
||||
keymapShowIsoKey(lts.iso);
|
||||
|
||||
keymapShowIsoKey(layouts[layout].iso);
|
||||
|
||||
var toReplace = layouts[layout].keys.slice(1, 48);
|
||||
var toReplace = lts.keys.slice(1, 48);
|
||||
// var _ = toReplace.splice(12, 1);
|
||||
var count = 0;
|
||||
|
||||
|
|
@ -1453,12 +1548,11 @@ function changeKeymapLayout(layout, nosave) {
|
|||
console.log(
|
||||
"something went wrong when changing layout, resettings: " + e.message
|
||||
);
|
||||
changeKeymapLayout("qwerty", true);
|
||||
setKeymapLayout("qwerty", true);
|
||||
}
|
||||
// console.log(all.join());
|
||||
}
|
||||
|
||||
function changeFontSize(fontSize, nosave) {
|
||||
function setFontSize(fontSize, nosave) {
|
||||
if (fontSize == null || fontSize == undefined) {
|
||||
fontSize = 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2091,6 +2091,17 @@ key {
|
|||
.settingsGroup {
|
||||
display: grid;
|
||||
gap: 2rem;
|
||||
&.quickNav .links {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
a {
|
||||
text-decoration: none;
|
||||
opacity: 0.5;
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.section {
|
||||
|
|
@ -3005,6 +3016,13 @@ key {
|
|||
}
|
||||
}
|
||||
|
||||
&#KeySpace {
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
color: var(--main-color);
|
||||
}
|
||||
}
|
||||
|
||||
&#KeySpace,
|
||||
&#KeySpace2 {
|
||||
width: 100%;
|
||||
|
|
|
|||
|
|
@ -1437,8 +1437,25 @@
|
|||
<key>esc</key>
|
||||
)
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle hidden" group="account">
|
||||
<!-- <div class="sectionGroupTitle">quick navigation</div> -->
|
||||
<div class="settingsGroup quickNav">
|
||||
<div class="links">
|
||||
<a href="#group_account">account</a>
|
||||
<a href="#group_behavior">behavior</a>
|
||||
<a href="#group_input">input</a>
|
||||
<a href="#group_sound">sound</a>
|
||||
<a href="#group_caret">caret</a>
|
||||
<a href="#group_appearance">appearance</a>
|
||||
<a href="#group_theme">theme</a>
|
||||
<a href="#group_hideElements">hide elements</a>
|
||||
<a href="#group_dangerZone">danger zone</a>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
id="group_account"
|
||||
class="sectionGroupTitle hidden"
|
||||
group="account"
|
||||
>
|
||||
account
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
@ -1505,7 +1522,11 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle" group="behaviour">
|
||||
<div
|
||||
id="group_behavior"
|
||||
class="sectionGroupTitle"
|
||||
group="behaviour"
|
||||
>
|
||||
behaviour
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
@ -1680,7 +1701,7 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle" group="input">
|
||||
<div id="group_input" class="sectionGroupTitle" group="input">
|
||||
input
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
@ -1699,6 +1720,21 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section strictSpace">
|
||||
<h1>strict space</h1>
|
||||
<div class="text">
|
||||
Pressing space at the beginning of a word will insert a space
|
||||
character when this mode is enabled.
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<div class="button off" tabindex="0" onclick="this.blur();">
|
||||
off
|
||||
</div>
|
||||
<div class="button on" tabindex="0" onclick="this.blur();">
|
||||
on
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section stopOnError">
|
||||
<h1>stop on error</h1>
|
||||
<div class="text">
|
||||
|
|
@ -1797,6 +1833,22 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section hideExtraLetters" section="">
|
||||
<h1>hide extra letters</h1>
|
||||
<div class="text">
|
||||
Hides extra letters. This will completely avoid words jumping
|
||||
lines (due to changing width), but might feel a bit confusing
|
||||
when you press a key and nothing happens.
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<div class="button off" tabindex="0" onclick="this.blur();">
|
||||
off
|
||||
</div>
|
||||
<div class="button on" tabindex="0" onclick="this.blur();">
|
||||
on
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section swapEscAndTab" section="">
|
||||
<h1>swap esc and tab</h1>
|
||||
<div class="text">
|
||||
|
|
@ -1830,7 +1882,7 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle" group="sound">
|
||||
<div id="group_sound" class="sectionGroupTitle" group="sound">
|
||||
sound
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
@ -1901,7 +1953,7 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle" group="caret">
|
||||
<div id="group_caret" class="sectionGroupTitle" group="caret">
|
||||
caret
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
@ -2059,7 +2111,11 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle" group="appearance">
|
||||
<div
|
||||
id="group_appearance"
|
||||
class="sectionGroupTitle"
|
||||
group="appearance"
|
||||
>
|
||||
appearance
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
@ -2293,6 +2349,14 @@
|
|||
>
|
||||
off
|
||||
</div>
|
||||
<div
|
||||
class="button"
|
||||
keymapMode="static"
|
||||
tabindex="0"
|
||||
onclick="this.blur();"
|
||||
>
|
||||
static
|
||||
</div>
|
||||
<div
|
||||
class="button"
|
||||
keymapMode="react"
|
||||
|
|
@ -2453,7 +2517,7 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle" group="theme">
|
||||
<div id="group_theme" class="sectionGroupTitle" group="theme">
|
||||
theme
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
@ -2646,7 +2710,11 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle" group="hideElements">
|
||||
<div
|
||||
id="group_hideElements"
|
||||
class="sectionGroupTitle"
|
||||
group="hideElements"
|
||||
>
|
||||
hide elements
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
@ -2713,7 +2781,11 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div class="sectionGroupTitle" group="dangerZone">
|
||||
<div
|
||||
id="group_dangerZone"
|
||||
class="sectionGroupTitle"
|
||||
group="dangerZone"
|
||||
>
|
||||
danger zone
|
||||
<i class="fas fa-chevron-down"></i>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -12024,12 +12024,6 @@
|
|||
"id": 2025,
|
||||
"length": 497
|
||||
},
|
||||
{
|
||||
"text": "I hate nice girls. If they so much as say hello, it stays on my mind. If they return my texts, my heart races. The day one calls me, I know I'll look at my call history and grin. But I know that's just them being nice. People who are nice to me are also nice to everyone else.",
|
||||
"source": "My Youth Romantic Comedy is Wrong, as I Expected",
|
||||
"id": 2026,
|
||||
"length": 276
|
||||
},
|
||||
{
|
||||
"text": "The morning sun in all its glory greets the day with hope and comfort too. And you fill my life with laughter, you can make it better.",
|
||||
"source": "Have I Told You Lately",
|
||||
|
|
|
|||
206
static/languages/danish.json
Normal file
206
static/languages/danish.json
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
{
|
||||
"name": "danish",
|
||||
"leftToRight": true,
|
||||
"words": [
|
||||
"ville",
|
||||
"ud",
|
||||
"første",
|
||||
"siden",
|
||||
"gang",
|
||||
"giver",
|
||||
"komme",
|
||||
"nok",
|
||||
"Danmark",
|
||||
"København",
|
||||
"i",
|
||||
"kun",
|
||||
"min",
|
||||
"måtte",
|
||||
"dig",
|
||||
"langt",
|
||||
"man",
|
||||
"ham",
|
||||
"være",
|
||||
"sine",
|
||||
"for",
|
||||
"nogen",
|
||||
"endnu",
|
||||
"have",
|
||||
"hende",
|
||||
"havde",
|
||||
"os",
|
||||
"flere",
|
||||
"du",
|
||||
"blandt",
|
||||
"står",
|
||||
"sin",
|
||||
"tror",
|
||||
"får",
|
||||
"samme",
|
||||
"allerede",
|
||||
"hvordan",
|
||||
"noget",
|
||||
"har",
|
||||
"på",
|
||||
"alle",
|
||||
"ved",
|
||||
"dem",
|
||||
"nok",
|
||||
"fået",
|
||||
"gør",
|
||||
"give",
|
||||
"sådan",
|
||||
"hver",
|
||||
"gennem",
|
||||
"også",
|
||||
"han",
|
||||
"vi",
|
||||
"se",
|
||||
"år",
|
||||
"del",
|
||||
"unge",
|
||||
"hvis",
|
||||
"nu",
|
||||
"det",
|
||||
"men",
|
||||
"at",
|
||||
"om",
|
||||
"lidt",
|
||||
"kom",
|
||||
"tid",
|
||||
"mig",
|
||||
"ny",
|
||||
"selv",
|
||||
"sige",
|
||||
"tilbage",
|
||||
"arbejde",
|
||||
"andre",
|
||||
"skal",
|
||||
"disse",
|
||||
"stor",
|
||||
"alt",
|
||||
"altså",
|
||||
"altid",
|
||||
"ingen",
|
||||
"to",
|
||||
"frem",
|
||||
"helt",
|
||||
"går",
|
||||
"mod",
|
||||
"gøre",
|
||||
"derfor",
|
||||
"af",
|
||||
"måde",
|
||||
"måske",
|
||||
"næsten",
|
||||
"mens",
|
||||
"dog",
|
||||
"synes",
|
||||
"kommer",
|
||||
"jo",
|
||||
"jeg",
|
||||
"mindre",
|
||||
"blev",
|
||||
"par",
|
||||
"god",
|
||||
"godt",
|
||||
"gamle",
|
||||
"folk",
|
||||
"fik",
|
||||
"sidste",
|
||||
"da",
|
||||
"dansk",
|
||||
"dag",
|
||||
"omkring",
|
||||
"under",
|
||||
"mand",
|
||||
"når",
|
||||
"siger",
|
||||
"et",
|
||||
"en",
|
||||
"dette",
|
||||
"vil",
|
||||
"tale",
|
||||
"ja",
|
||||
"ind",
|
||||
"netop",
|
||||
"bare",
|
||||
"hos",
|
||||
"er",
|
||||
"hele",
|
||||
"der",
|
||||
"deres",
|
||||
"med",
|
||||
"som",
|
||||
"baumann",
|
||||
"tage",
|
||||
"først",
|
||||
"både",
|
||||
"mange",
|
||||
"de",
|
||||
"til",
|
||||
"mennesker",
|
||||
"her",
|
||||
"mere",
|
||||
"været",
|
||||
"aldrig",
|
||||
"igen",
|
||||
"kunne",
|
||||
"meget",
|
||||
"få",
|
||||
"lille",
|
||||
"denne",
|
||||
"lige",
|
||||
"nogle",
|
||||
"fordi",
|
||||
"mellem",
|
||||
"før",
|
||||
"stadig",
|
||||
"over",
|
||||
"blive",
|
||||
"ikke",
|
||||
"mest",
|
||||
"var",
|
||||
"vores",
|
||||
"ligger",
|
||||
"sagde",
|
||||
"mon",
|
||||
"ned",
|
||||
"sig",
|
||||
"gå",
|
||||
"hun",
|
||||
"eller",
|
||||
"uden",
|
||||
"hvad",
|
||||
"andet",
|
||||
"hvor",
|
||||
"verden",
|
||||
"så",
|
||||
"ser",
|
||||
"skulle",
|
||||
"gik",
|
||||
"tidligere",
|
||||
"sammen",
|
||||
"kan",
|
||||
"tre",
|
||||
"fra",
|
||||
"mit",
|
||||
"heller",
|
||||
"side",
|
||||
"anden",
|
||||
"efter",
|
||||
"store",
|
||||
"mener",
|
||||
"må",
|
||||
"end",
|
||||
"op",
|
||||
"hovedet",
|
||||
"gav",
|
||||
"ca",
|
||||
"danske",
|
||||
"rigtig",
|
||||
"døren",
|
||||
"finde",
|
||||
"børn"
|
||||
]
|
||||
}
|
||||
2507
static/languages/hungarian_2.5k.json
Normal file
2507
static/languages/hungarian_2.5k.json
Normal file
File diff suppressed because it is too large
Load diff
211
static/languages/kazakh.json
Normal file
211
static/languages/kazakh.json
Normal file
|
|
@ -0,0 +1,211 @@
|
|||
{
|
||||
"name": "kazakh",
|
||||
"leftToRight": true,
|
||||
"words": [
|
||||
"сен",
|
||||
"қазақ",
|
||||
"ел",
|
||||
"арман",
|
||||
"қанат",
|
||||
"өмір",
|
||||
"әлем",
|
||||
"бақыт",
|
||||
"ол",
|
||||
"қайда",
|
||||
"қара",
|
||||
"ақ",
|
||||
"сары",
|
||||
"көк",
|
||||
"дос",
|
||||
"мақсат",
|
||||
"жақын",
|
||||
"қыз",
|
||||
"ұл",
|
||||
"бір",
|
||||
"екі",
|
||||
"үш",
|
||||
"төрт",
|
||||
"бес",
|
||||
"алты",
|
||||
"жеті",
|
||||
"сегіз",
|
||||
"тоғыз",
|
||||
"он",
|
||||
"от",
|
||||
"ай",
|
||||
"күн",
|
||||
"алаш",
|
||||
"жұрт",
|
||||
"аспан",
|
||||
"ұру",
|
||||
"нұр",
|
||||
"кету",
|
||||
"қалу",
|
||||
"бару",
|
||||
"айту",
|
||||
"жету",
|
||||
"ұту",
|
||||
"аға",
|
||||
"адал",
|
||||
"адам",
|
||||
"ау",
|
||||
"ажар",
|
||||
"аз",
|
||||
"көп",
|
||||
"азат",
|
||||
"айбар",
|
||||
"кітап",
|
||||
"аққу",
|
||||
"қазы",
|
||||
"қасқыр",
|
||||
"ақыл",
|
||||
"алма",
|
||||
"амал",
|
||||
"аман",
|
||||
"ана",
|
||||
"әке",
|
||||
"шеше",
|
||||
"апа",
|
||||
"ата",
|
||||
"ар",
|
||||
"намыс",
|
||||
"ара",
|
||||
"ит",
|
||||
"сан",
|
||||
"орын",
|
||||
"ашу",
|
||||
"сабыр",
|
||||
"аю",
|
||||
"аяз",
|
||||
"әдеп",
|
||||
"әзіл",
|
||||
"әйел",
|
||||
"әлем",
|
||||
"бет",
|
||||
"би",
|
||||
"болу",
|
||||
"білім",
|
||||
"өнер",
|
||||
"мал",
|
||||
"қан",
|
||||
"бата",
|
||||
"қайрат",
|
||||
"жігер",
|
||||
"жүрек",
|
||||
"ой",
|
||||
"оқу",
|
||||
"қуаныш",
|
||||
"қабыл",
|
||||
"ниет",
|
||||
"күш",
|
||||
"қимыл",
|
||||
"жүйрік",
|
||||
"қыран",
|
||||
"көз",
|
||||
"жас",
|
||||
"бала",
|
||||
"ұш",
|
||||
"көл",
|
||||
"сөз",
|
||||
"хан",
|
||||
"батыр",
|
||||
"қате",
|
||||
"төзім",
|
||||
"күз",
|
||||
"көктем",
|
||||
"қыс",
|
||||
"жаз",
|
||||
"ажал",
|
||||
"жақсы",
|
||||
"жаман",
|
||||
"рух",
|
||||
"тұлпар",
|
||||
"жүз",
|
||||
"сый",
|
||||
"былай",
|
||||
"балық",
|
||||
"жер",
|
||||
"зат",
|
||||
"жылқы",
|
||||
"тал",
|
||||
"түс",
|
||||
"шоқ",
|
||||
"бірақ",
|
||||
"алу",
|
||||
"емес",
|
||||
"күш",
|
||||
"рет",
|
||||
"жара",
|
||||
"ғибрат",
|
||||
"ғылым",
|
||||
"дана",
|
||||
"дала",
|
||||
"болат",
|
||||
"даңқ",
|
||||
"дау",
|
||||
"ерік",
|
||||
"есеп",
|
||||
"ет",
|
||||
"ешкім",
|
||||
"жазу",
|
||||
"жай",
|
||||
"ту",
|
||||
"иман",
|
||||
"кедей",
|
||||
"бай",
|
||||
"қап",
|
||||
"қар",
|
||||
"қарай",
|
||||
"қарау",
|
||||
"қарт",
|
||||
"қатал",
|
||||
"қатты",
|
||||
"қиын",
|
||||
"оңай",
|
||||
"қағаз",
|
||||
"қол",
|
||||
"мақта",
|
||||
"мансап",
|
||||
"мысық",
|
||||
"ми",
|
||||
"нақыл",
|
||||
"одақ",
|
||||
"ойлау",
|
||||
"ойын",
|
||||
"опат",
|
||||
"осы",
|
||||
"оян",
|
||||
"өзгеріс",
|
||||
"өлім",
|
||||
"өнеге",
|
||||
"ұзақ",
|
||||
"жел",
|
||||
"пайда",
|
||||
"парасат",
|
||||
"риза",
|
||||
"рақмет",
|
||||
"сабақ",
|
||||
"сақ",
|
||||
"сала",
|
||||
"салт",
|
||||
"сана",
|
||||
"сапар",
|
||||
"сатқын",
|
||||
"сауда",
|
||||
"соғыс",
|
||||
"су",
|
||||
"ауа",
|
||||
"таң",
|
||||
"садақ",
|
||||
"жер",
|
||||
"марс",
|
||||
"тез",
|
||||
"жылдам",
|
||||
"дем",
|
||||
"тор",
|
||||
"уақыт",
|
||||
"еңбек",
|
||||
"ұшу",
|
||||
"ұшқын"
|
||||
]
|
||||
}
|
||||
|
|
@ -17,10 +17,15 @@
|
|||
"czech",
|
||||
"slovak",
|
||||
"dutch",
|
||||
"danish",
|
||||
"hungarian",
|
||||
"hungarian_2.5k",
|
||||
"norwegian",
|
||||
"hebrew",
|
||||
"icelandic_1k",
|
||||
"romanian",
|
||||
"finnish"
|
||||
"finnish",
|
||||
"persian",
|
||||
"kazakh",
|
||||
"vietnamese"
|
||||
]
|
||||
|
|
|
|||
207
static/languages/persian.json
Normal file
207
static/languages/persian.json
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
{
|
||||
"name": "persian",
|
||||
"leftToRight": false,
|
||||
"ligatures": true,
|
||||
"words": [
|
||||
"من",
|
||||
"تو",
|
||||
"او",
|
||||
"بود",
|
||||
"برای",
|
||||
"هست",
|
||||
"شهرک",
|
||||
"اقلیم",
|
||||
"تیغ",
|
||||
"پدر",
|
||||
"خار",
|
||||
"گریزان",
|
||||
"پشتکار",
|
||||
"نگار",
|
||||
"هند",
|
||||
"پیراهن",
|
||||
"رعایت",
|
||||
"سود",
|
||||
"شب",
|
||||
"نژاد",
|
||||
"کوچک",
|
||||
"کودک",
|
||||
"پرسش",
|
||||
"ناچار",
|
||||
"لیاقت",
|
||||
"ضیافت",
|
||||
"پوشاک",
|
||||
"امیر",
|
||||
"تولید",
|
||||
"محاسبه",
|
||||
"مسافرت",
|
||||
"مدرسه",
|
||||
"سطح",
|
||||
"مصاحبه",
|
||||
"صندلی",
|
||||
"شگفت",
|
||||
"خواهر",
|
||||
"آمار",
|
||||
"اسباب",
|
||||
"کاخ",
|
||||
"شیرینی",
|
||||
"کبریت",
|
||||
"عروسک",
|
||||
"کافی",
|
||||
"کارگردان",
|
||||
"صبحانه",
|
||||
"لبخند",
|
||||
"اطمینان",
|
||||
"بازی",
|
||||
"ریشه",
|
||||
"مطالعه",
|
||||
"هوا",
|
||||
"مخصوص",
|
||||
"گل",
|
||||
"پایین",
|
||||
"دانا",
|
||||
"همهمه",
|
||||
"دندان",
|
||||
"امروز",
|
||||
"مرهم",
|
||||
"داستان",
|
||||
"پزشک",
|
||||
"آیینه",
|
||||
"شادی",
|
||||
"نبرد",
|
||||
"ظلم",
|
||||
"بیکار",
|
||||
"ورزش",
|
||||
"گریزان",
|
||||
"تیغ",
|
||||
"سرعت",
|
||||
"نامه",
|
||||
"پرچم",
|
||||
"تمام",
|
||||
"بریدن",
|
||||
"آموزش",
|
||||
"گویش",
|
||||
"بیکار",
|
||||
"کاربرد",
|
||||
"ترانه",
|
||||
"پشتکار",
|
||||
"کج",
|
||||
"تحقیق",
|
||||
"مرحله",
|
||||
"بهداشت",
|
||||
"بانو",
|
||||
"گرفتاری",
|
||||
"شکست",
|
||||
"آرایه",
|
||||
"نوشتن",
|
||||
"پیشانی",
|
||||
"سلام",
|
||||
"عاج",
|
||||
"فیل",
|
||||
"ماهی",
|
||||
"چاه",
|
||||
"باید",
|
||||
"ژاپن",
|
||||
"تراکم",
|
||||
"اکتشاف",
|
||||
"غذا",
|
||||
"سختی",
|
||||
"بادبادک",
|
||||
"دولت",
|
||||
"پیام",
|
||||
"علی",
|
||||
"شکوفه",
|
||||
"قلّه",
|
||||
"آبادی",
|
||||
"صلاحدید",
|
||||
"بهار",
|
||||
"اسب",
|
||||
"ققنوس",
|
||||
"منش",
|
||||
"عامیانه",
|
||||
"مار",
|
||||
"آزادی",
|
||||
"توانایی",
|
||||
"ظرف",
|
||||
"خطا",
|
||||
"آماده",
|
||||
"عرصه",
|
||||
"شروع",
|
||||
"چرا",
|
||||
"حیوانات",
|
||||
"گوناگون",
|
||||
"رویش",
|
||||
"پاییز",
|
||||
"ادبیات",
|
||||
"بازرگانی",
|
||||
"تلفن",
|
||||
"فردا",
|
||||
"دنباله",
|
||||
"گردش",
|
||||
"روشنایی",
|
||||
"برگ",
|
||||
"پشتوانه",
|
||||
"استثنا",
|
||||
"فراخ",
|
||||
"چشم",
|
||||
"سایه",
|
||||
"اندیشه",
|
||||
"چطور",
|
||||
"جانور",
|
||||
"مادر",
|
||||
"درباره",
|
||||
"سال",
|
||||
"ساحل",
|
||||
"استرداد",
|
||||
"چرخه",
|
||||
"سفید",
|
||||
"صحبت",
|
||||
"متفاوت",
|
||||
"قالب",
|
||||
"کرانه",
|
||||
"ترجمه",
|
||||
"راز",
|
||||
"رمز",
|
||||
"و",
|
||||
"آلو",
|
||||
"به",
|
||||
"در",
|
||||
"خنده",
|
||||
"نیاز",
|
||||
"دادگاه",
|
||||
"دقیقه",
|
||||
"انقباض",
|
||||
"غروب",
|
||||
"تنگی",
|
||||
"ارسلان",
|
||||
"برخوردار",
|
||||
"نرگس",
|
||||
"ضوابط",
|
||||
"باد",
|
||||
"ماشین",
|
||||
"بها",
|
||||
"طرح",
|
||||
"سیلی",
|
||||
"مرموز",
|
||||
"کثیف",
|
||||
"زبان",
|
||||
"وزیر",
|
||||
"شاه",
|
||||
"ملکه",
|
||||
"گنجایش",
|
||||
"آسمان",
|
||||
"نوشیدنی",
|
||||
"برشته",
|
||||
"حمله",
|
||||
"اساس",
|
||||
"عشق",
|
||||
"طبس",
|
||||
"پند",
|
||||
"پیوند",
|
||||
"کاسه",
|
||||
"انسان",
|
||||
"برق",
|
||||
"عنوان",
|
||||
"که",
|
||||
"خود"
|
||||
]
|
||||
}
|
||||
157
static/languages/vietnamese.json
Normal file
157
static/languages/vietnamese.json
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
{
|
||||
"name": "vietnamese",
|
||||
"leftToRight": true,
|
||||
"words": [
|
||||
"chào",
|
||||
"má",
|
||||
"ba",
|
||||
"cha",
|
||||
"con",
|
||||
"anh",
|
||||
"em",
|
||||
"chị",
|
||||
"bà",
|
||||
"ngoại",
|
||||
"ông",
|
||||
"nội",
|
||||
"ăn",
|
||||
"cơm",
|
||||
"chưa",
|
||||
"rồi",
|
||||
"sáng",
|
||||
"đi",
|
||||
"học",
|
||||
"làm",
|
||||
"bài",
|
||||
"tập",
|
||||
"trái",
|
||||
"cây",
|
||||
"tắm",
|
||||
"chơi",
|
||||
"bia",
|
||||
"rượu",
|
||||
"cà",
|
||||
"phê",
|
||||
"cơm",
|
||||
"tấm",
|
||||
"hủ",
|
||||
"tiếu",
|
||||
"sướng",
|
||||
"ngày",
|
||||
"độc",
|
||||
"lập",
|
||||
"trong",
|
||||
"tim",
|
||||
"mỗi",
|
||||
"người",
|
||||
"sung",
|
||||
"đời",
|
||||
"à",
|
||||
"phải",
|
||||
"tiền",
|
||||
"nhiêu",
|
||||
"lấy",
|
||||
"của",
|
||||
"để",
|
||||
"không",
|
||||
"phí",
|
||||
"sữa",
|
||||
"văn",
|
||||
"chút",
|
||||
"thuốc",
|
||||
"hút",
|
||||
"điện",
|
||||
"thoại",
|
||||
"di",
|
||||
"động",
|
||||
"máy",
|
||||
"vi",
|
||||
"tính",
|
||||
"công",
|
||||
"cộng",
|
||||
"siêu",
|
||||
"thị",
|
||||
"được",
|
||||
"trường",
|
||||
"công",
|
||||
"ty",
|
||||
"ngân",
|
||||
"ở",
|
||||
"tại",
|
||||
"sao",
|
||||
"ai",
|
||||
"cảm",
|
||||
"ơn",
|
||||
"xin",
|
||||
"lỗi",
|
||||
"mắc",
|
||||
"quận",
|
||||
"đói",
|
||||
"nhung",
|
||||
"lụa",
|
||||
"thích",
|
||||
"yêu",
|
||||
"hiểu",
|
||||
"gì",
|
||||
"cười",
|
||||
"bởi",
|
||||
"hôm",
|
||||
"qua",
|
||||
"ngày",
|
||||
"nhục",
|
||||
"phục",
|
||||
"thù",
|
||||
"xào",
|
||||
"luộc",
|
||||
"tri",
|
||||
"thức",
|
||||
"nước",
|
||||
"tương",
|
||||
"nước",
|
||||
"đá",
|
||||
"đọc",
|
||||
"bao",
|
||||
"lâu",
|
||||
"nhà",
|
||||
"vệ",
|
||||
"sinh",
|
||||
"đúng",
|
||||
"giận",
|
||||
"dỗi",
|
||||
"mang",
|
||||
"xà",
|
||||
"bông",
|
||||
"bởi",
|
||||
"vì",
|
||||
"dầu",
|
||||
"gội",
|
||||
"đầu",
|
||||
"trai",
|
||||
"quán",
|
||||
"ăn",
|
||||
"chúng",
|
||||
"mình",
|
||||
"hoàn",
|
||||
"xong",
|
||||
"việc",
|
||||
"dự",
|
||||
"định",
|
||||
"đến",
|
||||
"trễ",
|
||||
"giặt",
|
||||
"chuẩn",
|
||||
"bị",
|
||||
"nhanh",
|
||||
"nhức",
|
||||
"đầu",
|
||||
"mập",
|
||||
"vui",
|
||||
"mừng",
|
||||
"cầu",
|
||||
"đường",
|
||||
"du",
|
||||
"lịch",
|
||||
"hành",
|
||||
"khởi"
|
||||
]
|
||||
}
|
||||
11
static/themes/iceberg_dark.css
Normal file
11
static/themes/iceberg_dark.css
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
:root {
|
||||
--bg-color: #161821;
|
||||
--caret-color: #d2d4de;
|
||||
--main-color: #84a0c6;
|
||||
--sub-color: #c6c8d1;
|
||||
--text-color: #c6c8d1;
|
||||
--error-color: #e27878;
|
||||
--error-extra-color: #e2a478;
|
||||
--colorful-error-color: #e27878;
|
||||
--colorful-error-extra-color: #e2a478;
|
||||
}
|
||||
11
static/themes/iceberg_light.css
Normal file
11
static/themes/iceberg_light.css
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
:root {
|
||||
--bg-color: #e8e9ec;
|
||||
--caret-color: #262a3f;
|
||||
--main-color: #2d539e;
|
||||
--sub-color: #262a3f;
|
||||
--text-color: #33374c;
|
||||
--error-color: #cc517a;
|
||||
--error-extra-color: #cc3768;
|
||||
--colorful-error-color: #cc517a;
|
||||
--colorful-error-extra-color: #cc3768;
|
||||
}
|
||||
|
|
@ -423,5 +423,15 @@
|
|||
"name": "drowning",
|
||||
"bgColor": "#191826",
|
||||
"textColor": "#4a6fb5"
|
||||
},
|
||||
{
|
||||
"name": "iceberg_dark",
|
||||
"bgColor": "#161821",
|
||||
"textColor": "#c6c8d1"
|
||||
},
|
||||
{
|
||||
"name": "iceberg_light",
|
||||
"bgColor": "#e8e9ec",
|
||||
"textColor": "#33374c"
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue