diff --git a/gulpfile.js b/gulpfile.js index f7de71d13..b6bc131cd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -106,6 +106,8 @@ const refactoredSrc = [ "./src/js/test/caret.js", "./src/js/custom-text-popup.js", "./src/js/manual-restart-tracker.js", + "./src/js/config.js", + "./src/js/config-set.js", ]; //legacy files diff --git a/src/js/account.js b/src/js/account.js index 161aef0b9..60828668f 100644 --- a/src/js/account.js +++ b/src/js/account.js @@ -295,14 +295,14 @@ firebase.auth().onAuthStateChanged(function (user) { if (theme !== null) { try { theme = theme.split(","); - config.customThemeColors = theme; + ConfigSet.customThemeColors(theme); Notifications.add("Custom theme applied.", 1); } catch (e) { Notifications.add( "Something went wrong. Reverting to default custom colors.", 0 ); - config.customThemeColors = defaultConfig.customThemeColors; + ConfigSet.customThemeColors(Config.defaultConfig.customThemeColors); } setCustomTheme(true); setCustomThemeInputs(); @@ -414,40 +414,40 @@ function getAccountDataAndInit() { } else { accountIconLoading(false); } - if (config.paceCaret === "pb" || config.paceCaret === "average") { + if (Config.paceCaret === "pb" || Config.paceCaret === "average") { if (!testActive) { initPaceCaret(true); } } // try { // if ( - // config.resultFilters === undefined || - // config.resultFilters === null || - // config.resultFilters.difficulty === undefined + // Config.resultFilters === undefined || + // Config.resultFilters === null || + // Config.resultFilters.difficulty === undefined // ) { // if ( - // DB.getSnapshot().config.resultFilters == null || - // DB.getSnapshot().config.resultFilters.difficulty === undefined + // DB.getSnapshot().Config.resultFilters == null || + // DB.getSnapshot().Config.resultFilters.difficulty === undefined // ) { - // config.resultFilters = defaultAccountFilters; + // ConfigSet.resultFilters(defaultAccountFilters); // } else { - // config.resultFilters = DB.getSnapshot().config.resultFilters; + // ConfigSet.resultFilters(DB.getSnapshot().Config.resultFilters); // } // } // } catch (e) { - // config.resultFilters = defaultAccountFilters; + // ConfigSet.resultFilters(defaultAccountFilters); // } // if ( - // Object.keys(config.resultFilters.language).length !== + // Object.keys(Config.resultFilters.language).length !== // Object.keys(defaultAccountFilters.language).length // ) { - // config.resultFilters.language = defaultAccountFilters.language; + // ConfigSet.resultFilters.language(defaultAccountFilters.language); // } // if ( - // Object.keys(config.resultFilters.funbox).length !== + // Object.keys(Config.resultFilters.funbox).length !== // Object.keys(defaultAccountFilters.funbox).length // ) { - // config.resultFilters.funbox = defaultAccountFilters.funbox; + // ConfigSet.resultFilters.funbox(defaultAccountFilters.funbox); // } if ( $(".pageLogin").hasClass("active") || @@ -497,7 +497,7 @@ function updateMiniResultChart(filteredId) { maxChartVal ); - if (!config.startGraphsAtZero) { + if (!Config.startGraphsAtZero) { ChartController.miniResult.options.scales.yAxes[0].ticks.min = Math.round( minChartVal ); @@ -790,33 +790,33 @@ $(".pageAccount .topFilters .button.currentConfigFilter").click((e) => { }); }); - ResultFilters.setFilter("difficulty", config.difficulty, true); - ResultFilters.setFilter("mode", config.mode, true); - if (config.mode === "time") { - ResultFilters.setFilter("time", config.time, true); - } else if (config.mode === "words") { - ResultFilters.setFilter("words", config.words, true); - } else if (config.mode === "quote") { + ResultFilters.setFilter("difficulty", Config.difficulty, true); + ResultFilters.setFilter("mode", Config.mode, true); + if (Config.mode === "time") { + ResultFilters.setFilter("time", Config.time, true); + } else if (Config.mode === "words") { + ResultFilters.setFilter("words", Config.words, true); + } else if (Config.mode === "quote") { Object.keys(ResultFilters.getGroup("quoteLength")).forEach((ql) => { ResultFilters.setFilter("quoteLength", ql, true); }); } - if (config.punctuation) { + if (Config.punctuation) { ResultFilters.setFilter("punctuation", "on", true); } else { ResultFilters.setFilter("punctuation", "off", true); } - if (config.numbers) { + if (Config.numbers) { ResultFilters.setFilter("numbers", "on", true); } else { ResultFilters.setFilter("numbers", "off", true); } - if (config.mode === "quote" && /english.*/.test(config.language)) { + if (Config.mode === "quote" && /english.*/.test(Config.language)) { ResultFilters.setFilter("language", "english", true); } else { - ResultFilters.setFilter("language", config.language, true); + ResultFilters.setFilter("language", Config.language, true); } - ResultFilters.setFilter("funbox", activeFunBox, true); + ResultFilters.setFilter("funbox", activeFunbox, true); ResultFilters.setFilter("tags", "none", true); DB.getSnapshot().tags.forEach((tag) => { if (tag.active === true) { @@ -1656,7 +1656,7 @@ function refreshAccountPage() { ChartController.accountHistory.options.scales.yAxes[0].ticks.max = Math.floor(maxWpmChartVal) + (10 - (Math.floor(maxWpmChartVal) % 10)); - if (!config.startGraphsAtZero) { + if (!Config.startGraphsAtZero) { ChartController.accountHistory.options.scales.yAxes[0].ticks.min = Math.floor( minWpmChartVal ); diff --git a/src/js/commandline.js b/src/js/commandline.js index 7135bbb38..f5a70c10d 100644 --- a/src/js/commandline.js +++ b/src/js/commandline.js @@ -502,7 +502,7 @@ let commands = { { id: "randomiseTheme", display: "Next random theme", - exec: () => ThemeController.randomiseTheme(config), + exec: () => ThemeController.randomiseTheme(), }, { id: "viewTypingPage", @@ -774,7 +774,7 @@ let commandsSoundOnClick = { display: "1", exec: () => { setPlaySoundOnClick("1"); - Sound.playClick(config.playSoundOnClick); + Sound.playClick(Config.playSoundOnClick); }, }, { @@ -782,7 +782,7 @@ let commandsSoundOnClick = { display: "2", exec: () => { setPlaySoundOnClick("2"); - Sound.playClick(config.playSoundOnClick); + Sound.playClick(Config.playSoundOnClick); }, }, { @@ -790,7 +790,7 @@ let commandsSoundOnClick = { display: "3", exec: () => { setPlaySoundOnClick("3"); - Sound.playClick(config.playSoundOnClick); + Sound.playClick(Config.playSoundOnClick); }, }, { @@ -798,7 +798,7 @@ let commandsSoundOnClick = { display: "4", exec: () => { setPlaySoundOnClick("4"); - Sound.playClick(config.playSoundOnClick); + Sound.playClick(Config.playSoundOnClick); }, }, ], @@ -1537,13 +1537,7 @@ function updateCommandsTagsList() { DB.getSnapshot().tags.forEach((tag) => { tag.active = false; }); - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); saveActiveTagsToCookie(); }, }); @@ -1567,8 +1561,7 @@ function updateCommandsTagsList() { sameWordset, textHasTab, paceCaret, - activeFunBox, - config + activeFunbox ); let txt = tag.name; @@ -1610,9 +1603,9 @@ Misc.getThemesList().then((themes) => { }); function showFavouriteThemesAtTheTop() { - if (config.favThemes.length > 0) { + if (Config.favThemes.length > 0) { commandsThemes.list = []; - config.favThemes.forEach((theme) => { + Config.favThemes.forEach((theme) => { commandsThemes.list.push({ id: "changeTheme" + Misc.capitalizeFirstLetter(theme), display: theme.replace(/_/g, " "), @@ -1627,7 +1620,7 @@ function showFavouriteThemesAtTheTop() { }); Misc.getThemesList().then((themes) => { themes.forEach((theme) => { - if (config.favThemes.includes(theme.name)) return; + if (Config.favThemes.includes(theme.name)) return; commandsThemes.list.push({ id: "changeTheme" + Misc.capitalizeFirstLetter(theme.name), display: theme.name.replace(/_/g, " "), @@ -1651,20 +1644,20 @@ let commandsFonts = { function canBailOut() { return ( - (config.mode === "custom" && + (Config.mode === "custom" && CustomText.isWordRandom && CustomText.word >= 5000) || - (config.mode === "custom" && + (Config.mode === "custom" && !CustomText.isWordRandom && !CustomText.isTimeRandom && CustomText.text.length >= 5000) || - (config.mode === "custom" && + (Config.mode === "custom" && CustomText.isTimeRandom && CustomText.time >= 3600) || - (config.mode === "words" && config.words >= 5000) || - config.words === 0 || - (config.mode === "time" && (config.time >= 3600 || config.time === 0)) || - config.mode == "zen" + (Config.mode === "words" && Config.words >= 5000) || + Config.words === 0 || + (Config.mode === "time" && (Config.time >= 3600 || Config.time === 0)) || + Config.mode == "zen" ); } @@ -1711,12 +1704,12 @@ function isSingleListCommandLineActive() { function useSingleListCommandLine(show = true) { let allCommands = generateSingleListOfCommands(); - if (config.singleListCommandLine == "manual") + if (Config.singleListCommandLine == "manual") currentCommands.push(allCommands); - else if (config.singleListCommandLine == "on") + else if (Config.singleListCommandLine == "on") currentCommands = [allCommands]; - if (config.singleListCommandLine != "off") + if (Config.singleListCommandLine != "off") $("#commandLine").addClass("allCommands"); if (show) showCommandLine(); } @@ -1748,7 +1741,7 @@ Misc.getFontsList().then((fonts) => { display: "custom...", input: true, hover: () => { - previewFontFamily(config.fontFamily); + previewFontFamily(Config.fontFamily); }, exec: (name) => { setFontFamily(name.replace(/\s/g, "_")); @@ -1895,7 +1888,7 @@ $("#commandLine input").keyup((e) => { $(document).ready((e) => { $(document).keydown((event) => { //escape - if (event.keyCode == 27 || (event.keyCode == 9 && config.swapEscAndTab)) { + if (event.keyCode == 27 || (event.keyCode == 9 && Config.swapEscAndTab)) { event.preventDefault(); if (!$("#leaderboardsWrapper").hasClass("hidden")) { //maybe add more condition for closing other dialogs in the future as well @@ -1909,9 +1902,9 @@ $(document).ready((e) => { } else { hideCommandLine(); } - setFontFamily(config.fontFamily, true); - } else if (event.keyCode == 9 || !config.swapEscAndTab) { - if (config.singleListCommandLine == "on") + setFontFamily(Config.fontFamily, true); + } else if (event.keyCode == 9 || !Config.swapEscAndTab) { + if (Config.singleListCommandLine == "on") useSingleListCommandLine(false); else currentCommands = [commands]; showCommandLine(); @@ -1985,7 +1978,7 @@ $("#commandLineWrapper #commandLine .suggestions").on("mouseover", (e) => { if (obj.id == hoverId) { if (!/theme/gi.test(obj.id) || obj.id === "toggleCustomTheme") ThemeController.clearPreview(); - if (!/font/gi.test(obj.id)) previewFontFamily(config.fontFamily); + if (!/font/gi.test(obj.id)) previewFontFamily(Config.fontFamily); obj.hover(); } }); @@ -2000,11 +1993,11 @@ $("#commandLineWrapper #commandLine .suggestions").click((e) => { $("#commandLineWrapper").click((e) => { if ($(e.target).attr("id") === "commandLineWrapper") { hideCommandLine(); - setFontFamily(config.fontFamily, true); - // if (config.customTheme === true) { + setFontFamily(Config.fontFamily, true); + // if (Config.customTheme === true) { // applyCustomThemeColors(); // } else { - // setTheme(config.theme, true); + // setTheme(Config.theme, true); // } } }); @@ -2013,11 +2006,11 @@ $(document).keydown((e) => { // if (isPreviewingTheme) { // console.log("applying theme"); // applyCustomThemeColors(); - // previewTheme(config.theme, false); + // previewTheme(Config.theme, false); // } if (!$("#commandLineWrapper").hasClass("hidden")) { $("#commandLine input").focus(); - if (e.key == ">" && config.singleListCommandLine == "manual") { + if (e.key == ">" && Config.singleListCommandLine == "manual") { if (!isSingleListCommandLineActive()) { useSingleListCommandLine(); return; @@ -2030,7 +2023,7 @@ $(document).keydown((e) => { if ( e.keyCode == 8 && $("#commandLine input").val().length == 1 && - config.singleListCommandLine == "manual" && + Config.singleListCommandLine == "manual" && isSingleListCommandLineActive() ) restoreOldCommandLine(); @@ -2105,7 +2098,7 @@ $(document).keydown((e) => { if (obj.id == hoverId) { if (!/theme/gi.test(obj.id) || obj.id === "toggleCustomTheme") ThemeController.clearPreview(); - if (!/font/gi.test(obj.id)) previewFontFamily(config.fontFamily); + if (!/font/gi.test(obj.id)) previewFontFamily(Config.fontFamily); obj.hover(); } }); @@ -2150,7 +2143,7 @@ function triggerCommand(command) { } function hideCommandLine() { - previewFontFamily(config.fontFamily); + previewFontFamily(Config.fontFamily); // applyCustomThemeColors(); ThemeController.clearPreview(); $("#commandLineWrapper") @@ -2211,7 +2204,7 @@ function updateSuggestedCommands() { let list = currentCommands[currentCommands.length - 1]; if ( inputVal[0] === "" && - config.singleListCommandLine === "on" && + Config.singleListCommandLine === "on" && currentCommands.length === 1 ) { $.each(list.list, (index, obj) => { @@ -2285,7 +2278,7 @@ function displayFoundCommands() { if (obj.found) { if (!/theme/gi.test(obj.id) || obj.id === "toggleCustomTheme") ThemeController.clearPreview(); - if (!/font/gi.test(obj.id)) previewFontFamily(config.fontFamily); + if (!/font/gi.test(obj.id)) previewFontFamily(Config.fontFamily); obj.hover(); return false; } diff --git a/src/js/config-set.js b/src/js/config-set.js new file mode 100644 index 000000000..0e809c323 --- /dev/null +++ b/src/js/config-set.js @@ -0,0 +1,291 @@ +import Config, { reset as resetConfig } from "./config"; + +export let defaultConfig = { + theme: "serika_dark", + customTheme: false, + customThemeColors: [ + "#323437", + "#e2b714", + "#e2b714", + "#646669", + "#d1d0c5", + "#ca4754", + "#7e2a33", + "#ca4754", + "#7e2a33", + ], + favThemes: [], + showKeyTips: true, + showLiveWpm: false, + showTimerProgress: true, + smoothCaret: true, + quickTab: false, + punctuation: false, + numbers: false, + words: 50, + time: 30, + mode: "time", + quoteLength: [1], + language: "english", + fontSize: 15, + freedomMode: false, + resultFilters: null, + difficulty: "normal", + blindMode: false, + quickEnd: false, + caretStyle: "default", + paceCaretStyle: "default", + flipTestColors: false, + capsLockBackspace: false, + layout: "default", + savedLayout: "default", + confidenceMode: "off", + indicateTypos: false, + timerStyle: "text", + colorfulMode: false, + randomTheme: "off", + timerColor: "black", + timerOpacity: "0.25", + stopOnError: "off", + showAllLines: false, + keymapMode: "off", + keymapStyle: "staggered", + keymapLayout: "qwerty", + fontFamily: "Roboto_Mono", + smoothLineScroll: false, + alwaysShowDecimalPlaces: false, + alwaysShowWordsHistory: false, + singleListCommandLine: "manual", + playSoundOnError: false, + playSoundOnClick: "off", + startGraphsAtZero: true, + swapEscAndTab: false, + showOutOfFocusWarning: true, + paceCaret: "off", + paceCaretCustomSpeed: 100, + pageWidth: "100", + chartAccuracy: true, + chartStyle: "line", + minWpm: "off", + minWpmCustomSpeed: 100, + highlightMode: "letter", + alwaysShowCPM: false, + enableAds: "off", + hideExtraLetters: false, + strictSpace: false, + minAcc: "off", + minAccCustom: 90, + showLiveAcc: false, + monkey: false, + repeatQuotes: "off", + oppositeShiftMode: "off", +}; + +export function reset() { + resetConfig(); +} + +export function theme(val) { + Config.theme = val; +} +export function customTheme(val) { + Config.customTheme = val; +} +export function customThemeColors(val) { + Config.customThemeColors = val; +} +export function favThemes(val) { + Config.favThemes = val; +} +export function showKeyTips(val) { + Config.showKeyTips = val; +} +export function showLiveWpm(val) { + Config.showLiveWpm = val; +} +export function showTimerProgress(val) { + Config.showTimerProgress = val; +} +export function smoothCaret(val) { + Config.smoothCaret = val; +} +export function quickTab(val) { + Config.quickTab = val; +} +export function punctuation(val) { + Config.punctuation = val; +} +export function numbers(val) { + Config.numbers = val; +} +export function words(val) { + Config.words = val; +} +export function time(val) { + Config.time = val; +} +export function mode(val) { + Config.mode = val; +} +export function quoteLength(val) { + Config.quoteLength = val; +} +export function language(val) { + Config.language = val; +} +export function fontSize(val) { + Config.fontSize = val; +} +export function freedomMode(val) { + Config.freedomMode = val; +} +export function resultFilters(val) { + Config.resultFilters = val; +} +export function difficulty(val) { + Config.difficulty = val; +} +export function blindMode(val) { + Config.blindMode = val; +} +export function quickEnd(val) { + Config.quickEnd = val; +} +export function caretStyle(val) { + Config.caretStyle = val; +} +export function paceCaretStyle(val) { + Config.paceCaretStyle = val; +} +export function flipTestColors(val) { + Config.flipTestColors = val; +} +export function capsLockBackspace(val) { + Config.capsLockBackspace = val; +} +export function layout(val) { + Config.layout = val; +} +export function savedLayout(val) { + Config.savedLayout = val; +} +export function confidenceMode(val) { + Config.confidenceMode = val; +} +export function indicateTypos(val) { + Config.indicateTypos = val; +} +export function timerStyle(val) { + Config.timerStyle = val; +} +export function colorfulMode(val) { + Config.colorfulMode = val; +} +export function randomTheme(val) { + Config.randomTheme = val; +} +export function timerColor(val) { + Config.timerColor = val; +} +export function timerOpacity(val) { + Config.timerOpacity = val; +} +export function stopOnError(val) { + Config.stopOnError = val; +} +export function showAllLines(val) { + Config.showAllLines = val; +} +export function keymapMode(val) { + Config.keymapMode = val; +} +export function keymapStyle(val) { + Config.keymapStyle = val; +} +export function keymapLayout(val) { + Config.keymapLayout = val; +} +export function fontFamily(val) { + Config.fontFamily = val; +} +export function smoothLineScroll(val) { + Config.smoothLineScroll = val; +} +export function alwaysShowDecimalPlaces(val) { + Config.alwaysShowDecimalPlaces = val; +} +export function alwaysShowWordsHistory(val) { + Config.alwaysShowWordsHistory = val; +} +export function singleListCommandLine(val) { + Config.singleListCommandLine = val; +} +export function playSoundOnError(val) { + Config.playSoundOnError = val; +} +export function playSoundOnClick(val) { + Config.playSoundOnClick = val; +} +export function startGraphsAtZero(val) { + Config.startGraphsAtZero = val; +} +export function swapEscAndTab(val) { + Config.swapEscAndTab = val; +} +export function showOutOfFocusWarning(val) { + Config.showOutOfFocusWarning = val; +} +export function paceCaret(val) { + Config.paceCaret = val; +} +export function paceCaretCustomSpeed(val) { + Config.paceCaretCustomSpeed = val; +} +export function pageWidth(val) { + Config.pageWidth = val; +} +export function chartAccuracy(val) { + Config.chartAccuracy = val; +} +export function chartStyle(val) { + Config.chartStyle = val; +} +export function minWpm(val) { + Config.minWpm = val; +} +export function minWpmCustomSpeed(val) { + Config.minWpmCustomSpeed = val; +} +export function highlightMode(val) { + Config.highlightMode = val; +} +export function alwaysShowCPM(val) { + Config.alwaysShowCPM = val; +} +export function enableAds(val) { + Config.enableAds = val; +} +export function hideExtraLetters(val) { + Config.hideExtraLetters = val; +} +export function strictSpace(val) { + Config.strictSpace = val; +} +export function minAcc(val) { + Config.minAcc = val; +} +export function minAccCustom(val) { + Config.minAccCustom = val; +} +export function showLiveAcc(val) { + Config.showLiveAcc = val; +} +export function monkey(val) { + Config.monkey = val; +} +export function repeatQuotes(val) { + Config.repeatQuotes = val; +} +export function oppositeShiftMode(val) { + Config.oppositeShiftMode = val; +} diff --git a/src/js/config.js b/src/js/config.js new file mode 100644 index 000000000..f662f5082 --- /dev/null +++ b/src/js/config.js @@ -0,0 +1,88 @@ +import * as ConfigSet from "./config-set"; + +let config = { + theme: "serika_dark", + customTheme: false, + customThemeColors: [ + "#323437", + "#e2b714", + "#e2b714", + "#646669", + "#d1d0c5", + "#ca4754", + "#7e2a33", + "#ca4754", + "#7e2a33", + ], + favThemes: [], + showKeyTips: true, + showLiveWpm: false, + showTimerProgress: true, + smoothCaret: true, + quickTab: false, + punctuation: false, + numbers: false, + words: 50, + time: 30, + mode: "time", + quoteLength: [1], + language: "english", + fontSize: 15, + freedomMode: false, + resultFilters: null, + difficulty: "normal", + blindMode: false, + quickEnd: false, + caretStyle: "default", + paceCaretStyle: "default", + flipTestColors: false, + capsLockBackspace: false, + layout: "default", + savedLayout: "default", + confidenceMode: "off", + indicateTypos: false, + timerStyle: "text", + colorfulMode: false, + randomTheme: "off", + timerColor: "black", + timerOpacity: "0.25", + stopOnError: "off", + showAllLines: false, + keymapMode: "off", + keymapStyle: "staggered", + keymapLayout: "qwerty", + fontFamily: "Roboto_Mono", + smoothLineScroll: false, + alwaysShowDecimalPlaces: false, + alwaysShowWordsHistory: false, + singleListCommandLine: "manual", + playSoundOnError: false, + playSoundOnClick: "off", + startGraphsAtZero: true, + swapEscAndTab: false, + showOutOfFocusWarning: true, + paceCaret: "off", + paceCaretCustomSpeed: 100, + pageWidth: "100", + chartAccuracy: true, + chartStyle: "line", + minWpm: "off", + minWpmCustomSpeed: 100, + highlightMode: "letter", + alwaysShowCPM: false, + enableAds: "off", + hideExtraLetters: false, + strictSpace: false, + minAcc: "off", + minAccCustom: 90, + showLiveAcc: false, + monkey: false, + repeatQuotes: "off", + oppositeShiftMode: "off", +}; + +export function reset() { + config = ConfigSet.defaultConfig; +} + +export default config; diff --git a/src/js/dom-util.js b/src/js/dom-util.js index 0357dcea1..303373897 100644 --- a/src/js/dom-util.js +++ b/src/js/dom-util.js @@ -1,4 +1,5 @@ import * as DB from "./db"; +import Config from "./config"; export function showBackgroundLoader() { $("#backgroundLoader").stop(true, true).fadeIn(125); @@ -84,8 +85,7 @@ export function updateTestModesNotice( sameWordset, textHasTab, paceCaret, - activeFunBox, - config + activeFunbox ) { let anim = false; if ($(".pageTest #testModesNotice").text() === "") anim = true; @@ -104,7 +104,7 @@ export function updateTestModesNotice( ); } - if (config.mode === "zen") { + if (Config.mode === "zen") { $(".pageTest #testModesNotice").append( `
shift + enter to finish zen
` ); @@ -112,92 +112,92 @@ export function updateTestModesNotice( // /^[0-9a-zA-Z_.-]+$/.test(name); - if (/_\d+k$/g.test(config.language) && config.mode !== "quote") { + if (/_\d+k$/g.test(Config.language) && Config.mode !== "quote") { $(".pageTest #testModesNotice").append( - `
${config.language.replace( + `
${Config.language.replace( /_/g, " " )}
` ); } - if (config.difficulty === "expert") { + if (Config.difficulty === "expert") { $(".pageTest #testModesNotice").append( `
expert
` ); - } else if (config.difficulty === "master") { + } else if (Config.difficulty === "master") { $(".pageTest #testModesNotice").append( `
master
` ); } - if (config.blindMode) { + if (Config.blindMode) { $(".pageTest #testModesNotice").append( `
blind
` ); } - if (config.paceCaret !== "off") { + if (Config.paceCaret !== "off") { let speed = ""; try { speed = ` (${Math.round(paceCaret.wpm)} wpm)`; } catch {} $(".pageTest #testModesNotice").append( `
${ - config.paceCaret === "average" + Config.paceCaret === "average" ? "average" - : config.paceCaret === "pb" + : Config.paceCaret === "pb" ? "pb" : "custom" } pace${speed}
` ); } - if (config.minWpm !== "off") { + if (Config.minWpm !== "off") { $(".pageTest #testModesNotice").append( - `
min ${config.minWpmCustomSpeed} wpm
` + `
min ${Config.minWpmCustomSpeed} wpm
` ); } - if (config.minAcc !== "off") { + if (Config.minAcc !== "off") { $(".pageTest #testModesNotice").append( - `
min ${config.minAccCustom}% acc
` + `
min ${Config.minAccCustom}% acc
` ); } - if (activeFunBox !== "none") { + if (activeFunbox !== "none") { $(".pageTest #testModesNotice").append( - `
${activeFunBox.replace( + `
${activeFunbox.replace( /_/g, " " )}
` ); } - if (config.confidenceMode === "on") { + if (Config.confidenceMode === "on") { $(".pageTest #testModesNotice").append( `
confidence
` ); } - if (config.confidenceMode === "max") { + if (Config.confidenceMode === "max") { $(".pageTest #testModesNotice").append( `
max confidence
` ); } - if (config.stopOnError != "off") { + if (Config.stopOnError != "off") { $(".pageTest #testModesNotice").append( - `
stop on ${config.stopOnError}
` + `
stop on ${Config.stopOnError}
` ); } - if (config.layout !== "default") { + if (Config.layout !== "default") { $(".pageTest #testModesNotice").append( - `
${config.layout}
` + `
${Config.layout}
` ); } - if (config.oppositeShiftMode === "on") { + if (Config.oppositeShiftMode === "on") { $(".pageTest #testModesNotice").append( `
opposite shift
` ); diff --git a/src/js/exports.js b/src/js/exports.js index a5054afd8..c3dc504c0 100644 --- a/src/js/exports.js +++ b/src/js/exports.js @@ -7,6 +7,6 @@ global.getuid = getuid; //these exports are just for debugging in the browser global.snapshot = DB.getSnapshot; -global.config = config; +global.config = Config; // global.addnotif = Notifications.add; global.link = linkWithGoogle; diff --git a/src/js/global-dependencies.js b/src/js/global-dependencies.js index ac6c4558b..4887816e8 100644 --- a/src/js/global-dependencies.js +++ b/src/js/global-dependencies.js @@ -34,3 +34,5 @@ import * as ThemeController from "./theme-controller"; import * as Caret from "./caret"; import * as CustomTextPopup from "./custom-text-popup"; import * as ManualRestart from "./manual-restart-tracker"; +import Config from "./config"; +import * as ConfigSet from "./config-set"; diff --git a/src/js/script.js b/src/js/script.js index 8e9339b2d..5e8e0b0e2 100644 --- a/src/js/script.js +++ b/src/js/script.js @@ -26,7 +26,7 @@ let time = 0; let timer = null; //funbox -let activeFunBox = "none"; +let activeFunbox = "none"; let memoryFunboxTimer = null; let memoryFunboxInterval = null; @@ -144,7 +144,7 @@ async function activateFunbox(funbox, mode) { $("#funBoxTheme").attr("href", ``); $("#words").removeClass("nospace"); // if (funbox === "none") { - activeFunBox = "none"; + activeFunbox = "none"; memoryFunboxInterval = clearInterval(memoryFunboxInterval); memoryFunboxTimer = null; $("#wordsWrapper").removeClass("hidden"); @@ -159,7 +159,7 @@ async function activateFunbox(funbox, mode) { if (mode === "style") { if (funbox != undefined) { $("#funBoxTheme").attr("href", `funbox/${funbox}.css`); - activeFunBox = funbox; + activeFunbox = funbox; } if (funbox === "simon_says") { @@ -179,14 +179,14 @@ async function activateFunbox(funbox, mode) { } else if (mode === "script") { if (funbox === "tts") { $("#funBoxTheme").attr("href", `funbox/simon_says.css`); - config.keymapMode = "off"; + ConfigSet.keymapMode("off"); settingsGroups.keymapMode.updateButton(); restartTest(); } else if (funbox === "layoutfluid") { - config.keymapMode = "on"; + ConfigSet.keymapMode("on"); setKeymapMode("next"); settingsGroups.keymapMode.updateButton(); - config.savedLayout = config.layout; + ConfigSet.savedLayout(Config.layout); setLayout("qwerty"); settingsGroups.layout.updateButton(); setKeymapLayout("qwerty"); @@ -196,7 +196,7 @@ async function activateFunbox(funbox, mode) { setMode("words"); setShowAllLines(true, true); restartTest(false, true); - if (config.keymapMode === "next") { + if (Config.keymapMode === "next") { setKeymapMode("react"); } } else if (funbox === "nospace") { @@ -204,27 +204,21 @@ async function activateFunbox(funbox, mode) { setHighlightMode("letter", true); restartTest(false, true); } - activeFunBox = funbox; + activeFunbox = funbox; } if (funbox !== "layoutfluid" || mode !== "script") { - if (config.layout !== config.savedLayout) { - setLayout(config.savedLayout); + if (Config.layout !== Config.savedLayout) { + setLayout(Config.savedLayout); settingsGroups.layout.updateButton(); } } - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); return true; } function toggleScriptFunbox(...params) { - if (activeFunBox === "tts") { + if (activeFunbox === "tts") { var msg = new SpeechSynthesisUtterance(); msg.text = params[0]; msg.lang = "en-US"; @@ -252,7 +246,7 @@ function setFocus(foc) { if (testActive) { Caret.stopAnimation(); } else { - Caret.startAnimation(config); + Caret.startAnimation(); } $("#top").removeClass("focus"); $("#bottom").removeClass("focus"); @@ -275,24 +269,24 @@ async function initWords() { // currentCorrected = ""; currentInput = ""; - let language = await Misc.getLanguage(config.language); - if (language && language.name !== config.language) { - config.language = "english"; + let language = await Misc.getLanguage(Config.language); + if (language && language.name !== Config.language) { + ConfigSet.language("english"); } if (!language) { - config.language = "english"; - language = await Misc.getLanguage(config.language); + ConfigSet.language("english"); + language = await Misc.getLanguage(Config.language); } if ( - config.mode == "time" || - config.mode == "words" || - config.mode == "custom" + Config.mode == "time" || + Config.mode == "words" || + Config.mode == "custom" ) { let wordsBound = 100; - if (config.showAllLines) { - if (config.mode === "custom") { + if (Config.showAllLines) { + if (Config.mode === "custom") { if (CustomText.isWordRandom) { wordsBound = CustomText.word; } else if (CustomText.isTimeRandom) { @@ -300,29 +294,29 @@ async function initWords() { } else { wordsBound = CustomText.text.length; } - } else if (config.mode != "time") { - wordsBound = config.words; + } else if (Config.mode != "time") { + wordsBound = Config.words; } } else { - if (config.mode === "words" && config.words < wordsBound) { - wordsBound = config.words; + if (Config.mode === "words" && Config.words < wordsBound) { + wordsBound = Config.words; } if ( - config.mode == "custom" && + Config.mode == "custom" && CustomText.isWordRandom && CustomText.word < wordsBound ) { wordsBound = CustomText.word; } if ( - config.mode == "custom" && + Config.mode == "custom" && CustomText.isTimeRandom && CustomText.time < wordsBound ) { wordsBound = 100; } if ( - config.mode == "custom" && + Config.mode == "custom" && !CustomText.isWordRandom && CustomText.text.length < wordsBound ) { @@ -331,24 +325,24 @@ async function initWords() { } if ( - (config.mode === "custom" && + (Config.mode === "custom" && CustomText.isWordRandom && CustomText.word == 0) || - (config.mode === "custom" && + (Config.mode === "custom" && CustomText.isTimeRandom && CustomText.time == 0) ) { wordsBound = 100; } - if (config.mode === "words" && config.words === 0) { + if (Config.mode === "words" && Config.words === 0) { wordsBound = 100; } - if (activeFunBox === "plus_one") { + if (activeFunbox === "plus_one") { wordsBound = 2; } let wordset = language.words; - if (config.mode == "custom") { + if (Config.mode == "custom") { wordset = CustomText.text; } for (let i = 0; i < wordsBound; i++) { @@ -356,24 +350,24 @@ async function initWords() { const previousWord = wordsList[i - 1]; const previousWord2 = wordsList[i - 2]; if ( - config.mode == "custom" && + Config.mode == "custom" && (CustomText.isWordRandom || CustomText.isTimeRandom) ) { randomWord = wordset[Math.floor(Math.random() * wordset.length)]; - } else if (config.mode == "custom" && !CustomText.isWordRandom) { + } else if (Config.mode == "custom" && !CustomText.isWordRandom) { randomWord = CustomText.text[i]; } else { while ( randomWord == previousWord || randomWord == previousWord2 || - (!config.punctuation && randomWord == "I") || + (!Config.punctuation && randomWord == "I") || randomWord.indexOf(" ") > -1 ) { randomWord = wordset[Math.floor(Math.random() * wordset.length)]; } } - if (activeFunBox === "rAnDoMcAsE") { + if (activeFunbox === "rAnDoMcAsE") { let randomcaseword = ""; for (let i = 0; i < randomWord.length; i++) { if (i % 2 != 0) { @@ -383,23 +377,23 @@ async function initWords() { } } randomWord = randomcaseword; - } else if (activeFunBox === "gibberish") { + } else if (activeFunbox === "gibberish") { randomWord = Misc.getGibberish(); - } else if (activeFunBox === "58008") { + } else if (activeFunbox === "58008") { setToggleSettings(false, true); randomWord = Misc.getNumbers(7); - } else if (activeFunBox === "specials") { + } else if (activeFunbox === "specials") { setToggleSettings(false, true); randomWord = Misc.getSpecials(); - } else if (activeFunBox === "ascii") { + } else if (activeFunbox === "ascii") { setToggleSettings(false, true); randomWord = Misc.getASCII(); } - if (config.punctuation) { + if (Config.punctuation) { randomWord = punctuateWord(previousWord, randomWord, i, wordsBound); } - if (config.numbers) { + if (Config.numbers) { if (Math.random() < 0.1) { randomWord = Misc.getNumbers(4); } @@ -411,14 +405,14 @@ async function initWords() { wordsList.push(randomWord); } - } else if (config.mode == "quote") { - // setLanguage(config.language.replace(/_\d*k$/g, ""), true); + } else if (Config.mode == "quote") { + // setLanguage(Config.language.replace(/_\d*k$/g, ""), true); - let quotes = await Misc.getQuotes(config.language.replace(/_\d*k$/g, "")); + let quotes = await Misc.getQuotes(Config.language.replace(/_\d*k$/g, "")); if (quotes.length === 0) { Notifications.add( - `No ${config.language.replace(/_\d*k$/g, "")} quotes found`, + `No ${Config.language.replace(/_\d*k$/g, "")} quotes found`, 0 ); testRestarting = false; @@ -428,8 +422,8 @@ async function initWords() { } let rq; - if (config.quoteLength != -2) { - let quoteLengths = config.quoteLength; + if (Config.quoteLength != -2) { + let quoteLengths = Config.quoteLength; let groupIndex; if (quoteLengths.length > 1) { groupIndex = @@ -495,7 +489,7 @@ async function initWords() { } else { $("#words").removeClass("withLigatures"); } - // if (config.mode == "zen") { + // if (Config.mode == "zen") { // // Creating an empty active word element for zen mode // $("#words").append('
'); // $("#words").css("height", "auto"); @@ -520,7 +514,7 @@ function setToggleSettings(state, nosave) { function emulateLayout(event) { function emulatedLayoutShouldShiftKey(event, newKeyPreview) { - if (config.capsLockBackspace) return event.shiftKey; + if (Config.capsLockBackspace) return event.shiftKey; const isCapsLockHeld = event.originalEvent.getModifierState("CapsLock"); if (isCapsLockHeld) return Misc.isASCIILetter(newKeyPreview) !== event.shiftKey; @@ -539,9 +533,9 @@ function emulateLayout(event) { let newEvent = event; try { - if (config.layout === "default") { + if (Config.layout === "default") { //override the caps lock modifier for the default layout if needed - if (config.capsLockBackspace && Misc.isASCIILetter(newEvent.key)) { + if (Config.capsLockBackspace && Misc.isASCIILetter(newEvent.key)) { replaceEventKey( newEvent, newEvent.shiftKey @@ -602,7 +596,7 @@ function emulateLayout(event) { "Slash", "Space", ]; - const layoutMap = layouts[config.layout].keys; + const layoutMap = layouts[Config.layout].keys; let mapIndex; for (let i = 0; i < keyEventCodes.length; i++) { @@ -628,7 +622,7 @@ function punctuateWord(previousWord, currentWord, index, maxindex) { Misc.getLastChar(previousWord) == "." || Misc.getLastChar(previousWord) == "?" || Misc.getLastChar(previousWord) == "!") && - config.language.split("_")[0] != "code" + Config.language.split("_")[0] != "code" ) { //always capitalise the first word or if there was a dot unless using a code alphabet word = Misc.capitalizeFirstLetter(word); @@ -643,13 +637,13 @@ function punctuateWord(previousWord, currentWord, index, maxindex) { if (rand <= 0.8) { word += "."; } else if (rand > 0.8 && rand < 0.9) { - if (config.language.split("_")[0] == "french") { + if (Config.language.split("_")[0] == "french") { word = "?"; } else { word += "?"; } } else { - if (config.language.split("_")[0] == "french") { + if (Config.language.split("_")[0] == "french") { word = "!"; } else { word += "!"; @@ -659,14 +653,14 @@ function punctuateWord(previousWord, currentWord, index, maxindex) { Math.random() < 0.01 && Misc.getLastChar(previousWord) != "," && Misc.getLastChar(previousWord) != "." && - config.language.split("_")[0] !== "russian" + Config.language.split("_")[0] !== "russian" ) { word = `"${word}"`; } else if ( Math.random() < 0.011 && Misc.getLastChar(previousWord) != "," && Misc.getLastChar(previousWord) != "." && - config.language.split("_")[0] !== "russian" + Config.language.split("_")[0] !== "russian" ) { word = `'${word}'`; } else if ( @@ -674,7 +668,7 @@ function punctuateWord(previousWord, currentWord, index, maxindex) { Misc.getLastChar(previousWord) != "," && Misc.getLastChar(previousWord) != "." ) { - if (config.language.split("_")[0] == "code") { + if (Config.language.split("_")[0] == "code") { let r = Math.random(); if (r < 0.25) { word = `(${word})`; @@ -689,7 +683,7 @@ function punctuateWord(previousWord, currentWord, index, maxindex) { word = `(${word})`; } } else if (Math.random() < 0.013) { - if (config.language.split("_")[0] == "french") { + if (Config.language.split("_")[0] == "french") { word = ":"; } else { word += ":"; @@ -707,14 +701,14 @@ function punctuateWord(previousWord, currentWord, index, maxindex) { Misc.getLastChar(previousWord) != "." && Misc.getLastChar(previousWord) != ";" ) { - if (config.language.split("_")[0] == "french") { + if (Config.language.split("_")[0] == "french") { word = ";"; } else { word += ";"; } } else if (Math.random() < 0.2 && Misc.getLastChar(previousWord) != ",") { word += ","; - } else if (Math.random() < 0.25 && config.language.split("_")[0] == "code") { + } else if (Math.random() < 0.25 && Config.language.split("_")[0] == "code") { let specials = ["{", "}", "[", "]", "(", ")", ";", "=", "%", "/"]; word = specials[Math.floor(Math.random() * 10)]; @@ -724,23 +718,23 @@ function punctuateWord(previousWord, currentWord, index, maxindex) { function addWord() { let bound = 100; - if (activeFunBox === "plus_one") bound = 1; + if (activeFunbox === "plus_one") bound = 1; if ( wordsList.length - inputHistory.length > bound || - (config.mode === "words" && - wordsList.length >= config.words && - config.words > 0) || - (config.mode === "custom" && + (Config.mode === "words" && + wordsList.length >= Config.words && + Config.words > 0) || + (Config.mode === "custom" && CustomText.isWordRandom && wordsList.length >= CustomText.word && CustomText.word != 0) || - (config.mode === "custom" && + (Config.mode === "custom" && !CustomText.isWordRandom && wordsList.length >= CustomText.text.length) ) return; const language = - config.mode !== "custom" + Config.mode !== "custom" ? Misc.getCurrentLanguage() : { //borrow the direction of the current language @@ -758,25 +752,25 @@ function addWord() { .toLowerCase(); if ( - config.mode === "custom" && + Config.mode === "custom" && CustomText.isWordRandom && wordset.length < 3 ) { randomWord = wordset[Math.floor(Math.random() * wordset.length)]; - } else if (config.mode == "custom" && !CustomText.isWordRandom) { + } else if (Config.mode == "custom" && !CustomText.isWordRandom) { randomWord = CustomText.text[wordsList.length]; } else { while ( previousWordStripped == randomWord || previousWord2Stripped == randomWord || randomWord.indexOf(" ") > -1 || - (!config.punctuation && randomWord == "I") + (!Config.punctuation && randomWord == "I") ) { randomWord = wordset[Math.floor(Math.random() * wordset.length)]; } } - if (activeFunBox === "rAnDoMcAsE") { + if (activeFunbox === "rAnDoMcAsE") { let randomcaseword = ""; for (let i = 0; i < randomWord.length; i++) { if (i % 2 != 0) { @@ -786,20 +780,20 @@ function addWord() { } } randomWord = randomcaseword; - } else if (activeFunBox === "gibberish") { + } else if (activeFunbox === "gibberish") { randomWord = Misc.getGibberish(); - } else if (activeFunBox === "58008") { + } else if (activeFunbox === "58008") { randomWord = Misc.getNumbers(7); - } else if (activeFunBox === "specials") { + } else if (activeFunbox === "specials") { randomWord = Misc.getSpecials(); - } else if (activeFunBox === "ascii") { + } else if (activeFunbox === "ascii") { randomWord = Misc.getASCII(); } - if (config.punctuation && config.mode != "custom") { + if (Config.punctuation && Config.mode != "custom") { randomWord = punctuateWord(previousWord, randomWord, wordsList.length, 0); } - if (config.numbers && config.mode != "custom") { + if (Config.numbers && Config.mode != "custom") { if (Math.random() < 0.1) { randomWord = Misc.getNumbers(4); } @@ -820,7 +814,7 @@ function showWords() { let wordsHTML = ""; let newlineafter = false; - if (config.mode !== "zen") { + if (Config.mode !== "zen") { for (let i = 0; i < wordsList.length; i++) { newlineafter = false; wordsHTML += `
`; @@ -848,8 +842,8 @@ function showWords() { const wordHeight = $(document.querySelector(".word")).outerHeight(true); const wordsHeight = $(document.querySelector("#words")).outerHeight(true); if ( - config.showAllLines && - config.mode != "time" && + Config.showAllLines && + Config.mode != "time" && !(CustomText.isWordRandom && CustomText.word == 0) && !CustomText.isTimeRandom ) { @@ -871,22 +865,22 @@ function showWords() { $(".outOfFocusWarning").css("line-height", wordHeight * 3 + "px"); } - if (config.mode === "zen") { + if (Config.mode === "zen") { $(document.querySelector(".word")).remove(); } - if (config.keymapMode === "next") { + if (Config.keymapMode === "next") { updateHighlightedKeymapKey(); } updateActiveElement(); - Caret.updatePosition(currentInput, config); + Caret.updatePosition(currentInput); } (function (history) { var pushState = history.pushState; history.pushState = function (state) { - if (activeFunBox === "memory" && state !== "/") { + if (activeFunbox === "memory" && state !== "/") { memoryFunboxInterval = clearInterval(memoryFunboxInterval); memoryFunboxTimer = null; } @@ -896,10 +890,10 @@ function showWords() { function updateActiveElement(backspace) { let active = document.querySelector("#words .active"); - if (config.mode == "zen" && backspace) { + if (Config.mode == "zen" && backspace) { active.remove(); } else if (active !== null) { - if (config.highlightMode == "word") { + if (Config.highlightMode == "word") { active.querySelectorAll("letter").forEach((e) => { e.classList.remove("correct"); }); @@ -913,7 +907,7 @@ function updateActiveElement(backspace) { activeWord.classList.add("active"); activeWord.classList.remove("error"); activeWordTop = document.querySelector("#words .active").offsetTop; - if (config.highlightMode == "word") { + if (Config.highlightMode == "word") { activeWord.querySelectorAll("letter").forEach((e) => { e.classList.add("correct"); }); @@ -923,7 +917,7 @@ function updateActiveElement(backspace) { } function updateWordElement(showError) { - // if (config.mode == "zen") return; + // if (Config.mode == "zen") return; let input = currentInput; let wordAtIndex; @@ -934,7 +928,7 @@ function updateWordElement(showError) { let newlineafter = false; - if (config.mode === "zen") { + if (Config.mode === "zen") { for (let i = 0; i < currentInput.length; i++) { if (currentInput[i] === "\t") { ret += ``; @@ -946,7 +940,7 @@ function updateWordElement(showError) { } } } else { - if (config.highlightMode == "word") { + if (Config.highlightMode == "word") { //only for word highlight let correctSoFar = false; @@ -955,7 +949,7 @@ function updateWordElement(showError) { correctSoFar = true; } let classString = correctSoFar ? "correct" : "incorrect"; - if (config.blindMode) { + if (Config.blindMode) { classString = "correct"; } @@ -967,7 +961,7 @@ function updateWordElement(showError) { //show any extra letters if hide extra letters is disabled if ( currentInput.length > currentWord.length && - !config.hideExtraLetters + !Config.hideExtraLetters ) { for (let i = currentWord.length; i < currentInput.length; i++) { let letter = currentInput[i]; @@ -1000,7 +994,7 @@ function updateWordElement(showError) { if (charCorrect) { ret += `${currentLetter}`; } else { - // if (config.difficulty == "master") { + // if (Config.difficulty == "master") { // if (!resultVisible) { // failTest(); // } @@ -1011,7 +1005,7 @@ function updateWordElement(showError) { } } else { if (currentLetter == undefined) { - if (!config.hideExtraLetters) { + if (!Config.hideExtraLetters) { let letter = input[i]; if (letter == " " || letter == "\t" || letter == "\n") { letter = "_"; @@ -1022,7 +1016,7 @@ function updateWordElement(showError) { ret += `` + currentLetter + - (config.indicateTypos ? `${input[i]}` : "") + + (Config.indicateTypos ? `${input[i]}` : "") + ""; } } @@ -1052,15 +1046,15 @@ function highlightBadWord(index, showError) { } function showTimer() { - let op = config.showTimerProgress ? config.timerOpacity : 0; - if (config.mode != "zen" && config.timerStyle === "bar") { + let op = Config.showTimerProgress ? Config.timerOpacity : 0; + if (Config.mode != "zen" && Config.timerStyle === "bar") { $("#timerWrapper").stop(true, true).removeClass("hidden").animate( { opacity: op, }, 125 ); - } else if (config.timerStyle === "text") { + } else if (Config.timerStyle === "text") { $("#timerNumber") .stop(true, true) .removeClass("hidden") @@ -1071,7 +1065,7 @@ function showTimer() { }, 125 ); - } else if (config.mode == "zen" || config.timerStyle === "mini") { + } else if (Config.mode == "zen" || Config.timerStyle === "mini") { if (op > 0) { $("#miniTimerAndLiveWpm .time") .stop(true, true) @@ -1113,15 +1107,15 @@ function hideTimer() { } function restartTimer() { - if (config.timerStyle === "bar") { - if (config.mode === "time") { + if (Config.timerStyle === "bar") { + if (Config.mode === "time") { $("#timer").stop(true, true).animate( { width: "100vw", }, 0 ); - } else if (config.mode === "words" || config.mode === "custom") { + } else if (Config.mode === "words" || Config.mode === "custom") { $("#timer").stop(true, true).animate( { width: "0vw", @@ -1133,16 +1127,16 @@ function restartTimer() { } function updateTimer() { - if (!config.showTimerProgress) return; + if (!Config.showTimerProgress) return; if ( - config.mode === "time" || - (config.mode === "custom" && CustomText.isTimeRandom) + Config.mode === "time" || + (Config.mode === "custom" && CustomText.isTimeRandom) ) { - let maxtime = config.time; - if (config.mode === "custom" && CustomText.isTimeRandom) { + let maxtime = Config.time; + if (Config.mode === "custom" && CustomText.isTimeRandom) { maxtime = CustomText.time; } - if (config.timerStyle === "bar") { + if (Config.timerStyle === "bar") { let percent = 100 - ((time + 1) / maxtime) * 100; $("#timer") .stop(true, true) @@ -1153,13 +1147,13 @@ function updateTimer() { 1000, "linear" ); - } else if (config.timerStyle === "text") { + } else if (Config.timerStyle === "text") { let displayTime = Misc.secondsToString(maxtime - time); if (maxtime === 0) { displayTime = Misc.secondsToString(time); } $("#timerNumber").html("
" + displayTime + "
"); - } else if (config.timerStyle === "mini") { + } else if (Config.timerStyle === "mini") { let displayTime = Misc.secondsToString(maxtime - time); if (maxtime === 0) { displayTime = Misc.secondsToString(time); @@ -1167,16 +1161,16 @@ function updateTimer() { $("#miniTimerAndLiveWpm .time").html(displayTime); } } else if ( - config.mode === "words" || - config.mode === "custom" || - config.mode === "quote" + Config.mode === "words" || + Config.mode === "custom" || + Config.mode === "quote" ) { - if (config.timerStyle === "bar") { + if (Config.timerStyle === "bar") { let outof = wordsList.length; - if (config.mode === "words") { - outof = config.words; + if (Config.mode === "words") { + outof = Config.words; } - if (config.mode === "custom") { + if (Config.mode === "custom") { if (CustomText.isWordRandom) { outof = CustomText.word; } else { @@ -1192,12 +1186,12 @@ function updateTimer() { }, 250 ); - } else if (config.timerStyle === "text") { + } else if (Config.timerStyle === "text") { let outof = wordsList.length; - if (config.mode === "words") { - outof = config.words; + if (Config.mode === "words") { + outof = Config.words; } - if (config.mode === "custom") { + if (Config.mode === "custom") { if (CustomText.isWordRandom) { outof = CustomText.word; } else { @@ -1211,26 +1205,26 @@ function updateTimer() { "
" + `${inputHistory.length}/${outof}` + "
" ); } - } else if (config.timerStyle === "mini") { + } else if (Config.timerStyle === "mini") { let outof = wordsList.length; - if (config.mode === "words") { - outof = config.words; + if (Config.mode === "words") { + outof = Config.words; } - if (config.mode === "custom") { + if (Config.mode === "custom") { if (CustomText.isWordRandom) { outof = CustomText.word; } else { outof = CustomText.text.length; } } - if (config.words === 0) { + if (Config.words === 0) { $("#miniTimerAndLiveWpm .time").html(`${inputHistory.length}`); } else { $("#miniTimerAndLiveWpm .time").html(`${inputHistory.length}/${outof}`); } } - } else if (config.mode == "zen") { - if (config.timerStyle === "text") { + } else if (Config.mode == "zen") { + if (Config.timerStyle === "text") { $("#timerNumber").html("
" + `${inputHistory.length}` + "
"); } else { $("#miniTimerAndLiveWpm .time").html(`${inputHistory.length}`); @@ -1295,7 +1289,7 @@ function flashPressedKeymapKey(key, correct) { } try { - if (correct || config.blindMode) { + if (correct || Config.blindMode) { $(key) .stop(true, true) .css({ @@ -1403,7 +1397,7 @@ function countChars() { let spaces = 0; let correctspaces = 0; for (let i = 0; i < inputHistory.length; i++) { - let word = config.mode == "zen" ? inputHistory[i] : wordsList[i]; + let word = Config.mode == "zen" ? inputHistory[i] : wordsList[i]; if (inputHistory[i] === "") { //last word that was not started continue; @@ -1455,7 +1449,7 @@ function countChars() { } correctChars += toAdd.correct; incorrectChars += toAdd.incorrect; - if (i === inputHistory.length - 1 && config.mode == "time") { + if (i === inputHistory.length - 1 && Config.mode == "time") { //last word - check if it was all correct - add to correct word chars if (toAdd.incorrect === 0) correctWordChars += toAdd.correct; } else { @@ -1466,7 +1460,7 @@ function countChars() { spaces++; } } - if (activeFunBox === "nospace") { + if (activeFunbox === "nospace") { spaces = 0; correctspaces = 0; } @@ -1475,7 +1469,7 @@ function countChars() { correctWordChars: correctWordChars, allCorrectChars: correctChars, incorrectChars: - config.mode == "zen" ? TestStats.accuracy.incorrect : incorrectChars, + Config.mode == "zen" ? TestStats.accuracy.incorrect : incorrectChars, extraChars: extraChars, missedChars: missedChars, correctSpaces: correctspaces, @@ -1548,7 +1542,7 @@ function failTest() { let resultCalculating = false; function showResult(difficultyFailed = false) { if (!testActive) return; - if (config.mode == "zen" && currentInput.length != 0) { + if (Config.mode == "zen" && currentInput.length != 0) { inputHistory.push(currentInput); correctedHistory.push(currentCorrected); } @@ -1593,8 +1587,8 @@ function showResult(difficultyFailed = false) { $("#result #resultWordsHistory").addClass("hidden"); - if (config.alwaysShowDecimalPlaces) { - if (config.alwaysShowCPM == false) { + if (Config.alwaysShowDecimalPlaces) { + if (Config.alwaysShowCPM == false) { $("#result .stats .wpm .top .text").text("wpm"); if (inf) { $("#result .stats .wpm .bottom").text("Infinite"); @@ -1634,7 +1628,7 @@ function showResult(difficultyFailed = false) { ); } else { //not showing decimal places - if (config.alwaysShowCPM == false) { + if (Config.alwaysShowCPM == false) { $("#result .stats .wpm .top .text").text("wpm"); $("#result .stats .wpm .bottom").attr( "aria-label", @@ -1707,15 +1701,15 @@ function showResult(difficultyFailed = false) { $("#result .stats .leaderboards").addClass("hidden"); let mode2 = ""; - if (config.mode === "time") { - mode2 = config.time; - } else if (config.mode === "words") { - mode2 = config.words; - } else if (config.mode === "custom") { + if (Config.mode === "time") { + mode2 = Config.time; + } else if (Config.mode === "words") { + mode2 = Config.words; + } else if (Config.mode === "custom") { mode2 = "custom"; - } else if (config.mode === "quote") { + } else if (Config.mode === "quote") { mode2 = randomQuote.id; - } else if (config.mode === "zen") { + } else if (Config.mode === "zen") { mode2 = "zen"; } @@ -1765,7 +1759,7 @@ function showResult(difficultyFailed = false) { consistency = 0; } - if (config.alwaysShowDecimalPlaces) { + if (Config.alwaysShowDecimalPlaces) { $("#result .stats .consistency .bottom").text( Misc.roundTo2(consistency) + "%" ); @@ -1789,7 +1783,7 @@ function showResult(difficultyFailed = false) { let maxChartVal = Math.max( ...[Math.max(...rawWpmPerSecond), Math.max(...TestStats.wpmHistory)] ); - if (!config.startGraphsAtZero) { + if (!Config.startGraphsAtZero) { ChartController.result.options.scales.yAxes[0].ticks.min = Math.min( ...TestStats.wpmHistory ); @@ -1831,12 +1825,12 @@ function showResult(difficultyFailed = false) { $("#result .stats .tags").addClass("hidden"); - let lang = config.language; + let lang = Config.language; let quoteLength = -1; - if (config.mode === "quote") { + if (Config.mode === "quote") { quoteLength = randomQuote.group; - lang = config.language.replace(/_\d*k$/g, ""); + lang = Config.language.replace(/_\d*k$/g, ""); } if (difficultyFailed) { @@ -1846,23 +1840,23 @@ function showResult(difficultyFailed = false) { } else if (sameWordset) { Notifications.add("Test invalid - repeated", 0); } else if ( - (config.mode === "time" && mode2 < 15 && mode2 > 0) || - (config.mode === "time" && mode2 == 0 && testtime < 15) || - (config.mode === "words" && mode2 < 10 && mode2 > 0) || - (config.mode === "words" && mode2 == 0 && testtime < 15) || - (config.mode === "custom" && + (Config.mode === "time" && mode2 < 15 && mode2 > 0) || + (Config.mode === "time" && mode2 == 0 && testtime < 15) || + (Config.mode === "words" && mode2 < 10 && mode2 > 0) || + (Config.mode === "words" && mode2 == 0 && testtime < 15) || + (Config.mode === "custom" && !CustomText.isWordRandom && !CustomText.isTimeRandom && CustomText.text.length < 10) || - (config.mode === "custom" && + (Config.mode === "custom" && CustomText.isWordRandom && !CustomText.isTimeRandom && CustomText.word < 10) || - (config.mode === "custom" && + (Config.mode === "custom" && !CustomText.isWordRandom && CustomText.isTimeRandom && CustomText.time < 15) || - (config.mode === "zen" && testtime < 15) + (Config.mode === "zen" && testtime < 15) ) { Notifications.add("Test too short", 0); } else { @@ -1889,7 +1883,7 @@ function showResult(difficultyFailed = false) { } let cdata = null; - if (config.mode === "custom") { + if (Config.mode === "custom") { cdata = {}; cdata.textLen = CustomText.text.length; cdata.isWordRandom = CustomText.isWordRandom; @@ -1911,11 +1905,11 @@ function showResult(difficultyFailed = false) { incorrectChars: stats.incorrectChars, allChars: stats.allChars, acc: stats.acc, - mode: config.mode, + mode: Config.mode, mode2: mode2, quoteLength: quoteLength, - punctuation: config.punctuation, - numbers: config.numbers, + punctuation: Config.punctuation, + numbers: Config.numbers, timestamp: Date.now(), language: lang, restartCount: TestStats.restartCount, @@ -1923,29 +1917,29 @@ function showResult(difficultyFailed = false) { TestStats.incompleteSeconds < 0 ? 0 : Misc.roundTo2(TestStats.incompleteSeconds), - difficulty: config.difficulty, + difficulty: Config.difficulty, testDuration: testtime, afkDuration: afkseconds, - blindMode: config.blindMode, - theme: config.theme, + blindMode: Config.blindMode, + theme: Config.theme, tags: activeTagsIds, keySpacing: TestStats.keypressTimings.spacing.array, keyDuration: TestStats.keypressTimings.duration.array, consistency: consistency, keyConsistency: keyConsistency, - funbox: activeFunBox, + funbox: activeFunbox, bailedOut: bailout, chartData: chartData, customText: cdata, }; - if (config.mode !== "custom") { + if (Config.mode !== "custom") { delete completedEvent.CustomText; } if ( - config.difficulty == "normal" || - ((config.difficulty == "master" || config.difficulty == "expert") && + Config.difficulty == "normal" || + ((Config.difficulty == "master" || Config.difficulty == "expert") && !difficultyFailed) ) { // restartCount = 0; @@ -1966,25 +1960,25 @@ function showResult(difficultyFailed = false) { let dontShowCrown = false; let pbDiff = 0; DB.getLocalPB( - config.mode, + Config.mode, mode2, - config.punctuation, - config.language, - config.difficulty + Config.punctuation, + Config.language, + Config.difficulty ).then((lpb) => { DB.getUserHighestWpm( - config.mode, + Config.mode, mode2, - config.punctuation, - config.language, - config.difficulty + Config.punctuation, + Config.language, + Config.difficulty ).then((highestwpm) => { hideCrown(); $("#result .stats .wpm .crown").attr("aria-label", ""); if (lpb < stats.wpm && stats.wpm < highestwpm) { dontShowCrown = true; } - if (config.mode == "quote") dontShowCrown = true; + if (ConfigSet.mode == "quote") dontShowCrown(true); if (lpb < stats.wpm) { //new pb based on local pbDiff = Math.abs(stats.wpm - lpb); @@ -2009,7 +2003,7 @@ function showResult(difficultyFailed = false) { borderDash: [2, 2], label: { backgroundColor: ThemeColors.sub, - fontFamily: config.fontFamily.replace(/_/g, " "), + fontFamily: Config.fontFamily.replace(/_/g, " "), fontSize: 11, fontStyle: "normal", fontColor: ThemeColors.bg, @@ -2032,7 +2026,7 @@ function showResult(difficultyFailed = false) { ); ChartController.result.update({ duration: 0 }); } - if (config.mode === "time" && (mode2 === 15 || mode2 === 60)) { + if (Config.mode === "time" && (mode2 === 15 || mode2 === 60)) { $("#result .stats .leaderboards").removeClass("hidden"); $("#result .stats .leaderboards .bottom").html("checking..."); } @@ -2047,25 +2041,25 @@ function showResult(difficultyFailed = false) { activeTags.forEach(async (tag) => { let tpb = await DB.getLocalTagPB( tag.id, - config.mode, + Config.mode, mode2, - config.punctuation, - config.language, - config.difficulty + Config.punctuation, + Config.language, + Config.difficulty ); $("#result .stats .tags .bottom").append(`
${tag.name}
`); - if (config.mode != "quote") { + if (Config.mode != "quote") { if (tpb < stats.wpm) { //new pb for that tag DB.saveLocalTagPB( tag.id, - config.mode, + Config.mode, mode2, - config.punctuation, - config.language, - config.difficulty, + Config.punctuation, + Config.language, + Config.difficulty, stats.wpm, stats.acc, stats.wpmRaw, @@ -2091,7 +2085,7 @@ function showResult(difficultyFailed = false) { borderDash: [2, 2], label: { backgroundColor: ThemeColors.sub, - fontFamily: config.fontFamily.replace(/_/g, " "), + fontFamily: Config.fontFamily.replace(/_/g, " "), fontSize: 11, fontStyle: "normal", fontColor: ThemeColors.bg, @@ -2194,7 +2188,7 @@ function showResult(difficultyFailed = false) { } if ( - config.mode === "time" && + Config.mode === "time" && (mode2 == "15" || mode2 == "60") && DB.getSnapshot() !== null ) { @@ -2207,7 +2201,7 @@ function showResult(difficultyFailed = false) { const glb = e.data.globalLeaderboard; let glbMemory; try { - glbMemory = DB.getSnapshot().lbMemory[config.mode + mode2] + glbMemory = DB.getSnapshot().lbMemory[Config.mode + mode2] .global; } catch { glbMemory = null; @@ -2221,7 +2215,7 @@ function showResult(difficultyFailed = false) { dontShowGlobalDiff = true; globalLbDiff = glbMemory - glb.insertedAt; DB.updateLbMemory( - config.mode, + Config.mode, mode2, "global", glb.insertedAt @@ -2232,7 +2226,7 @@ function showResult(difficultyFailed = false) { if (glb.newBest) { globalLbDiff = glbMemory - glb.insertedAt; DB.updateLbMemory( - config.mode, + Config.mode, mode2, "global", glb.insertedAt @@ -2242,7 +2236,7 @@ function showResult(difficultyFailed = false) { } else { globalLbDiff = glbMemory - glb.foundAt; DB.updateLbMemory( - config.mode, + Config.mode, mode2, "global", glb.foundAt @@ -2268,7 +2262,7 @@ function showResult(difficultyFailed = false) { const dlb = e.data.dailyLeaderboard; let dlbMemory; try { - dlbMemory = DB.getSnapshot().lbMemory[config.mode + mode2] + dlbMemory = DB.getSnapshot().lbMemory[Config.mode + mode2] .daily; } catch { dlbMemory = null; @@ -2282,7 +2276,7 @@ function showResult(difficultyFailed = false) { dontShowDailyDiff = true; dailyLbDiff = dlbMemory - dlb.insertedAt; DB.updateLbMemory( - config.mode, + Config.mode, mode2, "daily", dlb.insertedAt @@ -2292,7 +2286,7 @@ function showResult(difficultyFailed = false) { if (dlb.newBest) { dailyLbDiff = dlbMemory - dlb.insertedAt; DB.updateLbMemory( - config.mode, + Config.mode, mode2, "daily", dlb.insertedAt @@ -2302,7 +2296,7 @@ function showResult(difficultyFailed = false) { } else { dailyLbDiff = dlbMemory - dlb.foundAt; DB.updateLbMemory( - config.mode, + Config.mode, mode2, "daily", dlb.foundAt @@ -2369,11 +2363,11 @@ function showResult(difficultyFailed = false) { //new pb showCrown(); DB.saveLocalPB( - config.mode, + Config.mode, mode2, - config.punctuation, - config.language, - config.difficulty, + Config.punctuation, + Config.language, + Config.difficulty, stats.wpm, stats.acc, stats.wpmRaw, @@ -2424,56 +2418,56 @@ function showResult(difficultyFailed = false) { let testType = ""; - if (config.mode === "quote") { + if (Config.mode === "quote") { let qlen = ""; - if (config.quoteLength === 0) { + if (Config.quoteLength === 0) { qlen = "short "; - } else if (config.quoteLength === 1) { + } else if (Config.quoteLength === 1) { qlen = "medium "; - } else if (config.quoteLength === 2) { + } else if (Config.quoteLength === 2) { qlen = "long "; - } else if (config.quoteLength === 3) { + } else if (Config.quoteLength === 3) { qlen = "thicc "; } - testType += qlen + config.mode; + testType += qlen + Config.mode; } else { - testType += config.mode; + testType += Config.mode; } - if (config.mode == "time") { - testType += " " + config.time; - } else if (config.mode == "words") { - testType += " " + config.words; + if (Config.mode == "time") { + testType += " " + Config.time; + } else if (Config.mode == "words") { + testType += " " + Config.words; } if ( - config.mode != "custom" && - activeFunBox !== "gibberish" && - activeFunBox !== "58008" + Config.mode != "custom" && + activeFunbox !== "gibberish" && + activeFunbox !== "58008" ) { testType += "
" + lang; } - if (config.punctuation) { + if (Config.punctuation) { testType += "
punctuation"; } - if (config.numbers) { + if (Config.numbers) { testType += "
numbers"; } - if (config.blindMode) { + if (Config.blindMode) { testType += "
blind"; } - if (activeFunBox !== "none") { - testType += "
" + activeFunBox.replace(/_/g, " "); + if (activeFunbox !== "none") { + testType += "
" + activeFunbox.replace(/_/g, " "); } - if (config.difficulty == "expert") { + if (Config.difficulty == "expert") { testType += "
expert"; - } else if (config.difficulty == "master") { + } else if (Config.difficulty == "master") { testType += "
master"; } $("#result .stats .testType .bottom").html(testType); let otherText = ""; - if (config.layout !== "default") { - otherText += "
" + config.layout; + if (Config.layout !== "default") { + otherText += "
" + Config.layout; } if (difficultyFailed) { otherText += "
failed"; @@ -2508,7 +2502,7 @@ function showResult(difficultyFailed = false) { $("#result .stats .infoAndTags").removeClass("hidden"); } - if (config.mode === "quote") { + if (Config.mode === "quote") { $("#result .stats .source").removeClass("hidden"); $("#result .stats .source .bottom").html(randomQuote.source); } else { @@ -2524,7 +2518,7 @@ function showResult(difficultyFailed = false) { resultCalculating = false; $("#words").empty(); ChartController.result.resize(); - if (config.alwaysShowWordsHistory) { + if (Config.alwaysShowWordsHistory) { toggleResultWordsDisplay(); } }); @@ -2557,14 +2551,14 @@ function startTest() { updateTimer(); clearTimeout(timer); - if (activeFunBox === "memory") { + if (activeFunbox === "memory") { memoryFunboxInterval = clearInterval(memoryFunboxInterval); memoryFunboxTimer = null; $("#wordsWrapper").addClass("hidden"); } try { - if (config.paceCaret !== "off") + if (Config.paceCaret !== "off") movePaceCaret(performance.now() + paceCaret.spc * 1000); } catch (e) {} //use a recursive self-adjusting timer to avoid time drift @@ -2573,10 +2567,10 @@ function startTest() { const delay = expectedStepEnd - performance.now(); timer = setTimeout(function () { time++; - $(".pageTest #premidSecondsLeft").text(config.time - time); + $(".pageTest #premidSecondsLeft").text(Config.time - time); if ( - config.mode === "time" || - (config.mode === "custom" && CustomText.isTimeRandom) + Config.mode === "time" || + (Config.mode === "custom" && CustomText.isTimeRandom) ) { updateTimer(); } @@ -2588,31 +2582,31 @@ function startTest() { let acc = Misc.roundTo2(TestStats.calculateAccuracy()); - if (activeFunBox === "layoutfluid" && config.mode === "time") { + if (activeFunbox === "layoutfluid" && Config.mode === "time") { const layouts = ["qwerty", "dvorak", "colemak"]; let index = 0; - index = Math.floor(time / (config.time / 3)); + index = Math.floor(time / (Config.time / 3)); if ( - time == Math.floor(config.time / 3) - 3 || - time == (config.time / 3) * 2 - 3 + time == Math.floor(Config.time / 3) - 3 || + time == (Config.time / 3) * 2 - 3 ) { Notifications.add("3", 0, 1); } if ( - time == Math.floor(config.time / 3) - 2 || - time == Math.floor(config.time / 3) * 2 - 2 + time == Math.floor(Config.time / 3) - 2 || + time == Math.floor(Config.time / 3) * 2 - 2 ) { Notifications.add("2", 0, 1); } if ( - time == Math.floor(config.time / 3) - 1 || - time == Math.floor(config.time / 3) * 2 - 1 + time == Math.floor(Config.time / 3) - 1 || + time == Math.floor(Config.time / 3) * 2 - 1 ) { Notifications.add("1", 0, 1); } - if (config.layout !== layouts[index] && layouts[index] !== undefined) { + if (Config.layout !== layouts[index] && layouts[index] !== undefined) { Notifications.add(`--- !!! ${layouts[index]} !!! ---`, 0); } setLayout(layouts[index]); @@ -2623,26 +2617,26 @@ function startTest() { TestStats.pushKeypressesToHistory(); if ( - (config.minWpm === "custom" && - wpmAndRaw.wpm < parseInt(config.minWpmCustomSpeed) && + (Config.minWpm === "custom" && + wpmAndRaw.wpm < parseInt(Config.minWpmCustomSpeed) && currentWordIndex > 3) || - (config.minAcc === "custom" && acc < parseInt(config.minAccCustom)) + (Config.minAcc === "custom" && acc < parseInt(Config.minAccCustom)) ) { clearTimeout(timer); failTest(); return; } if ( - config.mode == "time" || - (config.mode === "custom" && CustomText.isTimeRandom) + Config.mode == "time" || + (Config.mode === "custom" && CustomText.isTimeRandom) ) { if ( - (time >= config.time && - config.time !== 0 && - config.mode === "time") || + (time >= Config.time && + Config.time !== 0 && + Config.mode === "time") || (time >= CustomText.time && CustomText.time !== 0 && - config.mode === "custom") + Config.mode === "custom") ) { //times up clearTimeout(timer); @@ -2662,18 +2656,18 @@ function startTest() { function restartTest(withSameWordset = false, nosave = false, event) { // if (!manualRestart) { // if ( - // (config.mode === "words" && config.words < 1000 && config.words > 0) || - // (config.mode === "time" && config.time < 3600 && config.time > 0) || - // config.mode === "quote" || - // (config.mode === "custom" && + // (Config.mode === "words" && Config.words < 1000 && Config.words > 0) || + // (Config.mode === "time" && Config.time < 3600 && Config.time > 0) || + // Config.mode === "quote" || + // (Config.mode === "custom" && // CustomText.isWordRandom && // CustomText.word < 1000 && // CustomText.word != 0) || - // (config.mode === "custom" && + // (Config.mode === "custom" && // CustomText.isTimeRandom && // CustomText.time < 3600 && // CustomText.time != 0) || - // (config.mode === "custom" && + // (Config.mode === "custom" && // !CustomText.isWordRandom && // CustomText.text.length < 1000) // ) { @@ -2703,18 +2697,18 @@ function restartTest(withSameWordset = false, nosave = false, event) { } catch {} } try { - if (config.mode !== "zen") event.preventDefault(); + if (Config.mode !== "zen") event.preventDefault(); } catch {} if ( !Misc.canQuickRestart( - config.mode, - config.words, - config.time, + Config.mode, + Config.words, + Config.time, CustomText ) ) { let message = "Use your mouse to confirm."; - if (config.quickTab) + if (Config.quickTab) message = "Press shift + tab or use your mouse to confirm."; Notifications.add("Quick restart disabled. " + message, 0, 3); return; @@ -2735,7 +2729,7 @@ function restartTest(withSameWordset = false, nosave = false, event) { // restartCount++; } - if (config.mode == "zen") { + if (Config.mode == "zen") { $("#words").empty(); } @@ -2782,11 +2776,11 @@ function restartTest(withSameWordset = false, nosave = false, event) { } if (resultVisible) { if ( - config.randomTheme !== "off" && + Config.randomTheme !== "off" && !pageTransition && - !config.customTheme + !Config.customTheme ) { - ThemeController.randomiseTheme(config); + ThemeController.randomiseTheme(); } } resultVisible = false; @@ -2816,10 +2810,10 @@ function restartTest(withSameWordset = false, nosave = false, event) { initPaceCaret(); showWords(); } - if (config.mode === "quote") { + if (Config.mode === "quote") { sameWordset = false; } - if (config.keymapMode !== "off") { + if (Config.keymapMode !== "off") { showKeymap(); } else { hideKeymap(); @@ -2829,7 +2823,7 @@ function restartTest(withSameWordset = false, nosave = false, event) { document.querySelector("#liveWpm").innerHTML = "0"; document.querySelector("#liveAcc").innerHTML = "100%"; - if (activeFunBox === "memory") { + if (activeFunbox === "memory") { memoryFunboxInterval = clearInterval(memoryFunboxInterval); memoryFunboxTimer = Math.round(Math.pow(wordsList.length, 1.2)); memoryFunboxInterval = setInterval(() => { @@ -2846,31 +2840,31 @@ function restartTest(withSameWordset = false, nosave = false, event) { } }, 1000); - if (config.keymapMode === "next") { + if (Config.keymapMode === "next") { setKeymapMode("react"); } } let mode2 = ""; - if (config.mode === "time") { - mode2 = config.time; - } else if (config.mode === "words") { - mode2 = config.words; - } else if (config.mode === "custom") { + if (Config.mode === "time") { + mode2 = Config.time; + } else if (Config.mode === "words") { + mode2 = Config.words; + } else if (Config.mode === "custom") { mode2 = "custom"; - } else if (config.mode === "quote") { + } else if (Config.mode === "quote") { mode2 = randomQuote.id; } let fbtext = ""; - if (activeFunBox !== "none") { - fbtext = " " + activeFunBox; + if (activeFunbox !== "none") { + fbtext = " " + activeFunbox; } $(".pageTest #premidTestMode").text( - `${config.mode} ${mode2} ${config.language}${fbtext}` + `${Config.mode} ${mode2} ${Config.language}${fbtext}` ); - $(".pageTest #premidSecondsLeft").text(config.time); + $(".pageTest #premidSecondsLeft").text(Config.time); - if (activeFunBox === "layoutfluid") { + if (activeFunbox === "layoutfluid") { setLayout("qwerty"); settingsGroups.layout.updateButton(); setKeymapLayout("qwerty"); @@ -2903,8 +2897,7 @@ function restartTest(withSameWordset = false, nosave = false, event) { sameWordset, textHasTab, paceCaret, - activeFunBox, - config + activeFunbox ); pageTransition = false; // console.log(TestStats.incompleteSeconds); @@ -2998,15 +2991,15 @@ function changePage(page) { function setMode(mode, nosave) { if (testRestarting) return; - if (mode !== "words" && activeFunBox === "memory") { + if (mode !== "words" && activeFunbox === "memory") { Notifications.add("Memory funbox can only be used with words mode.", 0); return; } - config.mode = mode; + ConfigSet.mode(mode); $("#top .config .mode .text-button").removeClass("active"); $("#top .config .mode .text-button[mode='" + mode + "']").addClass("active"); - if (config.mode == "time") { + if (Config.mode == "time") { $("#top .config .wordCount").addClass("hidden"); $("#top .config .time").removeClass("hidden"); $("#top .config .customText").addClass("hidden"); @@ -3015,7 +3008,7 @@ function setMode(mode, nosave) { $("#top .config .punctuationMode").removeClass("hidden"); $("#top .config .numbersMode").removeClass("hidden"); $("#top .config .quoteLength").addClass("hidden"); - } else if (config.mode == "words") { + } else if (Config.mode == "words") { $("#top .config .wordCount").removeClass("hidden"); $("#top .config .time").addClass("hidden"); $("#top .config .customText").addClass("hidden"); @@ -3024,20 +3017,14 @@ function setMode(mode, nosave) { $("#top .config .punctuationMode").removeClass("hidden"); $("#top .config .numbersMode").removeClass("hidden"); $("#top .config .quoteLength").addClass("hidden"); - } else if (config.mode == "custom") { + } else if (Config.mode == "custom") { if ( - activeFunBox === "58008" || - activeFunBox === "gibberish" || - activeFunBox === "ascii" + activeFunbox === "58008" || + activeFunbox === "gibberish" || + activeFunbox === "ascii" ) { - activeFunBox = "none"; - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + activeFunbox = "none"; + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); } $("#top .config .wordCount").addClass("hidden"); $("#top .config .time").addClass("hidden"); @@ -3049,7 +3036,7 @@ function setMode(mode, nosave) { $("#top .config .quoteLength").addClass("hidden"); setPunctuation(false, true); setNumbers(false, true); - } else if (config.mode == "quote") { + } else if (Config.mode == "quote") { setToggleSettings(false, nosave); $("#top .config .wordCount").addClass("hidden"); $("#top .config .time").addClass("hidden"); @@ -3060,14 +3047,14 @@ function setMode(mode, nosave) { $("#top .config .numbersMode").removeClass("hidden"); $("#result .stats .source").removeClass("hidden"); $("#top .config .quoteLength").removeClass("hidden"); - } else if (config.mode == "zen") { + } else if (Config.mode == "zen") { $("#top .config .wordCount").addClass("hidden"); $("#top .config .time").addClass("hidden"); $("#top .config .customText").addClass("hidden"); $("#top .config .punctuationMode").addClass("hidden"); $("#top .config .numbersMode").addClass("hidden"); $("#top .config .quoteLength").addClass("hidden"); - if (config.paceCaret != "off") { + if (Config.paceCaret != "off") { Notifications.add(`Pace caret will not work with zen mode.`, 0); } // setPaceCaret("off", true); @@ -3080,7 +3067,7 @@ function liveWpmAndRaw() { let correctWordChars = 0; let spaces = 0; for (let i = 0; i < inputHistory.length; i++) { - let word = config.mode == "zen" ? inputHistory[i] : wordsList[i]; + let word = Config.mode == "zen" ? inputHistory[i] : wordsList[i]; if (inputHistory[i] == word) { //the word is correct //+1 for space @@ -3097,7 +3084,7 @@ function liveWpmAndRaw() { if (wordsList[currentWordIndex] == currentInput) { correctWordChars += currentInput.length; } - if (activeFunBox === "nospace") { + if (activeFunbox === "nospace") { spaces = 0; } chars += currentInput.length; @@ -3111,16 +3098,16 @@ function liveWpmAndRaw() { } function updateLiveWpm(wpm, raw) { - if (!testActive || !config.showLiveWpm) { + if (!testActive || !Config.showLiveWpm) { hideLiveWpm(); } else { showLiveWpm(); } let number = wpm; - if (config.blindMode) { + if (Config.blindMode) { number = raw; } - if (config.alwaysShowCPM) { + if (Config.alwaysShowCPM) { number = Math.round(number * 5); } document.querySelector("#miniTimerAndLiveWpm .wpm").innerHTML = number; @@ -3128,13 +3115,13 @@ function updateLiveWpm(wpm, raw) { } function updateLiveAcc(acc) { - if (!testActive || !config.showLiveAcc) { + if (!testActive || !Config.showLiveAcc) { hideLiveAcc(); } else { showLiveAcc(); } let number = Math.floor(acc); - if (config.blindMode) { + if (Config.blindMode) { number = 100; } document.querySelector("#miniTimerAndLiveWpm .acc").innerHTML = number + "%"; @@ -3142,26 +3129,26 @@ function updateLiveAcc(acc) { } function showLiveWpm() { - if (!config.showLiveWpm) return; + if (!Config.showLiveWpm) return; if (!testActive) return; - if (config.timerStyle === "mini") { - // $("#miniTimerAndLiveWpm .wpm").css("opacity", config.timerOpacity); + if (Config.timerStyle === "mini") { + // $("#miniTimerAndLiveWpm .wpm").css("opacity", Config.timerOpacity); if (!$("#miniTimerAndLiveWpm .wpm").hasClass("hidden")) return; $("#miniTimerAndLiveWpm .wpm") .removeClass("hidden") .css("opacity", 0) .animate( { - opacity: config.timerOpacity, + opacity: Config.timerOpacity, }, 125 ); } else { - // $("#liveWpm").css("opacity", config.timerOpacity); + // $("#liveWpm").css("opacity", Config.timerOpacity); if (!$("#liveWpm").hasClass("hidden")) return; $("#liveWpm").removeClass("hidden").css("opacity", 0).animate( { - opacity: config.timerOpacity, + opacity: Config.timerOpacity, }, 125 ); @@ -3173,7 +3160,7 @@ function hideLiveWpm() { // $("#miniTimerAndLiveWpm .wpm").css("opacity", 0); $("#liveWpm").animate( { - opacity: config.timerOpacity, + opacity: Config.timerOpacity, }, 125, () => { @@ -3182,7 +3169,7 @@ function hideLiveWpm() { ); $("#miniTimerAndLiveWpm .wpm").animate( { - opacity: config.timerOpacity, + opacity: Config.timerOpacity, }, 125, () => { @@ -3192,26 +3179,26 @@ function hideLiveWpm() { } function showLiveAcc() { - if (!config.showLiveAcc) return; + if (!Config.showLiveAcc) return; if (!testActive) return; - if (config.timerStyle === "mini") { - // $("#miniTimerAndLiveWpm .wpm").css("opacity", config.timerOpacity); + if (Config.timerStyle === "mini") { + // $("#miniTimerAndLiveWpm .wpm").css("opacity", Config.timerOpacity); if (!$("#miniTimerAndLiveWpm .acc").hasClass("hidden")) return; $("#miniTimerAndLiveWpm .acc") .removeClass("hidden") .css("opacity", 0) .animate( { - opacity: config.timerOpacity, + opacity: Config.timerOpacity, }, 125 ); } else { - // $("#liveWpm").css("opacity", config.timerOpacity); + // $("#liveWpm").css("opacity", Config.timerOpacity); if (!$("#liveAcc").hasClass("hidden")) return; $("#liveAcc").removeClass("hidden").css("opacity", 0).animate( { - opacity: config.timerOpacity, + opacity: Config.timerOpacity, }, 125 ); @@ -3223,7 +3210,7 @@ function hideLiveAcc() { // $("#miniTimerAndLiveWpm .wpm").css("opacity", 0); $("#liveAcc").animate( { - opacity: config.timerOpacity, + opacity: Config.timerOpacity, }, 125, () => { @@ -3232,7 +3219,7 @@ function hideLiveAcc() { ); $("#miniTimerAndLiveWpm .acc").animate( { - opacity: config.timerOpacity, + opacity: Config.timerOpacity, }, 125, () => { @@ -3297,11 +3284,11 @@ async function loadWordsHistory() { incorrect: 0, missed: 0, }; - let length = config.mode == "zen" ? input.length : word.length; + let length = Config.mode == "zen" ? input.length : word.length; for (let c = 0; c < length; c++) { if (c < input.length) { //on char that still has a word list pair - if (config.mode == "zen" || input[c] == word[c]) { + if (Config.mode == "zen" || input[c] == word[c]) { wordstats.correct++; } else { wordstats.incorrect++; @@ -3311,15 +3298,15 @@ async function loadWordsHistory() { wordstats.missed++; } } - if (wordstats.incorrect !== 0 || config.mode !== "time") { - if (config.mode != "zen" && input !== word) { + if (wordstats.incorrect !== 0 || Config.mode !== "time") { + if (Config.mode != "zen" && input !== word) { wordEl = `
`; } } } else { - if (config.mode != "zen" && input !== word) { + if (Config.mode != "zen" && input !== word) { wordEl = `
`; @@ -3327,7 +3314,7 @@ async function loadWordsHistory() { } let loop; - if (config.mode == "zen" || input.length > word.length) { + if (Config.mode == "zen" || input.length > word.length) { //input is longer - extra characters possible (loop over input) loop = input.length; } else { @@ -3350,8 +3337,8 @@ async function loadWordsHistory() { ) { extraCorrected = "extraCorrected"; } - if (config.mode == "zen" || word[c] !== undefined) { - if (config.mode == "zen" || input[c] === word[c]) { + if (Config.mode == "zen" || word[c] !== undefined) { + if (Config.mode == "zen" || input[c] === word[c]) { if (correctedChar === input[c] || correctedChar === undefined) { wordEl += `${input[c]}`; } else { @@ -3621,7 +3608,7 @@ async function showQuoteSearchPopup() { } async function updateQuoteSearchResults(searchText) { - let quotes = await Misc.getQuotes(config.language); + let quotes = await Misc.getQuotes(Config.language); let reg = new RegExp(searchText, "i"); let found = []; quotes.quotes.forEach((quote) => { @@ -3702,45 +3689,45 @@ function hideQuoteSearchPopup() { async function initPaceCaret() { let mode2 = ""; - if (config.mode === "time") { - mode2 = config.time; - } else if (config.mode === "words") { - mode2 = config.words; - } else if (config.mode === "custom") { + if (Config.mode === "time") { + mode2 = Config.time; + } else if (Config.mode === "words") { + mode2 = Config.words; + } else if (Config.mode === "custom") { mode2 = "custom"; - } else if (config.mode === "quote") { + } else if (Config.mode === "quote") { mode2 = randomQuote.id; } let wpm; - if (config.paceCaret === "pb") { + if (Config.paceCaret === "pb") { wpm = await DB.getLocalPB( - config.mode, + Config.mode, mode2, - config.punctuation, - config.language, - config.difficulty + Config.punctuation, + Config.language, + Config.difficulty ); - } else if (config.paceCaret === "average") { + } else if (Config.paceCaret === "average") { let mode2 = ""; - if (config.mode === "time") { - mode2 = config.time; - } else if (config.mode === "words") { - mode2 = config.words; - } else if (config.mode === "custom") { + if (Config.mode === "time") { + mode2 = Config.time; + } else if (Config.mode === "words") { + mode2 = Config.words; + } else if (Config.mode === "custom") { mode2 = "custom"; - } else if (config.mode === "quote") { + } else if (Config.mode === "quote") { mode2 = randomQuote.id; } wpm = await DB.getUserAverageWpm10( - config.mode, + Config.mode, mode2, - config.punctuation, - config.language, - config.difficulty + Config.punctuation, + Config.language, + Config.difficulty ); console.log("avg pace " + wpm); - } else if (config.paceCaret === "custom") { - wpm = config.paceCaretCustomSpeed; + } else if (Config.paceCaret === "custom") { + wpm = Config.paceCaretCustomSpeed; } if (wpm < 1 || wpm == false || wpm == undefined || Number.isNaN(wpm)) { @@ -3763,13 +3750,7 @@ async function initPaceCaret() { timeout: null, }; - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); } function movePaceCaret(expectedStepEnd) { @@ -3792,7 +3773,7 @@ function movePaceCaret(expectedStepEnd) { paceCaret.currentLetterIndex = -1; paceCaret.currentWordIndex++; } - if (!config.blindMode) { + if (!Config.blindMode) { if (paceCaret.correction < 0) { while (paceCaret.correction < 0) { paceCaret.currentLetterIndex--; @@ -3868,7 +3849,7 @@ function movePaceCaret(expectedStepEnd) { let duration = expectedStepEnd - performance.now(); - if (config.smoothCaret) { + if (Config.smoothCaret) { caret.stop(true, true).animate( { left: newLeft, @@ -3899,11 +3880,11 @@ function movePaceCaret(expectedStepEnd) { } function resetPaceCaret() { - if (config.paceCaret === "off") return; + if (Config.paceCaret === "off") return; if (!$("#paceCaret").hasClass("hidden")) { $("#paceCaret").addClass("hidden"); } - if (config.mode === "zen") return; + if (Config.mode === "zen") return; let caret = $("#paceCaret"); let firstLetter = document @@ -3980,7 +3961,7 @@ $("#quoteSearchPopup input").keypress((e) => { }); function updateKeytips() { - if (config.swapEscAndTab) { + if (Config.swapEscAndTab) { $(".pageSettings .tip").html(` tip: You can also change all these settings quickly using the command line ( @@ -4078,7 +4059,7 @@ function lineJump(currentTop) { } } const wordHeight = $(document.querySelector(".word")).outerHeight(true); - if (config.smoothLineScroll && toHide.length > 0) { + if (Config.smoothLineScroll && toHide.length > 0) { lineTransition = true; $("#words").prepend( `
` @@ -4227,8 +4208,8 @@ $(document).on("keypress", "#restartTestButton", (event) => { if (event.keyCode == 13) { if ( testActive && - config.repeatQuotes === "typing" && - config.mode === "quote" + Config.repeatQuotes === "typing" && + Config.mode === "quote" ) { restartTest(true); } else { @@ -4242,8 +4223,8 @@ $(document.body).on("click", "#restartTestButton", () => { if (resultCalculating) return; if ( testActive && - config.repeatQuotes === "typing" && - config.mode === "quote" + Config.repeatQuotes === "typing" && + Config.mode === "quote" ) { restartTest(true); } else { @@ -4256,13 +4237,13 @@ function initPractiseMissedWords() { Notifications.add("You haven't missed any words.", 0); return; } - let mode = modeBeforePractise === null ? config.mode : modeBeforePractise; + let mode = modeBeforePractise === null ? Config.mode : modeBeforePractise; let punctuation = punctuationBeforePractise === null - ? config.punctuation + ? Config.punctuation : punctuationBeforePractise; let numbers = - numbersBeforePractise === null ? config.numbers : numbersBeforePractise; + numbersBeforePractise === null ? Config.numbers : numbersBeforePractise; setMode("custom"); let newCustomText = []; Object.keys(TestStats.missedWords).forEach((missedWord) => { @@ -4315,7 +4296,7 @@ $(document.body).on("click", "#showWordHistoryButton", () => { }); $(document.body).on("click", "#restartTestButtonWithSameWordset", () => { - if (config.mode == "zen") { + if (Config.mode == "zen") { Notifications.add("Repeat test disabled in zen mode"); return; } @@ -4324,7 +4305,7 @@ $(document.body).on("click", "#restartTestButtonWithSameWordset", () => { }); $(document).on("keypress", "#restartTestButtonWithSameWordset", (event) => { - if (config.mode == "zen") { + if (Config.mode == "zen") { Notifications.add("Repeat test disabled in zen mode"); return; } @@ -4395,21 +4376,21 @@ $("#wordsInput").keypress((event) => { }); $("#wordsInput").on("focus", () => { - if (!resultVisible && config.showOutOfFocusWarning) { + if (!resultVisible && Config.showOutOfFocusWarning) { OutOfFocus.hide(); } - Caret.show(config); + Caret.show(); }); $("#wordsInput").on("focusout", () => { - if (!resultVisible && config.showOutOfFocusWarning) { + if (!resultVisible && Config.showOutOfFocusWarning) { OutOfFocus.show(); } Caret.hide(); }); $(window).resize(() => { - Caret.updatePosition(currentInput, config); + Caret.updatePosition(currentInput); }); $(document).mousemove(function (event) { @@ -4483,13 +4464,13 @@ $(document).keydown(function (event) { ) { focusWords(); wordsFocused = true; - // if (config.showOutOfFocusWarning) return; + // if (Config.showOutOfFocusWarning) return; } //tab if ( - (event.key == "Tab" && !config.swapEscAndTab) || - (event.key == "Escape" && config.swapEscAndTab) + (event.key == "Tab" && !Config.swapEscAndTab) || + (event.key == "Escape" && Config.swapEscAndTab) ) { handleTab(event); // event.preventDefault(); @@ -4511,7 +4492,7 @@ $(document).keydown(function (event) { TestStats.setKeypressDuration(performance.now()); try { if ( - !config.capsLockBackspace && + !Config.capsLockBackspace && event.originalEvent.getModifierState("CapsLock") ) { showCapsWarning(); @@ -4527,12 +4508,16 @@ $(document).keydown(function (event) { //backspace const isBackspace = event.key === "Backspace" || - (config.capsLockBackspace && event.key === "CapsLock"); + (Config.capsLockBackspace && event.key === "CapsLock"); if (isBackspace && wordsFocused) { handleBackspace(event); } - if (event.key === "Enter" && activeFunBox === "58008" && wordsFocused) { + if ( + event.key === "Enter" && + activeFunbox.activeFunbox === "58008" && + wordsFocused + ) { event.key = " "; } @@ -4579,16 +4564,16 @@ function handleTab(event) { $("#commandLineWrapper").hasClass("hidden") && $("#simplePopupWrapper").hasClass("hidden") ) { - if (config.quickTab) { - if (config.mode == "zen" && !event.shiftKey) { + if (Config.quickTab) { + if (Config.mode == "zen" && !event.shiftKey) { //ignore } else { if (event.shiftKey) ManualRestart.set(); if ( testActive && - config.repeatQuotes === "typing" && - config.mode === "quote" + Config.repeatQuotes === "typing" && + Config.mode === "quote" ) { restartTest(true, false, event); } else { @@ -4599,14 +4584,14 @@ function handleTab(event) { if ( !resultVisible && ((textHasTab && event.shiftKey) || - (!textHasTab && config.mode !== "zen") || - (config.mode === "zen" && event.shiftKey)) + (!textHasTab && Config.mode !== "zen") || + (Config.mode === "zen" && event.shiftKey)) ) { event.preventDefault(); $("#restartTestButton").focus(); } } - } else if (config.quickTab) { + } else if (Config.quickTab) { changePage("test"); } @@ -4617,7 +4602,7 @@ function handleTab(event) { // (event.shiftKey && textHasTab) || // resultVisible // ) && - // config.quickTab && + // Config.quickTab && // !$(".pageLogin").hasClass("active") && // !resultCalculating && // $("#commandLineWrapper").hasClass("hidden") && @@ -4626,16 +4611,16 @@ function handleTab(event) { // event.preventDefault(); // if ($(".pageTest").hasClass("active")) { // if ( - // (config.mode === "words" && config.words < 1000) || - // (config.mode === "time" && config.time < 3600) || - // config.mode === "quote" || - // (config.mode === "custom" && + // (Config.mode === "words" && Config.words < 1000) || + // (Config.mode === "time" && Config.time < 3600) || + // Config.mode === "quote" || + // (Config.mode === "custom" && // CustomText.isWordRandom && // CustomText.word < 1000) || - // (config.mode === "custom" && + // (Config.mode === "custom" && // CustomText.isTimeRandom && // CustomText.time < 3600) || - // (config.mode === "custom" && + // (Config.mode === "custom" && // !CustomText.isWordRandom && // CustomText.text.length < 1000) // ) { @@ -4656,7 +4641,7 @@ function handleTab(event) { // changePage("test"); // } // } else if ( - // !config.quickTab && + // !Config.quickTab && // textHasTab && // event.shiftKey && // !resultVisible @@ -4677,12 +4662,12 @@ function handleBackspace(event) { //if nothing is inputted and its not the first word if ( (inputHistory[currentWordIndex - 1] == wordsList[currentWordIndex - 1] && - !config.freedomMode) || + !Config.freedomMode) || $($(".word")[currentWordIndex - 1]).hasClass("hidden") ) { return; } else { - if (config.confidenceMode === "on" || config.confidenceMode === "max") + if (Config.confidenceMode === "on" || Config.confidenceMode === "max") return; if (event["ctrlKey"] || event["altKey"]) { currentInput = ""; @@ -4691,17 +4676,17 @@ function handleBackspace(event) { } else { currentInput = inputHistory.pop(); currentCorrected = correctedHistory.pop(); - if (activeFunBox === "nospace") { + if (activeFunbox === "nospace") { currentInput = currentInput.substring(0, currentInput.length - 1); } } currentWordIndex--; currentWordElementIndex--; updateActiveElement(true); - updateWordElement(!config.blindMode); + updateWordElement(!Config.blindMode); } } else { - if (config.confidenceMode === "max") return; + if (Config.confidenceMode === "max") return; if (event["ctrlKey"] || event["altKey"]) { let limiter = " "; if (currentInput.lastIndexOf("-") > currentInput.lastIndexOf(" ")) @@ -4726,37 +4711,37 @@ function handleBackspace(event) { } else { currentInput = currentInput.substring(0, currentInput.length - 1); } - updateWordElement(!config.blindMode); + updateWordElement(!Config.blindMode); } - Sound.playClick(config.playSoundOnClick); - if (config.keymapMode === "react") { + Sound.playClick(Config.playSoundOnClick); + if (Config.keymapMode === "react") { flashPressedKeymapKey(event.code, true); - } else if (config.keymapMode === "next") { + } else if (Config.keymapMode === "next") { updateHighlightedKeymapKey(); } - Caret.updatePosition(currentInput, config); + Caret.updatePosition(currentInput); } function handleSpace(event, isEnter) { if (!testActive) return; if (currentInput === "") return; // let nextWord = wordsList[currentWordIndex + 1]; - // if ((isEnter && nextWord !== "\n") && (isEnter && activeFunBox !== "58008")) return; + // if ((isEnter && nextWord !== "\n") && (isEnter && activeFunbox !== "58008")) return; // if (!isEnter && nextWord === "\n") return; event.preventDefault(); - if (config.mode == "zen") { + if (Config.mode == "zen") { $("#words .word.active").removeClass("active"); $("#words").append("
"); } let currentWord = wordsList[currentWordIndex]; - if (activeFunBox === "layoutfluid" && config.mode !== "time") { + if (activeFunbox === "layoutfluid" && Config.mode !== "time") { const layouts = ["qwerty", "dvorak", "colemak"]; let index = 0; let outof = wordsList.length; index = Math.floor((inputHistory.length + 1) / (outof / 3)); - if (config.layout !== layouts[index] && layouts[index] !== undefined) { + if (Config.layout !== layouts[index] && layouts[index] !== undefined) { Notifications.add(`--- !!! ${layouts[index]} !!! ---`, 0); } setLayout(layouts[index]); @@ -4765,12 +4750,12 @@ function handleSpace(event, isEnter) { settingsGroups.layout.updateButton(); } dontInsertSpace = true; - if (currentWord == currentInput || config.mode == "zen") { + if (currentWord == currentInput || Config.mode == "zen") { //correct word or in zen mode if ( paceCaret !== null && paceCaret.wordsStatus[currentWordIndex] === true && - !config.blindMode + !Config.blindMode ) { paceCaret.wordsStatus[currentWordIndex] = undefined; paceCaret.correction -= currentWord.length + 1; @@ -4781,29 +4766,29 @@ function handleSpace(event, isEnter) { currentWordIndex++; currentWordElementIndex++; updateActiveElement(); - Caret.updatePosition(currentInput, config); + Caret.updatePosition(currentInput); TestStats.incrementKeypressCount(); TestStats.pushKeypressWord(currentWordIndex); // currentKeypress.count++; // currentKeypress.words.push(currentWordIndex); - if (activeFunBox !== "nospace") { - Sound.playClick(config.playSoundOnClick); + if (activeFunbox !== "nospace") { + Sound.playClick(Config.playSoundOnClick); } } else { //incorrect word if ( paceCaret !== null && paceCaret.wordsStatus[currentWordIndex] === undefined && - !config.blindMode + !Config.blindMode ) { paceCaret.wordsStatus[currentWordIndex] = true; paceCaret.correction += currentWord.length + 1; } - if (activeFunBox !== "nospace") { - if (!config.playSoundOnError || config.blindMode) { - Sound.playClick(config.playSoundOnClick); + if (activeFunbox !== "nospace") { + if (!Config.playSoundOnError || Config.blindMode) { + Sound.playClick(Config.playSoundOnClick); } else { - Sound.playError(config.playSoundOnError); + Sound.playError(Config.playSoundOnError); } } TestStats.incrementAccuracy(false); @@ -4819,32 +4804,32 @@ function handleSpace(event, isEnter) { currentCorrected.substring(cil + 1); } } - if (config.stopOnError != "off") { - if (config.difficulty == "expert" || config.difficulty == "master") { + if (Config.stopOnError != "off") { + if (Config.difficulty == "expert" || Config.difficulty == "master") { //failed due to diff when pressing space failTest(); return; } - if (config.stopOnError == "word") { + if (Config.stopOnError == "word") { currentInput += " "; updateWordElement(true); - Caret.updatePosition(currentInput, config); + Caret.updatePosition(currentInput); } return; } - if (config.blindMode) $("#words .word.active letter").addClass("correct"); + if (Config.blindMode) $("#words .word.active letter").addClass("correct"); inputHistory.push(currentInput); - highlightBadWord(currentWordElementIndex, !config.blindMode); + highlightBadWord(currentWordElementIndex, !Config.blindMode); currentInput = ""; currentWordIndex++; currentWordElementIndex++; updateActiveElement(); - Caret.updatePosition(currentInput, config); + Caret.updatePosition(currentInput); // currentKeypress.count++; // currentKeypress.words.push(currentWordIndex); TestStats.incrementKeypressCount(); TestStats.pushKeypressWord(currentWordIndex); - if (config.difficulty == "expert" || config.difficulty == "master") { + if (Config.difficulty == "expert" || Config.difficulty == "master") { failTest(); return; } else if (currentWordIndex == wordsList.length) { @@ -4859,8 +4844,8 @@ function handleSpace(event, isEnter) { currentCorrected = ""; if ( - !config.showAllLines || - config.mode == "time" || + !Config.showAllLines || + Config.mode == "time" || (CustomText.isWordRandom && CustomText.word == 0) || CustomText.isTimeRandom ) { @@ -4883,25 +4868,25 @@ function handleSpace(event, isEnter) { } } //end of line wrap - Caret.updatePosition(currentInput, config); + Caret.updatePosition(currentInput); - if (config.keymapMode === "react") { + if (Config.keymapMode === "react") { flashPressedKeymapKey(event.code, true); - } else if (config.keymapMode === "next") { + } else if (Config.keymapMode === "next") { updateHighlightedKeymapKey(); } if ( - config.mode === "words" || - config.mode === "custom" || - config.mode === "quote" || - config.mode === "zen" + Config.mode === "words" || + Config.mode === "custom" || + Config.mode === "quote" || + Config.mode === "zen" ) { updateTimer(); } if ( - config.mode == "time" || - config.mode == "words" || - config.mode == "custom" + Config.mode == "time" || + Config.mode == "words" || + Config.mode == "custom" ) { addWord(); } @@ -4958,7 +4943,7 @@ function handleAlpha(event) { //insert space for expert and master or strict space, //otherwise dont do anything if (event.key === " ") { - if (config.difficulty !== "normal" || config.strictSpace) { + if (Config.difficulty !== "normal" || Config.strictSpace) { if (dontInsertSpace) { dontInsertSpace = false; return; @@ -4970,7 +4955,7 @@ function handleAlpha(event) { if (event.key === "Tab") { if ( - config.mode !== "zen" && + Config.mode !== "zen" && (!textHasTab || (textHasTab && event.shiftKey)) ) { return; @@ -4980,13 +4965,13 @@ function handleAlpha(event) { } if (event.key === "Enter") { - if (event.shiftKey && config.mode == "zen") { + if (event.shiftKey && Config.mode == "zen") { showResult(); } if ( event.shiftKey && - ((config.mode == "time" && config.time === 0) || - (config.mode == "words" && config.words === 0)) + ((Config.mode == "time" && Config.time === 0) || + (Config.mode == "words" && Config.words === 0)) ) { bailout = true; showResult(); @@ -5022,7 +5007,7 @@ function handleAlpha(event) { //show dead keys if (event.key === "Dead") { - Sound.playClick(config.playSoundOnClick); + Sound.playClick(Config.playSoundOnClick); $( document.querySelector("#words .word.active").querySelectorAll("letter")[ currentInput.length @@ -5034,7 +5019,7 @@ function handleAlpha(event) { //check if the char typed was correct let thisCharCorrect; let nextCharInWord; - if (config.mode != "zen") { + if (Config.mode != "zen") { nextCharInWord = wordsList[currentWordIndex].substring( currentInput.length, currentInput.length + 1 @@ -5047,7 +5032,7 @@ function handleAlpha(event) { thisCharCorrect = false; } - if (config.language.split("_")[0] == "russian") { + if (Config.language.split("_")[0] == "russian") { if ((event.key === "е" || event.key === "e") && nextCharInWord == "ё") { event.key = nextCharInWord; thisCharCorrect = true; @@ -5061,7 +5046,7 @@ function handleAlpha(event) { } } - if (config.mode == "zen") { + if (Config.mode == "zen") { thisCharCorrect = true; } @@ -5091,7 +5076,7 @@ function handleAlpha(event) { } if ( - config.oppositeShiftMode === "on" && + Config.oppositeShiftMode === "on" && ShiftTracker.isUsingOppositeShift(originalEvent) === false ) { thisCharCorrect = false; @@ -5107,7 +5092,7 @@ function handleAlpha(event) { } else { TestStats.incrementAccuracy(true); thisCharCorrect = true; - if (config.mode == "zen") { + if (Config.mode == "zen") { //making the input visible to the user $("#words .active").append( `${event.key}` @@ -5116,17 +5101,17 @@ function handleAlpha(event) { } if (thisCharCorrect) { - Sound.playClick(config.playSoundOnClick); + Sound.playClick(Config.playSoundOnClick); } else { - if (!config.playSoundOnError || config.blindMode) { - Sound.playClick(config.playSoundOnClick); + if (!Config.playSoundOnError || Config.blindMode) { + Sound.playClick(Config.playSoundOnClick); } else { - Sound.playError(config.playSoundOnError); + Sound.playError(Config.playSoundOnError); } } if ( - config.oppositeShiftMode === "on" && + Config.oppositeShiftMode === "on" && ShiftTracker.isUsingOppositeShift(originalEvent) === false ) return; @@ -5150,7 +5135,7 @@ function handleAlpha(event) { // currentKeypress.count++; // currentKeypress.words.push(currentWordIndex); - if (config.stopOnError == "letter" && !thisCharCorrect) { + if (Config.stopOnError == "letter" && !thisCharCorrect) { return; } @@ -5161,37 +5146,37 @@ function handleAlpha(event) { //max length of the input is 20 unless in zen mode if ( - config.mode == "zen" || + Config.mode == "zen" || currentInput.length < wordsList[currentWordIndex].length + 20 ) { currentInput += event["key"]; } - if (!thisCharCorrect && config.difficulty == "master") { + if (!thisCharCorrect && Config.difficulty == "master") { failTest(); return; } //keymap - if (config.keymapMode === "react") { + if (Config.keymapMode === "react") { flashPressedKeymapKey(event.key, thisCharCorrect); - } else if (config.keymapMode === "next") { + } else if (Config.keymapMode === "next") { updateHighlightedKeymapKey(); } activeWordTopBeforeJump = activeWordTop; - updateWordElement(!config.blindMode); + updateWordElement(!Config.blindMode); - if (config.mode != "zen") { + if (Config.mode != "zen") { //not applicable to zen mode //auto stop the test if the last word is correct let currentWord = wordsList[currentWordIndex]; let lastindex = currentWordIndex; if ( (currentWord == currentInput || - (config.quickEnd && + (Config.quickEnd && currentWord.length == currentInput.length && - config.stopOnError == "off")) && + Config.stopOnError == "off")) && lastindex == wordsList.length - 1 ) { inputHistory.push(currentInput); @@ -5205,7 +5190,7 @@ function handleAlpha(event) { //simulate space press in nospace funbox if ( - (activeFunBox === "nospace" && + (activeFunbox === "nospace" && currentInput.length === wordsList[currentWordIndex].length) || (event.key === "\n" && thisCharCorrect) ) { @@ -5226,35 +5211,35 @@ function handleAlpha(event) { //stop the word jump by slicing off the last character, update word again if (activeWordJumped && currentInput.length > 1) { - if (config.mode == "zen") { + if (Config.mode == "zen") { let currentTop = Math.floor( document.querySelectorAll("#words .word")[currentWordElementIndex - 1] .offsetTop ); - if (!config.showAllLines) lineJump(currentTop); + if (!Config.showAllLines) lineJump(currentTop); } else { currentInput = currentInput.slice(0, -1); - updateWordElement(!config.blindMode); + updateWordElement(!Config.blindMode); activeWordJumped = false; } } - Caret.updatePosition(currentInput, config); + Caret.updatePosition(currentInput); } window.addEventListener("beforeunload", (event) => { // Cancel the event as stated by the standard. if ( - (config.mode === "words" && config.words < 1000) || - (config.mode === "time" && config.time < 3600) || - config.mode === "quote" || - (config.mode === "custom" && + (Config.mode === "words" && Config.words < 1000) || + (Config.mode === "time" && Config.time < 3600) || + Config.mode === "quote" || + (Config.mode === "custom" && CustomText.isWordRandom && CustomText.word < 1000) || - (config.mode === "custom" && + (Config.mode === "custom" && CustomText.isTimeRandom && CustomText.time < 1000) || - (config.mode === "custom" && + (Config.mode === "custom" && !CustomText.isWordRandom && CustomText.text.length < 1000) ) { @@ -5315,7 +5300,7 @@ $(document).on("click", "#bottom .leftright .right .current-theme", (e) => { if (e.shiftKey) { toggleCustomTheme(); } else { - // if (config.customTheme) { + // if (Config.customTheme) { // toggleCustomTheme(); // } currentCommands.push(commandsThemes); @@ -5358,7 +5343,7 @@ $(document).ready(() => { $("#top .config").removeClass("hidden"); } $("body").css("transition", ".25s"); - if (config.quickTab) { + if (Config.quickTab) { $("#restartTestButton").addClass("hidden"); } if (!Misc.getCookie("merchbannerclosed")) { @@ -5417,7 +5402,7 @@ $(".merchBanner .fas").click((event) => { $(".pageTest #copyWordsListButton").click(async (event) => { try { let words; - if (config.mode == "zen") { + if (Config.mode == "zen") { words = inputHistory.join(" "); } else { words = wordsList.slice(0, inputHistory.length).join(" "); diff --git a/src/js/settings.js b/src/js/settings.js index 96474972c..df828e131 100644 --- a/src/js/settings.js +++ b/src/js/settings.js @@ -6,7 +6,7 @@ class SettingsGroup { updateCallback = null ) { this.configName = configName; - this.configValue = config[configName]; + this.configValue = Config[configName]; if (this.configValue === true || this.configValue === false) { this.onOff = true; } else { @@ -53,7 +53,7 @@ class SettingsGroup { } updateButton() { - this.configValue = config[this.configName]; + this.configValue = Config[this.configName]; $(`.pageSettings .section.${this.configName} .button`).removeClass( "active" ); @@ -100,7 +100,7 @@ settingsGroups.keymapMode = new SettingsGroup( settingsGroups.showLiveWpm.updateButton(); }, () => { - if (config.keymapMode === "off") { + if (Config.keymapMode === "off") { $(".pageSettings .section.keymapStyle").addClass("hidden"); $(".pageSettings .section.keymapLayout").addClass("hidden"); } else { @@ -119,7 +119,7 @@ settingsGroups.showKeyTips = new SettingsGroup( setKeyTips, null, () => { - if (config.showKeyTips) { + if (Config.showKeyTips) { $(".pageSettings .tip").removeClass("hidden"); } else { $(".pageSettings .tip").addClass("hidden"); @@ -205,8 +205,8 @@ settingsGroups.playSoundOnClick = new SettingsGroup( "playSoundOnClick", setPlaySoundOnClick, () => { - if (config.playSoundOnClick !== "off") - Sound.playClick(config.playSoundOnClick); + if (Config.playSoundOnClick !== "off") + Sound.playClick(Config.playSoundOnClick); } ); settingsGroups.showAllLines = new SettingsGroup( @@ -214,7 +214,7 @@ settingsGroups.showAllLines = new SettingsGroup( setShowAllLines ); settingsGroups.paceCaret = new SettingsGroup("paceCaret", setPaceCaret, () => { - if (config.paceCaret === "custom") { + if (Config.paceCaret === "custom") { $( ".pageSettings .section.paceCaret input.customPaceCaretSpeed" ).removeClass("hidden"); @@ -225,7 +225,7 @@ settingsGroups.paceCaret = new SettingsGroup("paceCaret", setPaceCaret, () => { } }); settingsGroups.minWpm = new SettingsGroup("minWpm", setMinWpm, () => { - if (config.minWpm === "custom") { + if (Config.minWpm === "custom") { $(".pageSettings .section.minWpm input.customMinWpmSpeed").removeClass( "hidden" ); @@ -236,7 +236,7 @@ settingsGroups.minWpm = new SettingsGroup("minWpm", setMinWpm, () => { } }); settingsGroups.minAcc = new SettingsGroup("minAcc", setMinAcc, () => { - if (config.minAcc === "custom") { + if (Config.minAcc === "custom") { $(".pageSettings .section.minAcc input.customMinAcc").removeClass("hidden"); } else { $(".pageSettings .section.minAcc input.customMinAcc").addClass("hidden"); @@ -277,7 +277,7 @@ settingsGroups.fontFamily = new SettingsGroup( let customButton = $(".pageSettings .section.fontFamily .buttons .custom"); if ($(".pageSettings .section.fontFamily .buttons .active").length === 0) { customButton.addClass("active"); - customButton.text(`Custom (${config.fontFamily.replace(/_/g, " ")})`); + customButton.text(`Custom (${Config.fontFamily.replace(/_/g, " ")})`); } else { customButton.text("Custom"); } @@ -301,7 +301,7 @@ async function fillSettingsPage() { let langGroupsEl = $( ".pageSettings .section.languageGroups .buttons" ).empty(); - let currentLanguageGroup = await Misc.findCurrentGroup(config.language); + let currentLanguageGroup = await Misc.findCurrentGroup(Config.language); Misc.getLanguageGroups().then((groups) => { groups.forEach((group) => { langGroupsEl.append( @@ -368,10 +368,10 @@ async function fillSettingsPage() { let fontsEl = $(".pageSettings .section.fontFamily .buttons").empty(); Misc.getFontsList().then((fonts) => { fonts.forEach((font) => { - if (config.fontFamily === font.name) isCustomFont = false; + if (ConfigSet.fontFamily === font.name) isCustomFont(false); fontsEl.append( `
Custom (${config.fontFamily.replace( + ? `
Custom (${Config.fontFamily.replace( /_/g, " " )})
` @@ -401,17 +401,17 @@ function refreshThemeButtons() { ).empty(); let themesEl = $(".pageSettings .section.themes .allThemes.buttons").empty(); - let activeThemeName = config.theme; - if (config.randomTheme !== "off" && ThemeController.randomTheme !== null) { + let activeThemeName = Config.theme; + if (Config.randomTheme !== "off" && ThemeController.randomTheme !== null) { activeThemeName = ThemeController.randomTheme; } Misc.getSortedThemesList().then((themes) => { //first show favourites - if (config.favThemes.length > 0) { + if (Config.favThemes.length > 0) { favThemesEl.css({ paddingBottom: "1rem" }); themes.forEach((theme) => { - if (config.favThemes.includes(theme.name)) { + if (Config.favThemes.includes(theme.name)) { let activeTheme = activeThemeName === theme.name ? "active" : ""; favThemesEl.append( `
{ }); function toggleFavouriteTheme(themename) { - if (config.favThemes.includes(themename)) { + if (Config.favThemes.includes(themename)) { //already favourite, remove - config.favThemes = config.favThemes.filter((t) => { - if (t !== themename) { - return t; - } - }); + ConfigSet.favThemes( + Config.favThemes.filter((t) => { + if (t !== themename) { + return t; + } + }) + ); } else { //add to favourites - config.favThemes.push(themename); + Config.favThemes.push(themename); } saveConfigToCookie(); refreshThemeButtons(); @@ -662,7 +664,7 @@ function refreshTagsSettingsSection() { function setActiveFunboxButton() { $(`.pageSettings .section.funbox .button`).removeClass("active"); - $(`.pageSettings .section.funbox .button[funbox='${activeFunBox}']`).addClass( + $(`.pageSettings .section.funbox .button[funbox='${activeFunbox}']`).addClass( "active" ); } @@ -670,7 +672,7 @@ function setActiveFunboxButton() { async function setActiveLanguageGroup(groupName, clicked = false) { let currentGroup; if (groupName === undefined) { - currentGroup = await Misc.findCurrentGroup(config.language); + currentGroup = await Misc.findCurrentGroup(Config.language); } else { let groups = await Misc.getLanguageGroups(); groups.forEach((g) => { @@ -701,20 +703,20 @@ async function setActiveLanguageGroup(groupName, clicked = false) { setLanguage(currentGroup.languages[0]); } else { $( - `.pageSettings .section.language .buttons .button[language=${config.language}]` + `.pageSettings .section.language .buttons .button[language=${Config.language}]` ).addClass("active"); } } function setActiveThemeButton() { $(`.pageSettings .section.themes .theme`).removeClass("active"); - $(`.pageSettings .section.themes .theme[theme=${config.theme}]`).addClass( + $(`.pageSettings .section.themes .theme[theme=${Config.theme}]`).addClass( "active" ); } function setActiveThemeTab() { - config.customTheme === true + Config.customTheme === true ? $(".pageSettings .section.themes .tabs .button[tab='custom']").click() : $(".pageSettings .section.themes .tabs .button[tab='preset']").click(); } @@ -724,7 +726,7 @@ function setCustomThemeInputs() { ".pageSettings .section.themes .tabContainer .customTheme input[type=color]" ).each((n, index) => { let currentColor = - config.customThemeColors[colorVars.indexOf($(index).attr("id"))]; + Config.customThemeColors[colorVars.indexOf($(index).attr("id"))]; $(index).val(currentColor); $(index).attr("value", currentColor); $(index).prev().text(currentColor); @@ -755,13 +757,7 @@ function toggleTag(tagid, nosave = false) { } } }); - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); if (!nosave) saveActiveTagsToCookie(); } @@ -961,7 +957,7 @@ $(".pageSettings .section.themes .tabs .button").click((e) => { setCustomThemeInputs(); if ($target.attr("tab") == "preset") { setCustomTheme(false); - ThemeController.set(config.theme); + ThemeController.set(Config.theme); // applyCustomThemeColors(); swapElements( $('.pageSettings .section.themes .tabContainer [tabContent="custom"]'), @@ -1006,8 +1002,8 @@ $(".pageSettings .saveCustomThemeButton").click((e) => { }); $(".pageSettings #loadCustomColorsFromPreset").click((e) => { - // previewTheme(config.theme); - ThemeController.preview(config.theme); + // previewTheme(Config.theme); + ThemeController.preview(Config.theme); colorVars.forEach((e) => { document.documentElement.style.setProperty(e, ""); @@ -1054,7 +1050,7 @@ $("#resetSettingsButton").click((e) => { }); $("#exportSettingsButton").click((e) => { - let configJSON = JSON.stringify(config); + let configJSON = JSON.stringify(Config); navigator.clipboard.writeText(configJSON).then( function () { Notifications.add("JSON Copied to clipboard", 0); diff --git a/src/js/sound.js b/src/js/sound.js index 3257edc9d..eb587ae41 100644 --- a/src/js/sound.js +++ b/src/js/sound.js @@ -1,3 +1,5 @@ +import Config from "./config"; + let errorSound = new Audio("../sound/error.wav"); let clickSounds = null; @@ -120,20 +122,22 @@ export function init() { }; } -export function playClick(config) { - if (config === "off") return; +export function playClick() { + if (Config.playSoundOnClick === "off") return; if (clickSounds === null) init(); - let rand = Math.floor(Math.random() * clickSounds[config].length); - let randomSound = clickSounds[config][rand]; + let rand = Math.floor( + Math.random() * clickSounds[Config.playSoundOnClick].length + ); + let randomSound = clickSounds[Config.playSoundOnClick][rand]; randomSound.counter++; if (randomSound.counter === 2) randomSound.counter = 0; randomSound.sounds[randomSound.counter].currentTime = 0; randomSound.sounds[randomSound.counter].play(); } -export function playError(config) { - if (!config) return; +export function playError() { + if (!Config.playSoundOnError) return; errorSound.currentTime = 0; errorSound.play(); } diff --git a/src/js/test/caret.js b/src/js/test/caret.js index 02914634b..6abd40101 100644 --- a/src/js/test/caret.js +++ b/src/js/test/caret.js @@ -1,4 +1,5 @@ import * as Misc from "./misc"; +import Config from "./config"; export let caretAnimating = true; @@ -11,9 +12,9 @@ export function stopAnimation() { } //TODO remove config when module -export function startAnimation(config) { +export function startAnimation() { if (caretAnimating === false) { - if (config.smoothCaret) { + if (Config.smoothCaret) { $("#caret").css("animation-name", "caretFlashSmooth"); } else { $("#caret").css("animation-name", "caretFlashHard"); @@ -26,17 +27,17 @@ export function hide() { $("#caret").addClass("hidden"); } -export function show(config) { +export function show() { if ($("#result").hasClass("hidden")) { - updatePosition("", config); + updatePosition(""); $("#caret").removeClass("hidden"); - startAnimation(config); + startAnimation(); } } //TODO remove this after test logic is a module //TODO remove config when module -export function updatePosition(currentInput, config) { +export function updatePosition(currentInput) { if ($("#wordsWrapper").hasClass("hidden")) return; if ($("#caret").hasClass("off")) { return; @@ -64,7 +65,7 @@ export function updatePosition(currentInput, config) { currentLetter = currentWordNodeList[currentWordNodeList.length - 1]; } - if (config.mode != "zen" && $(currentLetter).length == 0) return; + if (Config.mode != "zen" && $(currentLetter).length == 0) return; const isLanguageLeftToRight = Misc.getCurrentLanguage().leftToRight; let currentLetterPosLeft = isLanguageLeftToRight ? currentLetter.offsetLeft @@ -88,7 +89,7 @@ export function updatePosition(currentInput, config) { let smoothlinescroll = $("#words .smoothScroller").height(); if (smoothlinescroll === undefined) smoothlinescroll = 0; - if (config.smoothCaret) { + if (Config.smoothCaret) { caret.stop(true, false).animate( { top: newTop - smoothlinescroll, @@ -106,7 +107,7 @@ export function updatePosition(currentInput, config) { ); } - if (config.showAllLines) { + if (Config.showAllLines) { let browserHeight = window.innerHeight; let middlePos = browserHeight / 2 - $("#caret").outerHeight() / 2; let contentHeight = document.body.scrollHeight; diff --git a/src/js/theme-controller.js b/src/js/theme-controller.js index 71af5bb7c..37c409805 100644 --- a/src/js/theme-controller.js +++ b/src/js/theme-controller.js @@ -2,6 +2,7 @@ import * as ThemeColors from "./theme-colors"; import * as ChartController from "./chart-controller"; import * as Misc from "./misc"; import * as Notifications from "./notification-center"; +import Config from "./config"; let isPreviewingTheme = false; let randomTheme = null; @@ -85,15 +86,15 @@ export function setCustomColors(colors) { } //TODO remove config once config is a module -export function randomiseTheme(config) { +export function randomiseTheme() { var randomList; Misc.getThemesList().then((themes) => { randomList = themes.map((t) => { return t.name; }); - if (config.randomTheme === "fav" && config.favThemes.length > 0) - randomList = config.favThemes; + if (Config.randomTheme === "fav" && Config.favThemes.length > 0) + randomList = Config.favThemes; randomTheme = randomList[Math.floor(Math.random() * randomList.length)]; preview(randomTheme); Notifications.add(randomTheme.replace(/_/g, " "), 0); diff --git a/src/js/userconfig.js b/src/js/userconfig.js index 5cbe90dba..2a2d4bdc3 100644 --- a/src/js/userconfig.js +++ b/src/js/userconfig.js @@ -1,90 +1,5 @@ -let defaultConfig = { - theme: "serika_dark", - customTheme: false, - customThemeColors: [ - "#323437", - "#e2b714", - "#e2b714", - "#646669", - "#d1d0c5", - "#ca4754", - "#7e2a33", - "#ca4754", - "#7e2a33", - ], - favThemes: [], - showKeyTips: true, - showLiveWpm: false, - showTimerProgress: true, - smoothCaret: true, - quickTab: false, - punctuation: false, - numbers: false, - words: 50, - time: 30, - mode: "time", - quoteLength: [1], - language: "english", - fontSize: 15, - freedomMode: false, - resultFilters: null, - difficulty: "normal", - blindMode: false, - quickEnd: false, - caretStyle: "default", - paceCaretStyle: "default", - flipTestColors: false, - capsLockBackspace: false, - layout: "default", - savedLayout: "default", - confidenceMode: "off", - indicateTypos: false, - timerStyle: "text", - colorfulMode: false, - randomTheme: "off", - timerColor: "black", - timerOpacity: "0.25", - stopOnError: "off", - showAllLines: false, - keymapMode: "off", - keymapStyle: "staggered", - keymapLayout: "qwerty", - fontFamily: "Roboto_Mono", - smoothLineScroll: false, - alwaysShowDecimalPlaces: false, - alwaysShowWordsHistory: false, - singleListCommandLine: "manual", - playSoundOnError: false, - playSoundOnClick: "off", - startGraphsAtZero: true, - swapEscAndTab: false, - showOutOfFocusWarning: true, - paceCaret: "off", - paceCaretCustomSpeed: 100, - pageWidth: "100", - chartAccuracy: true, - chartStyle: "line", - minWpm: "off", - minWpmCustomSpeed: 100, - highlightMode: "letter", - alwaysShowCPM: false, - enableAds: "off", - hideExtraLetters: false, - strictSpace: false, - minAcc: "off", - minAccCustom: 90, - showLiveAcc: false, - monkey: false, - repeatQuotes: "off", - oppositeShiftMode: "off", -}; - let cookieConfig = null; -let config = { - ...defaultConfig, -}; - let dbConfigLoaded = false; let configChangedBeforeDb = false; @@ -99,7 +14,7 @@ async function saveConfigToCookie(noDbCheck = false) { // expires: d, // path: "/", // }); - let save = config; + let save = Config; delete save.resultFilters; Misc.setCookie("config", JSON.stringify(save), 365); // restartCount = 0; @@ -111,7 +26,7 @@ async function saveConfigToDB() { accountIconLoading(true); CloudFunctions.saveConfig({ uid: firebase.auth().currentUser.uid, - obj: config, + obj: Config, }).then((d) => { accountIconLoading(false); if (d.data.returnCode !== 1) { @@ -123,10 +38,8 @@ async function saveConfigToDB() { } function resetConfig() { - config = { - ...defaultConfig, - }; - applyConfig(config); + ConfigSet.reset(); + applyConfig(Config); saveConfigToCookie(); } @@ -197,7 +110,7 @@ function setPlaySoundOnError(val, nosave) { if (val == undefined) { val = false; } - config.playSoundOnError = val; + ConfigSet.playSoundOnError(val); if (!nosave) saveConfigToCookie(); } @@ -205,15 +118,15 @@ function setPlaySoundOnClick(val, nosave) { if (val == undefined) { val = "off"; } - config.playSoundOnClick = val; - if (config.playSoundOnClick !== "off") Sound.init(); + ConfigSet.playSoundOnClick(val); + if (Config.playSoundOnClick !== "off") Sound.init(); if (!nosave) saveConfigToCookie(); } function togglePlaySoundOnError() { - config.playSoundOnError = !config.playSoundOnError; - if (config.playSoundOnError == undefined) { - config.playSoundOnError = false; + ConfigSet.playSoundOnError(!Config.playSoundOnError); + if (Config.playSoundOnError == undefined) { + ConfigSet.playSoundOnError(false); } } @@ -225,21 +138,15 @@ function setDifficulty(diff, nosave) { ) { diff = "normal"; } - config.difficulty = diff; + ConfigSet.difficulty(diff); if (!nosave) restartTest(false, nosave); - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); if (!nosave) saveConfigToCookie(); } //set fav themes function setFavThemes(themes, nosave) { - config.favThemes = themes; + ConfigSet.favThemes(themes); if (!nosave) { refreshThemeButtons(); saveConfigToCookie(); @@ -248,18 +155,12 @@ function setFavThemes(themes, nosave) { //blind mode function toggleBlindMode() { - let blind = !config.blindMode; + let blind = !Config.blindMode; if (blind == undefined) { blind = false; } - config.blindMode = blind; - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + ConfigSet.blindMode(blind); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); saveConfigToCookie(); } @@ -267,26 +168,20 @@ function setBlindMode(blind, nosave) { if (blind == undefined) { blind = false; } - config.blindMode = blind; - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + ConfigSet.blindMode(blind); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); if (!nosave) saveConfigToCookie(); } function updateChartAccuracy() { - ChartController.accountHistory.data.datasets[1].hidden = !config.chartAccuracy; + ChartController.accountHistory.data.datasets[1].hidden = !Config.chartAccuracy; ChartController.accountHistory.options.scales.yAxes[1].display = - config.chartAccuracy; + Config.chartAccuracy; ChartController.accountHistory.update(); } function updateChartStyle() { - if (config.chartStyle == "scatter") { + if (Config.chartStyle == "scatter") { ChartController.accountHistory.data.datasets[0].showLine = false; ChartController.accountHistory.data.datasets[1].showLine = false; } else { @@ -297,10 +192,10 @@ function updateChartStyle() { } function toggleChartAccuracy() { - if (config.chartAccuracy) { - config.chartAccuracy = false; + if (Config.chartAccuracy) { + ConfigSet.chartAccuracy(false); } else { - config.chartAccuracy = true; + ConfigSet.chartAccuracy(true); } updateChartAccuracy(); saveConfigToCookie(); @@ -310,16 +205,16 @@ function setChartAccuracy(chartAccuracy, nosave) { if (chartAccuracy == undefined) { chartAccuracy = true; } - config.chartAccuracy = chartAccuracy; + ConfigSet.chartAccuracy(chartAccuracy); updateChartAccuracy(); if (!nosave) saveConfigToCookie(); } function toggleChartStyle() { - if (config.chartStyle == "scatter") { - config.chartStyle = "line"; + if (Config.chartStyle == "scatter") { + ConfigSet.chartStyle("line"); } else { - config.chartStyle = "scatter"; + ConfigSet.chartStyle("scatter"); } updateChartStyle(); saveConfigToCookie(); @@ -329,7 +224,7 @@ function setChartStyle(chartStyle, nosave) { if (chartStyle == undefined) { chartStyle = "line"; } - config.chartStyle = chartStyle; + ConfigSet.chartStyle(chartStyle); updateChartStyle(); if (!nosave) saveConfigToCookie(); } @@ -338,23 +233,17 @@ function setStopOnError(soe, nosave) { if (soe == undefined || soe === true || soe === false) { soe = "off"; } - config.stopOnError = soe; - if (config.stopOnError !== "off") { - config.confidenceMode = "off"; + ConfigSet.stopOnError(soe); + if (Config.stopOnError !== "off") { + ConfigSet.confidenceMode("off"); } - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); if (!nosave) saveConfigToCookie(); } //alwaysshowdecimal function toggleAlwaysShowDecimalPlaces() { - config.alwaysShowDecimalPlaces = !config.alwaysShowDecimalPlaces; + ConfigSet.alwaysShowDecimalPlaces(!Config.alwaysShowDecimalPlaces); saveConfigToCookie(); } @@ -362,12 +251,12 @@ function setAlwaysShowDecimalPlaces(val, nosave) { if (val == undefined) { val = false; } - config.alwaysShowDecimalPlaces = val; + ConfigSet.alwaysShowDecimalPlaces(val); if (!nosave) saveConfigToCookie(); } function toggleAlwaysShowCPM() { - config.alwaysShowCPM = !config.alwaysShowCPM; + ConfigSet.alwaysShowCPM(!Config.alwaysShowCPM); saveConfigToCookie(); } @@ -375,14 +264,14 @@ function setAlwaysShowCPM(val, nosave) { if (val == undefined) { val = false; } - config.alwaysShowCPM = val; + ConfigSet.alwaysShowCPM(val); if (!nosave) saveConfigToCookie(); } //show out of focus warning function toggleShowOutOfFocusWarning() { - config.showOutOfFocusWarning = !config.showOutOfFocusWarning; - if (!config.showOutOfFocusWarning) { + ConfigSet.showOutOfFocusWarning(!Config.showOutOfFocusWarning); + if (!Config.showOutOfFocusWarning) { OutOfFocus.hide(); } saveConfigToCookie(); @@ -392,8 +281,8 @@ function setShowOutOfFocusWarning(val, nosave) { if (val == undefined) { val = true; } - config.showOutOfFocusWarning = val; - if (!config.showOutOfFocusWarning) { + ConfigSet.showOutOfFocusWarning(val); + if (!Config.showOutOfFocusWarning) { OutOfFocus.hide(); } if (!nosave) saveConfigToCookie(); @@ -401,7 +290,7 @@ function setShowOutOfFocusWarning(val, nosave) { //swap esc and tab function toggleSwapEscAndTab() { - config.swapEscAndTab = !config.swapEscAndTab; + ConfigSet.swapEscAndTab(!Config.swapEscAndTab); saveConfigToCookie(); updateKeytips(); } @@ -410,7 +299,7 @@ function setSwapEscAndTab(val, nosave) { if (val == undefined) { val = false; } - config.swapEscAndTab = val; + ConfigSet.swapEscAndTab(val); updateKeytips(); if (!nosave) saveConfigToCookie(); } @@ -420,18 +309,12 @@ function setPaceCaret(val, nosave) { if (val == undefined) { val = "off"; } - // if (config.mode === "zen" && val != "off") { + // if (Config.mode === "zen" && val != "off") { // Notifications.add(`Can't use pace caret with zen mode.`, 0); // val = "off"; // } - config.paceCaret = val; - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + ConfigSet.paceCaret(val); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); initPaceCaret(nosave); if (!nosave) saveConfigToCookie(); } @@ -440,7 +323,7 @@ function setPaceCaretCustomSpeed(val, nosave) { if (val == undefined || Number.isNaN(parseInt(val))) { val = 100; } - config.paceCaretCustomSpeed = val; + ConfigSet.paceCaretCustomSpeed(val); if (!nosave) saveConfigToCookie(); } @@ -449,14 +332,8 @@ function setMinWpm(minwpm, nosave) { if (minwpm == undefined) { minwpm = "off"; } - config.minWpm = minwpm; - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + ConfigSet.minWpm(minwpm); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); if (!nosave) saveConfigToCookie(); } @@ -464,7 +341,7 @@ function setMinWpmCustomSpeed(val, nosave) { if (val == undefined || Number.isNaN(parseInt(val))) { val = 100; } - config.minWpmCustomSpeed = val; + ConfigSet.minWpmCustomSpeed(val); if (!nosave) saveConfigToCookie(); } @@ -473,14 +350,8 @@ function setMinAcc(min, nosave) { if (min == undefined) { min = "off"; } - config.minAcc = min; - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + ConfigSet.minAcc(min); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); if (!nosave) saveConfigToCookie(); } @@ -488,7 +359,7 @@ function setMinAccCustom(val, nosave) { if (val == undefined || Number.isNaN(parseInt(val))) { val = 90; } - config.minAccCustom = val; + ConfigSet.minAccCustom(val); if (!nosave) saveConfigToCookie(); } @@ -497,33 +368,33 @@ function setAlwaysShowWordsHistory(val, nosave) { if (val == undefined) { val = false; } - config.alwaysShowWordsHistory = val; + ConfigSet.alwaysShowWordsHistory(val); if (!nosave) saveConfigToCookie(); } function toggleAlwaysShowWordsHistory() { - let val = !config.alwaysShowWordsHistory; + let val = !Config.alwaysShowWordsHistory; if (val == undefined) { val = false; } - config.alwaysShowWordsHistory = val; + ConfigSet.alwaysShowWordsHistory(val); saveConfigToCookie(); } //single list command line function setSingleListCommandLine(option, nosave) { if (!option) option = "manual"; - config.singleListCommandLine = option; + ConfigSet.singleListCommandLine(option); if (!nosave) saveConfigToCookie(); } //show all lines function toggleShowAllLines() { - let sal = !config.showAllLines; + let sal = !Config.showAllLines; if (sal == undefined) { sal = false; } - config.showAllLines = sal; + ConfigSet.showAllLines(sal); restartTest(); saveConfigToCookie(); } @@ -532,7 +403,7 @@ function setShowAllLines(sal, nosave) { if (sal == undefined) { sal = false; } - config.showAllLines = sal; + ConfigSet.showAllLines(sal); if (!nosave) { saveConfigToCookie(); restartTest(); @@ -541,11 +412,11 @@ function setShowAllLines(sal, nosave) { //quickend function toggleQuickEnd() { - let qe = !config.quickEnd; + let qe = !Config.quickEnd; if (qe == undefined) { qe = false; } - config.quickEnd = qe; + ConfigSet.quickEnd(qe); saveConfigToCookie(); } @@ -553,7 +424,7 @@ function setQuickEnd(qe, nosave) { if (qe == undefined) { qe = false; } - config.quickEnd = qe; + ConfigSet.quickEnd(qe); if (!nosave) saveConfigToCookie(); } @@ -561,7 +432,7 @@ function setEnableAds(val, nosave) { if (val == undefined || val === true || val === false) { val = "off"; } - config.enableAds = val; + ConfigSet.enableAds(val); if (!nosave) saveConfigToCookie(); } @@ -569,7 +440,7 @@ function setRepeatQuotes(val, nosave) { if (val == undefined || val === true || val === false) { val = "off"; } - config.repeatQuotes = val; + ConfigSet.repeatQuotes(val); if (!nosave) saveConfigToCookie(); } @@ -578,14 +449,14 @@ function setFlipTestColors(flip, nosave) { if (flip == undefined) { flip = false; } - config.flipTestColors = flip; + ConfigSet.flipTestColors(flip); flipTestColors(flip); if (!nosave) saveConfigToCookie(); } function toggleFlipTestColors() { - config.flipTestColors = !config.flipTestColors; - flipTestColors(config.flipTestColors); + ConfigSet.flipTestColors(!Config.flipTestColors); + flipTestColors(Config.flipTestColors); saveConfigToCookie(); } @@ -594,14 +465,14 @@ function setColorfulMode(extra, nosave) { if (extra == undefined) { extra = false; } - config.colorfulMode = extra; + ConfigSet.colorfulMode(extra); applyColorfulMode(extra); if (!nosave) saveConfigToCookie(); } function toggleColorfulMode() { - config.colorfulMode = !config.colorfulMode; - applyColorfulMode(config.colorfulMode); + ConfigSet.colorfulMode(!Config.colorfulMode); + applyColorfulMode(Config.colorfulMode); saveConfigToCookie(); } @@ -610,12 +481,12 @@ function setStrictSpace(val, nosave) { if (val == undefined) { val = false; } - config.strictSpace = val; + ConfigSet.strictSpace(val); if (!nosave) saveConfigToCookie(); } function toggleStrictSpace() { - config.strictSpace = !config.strictSpace; + ConfigSet.strictSpace(!Config.strictSpace); saveConfigToCookie(); } @@ -624,7 +495,7 @@ function setOppositeShiftMode(val, nosave) { if (val == undefined) { val = "off"; } - config.oppositeShiftMode = val; + ConfigSet.oppositeShiftMode(val); if (!nosave) saveConfigToCookie(); } @@ -632,7 +503,7 @@ function setPageWidth(val, nosave) { if (val == null || val == undefined) { val = "100"; } - config.pageWidth = val; + ConfigSet.pageWidth(val); $("#centerContent").removeClass("wide125"); $("#centerContent").removeClass("wide150"); $("#centerContent").removeClass("wide200"); @@ -648,7 +519,7 @@ function setCaretStyle(caretStyle, nosave) { if (caretStyle == null || caretStyle == undefined) { caretStyle = "default"; } - config.caretStyle = caretStyle; + ConfigSet.caretStyle(caretStyle); $("#caret").removeClass("off"); $("#caret").removeClass("default"); $("#caret").removeClass("underline"); @@ -676,7 +547,7 @@ function setPaceCaretStyle(caretStyle, nosave) { if (caretStyle == null || caretStyle == undefined) { caretStyle = "default"; } - config.paceCaretStyle = caretStyle; + ConfigSet.paceCaretStyle(caretStyle); $("#paceCaret").removeClass("off"); $("#paceCaret").removeClass("default"); $("#paceCaret").removeClass("underline"); @@ -701,12 +572,12 @@ function setShowTimerProgress(timer, nosave) { if (timer == null || timer == undefined) { timer = false; } - config.showTimerProgress = timer; + ConfigSet.showTimerProgress(timer); if (!nosave) saveConfigToCookie(); } function toggleShowTimerProgress() { - config.showTimerProgress = !config.showTimerProgress; + ConfigSet.showTimerProgress(!Config.showTimerProgress); saveConfigToCookie(); } @@ -714,12 +585,12 @@ function setShowLiveWpm(live, nosave) { if (live == null || live == undefined) { live = false; } - config.showLiveWpm = live; + ConfigSet.showLiveWpm(live); if (!nosave) saveConfigToCookie(); } function toggleShowLiveWpm() { - config.showLiveWpm = !config.showLiveWpm; + ConfigSet.showLiveWpm(!Config.showLiveWpm); saveConfigToCookie(); } @@ -727,19 +598,19 @@ function setShowLiveAcc(live, nosave) { if (live == null || live == undefined) { live = false; } - config.showLiveAcc = live; + ConfigSet.showLiveAcc(live); if (!nosave) saveConfigToCookie(); } function toggleShowLiveAcc() { - config.showLiveAcc = !config.showLiveAcc; + ConfigSet.showLiveAcc(!Config.showLiveAcc); saveConfigToCookie(); } function setHighlightMode(mode, nosave) { if ( mode === "word" && - (activeFunBox === "nospace" || activeFunBox === "read_ahead") + (activeFunbox === "nospace" || activeFunbox === "read_ahead") ) { Notifications.add("Can't use word highlight with this funbox", 0); return; @@ -747,7 +618,7 @@ function setHighlightMode(mode, nosave) { if (mode == null || mode == undefined) { mode = "letter"; } - config.highlightMode = mode; + ConfigSet.highlightMode(mode); if (!nosave) saveConfigToCookie(); } @@ -755,12 +626,12 @@ function setHideExtraLetters(val, nosave) { if (val == null || val == undefined) { val = false; } - config.hideExtraLetters = val; + ConfigSet.hideExtraLetters(val); if (!nosave) saveConfigToCookie(); } function toggleHideExtraLetters() { - config.hideExtraLetters = !config.hideExtraLetters; + ConfigSet.hideExtraLetters(!Config.hideExtraLetters); saveConfigToCookie(); } @@ -768,7 +639,7 @@ function setTimerStyle(style, nosave) { if (style == null || style == undefined) { style = "bar"; } - config.timerStyle = style; + ConfigSet.timerStyle(style); if (!nosave) saveConfigToCookie(); } @@ -776,7 +647,7 @@ function setTimerColor(color, nosave) { if (color == null || color == undefined) { color = "black"; } - config.timerColor = color; + ConfigSet.timerColor(color); $("#timer").removeClass("timerSub"); $("#timer").removeClass("timerText"); @@ -817,14 +688,14 @@ function setTimerOpacity(opacity, nosave) { if (opacity == null || opacity == undefined) { opacity = 0.25; } - config.timerOpacity = opacity; + ConfigSet.timerOpacity(opacity); if (!nosave) saveConfigToCookie(); } //key tips function setKeyTips(keyTips, nosave) { - config.showKeyTips = keyTips; - if (config.showKeyTips) { + ConfigSet.showKeyTips(keyTips); + if (Config.showKeyTips) { $("#bottom .keyTips").removeClass("hidden"); } else { $("#bottom .keyTips").addClass("hidden"); @@ -833,8 +704,8 @@ function setKeyTips(keyTips, nosave) { } function toggleKeyTips() { - config.showKeyTips = !config.showKeyTips; - if (config.showKeyTips) { + ConfigSet.showKeyTips(!Config.showKeyTips); + if (Config.showKeyTips) { $("#bottom .keyTips").removeClass("hidden"); } else { $("#bottom .keyTips").addClass("hidden"); @@ -849,7 +720,7 @@ function setTimeConfig(time, nosave) { } time = parseInt(time); if (!nosave) setMode("time", nosave); - config.time = time; + ConfigSet.time(time); $("#top .config .time .text-button").removeClass("active"); if (![15, 30, 60, 120].includes(time)) { time = "custom"; @@ -864,22 +735,22 @@ function setTimeConfig(time, nosave) { function setQuoteLength(len, nosave, multipleMode) { if (Array.isArray(len)) { //config load - config.quoteLength = len; + ConfigSet.quoteLength(len); } else { - if (!Array.isArray(config.quoteLength)) config.quoteLength = []; + if (!Array.isArray(ConfigSet.quoteLength)) Config.quoteLength([]); if (len === null || isNaN(len) || len < -2 || len > 3) { len = 1; } len = parseInt(len); if (multipleMode) { - if (!config.quoteLength.includes(len)) config.quoteLength.push(len); + if (!Config.quoteLength.includes(len)) Config.quoteLength.push(len); } else { - config.quoteLength = [len]; + ConfigSet.quoteLength([len]); } } // if (!nosave) setMode("quote", nosave); $("#top .config .quoteLength .text-button").removeClass("active"); - config.quoteLength.forEach((ql) => { + Config.quoteLength.forEach((ql) => { $( "#top .config .quoteLength .text-button[quoteLength='" + ql + "']" ).addClass("active"); @@ -893,7 +764,7 @@ function setWordCount(wordCount, nosave) { } wordCount = parseInt(wordCount); if (!nosave) setMode("words", nosave); - config.words = wordCount; + ConfigSet.words(wordCount); $("#top .config .wordCount .text-button").removeClass("active"); if (![10, 25, 50, 100, 200].includes(wordCount)) { wordCount = "custom"; @@ -906,7 +777,7 @@ function setWordCount(wordCount, nosave) { //caret function setSmoothCaret(mode, nosave) { - config.smoothCaret = mode; + ConfigSet.smoothCaret(mode); if (!nosave) saveConfigToCookie(); if (mode) { $("#caret").css("animation-name", "caretFlashSmooth"); @@ -916,9 +787,9 @@ function setSmoothCaret(mode, nosave) { } function toggleSmoothCaret() { - config.smoothCaret = !config.smoothCaret; + ConfigSet.smoothCaret(!Config.smoothCaret); saveConfigToCookie(); - if (config.smoothCaret) { + if (Config.smoothCaret) { $("#caret").css("animation-name", "caretFlashSmooth"); } else { $("#caret").css("animation-name", "caretFlashHard"); @@ -927,30 +798,30 @@ function toggleSmoothCaret() { //startgraphsatzero function toggleStartGraphsAtZero() { - config.startGraphsAtZero = !config.startGraphsAtZero; + ConfigSet.startGraphsAtZero(!Config.startGraphsAtZero); saveConfigToCookie(); } function setStartGraphsAtZero(mode, nosave) { - config.startGraphsAtZero = mode; + ConfigSet.startGraphsAtZero(mode); if (!nosave) saveConfigToCookie(); } //linescroll function setSmoothLineScroll(mode, nosave) { - config.smoothLineScroll = mode; + ConfigSet.smoothLineScroll(mode); if (!nosave) saveConfigToCookie(); } function toggleSmoothLineScroll() { - config.smoothLineScroll = !config.smoothLineScroll; + ConfigSet.smoothLineScroll(!Config.smoothLineScroll); saveConfigToCookie(); } //quick tab function setQuickTabMode(mode, nosave) { - config.quickTab = mode; - if (!config.quickTab) { + ConfigSet.quickTab(mode); + if (!Config.quickTab) { $("#restartTestButton").removeClass("hidden"); $("#restartTestButton").css("opacity", 1); $("#bottom .keyTips") @@ -965,8 +836,8 @@ function setQuickTabMode(mode, nosave) { } function toggleQuickTabMode() { - config.quickTab = !config.quickTab; - if (!config.quickTab) { + ConfigSet.quickTab(!Config.quickTab); + if (!Config.quickTab) { $("#restartTestButton").removeClass("hidden"); $("#restartTestButton").css("opacity", 1); $("#bottom .keyTips") @@ -982,11 +853,11 @@ function toggleQuickTabMode() { //numbers function setNumbers(numb, nosave) { - if (config.mode === "quote") { + if (Config.mode === "quote") { numb = false; } - config.numbers = numb; - if (!config.numbers) { + ConfigSet.numbers(numb); + if (!Config.numbers) { $("#top .config .numbersMode .text-button").removeClass("active"); } else { $("#top .config .numbersMode .text-button").addClass("active"); @@ -995,11 +866,11 @@ function setNumbers(numb, nosave) { } function toggleNumbers() { - config.numbers = !config.numbers; - if (config.mode === "quote") { - config.numbers = false; + ConfigSet.numbers(!Config.numbers); + if (Config.mode === "quote") { + ConfigSet.numbers(false); } - if (config.numbers) { + if (Config.numbers) { $("#top .config .numbersMode .text-button").addClass("active"); } else { $("#top .config .numbersMode .text-button").removeClass("active"); @@ -1009,11 +880,11 @@ function toggleNumbers() { //punctuation function setPunctuation(punc, nosave) { - if (config.mode === "quote") { + if (Config.mode === "quote") { punc = false; } - config.punctuation = punc; - if (!config.punctuation) { + ConfigSet.punctuation(punc); + if (!Config.punctuation) { $("#top .config .punctuationMode .text-button").removeClass("active"); } else { $("#top .config .punctuationMode .text-button").addClass("active"); @@ -1022,11 +893,11 @@ function setPunctuation(punc, nosave) { } function togglePunctuation() { - config.punctuation = !config.punctuation; - if (config.mode === "quote") { - config.punctuation = false; + ConfigSet.punctuation(!Config.punctuation); + if (Config.mode === "quote") { + ConfigSet.punctuation(false); } - if (config.punctuation) { + if (Config.punctuation) { $("#top .config .punctuationMode .text-button").addClass("active"); } else { $("#top .config .punctuationMode .text-button").removeClass("active"); @@ -1046,7 +917,7 @@ function setFontFamily(font, nosave) { if (font == undefined || font === "") { font = "Roboto_Mono"; } - config.fontFamily = font; + ConfigSet.fontFamily(font); document.documentElement.style.setProperty("--font", font.replace(/_/g, " ")); Chart.defaults.global.defaultFontFamily = font.replace(/_/g, " "); if (!nosave) saveConfigToCookie(); @@ -1057,17 +928,17 @@ function setFreedomMode(freedom, nosave) { if (freedom == null) { freedom = false; } - config.freedomMode = freedom; - if (config.freedomMode && config.confidenceMode !== "off") { - config.confidenceMode = "off"; + ConfigSet.freedomMode(freedom); + if (Config.freedomMode && Config.confidenceMode !== "off") { + ConfigSet.confidenceMode("off"); } if (!nosave) saveConfigToCookie(); } function toggleFreedomMode() { - config.freedomMode = !config.freedomMode; - if (config.freedomMode && config.confidenceMode !== "off") { - config.confidenceMode = false; + ConfigSet.freedomMode(!Config.freedomMode); + if (Config.freedomMode && Config.confidenceMode !== "off") { + ConfigSet.confidenceMode(false); } saveConfigToCookie(); } @@ -1076,28 +947,22 @@ function setConfidenceMode(cm, nosave) { if (cm == undefined) { cm = "off"; } - config.confidenceMode = cm; - if (config.confidenceMode !== "off") { - config.freedomMode = false; - config.stopOnError = "off"; + ConfigSet.confidenceMode(cm); + if (Config.confidenceMode !== "off") { + ConfigSet.freedomMode(false); + ConfigSet.stopOnError("off"); } - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); if (!nosave) saveConfigToCookie(); } function toggleIndicateTypos() { - let it = !config.indicateTypos; + let it = !Config.indicateTypos; if (it == undefined) { it = false; } - config.indicateTypos = it; + ConfigSet.indicateTypos(it); saveConfigToCookie(); } @@ -1105,14 +970,14 @@ function setIndicateTypos(it, nosave) { if (it == undefined) { it = false; } - config.indicateTypos = it; + ConfigSet.indicateTypos(it); if (!nosave) saveConfigToCookie(); } function setTheme(name, nosave) { - config.theme = name; + ConfigSet.theme(name); setCustomTheme(false, true); - ThemeController.set(config.theme); + ThemeController.set(Config.theme); if (!nosave) saveConfigToCookie(); } @@ -1123,19 +988,19 @@ function setRandomTheme(val, nosave) { if (val === "off") { ThemeController.clearRandom(); } - config.randomTheme = val; + ConfigSet.randomTheme(val); if (!nosave) saveConfigToCookie(); } function setCustomTheme(boolean, nosave) { - if (boolean !== undefined) config.customTheme = boolean; + if (boolean !== undefined) ConfigSet.customTheme(boolean); if (!nosave) saveConfigToCookie(); } function toggleCustomTheme(nosave) { - if (config.customTheme) { + if (Config.customTheme) { setCustomTheme(false); - ThemeController.set(config.theme); + ThemeController.set(Config.theme); // applyCustomThemeColors(); swapElements( $('.pageSettings [tabContent="custom"]'), @@ -1157,7 +1022,7 @@ function toggleCustomTheme(nosave) { function setCustomThemeColors(colors, nosave) { if (colors !== undefined) { - config.customThemeColors = colors; + ConfigSet.customThemeColors(colors); ThemeController.setCustomColors(colors); // ThemeController.set("custom"); // applyCustomThemeColors(); @@ -1169,7 +1034,7 @@ function setLanguage(language, nosave) { if (language == null || language == undefined) { language = "english"; } - config.language = language; + ConfigSet.language(language); try { firebase.analytics().logEvent("changedLanguage", { language: language, @@ -1181,8 +1046,8 @@ function setLanguage(language, nosave) { } function toggleMonkey(nosave) { - config.monkey = !config.monkey; - if (config.monkey) { + ConfigSet.monkey(!Config.monkey); + if (Config.monkey) { $("#monkey").removeClass("hidden"); } else { $("#monkey").addClass("hidden"); @@ -1194,8 +1059,8 @@ function setMonkey(monkey, nosave) { if (monkey === null || monkey === undefined) { monkey = false; } - config.monkey = monkey; - if (config.monkey) { + ConfigSet.monkey(monkey); + if (Config.monkey) { $("#monkey").removeClass("hidden"); } else { $("#monkey").addClass("hidden"); @@ -1207,28 +1072,22 @@ function setCapsLockBackspace(capsLockBackspace, nosave) { if (capsLockBackspace === null || capsLockBackspace === undefined) { capsLockBackspace = false; } - config.capsLockBackspace = capsLockBackspace; + ConfigSet.capsLockBackspace(capsLockBackspace); if (!nosave) saveConfigToCookie(); } function toggleCapsLockBackspace() { - setCapsLockBackspace(!config.capsLockBackspace, false); + setCapsLockBackspace(!Config.capsLockBackspace, false); } function setLayout(layout, nosave) { if (layout == null || layout == undefined) { layout = "qwerty"; } - config.layout = layout; - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); - if (config.keymapLayout === "overrideSync") { - refreshKeymapKeys(config.keymapLayout); + ConfigSet.layout(layout); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); + if (Config.keymapLayout === "overrideSync") { + refreshKeymapKeys(Config.keymapLayout); } if (!nosave) saveConfigToCookie(); } @@ -1237,7 +1096,7 @@ function setSavedLayout(layout, nosave) { if (layout == null || layout == undefined) { layout = "qwerty"; } - config.savedLayout = layout; + ConfigSet.savedLayout(layout); setLayout(layout, nosave); } @@ -1247,7 +1106,7 @@ function setKeymapMode(mode, nosave) { } $(".active-key").removeClass("active-key"); $(".keymap-key").attr("style", ""); - config.keymapMode = mode; + ConfigSet.keymapMode(mode); if (!nosave) restartTest(false, nosave); if (!nosave) saveConfigToCookie(); } @@ -1268,7 +1127,7 @@ function setKeymapStyle(style, nosave) { } else if (style === "split_matrix") { $(".keymap").addClass("split_matrix"); } - config.keymapStyle = style; + ConfigSet.keymapStyle(style); if (!nosave) saveConfigToCookie(); } @@ -1284,7 +1143,7 @@ function setKeymapLayout(layout, nosave) { if (layout == null || layout == undefined) { layout = "qwerty"; } - config.keymapLayout = layout; + ConfigSet.keymapLayout(layout); refreshKeymapKeys(layout); if (!nosave) saveConfigToCookie(); } @@ -1293,13 +1152,13 @@ function refreshKeymapKeys(layout) { try { let lts = layouts[layout]; //layout to show let layoutString = layout; - if (config.keymapLayout === "overrideSync") { - if (config.layout === "default") { + if (Config.keymapLayout === "overrideSync") { + if (Config.layout === "default") { lts = layouts["qwerty"]; layoutString = "default"; } else { - lts = layouts[config.layout]; - layoutString = config.layout; + lts = layouts[Config.layout]; + layoutString = Config.layout; } } @@ -1379,7 +1238,7 @@ function setFontSize(fontSize, nosave) { if (fontSize == null || fontSize == undefined) { fontSize = 1; } - config.fontSize = fontSize; + ConfigSet.fontSize(fontSize); $("#words").removeClass("size125"); $("#caret, #paceCaret").removeClass("size125"); $("#words").removeClass("size15"); @@ -1419,9 +1278,9 @@ function applyConfig(configObj) { Notifications.add("Could not apply config", -1, 3); return; } - Object.keys(defaultConfig).forEach((configKey) => { + Object.keys(ConfigSet.defaultConfig).forEach((configKey) => { if (configObj[configKey] === undefined) { - configObj[configKey] = defaultConfig[configKey]; + configObj[configKey] = ConfigSet.defaultConfig[configKey]; } }); if (configObj && configObj != null && configObj != "null") { @@ -1502,8 +1361,8 @@ function applyConfig(configObj) { addemo = true; } - if (config.enableAds === "max" || config.enableAds === "on") { - if (config.enableAds === "max") { + if (Config.enableAds === "max" || Config.enableAds === "on") { + if (Config.enableAds === "max") { window["nitroAds"].createAd("nitropay_ad_left", { refreshLimit: 10, refreshTime: 30, @@ -1670,11 +1529,5 @@ function applyConfig(configObj) { $("#nitropay_ad_about").remove(); } } - updateTestModesNotice( - sameWordset, - textHasTab, - paceCaret, - activeFunBox, - config - ); + updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox); }