Merge branch 'master' into lint

This commit is contained in:
Jack 2020-11-08 23:26:59 +00:00 committed by GitHub
commit c5762d229a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 4120 additions and 575 deletions

View file

@ -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"

View file

@ -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 = "";

View file

@ -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();
},
});
}

File diff suppressed because it is too large Load diff

View file

@ -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>`
);

View file

@ -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;
}

View file

@ -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%;

View file

@ -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>

View file

@ -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",

View 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"
]
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,211 @@
{
"name": "kazakh",
"leftToRight": true,
"words": [
"сен",
"қазақ",
"ел",
"арман",
"қанат",
"өмір",
"әлем",
"бақыт",
"ол",
"қайда",
"қара",
"ақ",
"сары",
"көк",
"дос",
"мақсат",
"жақын",
"қыз",
"ұл",
"бір",
"екі",
"үш",
"төрт",
"бес",
"алты",
"жеті",
"сегіз",
"тоғыз",
"он",
"от",
"ай",
"күн",
"алаш",
"жұрт",
"аспан",
"ұру",
"нұр",
"кету",
"қалу",
"бару",
"айту",
"жету",
"ұту",
"аға",
"адал",
"адам",
"ау",
"ажар",
"аз",
"көп",
"азат",
"айбар",
"кітап",
"аққу",
"қазы",
"қасқыр",
"ақыл",
"алма",
"амал",
"аман",
"ана",
"әке",
"шеше",
"апа",
"ата",
"ар",
"намыс",
"ара",
"ит",
"сан",
"орын",
"ашу",
"сабыр",
"аю",
"аяз",
"әдеп",
"әзіл",
"әйел",
"әлем",
"бет",
"би",
"болу",
"білім",
"өнер",
"мал",
"қан",
"бата",
"қайрат",
"жігер",
"жүрек",
"ой",
"оқу",
"қуаныш",
"қабыл",
"ниет",
"күш",
"қимыл",
"жүйрік",
"қыран",
"көз",
"жас",
"бала",
"ұш",
"көл",
"сөз",
"хан",
"батыр",
"қате",
"төзім",
"күз",
"көктем",
"қыс",
"жаз",
"ажал",
"жақсы",
"жаман",
"рух",
"тұлпар",
"жүз",
"сый",
"былай",
"балық",
"жер",
"зат",
"жылқы",
"тал",
"түс",
"шоқ",
"бірақ",
"алу",
"емес",
"күш",
"рет",
"жара",
"ғибрат",
"ғылым",
"дана",
"дала",
"болат",
"даңқ",
"дау",
"ерік",
"есеп",
"ет",
"ешкім",
"жазу",
"жай",
"ту",
"иман",
"кедей",
"бай",
"қап",
"қар",
"қарай",
"қарау",
"қарт",
"қатал",
"қатты",
"қиын",
"оңай",
"қағаз",
"қол",
"мақта",
"мансап",
"мысық",
"ми",
"нақыл",
"одақ",
"ойлау",
"ойын",
"опат",
"осы",
"оян",
"өзгеріс",
"өлім",
"өнеге",
"ұзақ",
"жел",
"пайда",
"парасат",
"риза",
"рақмет",
"сабақ",
"сақ",
"сала",
"салт",
"сана",
"сапар",
"сатқын",
"сауда",
"соғыс",
"су",
"ауа",
"таң",
"садақ",
"жер",
"марс",
"тез",
"жылдам",
"дем",
"тор",
"уақыт",
"еңбек",
"ұшу",
"ұшқын"
]
}

View file

@ -17,10 +17,15 @@
"czech",
"slovak",
"dutch",
"danish",
"hungarian",
"hungarian_2.5k",
"norwegian",
"hebrew",
"icelandic_1k",
"romanian",
"finnish"
"finnish",
"persian",
"kazakh",
"vietnamese"
]

View file

@ -0,0 +1,207 @@
{
"name": "persian",
"leftToRight": false,
"ligatures": true,
"words": [
"من",
"تو",
"او",
"بود",
"برای",
"هست",
"شهرک",
"اقلیم",
"تیغ",
"پدر",
"خار",
"گریزان",
"پشتکار",
"نگار",
"هند",
"پیراهن",
"رعایت",
"سود",
"شب",
"نژاد",
"کوچک",
"کودک",
"پرسش",
"ناچار",
"لیاقت",
"ضیافت",
"پوشاک",
"امیر",
"تولید",
"محاسبه",
"مسافرت",
"مدرسه",
"سطح",
"مصاحبه",
"صندلی",
"شگفت",
"خواهر",
"آمار",
"اسباب",
"کاخ",
"شیرینی",
"کبریت",
"عروسک",
"کافی",
"کارگردان",
"صبحانه",
"لبخند",
"اطمینان",
"بازی",
"ریشه",
"مطالعه",
"هوا",
"مخصوص",
"گل",
"پایین",
"دانا",
"همهمه",
"دندان",
"امروز",
"مرهم",
"داستان",
"پزشک",
"آیینه",
"شادی",
"نبرد",
"ظلم",
"بیکار",
"ورزش",
"گریزان",
"تیغ",
"سرعت",
"نامه",
"پرچم",
"تمام",
"بریدن",
"آموزش",
"گویش",
"بیکار",
"کاربرد",
"ترانه",
"پشتکار",
"کج",
"تحقیق",
"مرحله",
"بهداشت",
"بانو",
"گرفتاری",
"شکست",
"آرایه",
"نوشتن",
"پیشانی",
"سلام",
"عاج",
"فیل",
"ماهی",
"چاه",
"باید",
"ژاپن",
"تراکم",
"اکتشاف",
"غذا",
"سختی",
"بادبادک",
"دولت",
"پیام",
"علی",
"شکوفه",
"قلّه",
"آبادی",
"صلاحدید",
"بهار",
"اسب",
"ققنوس",
"منش",
"عامیانه",
"مار",
"آزادی",
"توانایی",
"ظرف",
"خطا",
"آماده",
"عرصه",
"شروع",
"چرا",
"حیوانات",
"گوناگون",
"رویش",
"پاییز",
"ادبیات",
"بازرگانی",
"تلفن",
"فردا",
"دنباله",
"گردش",
"روشنایی",
"برگ",
"پشتوانه",
"استثنا",
"فراخ",
"چشم",
"سایه",
"اندیشه",
"چطور",
"جانور",
"مادر",
"درباره",
"سال",
"ساحل",
"استرداد",
"چرخه",
"سفید",
"صحبت",
"متفاوت",
"قالب",
"کرانه",
"ترجمه",
"راز",
"رمز",
"و",
"آلو",
"به",
"در",
"خنده",
"نیاز",
"دادگاه",
"دقیقه",
"انقباض",
"غروب",
"تنگی",
"ارسلان",
"برخوردار",
"نرگس",
"ضوابط",
"باد",
"ماشین",
"بها",
"طرح",
"سیلی",
"مرموز",
"کثیف",
"زبان",
"وزیر",
"شاه",
"ملکه",
"گنجایش",
"آسمان",
"نوشیدنی",
"برشته",
"حمله",
"اساس",
"عشق",
"طبس",
"پند",
"پیوند",
"کاسه",
"انسان",
"برق",
"عنوان",
"که",
"خود"
]
}

View 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"
]
}

View 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;
}

View 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;
}

View file

@ -423,5 +423,15 @@
"name": "drowning",
"bgColor": "#191826",
"textColor": "#4a6fb5"
},
{
"name": "iceberg_dark",
"bgColor": "#161821",
"textColor": "#c6c8d1"
},
{
"name": "iceberg_light",
"bgColor": "#e8e9ec",
"textColor": "#33374c"
}
]