@testgorilla/tgo-typing-test 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +46 -0
- package/jest.config.ts +21 -0
- package/ng-package.json +15 -0
- package/package.json +7 -22
- package/project.json +36 -0
- package/src/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.html +30 -0
- package/src/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.spec.ts +250 -0
- package/src/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.ts +47 -0
- package/src/lib/components/tgo-typing-test/tgo-typing-test.component.html +72 -0
- package/src/lib/components/tgo-typing-test/tgo-typing-test.component.spec.ts +699 -0
- package/src/lib/components/tgo-typing-test/tgo-typing-test.component.ts +287 -0
- package/src/lib/helpers/config.ts +28 -0
- package/src/lib/helpers/constants/default-config.ts +103 -0
- package/src/lib/helpers/controllers/input-controller.ts +710 -0
- package/src/lib/helpers/controllers/quotes-controller.ts +183 -0
- package/src/lib/helpers/observables/banner-event.ts +18 -0
- package/src/lib/helpers/observables/config-event.ts +31 -0
- package/src/lib/helpers/observables/timer-event.ts +18 -0
- package/src/lib/helpers/states/active-page.ts +9 -0
- package/src/lib/helpers/states/composition.ts +29 -0
- package/src/lib/helpers/states/page-transition.ts +9 -0
- package/src/lib/helpers/states/slow-timer.ts +16 -0
- package/src/lib/helpers/states/test-active.ts +9 -0
- package/src/lib/helpers/states/time.ts +13 -0
- package/src/lib/helpers/test/caps-warning.ts +50 -0
- package/src/lib/helpers/test/caret.ts +92 -0
- package/src/lib/helpers/test/custom-text.ts +73 -0
- package/src/lib/helpers/test/english-punctuation.ts +38 -0
- package/src/lib/helpers/test/focus.ts +39 -0
- package/src/lib/helpers/test/manual-restart-tracker.ts +13 -0
- package/src/lib/helpers/test/out-of-focus.ts +19 -0
- package/src/lib/helpers/test/replay.ts +265 -0
- package/src/lib/helpers/test/test-input.ts +320 -0
- package/src/lib/helpers/test/test-logic.ts +1039 -0
- package/src/lib/helpers/test/test-state.ts +17 -0
- package/src/lib/helpers/test/test-stats.ts +442 -0
- package/src/lib/helpers/test/test-timer.ts +209 -0
- package/src/lib/helpers/test/test-ui.ts +370 -0
- package/src/lib/helpers/test/test-words.ts +72 -0
- package/src/lib/helpers/test/timer-progress.ts +16 -0
- package/src/lib/helpers/test/tts.ts +42 -0
- package/src/lib/helpers/test/weak-spot.ts +74 -0
- package/src/lib/helpers/test/wordset.ts +109 -0
- package/src/lib/styles/animations.scss +101 -0
- package/src/lib/styles/caret.scss +108 -0
- package/src/lib/styles/core.scss +498 -0
- package/src/lib/styles/index.scss +19 -0
- package/src/lib/styles/inputs.scss +290 -0
- package/src/lib/styles/popups.scss +1311 -0
- package/src/lib/styles/test.scss +1008 -0
- package/src/lib/styles/z_media-queries.scss +848 -0
- package/src/lib/types/types.d.ts +731 -0
- package/src/lib/utils/misc.ts +776 -0
- package/src/test-setup.ts +20 -0
- package/tsconfig.json +16 -0
- package/tsconfig.lib.json +14 -0
- package/tsconfig.lib.prod.json +9 -0
- package/tsconfig.spec.json +11 -0
- package/esm2022/index.mjs +0 -3
- package/esm2022/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.mjs +0 -45
- package/esm2022/lib/components/tgo-typing-test/tgo-typing-test.component.mjs +0 -299
- package/esm2022/lib/helpers/config.mjs +0 -24
- package/esm2022/lib/helpers/constants/default-config.mjs +0 -103
- package/esm2022/lib/helpers/controllers/input-controller.mjs +0 -586
- package/esm2022/lib/helpers/controllers/quotes-controller.mjs +0 -118
- package/esm2022/lib/helpers/observables/config-event.mjs +0 -16
- package/esm2022/lib/helpers/observables/timer-event.mjs +0 -16
- package/esm2022/lib/helpers/states/active-page.mjs +0 -8
- package/esm2022/lib/helpers/states/composition.mjs +0 -20
- package/esm2022/lib/helpers/states/page-transition.mjs +0 -8
- package/esm2022/lib/helpers/states/slow-timer.mjs +0 -15
- package/esm2022/lib/helpers/states/test-active.mjs +0 -8
- package/esm2022/lib/helpers/states/time.mjs +0 -11
- package/esm2022/lib/helpers/test/caps-warning.mjs +0 -50
- package/esm2022/lib/helpers/test/caret.mjs +0 -80
- package/esm2022/lib/helpers/test/custom-text.mjs +0 -59
- package/esm2022/lib/helpers/test/english-punctuation.mjs +0 -29
- package/esm2022/lib/helpers/test/focus.mjs +0 -35
- package/esm2022/lib/helpers/test/manual-restart-tracker.mjs +0 -11
- package/esm2022/lib/helpers/test/out-of-focus.mjs +0 -14
- package/esm2022/lib/helpers/test/replay.mjs +0 -217
- package/esm2022/lib/helpers/test/test-input.mjs +0 -264
- package/esm2022/lib/helpers/test/test-logic.mjs +0 -927
- package/esm2022/lib/helpers/test/test-state.mjs +0 -13
- package/esm2022/lib/helpers/test/test-stats.mjs +0 -342
- package/esm2022/lib/helpers/test/test-timer.mjs +0 -207
- package/esm2022/lib/helpers/test/test-ui.mjs +0 -341
- package/esm2022/lib/helpers/test/test-words.mjs +0 -69
- package/esm2022/lib/helpers/test/timer-progress.mjs +0 -15
- package/esm2022/lib/helpers/test/weak-spot.mjs +0 -65
- package/esm2022/lib/helpers/test/wordset.mjs +0 -100
- package/esm2022/lib/utils/misc.mjs +0 -673
- package/esm2022/testgorilla-tgo-typing-test.mjs +0 -5
- package/fesm2022/testgorilla-tgo-typing-test.mjs +0 -4707
- package/fesm2022/testgorilla-tgo-typing-test.mjs.map +0 -1
- package/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.d.ts +0 -14
- package/lib/components/tgo-typing-test/tgo-typing-test.component.d.ts +0 -54
- package/lib/helpers/config.d.ts +0 -98
- package/lib/helpers/constants/default-config.d.ts +0 -3
- package/lib/helpers/controllers/input-controller.d.ts +0 -16
- package/lib/helpers/controllers/quotes-controller.d.ts +0 -20
- package/lib/helpers/observables/config-event.d.ts +0 -5
- package/lib/helpers/observables/timer-event.d.ts +0 -4
- package/lib/helpers/states/active-page.d.ts +0 -2
- package/lib/helpers/states/composition.d.ts +0 -10
- package/lib/helpers/states/page-transition.d.ts +0 -2
- package/lib/helpers/states/slow-timer.d.ts +0 -3
- package/lib/helpers/states/test-active.d.ts +0 -2
- package/lib/helpers/states/time.d.ts +0 -3
- package/lib/helpers/test/caps-warning.d.ts +0 -5
- package/lib/helpers/test/caret.d.ts +0 -11
- package/lib/helpers/test/custom-text.d.ts +0 -16
- package/lib/helpers/test/english-punctuation.d.ts +0 -3
- package/lib/helpers/test/focus.d.ts +0 -7
- package/lib/helpers/test/manual-restart-tracker.d.ts +0 -3
- package/lib/helpers/test/out-of-focus.d.ts +0 -4
- package/lib/helpers/test/replay.d.ts +0 -20
- package/lib/helpers/test/test-input.d.ts +0 -86
- package/lib/helpers/test/test-logic.d.ts +0 -25
- package/lib/helpers/test/test-state.d.ts +0 -7
- package/lib/helpers/test/test-stats.d.ts +0 -92
- package/lib/helpers/test/test-timer.d.ts +0 -6
- package/lib/helpers/test/test-ui.d.ts +0 -27
- package/lib/helpers/test/test-words.d.ts +0 -23
- package/lib/helpers/test/timer-progress.d.ts +0 -3
- package/lib/helpers/test/weak-spot.d.ts +0 -3
- package/lib/helpers/test/wordset.d.ts +0 -7
- package/lib/utils/misc.d.ts +0 -81
- /package/{assets → src/assets}/typing-test-languages/english.json +0 -0
- /package/{assets → src/assets}/typing-test-languages/english_punctuation.json +0 -0
- /package/{assets → src/assets}/typing-test-languages/quotes/english_version_1.json +0 -0
- /package/{assets → src/assets}/typing-test-languages/quotes/english_version_2.json +0 -0
- /package/{assets → src/assets}/typing-test-languages/quotes/filtered_sources.json +0 -0
- /package/{index.d.ts → src/index.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-typing-test.mjs","sources":["../../../../packages/tgo-typing-test/src/lib/helpers/constants/default-config.ts","../../../../packages/tgo-typing-test/src/lib/helpers/config.ts","../../../../packages/tgo-typing-test/src/lib/helpers/observables/config-event.ts","../../../../packages/tgo-typing-test/src/lib/utils/misc.ts","../../../../packages/tgo-typing-test/src/lib/helpers/controllers/quotes-controller.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/manual-restart-tracker.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/test-words.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/test-input.ts","../../../../packages/tgo-typing-test/src/lib/helpers/states/slow-timer.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/caret.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/out-of-focus.ts","../../../../packages/tgo-typing-test/src/lib/helpers/states/composition.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/test-ui.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/custom-text.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/test-stats.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/focus.ts","../../../../packages/tgo-typing-test/src/lib/helpers/states/time.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/timer-progress.ts","../../../../packages/tgo-typing-test/src/lib/helpers/observables/timer-event.ts","../../../../packages/tgo-typing-test/src/lib/helpers/states/test-active.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/test-timer.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/replay.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/weak-spot.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/wordset.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/english-punctuation.ts","../../../../packages/tgo-typing-test/src/lib/helpers/states/active-page.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/test-state.ts","../../../../packages/tgo-typing-test/src/lib/helpers/states/page-transition.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/test-logic.ts","../../../../packages/tgo-typing-test/src/lib/helpers/controllers/input-controller.ts","../../../../packages/tgo-typing-test/src/lib/helpers/test/caps-warning.ts","../../../../packages/tgo-typing-test/src/lib/components/tgo-typing-test/tgo-typing-test.component.ts","../../../../packages/tgo-typing-test/src/lib/components/tgo-typing-test/tgo-typing-test.component.html","../../../../packages/tgo-typing-test/src/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.ts","../../../../packages/tgo-typing-test/src/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.html","../../../../packages/tgo-typing-test/src/testgorilla-tgo-typing-test.ts"],"sourcesContent":["import { MonkeyTypes } from '../../types/types';\nexport default <MonkeyTypes.Config>{\n theme: 'serika_dark',\n themeLight: 'serika',\n themeDark: 'serika_dark',\n autoSwitchTheme: false,\n customTheme: false,\n customThemeColors: [\n '#323437',\n '#e2b714',\n '#e2b714',\n '#646669',\n '#2c2e31',\n '#d1d0c5',\n '#ca4754',\n '#7e2a33',\n '#ca4754',\n '#7e2a33',\n ],\n favThemes: [],\n showKeyTips: true,\n showLiveWpm: false,\n showTimerProgress: true,\n smoothCaret: true,\n quickRestart: 'off',\n punctuation: false,\n numbers: false,\n words: 50,\n time: 15,\n mode: 'time',\n quoteLength: [2],\n language: 'english',\n fontSize: '15',\n freedomMode: false,\n resultFilters: null,\n difficulty: 'normal',\n blindMode: false,\n quickEnd: false,\n caretStyle: 'default',\n paceCaretStyle: 'default',\n flipTestColors: false,\n layout: 'default',\n funbox: 'none',\n confidenceMode: 'on',\n indicateTypos: 'below',\n timerStyle: 'mini',\n colorfulMode: false,\n randomTheme: 'off',\n timerColor: 'main',\n timerOpacity: '1',\n stopOnError: 'off',\n showAllLines: false,\n keymapMode: 'off',\n keymapStyle: 'staggered',\n keymapLegendStyle: 'lowercase',\n keymapLayout: 'overrideSync',\n keymapShowTopRow: 'layout',\n fontFamily: 'Roboto_Mono',\n smoothLineScroll: false,\n alwaysShowDecimalPlaces: false,\n alwaysShowWordsHistory: false,\n singleListCommandLine: 'manual',\n capsLockWarning: true,\n playSoundOnError: false,\n playSoundOnClick: 'off',\n soundVolume: '0.5',\n startGraphsAtZero: true,\n showOutOfFocusWarning: true,\n paceCaret: 'off',\n paceCaretCustomSpeed: 100,\n repeatedPace: true,\n pageWidth: '125',\n chartAccuracy: true,\n chartStyle: 'line',\n minWpm: 'off',\n minWpmCustomSpeed: 100,\n highlightMode: 'letter',\n alwaysShowCPM: false,\n ads: 'result',\n hideExtraLetters: false,\n strictSpace: false,\n minAcc: 'off',\n minAccCustom: 90,\n showLiveAcc: false,\n showLiveBurst: false,\n monkey: false,\n repeatQuotes: 'off',\n oppositeShiftMode: 'off',\n customBackground: '',\n customBackgroundSize: 'cover',\n customBackgroundFilter: [0, 1, 1, 1, 1],\n customLayoutfluid: 'qwerty#dvorak#colemak',\n monkeyPowerLevel: 'off',\n minBurst: 'off',\n minBurstCustomSpeed: 100,\n burstHeatmap: false,\n britishEnglish: false,\n lazyMode: false,\n showAverage: 'off',\n tapeMode: 'off',\n customTGQuotes: false,\n testVersion: 1,\n};\n","import DefaultConfig from \"./constants/default-config\";\nconst config = {\n ...DefaultConfig,\n};\n\nexport function setNumbers(numb: boolean) {\n config.numbers = numb;\n}\nexport function setPunctuation(punc: boolean) {\n config.punctuation = punc;\n}\nexport function setTime(time: number) {\n config.time = time;\n}\n\nexport function setFunbox(funbox: string) {\n config.funbox = funbox;\n}\n\nexport function setCustomTGQuotes(customTGQuotes: boolean) {\n config.customTGQuotes = customTGQuotes;\n}\n\nexport function setTestVersionForSentences(testVersion: number) {\n config.testVersion = testVersion;\n}\n\nexport default config;\n","import { MonkeyTypes } from '../../types/types';\ntype SubscribeFunction = (\n key: string,\n newValue?: MonkeyTypes.ConfigValues,\n nosave?: boolean,\n previousValue?: MonkeyTypes.ConfigValues,\n fullConfig?: MonkeyTypes.Config\n) => void;\n\nconst subscribers: SubscribeFunction[] = [];\n\nexport function subscribe(fn: SubscribeFunction): void {\n subscribers.push(fn);\n}\n\nexport function dispatch(\n key: string,\n newValue?: MonkeyTypes.ConfigValues,\n nosave?: boolean,\n previousValue?: MonkeyTypes.ConfigValues,\n fullConfig?: MonkeyTypes.Config\n): void {\n subscribers.forEach(fn => {\n try {\n fn(key, newValue, nosave, previousValue, fullConfig);\n } catch (e) {\n console.error('Config event subscriber threw an error');\n console.error(e);\n }\n });\n}\n","import { BehaviorSubject } from 'rxjs';\n\nimport { MonkeyTypes } from '../types/types';\n\nconst QuoteNetworkErrorSubject = new BehaviorSubject<string>('');\n\nexport const QuoteNetworkErrorMessage = 'Text not loading.';\n\nexport function emitQuoteNetworkError(): void {\n QuoteNetworkErrorSubject.next(QuoteNetworkErrorMessage);\n}\n\nexport const QuoteNetworkError$ = QuoteNetworkErrorSubject.asObservable();\n\nfunction hexToHSL(hex: string): {\n hue: number;\n sat: number;\n lgt: number;\n string: string;\n} {\n // Convert hex to RGB first\n let r: number;\n let g: number;\n let b: number;\n if (hex.length == 4) {\n r = ('0x' + hex[1] + hex[1]) as unknown as number;\n g = ('0x' + hex[2] + hex[2]) as unknown as number;\n b = ('0x' + hex[3] + hex[3]) as unknown as number;\n } else if (hex.length == 7) {\n r = ('0x' + hex[1] + hex[2]) as unknown as number;\n g = ('0x' + hex[3] + hex[4]) as unknown as number;\n b = ('0x' + hex[5] + hex[6]) as unknown as number;\n } else {\n r = 0x00;\n g = 0x00;\n b = 0x00;\n }\n // Then to HSL\n r /= 255;\n g /= 255;\n b /= 255;\n const cmin = Math.min(r, g, b);\n const cmax = Math.max(r, g, b);\n const delta = cmax - cmin;\n let h = 0;\n let s = 0;\n let l = 0;\n\n if (delta == 0) h = 0;\n else if (cmax == r) h = ((g - b) / delta) % 6;\n else if (cmax == g) h = (b - r) / delta + 2;\n else h = (r - g) / delta + 4;\n\n h = Math.round(h * 60);\n\n if (h < 0) h += 360;\n\n l = (cmax + cmin) / 2;\n s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n\n return {\n hue: h,\n sat: s,\n lgt: l,\n string: 'hsl(' + h + ',' + s + '%,' + l + '%)',\n };\n}\n\nexport function isColorLight(hex: string): boolean {\n const hsl = hexToHSL(hex);\n return hsl.lgt >= 50;\n}\n\nexport function isColorDark(hex: string): boolean {\n const hsl = hexToHSL(hex);\n return hsl.lgt < 50;\n}\n\nlet currentLanguage: MonkeyTypes.LanguageObject;\nexport async function getLanguage(lang: string): Promise<MonkeyTypes.LanguageObject> {\n try {\n if (currentLanguage == undefined || currentLanguage.name !== lang) {\n console.log('getting language json');\n await fetch(`/../assets/typing-test-languages/${lang}.json`)\n .then(res => res.json())\n .then(json => {\n currentLanguage = json;\n });\n }\n return currentLanguage;\n } catch (e) {\n console.error(`error getting language`);\n console.error(e);\n await fetch(`/../assets/typing-test-languages/english.json`)\n .then(res => res.json())\n .then(json => {\n currentLanguage = json;\n });\n return currentLanguage;\n }\n}\n\nexport async function getCurrentLanguage(\n languageName: string\n): Promise<MonkeyTypes.LanguageObject> {\n return await getLanguage(languageName);\n}\n\nexport function smooth(\n arr: number[],\n windowSize: number,\n getter = (value: number): number => value\n): number[] {\n const get = getter;\n const result = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n const leftOffeset = i - windowSize;\n const from = leftOffeset >= 0 ? leftOffeset : 0;\n const to = i + windowSize + 1;\n\n let count = 0;\n let sum = 0;\n for (let j = from; j < to && j < arr.length; j += 1) {\n sum += get(arr[j]);\n count += 1;\n }\n\n result[i] = sum / count;\n }\n\n return result;\n}\n\nexport function stdDev(array: number[]): number {\n try {\n const n = array.length;\n const mean = array.reduce((a, b) => a + b) / n;\n return Math.sqrt(array.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n);\n } catch (e) {\n return 0;\n }\n}\n\nexport function mean(array: number[]): number {\n try {\n return array.reduce((previous, current) => (current += previous)) / array.length;\n } catch (e) {\n return 0;\n }\n}\n\n//https://www.w3resource.com/javascript-exercises/fundamental/javascript-fundamental-exercise-88.php\nexport function median(arr: number[]): number {\n try {\n const mid = Math.floor(arr.length / 2),\n nums = [...arr].sort((a, b) => a - b);\n return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n } catch (e) {\n return 0;\n }\n}\n\nexport function getLastChar(word: string): string {\n try {\n return word.charAt(word.length - 1);\n } catch {\n return '';\n }\n}\n\nexport function capitalizeFirstLetterOfEachWord(str: string): string {\n return str\n .split(/ +/)\n .map(s => s.charAt(0).toUpperCase() + s.slice(1))\n .join(' ');\n}\n\nexport function isASCIILetter(c: string): boolean {\n return c.length === 1 && /[a-z]/i.test(c);\n}\n\nexport function kogasa(cov: number): number {\n return 100 * (1 - Math.tanh(cov + Math.pow(cov, 3) / 3 + Math.pow(cov, 5) / 5));\n}\n\nexport function whorf(speed: number, wordlen: number): number {\n return Math.min(speed, Math.floor(speed * Math.pow(1.03, -2 * (wordlen - 3))));\n}\n\nexport function roundTo2(num: number): number {\n return Math.round((num + Number.EPSILON) * 100) / 100;\n}\n\nexport function findLineByLeastSquares(values_y: number[]): number[][] {\n let sum_x = 0;\n let sum_y = 0;\n let sum_xy = 0;\n let sum_xx = 0;\n let count = 0;\n\n /*\n * We'll use those letiables for faster read/write access.\n */\n let x = 0;\n let y = 0;\n const values_length = values_y.length;\n\n /*\n * Nothing to do.\n */\n if (values_length === 0) {\n return [[], []];\n }\n\n /*\n * Calculate the sum for each of the parts necessary.\n */\n for (let v = 0; v < values_length; v++) {\n x = v + 1;\n y = values_y[v];\n sum_x += x;\n sum_y += y;\n sum_xx += x * x;\n sum_xy += x * y;\n count++;\n }\n\n /*\n * Calculate m and b for the formular:\n * y = x * m + b\n */\n const m = (count * sum_xy - sum_x * sum_y) / (count * sum_xx - sum_x * sum_x);\n const b = sum_y / count - (m * sum_x) / count;\n\n const returnpoint1 = [1, 1 * m + b];\n const returnpoint2 = [values_length, values_length * m + b];\n return [returnpoint1, returnpoint2];\n}\n\nexport function getGibberish(): string {\n const randLen = randomIntFromRange(1, 7);\n let ret = '';\n for (let i = 0; i < randLen; i++) {\n ret += String.fromCharCode(97 + randomIntFromRange(0, 25));\n }\n return ret;\n}\n\nexport function secondsToString(\n sec: number,\n alwaysShowMinutes = false,\n alwaysShowHours = false,\n delimiter: ':' | 'text' = ':',\n showSeconds = true,\n showDays = false\n): string {\n sec = Math.abs(sec);\n let days = 0;\n let hours;\n if (showDays) {\n days = Math.floor(sec / 86400);\n hours = Math.floor((sec % 86400) / 3600);\n } else {\n hours = Math.floor(sec / 3600);\n }\n const minutes = Math.floor((sec % 3600) / 60);\n const seconds = roundTo2((sec % 3600) % 60);\n\n let daysString;\n let hoursString;\n let minutesString;\n let secondsString;\n\n if (showDays) {\n days < 10 && delimiter !== 'text' ? (daysString = '0' + days) : (daysString = days);\n }\n hours < 10 && delimiter !== 'text' ? (hoursString = '0' + hours) : (hoursString = hours);\n minutes < 10 && delimiter !== 'text'\n ? (minutesString = '0' + minutes)\n : (minutesString = minutes);\n seconds < 10 && (minutes > 0 || hours > 0 || alwaysShowMinutes) && delimiter !== 'text'\n ? (secondsString = '0' + seconds)\n : (secondsString = seconds);\n\n let ret = '';\n if (days > 0 && showDays) {\n ret += daysString;\n if (delimiter === 'text') {\n if (days == 1) {\n ret += ' day ';\n } else {\n ret += ' days ';\n }\n } else {\n ret += delimiter;\n }\n }\n if (hours > 0 || alwaysShowHours) {\n ret += hoursString;\n if (delimiter === 'text') {\n if (hours == 1) {\n ret += ' hour ';\n } else {\n ret += ' hours ';\n }\n } else {\n ret += delimiter;\n }\n }\n if (minutes > 0 || hours > 0 || alwaysShowMinutes) {\n ret += minutesString;\n if (delimiter === 'text') {\n if (minutes == 1) {\n ret += ' minute ';\n } else {\n ret += ' minutes ';\n }\n } else if (showSeconds) {\n ret += delimiter;\n }\n }\n if (showSeconds) {\n ret += secondsString;\n if (delimiter === 'text') {\n if (seconds == 1) {\n ret += ' second';\n } else {\n ret += ' seconds';\n }\n }\n }\n if (hours === 0 && minutes === 0 && !showSeconds && delimiter === 'text') {\n ret = 'less than 1 minute';\n }\n return ret.trim();\n}\n\nexport function getNumbers(len: number, start?: number): string {\n const randLen = randomIntFromRange(start ? start : 1, len);\n let ret = '';\n for (let i = 0; i < randLen; i++) {\n let randomNum;\n if (i === 0) {\n randomNum = randomIntFromRange(1, 9);\n } else {\n randomNum = randomIntFromRange(0, 9);\n }\n ret += randomNum.toString();\n }\n return ret;\n}\n\n//convert numbers to arabic-indic\nexport function convertNumberToArabicIndic(numString: string): string {\n const arabicIndic = '٠١٢٣٤٥٦٧٨٩';\n let ret = '';\n for (let i = 0; i < numString.length; i++) {\n ret += arabicIndic[parseInt(numString[i])];\n }\n return ret;\n}\n\nexport function getSpecials(): string {\n const randLen = randomIntFromRange(1, 7);\n let ret = '';\n const specials = [\n '!',\n '@',\n '#',\n '$',\n '%',\n '^',\n '&',\n '*',\n '(',\n ')',\n '-',\n '_',\n '=',\n '+',\n '{',\n '}',\n '[',\n ']',\n \"'\",\n '\"',\n '/',\n '\\\\',\n '|',\n ];\n for (let i = 0; i < randLen; i++) {\n ret += randomElementFromArray(specials);\n }\n return ret;\n}\n\nexport function getASCII(): string {\n const randLen = randomIntFromRange(1, 10);\n let ret = '';\n for (let i = 0; i < randLen; i++) {\n const ran = 33 + randomIntFromRange(0, 93);\n ret += String.fromCharCode(ran);\n }\n return ret;\n}\n\nexport function getArrows(): string {\n const arrowArray = ['←', '↑', '→', '↓'];\n let arrowWord = '';\n let lastchar;\n for (let i = 0; i < 5; i++) {\n let random = randomElementFromArray(arrowArray);\n while (random === lastchar) {\n random = randomElementFromArray(arrowArray);\n }\n lastchar = random;\n arrowWord += random;\n }\n return arrowWord;\n}\n\nexport function getPositionString(number: number): string {\n let numend = 'th';\n const t = number % 10;\n const h = number % 100;\n if (t == 1 && h != 11) {\n numend = 'st';\n }\n if (t == 2 && h != 12) {\n numend = 'nd';\n }\n if (t == 3 && h != 13) {\n numend = 'rd';\n }\n return number + numend;\n}\n\nexport function findGetParameter(parameterName: string, getOverride?: string): string | null {\n let result = null;\n let tmp = [];\n\n let search = location.search;\n if (getOverride) {\n search = getOverride;\n }\n\n search\n .substr(1)\n .split('&')\n .forEach(function (item) {\n tmp = item.split('=');\n if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);\n });\n return result;\n}\n\nexport function objectToQueryString<T extends string | number | boolean>(\n obj: Record<string, T | T[]>\n): string {\n const str = [];\n for (const p in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, p)) {\n // Arrays get encoded as a comma(%2C)-separated list\n str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p] as unknown as T));\n }\n }\n return str.join('&');\n}\n\ndeclare global {\n interface Document {\n mozCancelFullScreen?: () => Promise<void>;\n msRequestFullscreen?: () => Promise<void>;\n msExitFullscreen?: () => Promise<void>;\n webkitExitFullscreen?: () => Promise<void>;\n mozFullScreenElement?: Element;\n msFullscreenElement?: Element;\n webkitFullscreenElement?: Element;\n }\n interface HTMLElement {\n msRequestFullscreen?: () => Promise<void>;\n mozRequestFullScreen?: () => Promise<void>;\n webkitRequestFullscreen?: () => Promise<void>;\n }\n}\n\nexport function toggleFullscreen(): void {\n const elem = document.documentElement;\n if (\n !document.fullscreenElement &&\n !document.mozFullScreenElement &&\n !document.webkitFullscreenElement &&\n !document.msFullscreenElement\n ) {\n if (elem.requestFullscreen) {\n elem.requestFullscreen();\n } else if (elem.msRequestFullscreen) {\n elem.msRequestFullscreen();\n } else if (elem.mozRequestFullScreen) {\n elem.mozRequestFullScreen();\n } else if (elem.webkitRequestFullscreen) {\n // @ts-expect-error - Element.ALLOW_KEYBOARD_INPUT is not defined\n elem.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n }\n } else {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n }\n}\n\n//credit: https://www.w3resource.com/javascript-exercises/javascript-string-exercise-32.php\nexport function remove_non_ascii(str: string): string {\n if (str === null || str === '') return '';\n else str = str.toString();\n\n return str.replace(/[^\\x20-\\x7E]/g, '');\n}\n\nexport function escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function escapeHTML(str: string): string {\n str = str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\n return str;\n}\n\nexport function cleanTypographySymbols(textToClean: string): string {\n const specials = {\n '“': '\"', // “\t“\n '”': '\"', // ”\t”\n '’': \"'\", // ‘\t‘\n '‘': \"'\", // ’\t’\n ',': ',', // ‚\t‚\n '—': '-', // — —\n '…': '...', // … …\n '«': '<<',\n '»': '>>',\n '–': '-',\n ' ': ' ',\n ' ': ' ',\n ' ': ' ',\n };\n return textToClean.replace(\n /[“”’‘—,…«»–\\u2007\\u202F\\u00A0]/g,\n char => specials[char as keyof typeof specials] || ''\n );\n}\n\nexport function isUsernameValid(name: string): boolean {\n if (name === null || name === undefined || name === '') return false;\n if (/miodec/.test(name.toLowerCase())) return false;\n if (/bitly/.test(name.toLowerCase())) return false;\n if (name.length > 14) return false;\n if (/^\\..*/.test(name.toLowerCase())) return false;\n return /^[0-9a-zA-Z_.-]+$/.test(name);\n}\n\nexport function mapRange(\n x: number,\n in_min: number,\n in_max: number,\n out_min: number,\n out_max: number\n): number {\n let num = ((x - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min;\n\n if (out_min > out_max) {\n if (num > out_min) {\n num = out_min;\n } else if (num < out_max) {\n num = out_max;\n }\n } else {\n if (num < out_min) {\n num = out_min;\n } else if (num > out_max) {\n num = out_max;\n }\n }\n return num;\n}\n\nexport function canQuickRestart(\n mode: string,\n words: number,\n time: number,\n CustomText: MonkeyTypes.CustomText\n): boolean {\n if (\n (mode === 'words' && words < 1000) ||\n (mode === 'time' && time < 3600) ||\n mode === 'quote' ||\n (mode === 'custom' && CustomText.isWordRandom && CustomText.word < 1000) ||\n (mode === 'custom' && CustomText.isTimeRandom && CustomText.time < 3600) ||\n (mode === 'custom' && !CustomText.isWordRandom && CustomText.text.length < 1000)\n ) {\n return true;\n } else {\n return false;\n }\n}\n\nexport function clearTimeouts(timeouts: (number | NodeJS.Timeout)[]): void {\n timeouts.forEach(to => {\n if (typeof to === 'number') clearTimeout(to);\n else clearTimeout(to);\n });\n}\n\n//https://stackoverflow.com/questions/1431094/how-do-i-replace-a-character-at-a-particular-index-in-javascript\nexport function setCharAt(str: string, index: number, chr: string): string {\n if (index > str.length - 1) return str;\n return str.substring(0, index) + chr + str.substring(index + 1);\n}\n\n//https://stackoverflow.com/questions/273789/is-there-a-version-of-javascripts-string-indexof-that-allows-for-regular-expr\nexport function regexIndexOf(string: string, regex: RegExp, startpos: number): number {\n const indexOf = string.substring(startpos || 0).search(regex);\n return indexOf >= 0 ? indexOf + (startpos || 0) : indexOf;\n}\n\nexport function convertRGBtoHEX(rgb: string): string | undefined {\n const match: RegExpMatchArray | null = rgb.match(/^rgb\\((\\d+), \\s*(\\d+), \\s*(\\d+)\\)$/);\n if (match === null) return;\n if (match.length < 3) return;\n function hexCode(i: string): string {\n // Take the last 2 characters and convert\n // them to Hexadecimal.\n\n return ('0' + parseInt(i).toString(16)).slice(-2);\n }\n return '#' + hexCode(match[1]) + hexCode(match[2]) + hexCode(match[3]);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\ninterface LastIndex extends String {\n lastIndexOfRegex(regex: RegExp): number;\n}\n\n(String.prototype as unknown as LastIndex).lastIndexOfRegex = function (regex: RegExp): number {\n const match = this.match(regex);\n return match ? this.lastIndexOf(match[match.length - 1]) : -1;\n};\n\nexport const trailingComposeChars = /[\\u02B0-\\u02FF`´^¨~]+$|⎄.*$/;\n\n//https://stackoverflow.com/questions/36532307/rem-px-in-javascript\nexport function convertRemToPixels(rem: number): number {\n return rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\n}\n\nexport function getMode2(config: MonkeyTypes.Config, randomQuote: MonkeyTypes.Quote): string {\n const mode = config.mode;\n if (mode === 'time') {\n return config.time.toString();\n } else if (mode === 'words') {\n return config.words.toString();\n } else if (mode === 'custom') {\n return 'custom';\n } else if (mode === 'zen') {\n return 'zen';\n } else if (mode === 'quote') {\n return randomQuote.id.toString();\n }\n\n return '';\n}\n\n/**\n * Gets an integer between min and max, both are inclusive.\n * @param min\n * @param max\n * @returns Random integer betwen min and max.\n */\nexport function randomIntFromRange(min: number, max: number): number {\n const minNorm = Math.ceil(min);\n const maxNorm = Math.floor(max);\n return Math.floor(Math.random() * (maxNorm - minNorm + 1) + minNorm);\n}\n\n/**\n * Shuffle an array of elements using the Fisher–Yates algorithm.\n * This function mutates the input array.\n * @param elements\n */\nexport function shuffle<T>(elements: T[]): void {\n for (let i = elements.length - 1; i > 0; --i) {\n const j = randomIntFromRange(0, i);\n const temp = elements[j];\n elements[j] = elements[i];\n elements[i] = temp;\n }\n}\n\nexport function randomElementFromArray<T>(array: T[]): T {\n return array[randomIntFromRange(0, array.length - 1)];\n}\n\nexport function randomElementFromObject<T extends object>(object: T): T[keyof T] {\n return randomElementFromArray(Object.values(object));\n}\n\nexport function createErrorMessage(error: unknown, message: string): string {\n if (error instanceof Error) {\n return `${message}: ${error.message}`;\n }\n\n const objectWithMessage = error as { message?: string };\n\n if (objectWithMessage?.message) {\n return `${message}: ${objectWithMessage.message}`;\n }\n\n return message;\n}\n\nexport async function getDiscordAvatarUrl(\n discordId?: string,\n discordAvatar?: string,\n discordAvatarSize = 32\n): Promise<string | null> {\n if (!discordId || !discordAvatar) {\n return null;\n }\n\n // An invalid request to this URL will return a 404.\n try {\n const avatarUrl = `https://cdn.discordapp.com/avatars/${discordId}/${discordAvatar}.png?size=${discordAvatarSize}`;\n\n const response = await fetch(avatarUrl);\n if (!response.ok) {\n return null;\n }\n\n return avatarUrl;\n } catch (error) {\n console.error(error);\n }\n\n return null;\n}\n\nexport function getLevel(xp: number): number {\n return (1 / 98) * (-151 + Math.sqrt(392 * xp + 22801)) + 1;\n}\n\nexport function getXpForLevel(level: number): number {\n return 49 * (level - 1) + 100;\n}\n\nexport function abbreviateNumber(num: number): string {\n if (num < 1000) {\n return num.toString();\n }\n\n const exp = Math.floor(Math.log(num) / Math.log(1000));\n const pre = 'kmbtqQsSond'.charAt(exp - 1);\n return (num / Math.pow(1000, exp)).toFixed(1) + pre;\n}\n","import { subscribe } from '../observables/config-event';\nimport { shuffle } from '../../utils/misc';\nimport { MonkeyTypes } from '../../types/types';\n\ninterface Quote {\n text: string;\n source: string;\n length: number;\n id: number;\n}\n\ninterface QuoteData {\n language: string;\n quotes: Quote[];\n groups: number[][];\n}\n\ninterface QuoteCollection {\n quotes: MonkeyTypes.Quote[];\n length: number;\n language: string | null;\n groups: MonkeyTypes.Quote[][];\n}\n\ninterface FilteredSources {\n sources: string[];\n}\n\nconst defaultQuoteCollection: QuoteCollection = {\n quotes: [],\n length: 0,\n language: null,\n groups: [],\n};\n\nfunction normalizeLanguage(language: string): string {\n return language.replace(/_\\d*k$/g, '');\n}\n\nclass QuotesController {\n private quoteCollection: QuoteCollection = defaultQuoteCollection;\n\n private quoteQueue: MonkeyTypes.Quote[] = [];\n private queueIndex = 0;\n\n async getQuotes(\n language: string,\n testVersion: number,\n quoteLengths?: number[]\n ): Promise<QuoteCollection> {\n const normalizedLanguage = normalizeLanguage(language);\n\n if (this.quoteCollection.language !== normalizedLanguage) {\n try {\n const data: QuoteData = await fetch(\n `/../assets/typing-test-languages/quotes/${normalizedLanguage}_version_${testVersion}.json`\n ).then(res => res.json());\n\n const filteredSources: FilteredSources = await fetch(\n `/../assets/typing-test-languages/quotes/filtered_sources.json`\n ).then(res => res.json());\n\n if (data.quotes === undefined || data.quotes.length === 0) {\n return defaultQuoteCollection;\n }\n\n this.quoteCollection = {\n quotes: [],\n length: data.quotes.length,\n groups: [],\n language: data.language,\n };\n\n // Transform JSON Quote schema to MonkeyTypes Quote schema\n data.quotes.forEach((quote: Quote) => {\n const monkeyTypeQuote: MonkeyTypes.Quote = {\n text: quote.text,\n source: quote.source,\n length: quote.length,\n id: quote.id,\n language: data.language,\n group: 0,\n };\n\n this.quoteCollection.quotes.push(monkeyTypeQuote);\n });\n\n if (filteredSources) {\n this.quoteCollection.quotes = this.quoteCollection.quotes.filter(quote =>\n filteredSources.sources.includes(quote.source)\n );\n }\n\n data.groups.forEach((quoteGroup, groupIndex) => {\n const lower = quoteGroup[0];\n const upper = quoteGroup[1];\n\n this.quoteCollection.groups[groupIndex] = this.quoteCollection.quotes.filter(quote => {\n if (quote.length >= lower && quote.length <= upper) {\n quote.group = groupIndex;\n return true;\n }\n return false;\n });\n });\n\n if (quoteLengths !== undefined) {\n this.updateQuoteQueue(quoteLengths);\n }\n } catch (e) {\n if (!defaultQuoteCollection.quotes.length) {\n throw e;\n }\n return defaultQuoteCollection;\n }\n }\n\n return this.quoteCollection;\n }\n\n getQuoteById(id: number): MonkeyTypes.Quote | undefined {\n const targetQuote = this.quoteCollection.quotes.find((quote: MonkeyTypes.Quote) => {\n return quote.id === id;\n });\n\n return targetQuote;\n }\n\n updateQuoteQueue(quoteGroups: number[]): void {\n this.quoteQueue = [];\n\n quoteGroups.forEach(group => {\n if (group < 0) {\n return;\n }\n this.quoteCollection.groups[group]?.forEach(quote => {\n this.quoteQueue.push(quote);\n });\n });\n\n shuffle(this.quoteQueue);\n this.queueIndex = 0;\n }\n\n getRandomQuote(): MonkeyTypes.Quote | null {\n if (this.quoteQueue.length === 0) {\n return null;\n }\n\n if (this.queueIndex >= this.quoteQueue.length) {\n this.queueIndex = 0;\n shuffle(this.quoteQueue);\n }\n\n const randomQuote = this.quoteQueue[this.queueIndex];\n\n this.queueIndex += 1;\n\n return randomQuote;\n }\n\n getCurrentQuote(): MonkeyTypes.Quote | null {\n if (this.quoteQueue.length === 0) {\n return null;\n }\n\n return this.quoteQueue[this.queueIndex];\n }\n\n resetQuotes() {\n this.quoteCollection = defaultQuoteCollection;\n }\n}\n\nconst quoteController = new QuotesController();\n\nsubscribe((key, newValue) => {\n if (key === 'quoteLength') {\n quoteController.updateQuoteQueue(newValue as number[]);\n }\n});\n\nexport default quoteController;\n","let state = false;\n\nexport function set(): void {\n state = true;\n}\n\nexport function reset(): void {\n state = false;\n}\n\nexport function get(): boolean {\n return state;\n}\n","import { MonkeyTypes } from '../../types/types';\nclass Words {\n public list: string[];\n public length: number;\n public currentIndex: number;\n constructor() {\n this.list = [];\n this.length = 0;\n this.currentIndex = 0;\n }\n get(i?: undefined, raw?: boolean): string[];\n get(i: number, raw?: boolean): string;\n get(i?: number | undefined, raw = false): string | string[] {\n if (i === undefined) {\n return this.list;\n } else {\n if (raw) {\n return this.list[i]?.replace(/[.?!\":\\-,]/g, \"\")?.toLowerCase();\n } else {\n return this.list[i];\n }\n }\n }\n getCurrent(): string {\n return this.list[this.currentIndex];\n }\n getLast(): string {\n return this.list[this.list.length - 1];\n }\n push(word: string): void {\n this.list.push(word);\n this.length = this.list.length;\n }\n reset(): void {\n this.list = [];\n this.currentIndex = 0;\n this.length = this.list.length;\n }\n resetCurrentIndex(): void {\n this.currentIndex = 0;\n }\n decreaseCurrentIndex(): void {\n this.currentIndex--;\n }\n increaseCurrentIndex(): void {\n this.currentIndex++;\n }\n clean(): void {\n for (const s of this.list) {\n if (/ +/.test(s)) {\n const id = this.list.indexOf(s);\n const tempList = s.split(\" \");\n this.list.splice(id, 1);\n for (let i = 0; i < tempList.length; i++) {\n this.list.splice(id + i, 0, tempList[i]);\n }\n }\n }\n }\n}\n\nexport const words = new Words();\nexport let hasTab = false;\nexport let randomQuote = null as unknown as MonkeyTypes.Quote;\n\nexport function setRandomQuote(rq: MonkeyTypes.Quote): void {\n randomQuote = rq;\n}\n\nexport function setHasTab(tf: boolean): void {\n hasTab = tf;\n}\n","import * as TestWords from './test-words';\nimport { roundTo2 } from '../../utils/misc';\n\ninterface Keypress {\n count: number;\n errors: number;\n words: number[];\n afk: boolean;\n}\n\ninterface KeypressTimings {\n spacing: {\n current: number;\n array: number[] | 'toolong';\n };\n duration: {\n current: number;\n array: number[] | 'toolong';\n };\n}\n\nclass Input {\n current: string;\n history: string[];\n historyLength: number;\n length: number;\n constructor() {\n this.current = '';\n this.history = [];\n this.historyLength = 0;\n this.length = 0;\n }\n\n reset(): void {\n this.current = '';\n this.history = [];\n this.length = 0;\n }\n\n resetHistory(): void {\n this.history = [];\n this.length = 0;\n }\n\n setCurrent(val: string): void {\n this.current = val;\n this.length = this.current.length;\n }\n\n appendCurrent(val: string): void {\n this.current += val;\n this.length = this.current.length;\n }\n\n resetCurrent(): void {\n this.current = '';\n }\n\n getCurrent(): string {\n return this.current;\n }\n\n pushHistory(): void {\n this.history.push(this.current);\n this.historyLength = this.history.length;\n this.resetCurrent();\n }\n\n popHistory(): string {\n const ret = this.history.pop() ?? '';\n this.historyLength = this.history.length;\n return ret;\n }\n\n getHistory(i?: number): string | string[] {\n if (i === undefined) {\n return this.history;\n } else {\n return this.history[i];\n }\n }\n\n getHistoryLast(): string | undefined {\n return this.history[this.history.length - 1];\n }\n}\n\nclass Corrected {\n current: string;\n history: string[];\n constructor() {\n this.current = '';\n this.history = [];\n }\n setCurrent(val: string): void {\n this.current = val;\n }\n\n appendCurrent(val: string): void {\n this.current += val;\n }\n\n resetCurrent(): void {\n this.current = '';\n }\n\n resetHistory(): void {\n this.history = [];\n }\n\n reset(): void {\n this.resetCurrent();\n this.resetHistory();\n }\n\n getHistory(i: number): string {\n return this.history[i];\n }\n\n popHistory(): string {\n return this.history.pop() ?? '';\n }\n\n pushHistory(): void {\n this.history.push(this.current);\n this.current = '';\n }\n}\n\nexport const input = new Input();\nexport const corrected = new Corrected();\n\nexport let keypressPerSecond: Keypress[] = [];\nexport let currentKeypress: Keypress = {\n count: 0,\n errors: 0,\n words: [],\n afk: true,\n};\nexport let lastKeypress: number;\nexport let currentBurstStart = 0;\nexport let missedWords: {\n [word: string]: number;\n} = {};\nexport let accuracy = {\n correct: 0,\n incorrect: 0,\n};\nexport let keypressTimings: KeypressTimings = {\n spacing: {\n current: -1,\n array: [],\n },\n duration: {\n current: -1,\n array: [],\n },\n};\nexport let wpmHistory: number[] = [];\nexport let rawHistory: number[] = [];\nexport let burstHistory: number[] = [];\nexport let bailout = false;\nexport function setBailout(tf: boolean): void {\n bailout = tf;\n}\n\nexport let spacingDebug = false;\nexport function enableSpacingDebug(): void {\n spacingDebug = true;\n console.clear();\n}\n\nexport function updateLastKeypress(): void {\n lastKeypress = performance.now();\n}\n\nexport function incrementKeypressCount(): void {\n currentKeypress.count++;\n}\n\nexport function setKeypressNotAfk(): void {\n currentKeypress.afk = false;\n}\n\nexport function incrementKeypressErrors(): void {\n currentKeypress.errors++;\n}\n\nexport function pushKeypressWord(wordIndex: number): void {\n currentKeypress.words.push(wordIndex);\n}\n\nexport function setBurstStart(time: number): void {\n currentBurstStart = time;\n}\n\nexport function pushKeypressesToHistory(): void {\n keypressPerSecond.push(currentKeypress);\n currentKeypress = {\n count: 0,\n errors: 0,\n words: [],\n afk: true,\n };\n}\n\nexport function incrementAccuracy(correctincorrect: boolean): void {\n if (correctincorrect) {\n accuracy.correct++;\n } else {\n accuracy.incorrect++;\n }\n}\n\nexport function setKeypressTimingsTooLong(): void {\n keypressTimings.spacing.array = 'toolong';\n keypressTimings.duration.array = 'toolong';\n}\n\nexport function pushKeypressDuration(val: number): void {\n (keypressTimings.duration.array as number[]).push(roundTo2(val));\n}\n\nexport function setKeypressDuration(val: number): void {\n keypressTimings.duration.current = roundTo2(val);\n}\n\nfunction pushKeypressSpacing(val: number): void {\n (keypressTimings.spacing.array as number[]).push(roundTo2(val));\n}\n\nfunction setKeypressSpacing(val: number): void {\n keypressTimings.spacing.current = roundTo2(val);\n}\n\nexport function recordKeypressSpacing(): void {\n const now = performance.now();\n const diff = Math.abs(keypressTimings.spacing.current - now);\n if (keypressTimings.spacing.current !== -1) {\n pushKeypressSpacing(diff);\n if (spacingDebug) {\n console.log('spacing debug', 'push', diff, 'length', keypressTimings.spacing.array.length);\n }\n }\n setKeypressSpacing(now);\n if (spacingDebug) {\n console.log('spacing debug', 'set', now, 'length', keypressTimings.spacing.array.length);\n }\n if (spacingDebug) {\n console.log('spacing debug', 'recorded', 'length', keypressTimings.spacing.array.length);\n }\n}\n\nexport function resetKeypressTimings(): void {\n keypressTimings = {\n spacing: {\n current: performance.now(),\n array: [],\n },\n duration: {\n current: performance.now(),\n array: [],\n },\n };\n if (spacingDebug) console.clear();\n}\n\nexport function pushMissedWord(word: string): void {\n if (!Object.keys(missedWords).includes(word)) {\n missedWords[word] = 1;\n } else {\n missedWords[word]++;\n }\n}\n\nexport function pushToWpmHistory(wpm: number): void {\n wpmHistory.push(wpm);\n}\n\nexport function pushToRawHistory(raw: number): void {\n rawHistory.push(raw);\n}\n\nexport function pushBurstToHistory(speed: number): void {\n if (burstHistory[TestWords.words.currentIndex] === undefined) {\n burstHistory.push(speed);\n } else {\n //repeated word - override\n burstHistory[TestWords.words.currentIndex] = speed;\n }\n}\n\nexport function restart(): void {\n wpmHistory = [];\n rawHistory = [];\n burstHistory = [];\n keypressPerSecond = [];\n currentKeypress = {\n count: 0,\n errors: 0,\n words: [],\n afk: true,\n };\n currentBurstStart = 0;\n missedWords = {};\n accuracy = {\n correct: 0,\n incorrect: 0,\n };\n keypressTimings = {\n spacing: {\n current: -1,\n array: [],\n },\n duration: {\n current: -1,\n array: [],\n },\n };\n}\n","let slowTimer = false;\n\nexport function set(): void {\n if (slowTimer) return;\n slowTimer = true;\n console.error('Slow timer, disabling animations');\n // Notifications.add(\"Slow timer detected\", -1, 5);\n}\n\nexport function clear(): void {\n slowTimer = false;\n}\n\nexport function get(): boolean {\n return slowTimer;\n}\n","import * as Misc from '../../utils/misc';\nimport Config from '../config';\nimport * as TestInput from './test-input';\nimport * as SlowTimer from '../states/slow-timer';\nimport { BehaviorSubject } from 'rxjs';\n\nexport let caretAnimating = true;\nexport const caretShow = new BehaviorSubject<boolean>(true);\nexport const caretAnimation = new BehaviorSubject<string>('caretFlashSmooth');\nexport const caretLeft = new BehaviorSubject<number>(0);\nexport const caretTop = new BehaviorSubject<number>(0);\n\nexport function stopAnimation(): void {\n if (caretAnimating === true) {\n caretAnimation.next('none');\n caretAnimating = false;\n }\n}\n\nexport function startAnimation(): void {\n if (caretAnimating === false) {\n if (Config.smoothCaret && !SlowTimer.get()) {\n caretAnimation.next('caretFlashSmooth');\n } else {\n caretAnimation.next('caretFlashHard');\n }\n caretAnimating = true;\n }\n}\n\nexport function hide(): void {\n caretShow.next(false);\n}\n\nexport async function updatePosition(): Promise<void> {\n let caretWidth = Math.round(document.querySelector('#caret')?.getBoundingClientRect().width ?? 0);\n\n if (['block', 'outline', 'underline'].includes(Config.caretStyle)) {\n caretWidth /= 3;\n }\n\n const inputLen = TestInput.input.current.length;\n\n let currentLetterIndex = inputLen - 1;\n if (currentLetterIndex == -1) {\n currentLetterIndex = 0;\n }\n\n const currentWordNodeList = document?.querySelector('#words .active')?.querySelectorAll('letter');\n\n if (!currentWordNodeList) return;\n\n let currentLetter: HTMLElement = currentWordNodeList[currentLetterIndex] as HTMLElement;\n if (inputLen > currentWordNodeList.length) {\n currentLetter = currentWordNodeList[currentWordNodeList.length - 1] as HTMLElement;\n }\n\n const currentLanguage = await Misc.getCurrentLanguage(Config.language);\n const isLanguageLeftToRight = currentLanguage.leftToRight;\n const currentLetterPosLeft = isLanguageLeftToRight\n ? currentLetter.offsetLeft\n : currentLetter.offsetLeft + (currentLetter.getBoundingClientRect().width ?? 0);\n const currentLetterPosTop = currentLetter.offsetTop;\n const letterHeight = currentLetter.getBoundingClientRect().height as number;\n let newTop = 0;\n let newLeft = 0;\n\n newTop = currentLetterPosTop - Math.round(letterHeight / 5);\n\n if (inputLen == 0) {\n newLeft = isLanguageLeftToRight\n ? currentLetterPosLeft - caretWidth / 2\n : currentLetterPosLeft + caretWidth / 2;\n } else {\n newLeft = isLanguageLeftToRight\n ? currentLetterPosLeft +\n (currentLetter.getBoundingClientRect().width as number) -\n caretWidth / 2\n : currentLetterPosLeft -\n (currentLetter.getBoundingClientRect().width as number) +\n caretWidth / 2;\n }\n\n caretTop.next(newTop);\n caretLeft.next(newLeft);\n}\n\nexport function show(): void {\n caretShow.next(true);\n updatePosition();\n startAnimation();\n}\n","import { BehaviorSubject } from 'rxjs';\nimport * as Misc from '../../utils/misc';\n\nconst outOfFocusTimeouts: (number | NodeJS.Timeout)[] = [];\n\nexport const outOfFocusShow = new BehaviorSubject<boolean>(false);\n\nexport function hide(): void {\n outOfFocusShow.next(false);\n Misc.clearTimeouts(outOfFocusTimeouts);\n}\n\nexport function show(): void {\n outOfFocusTimeouts.push(\n setTimeout(() => {\n outOfFocusShow.next(true);\n }, 1000)\n );\n}\n","interface CompositionState {\n composing: boolean;\n startPos: number;\n}\n\nconst compositionState = {\n composing: false,\n startPos: -1,\n};\n\nexport function get(): CompositionState {\n return compositionState;\n}\n\nexport function getComposing(): boolean {\n return compositionState.composing;\n}\n\nexport function getStartPos(): number {\n return compositionState.startPos;\n}\n\nexport function setComposing(isComposing: boolean): void {\n compositionState.composing = isComposing;\n}\n\nexport function setStartPos(pos: number): void {\n compositionState.startPos = pos;\n}\n","import Config from '../../helpers/config';\nimport * as TestWords from './test-words';\nimport * as TestInput from './test-input';\nimport * as Caret from './caret';\nimport * as OutOfFocus from './out-of-focus';\nimport * as Misc from '../../utils/misc';\nimport * as CompositionState from '../states/composition';\n\nlet wordsWrapper: HTMLElement;\nlet wordsInput: HTMLInputElement;\nlet words: HTMLElement;\n\nexport let currentWordElementIndex = 0;\nexport let resultVisible = false;\nexport let activeWordTop = 0;\nexport let testRestarting = false;\nexport let testRestartingPromise: Promise<unknown>;\nexport const lineTransition = false;\nexport let currentTestLine = 0;\nexport let resultCalculating = false;\n\nexport function setWordsWrapperElement(wordsWrapperElem: HTMLElement) {\n wordsWrapper = wordsWrapperElem;\n}\n\nexport function setWordsInputElementTestUI(wordsElement: HTMLInputElement) {\n wordsInput = wordsElement;\n}\n\nexport function setWordsElement(wordsElem: HTMLElement) {\n words = wordsElem;\n}\n\nexport function setResultVisible(val: boolean): void {\n resultVisible = val;\n}\n\nexport function setCurrentWordElementIndex(val: number): void {\n currentWordElementIndex = val;\n}\n\nexport function setActiveWordTop(val: number): void {\n activeWordTop = val;\n}\n\nlet restartingResolve: null | ((value?: unknown) => void);\nexport function setTestRestarting(val: boolean): void {\n testRestarting = val;\n if (val === true) {\n testRestartingPromise = new Promise(resolve => {\n restartingResolve = resolve;\n });\n } else {\n if (restartingResolve) restartingResolve();\n restartingResolve = null;\n }\n}\n\nexport function setResultCalculating(val: boolean): void {\n resultCalculating = val;\n}\n\nexport function reset(): void {\n currentTestLine = 0;\n currentWordElementIndex = 0;\n}\n\nexport function focusWords(): void {\n if (!wordsWrapper.classList.contains('hidden')) {\n wordsInput.focus();\n }\n}\n\nexport function updateActiveElement(backspace?: boolean): void {\n const active = document.querySelector('#words .active');\n if (Config.mode == 'zen' && backspace) {\n active?.remove();\n } else if (active !== null) {\n if (Config.highlightMode == 'word') {\n active.querySelectorAll('letter').forEach(e => {\n e.classList.remove('correct');\n });\n }\n active.classList.remove('active');\n }\n try {\n const activeWord = document.querySelectorAll('#words .word')[currentWordElementIndex];\n activeWord.classList.add('active');\n activeWord.classList.remove('error');\n activeWordTop = (<HTMLElement>document.querySelector('#words .active')).offsetTop;\n if (Config.highlightMode == 'word') {\n activeWord.querySelectorAll('letter').forEach(e => {\n e.classList.add('correct');\n });\n }\n } catch (e) {\n console.error(e);\n }\n}\n\nfunction getWordHTML(word: string): string {\n let newlineafter = false;\n let retval = `<div class='word'>`;\n for (let c = 0; c < word.length; c++) {\n if (Config.funbox === 'tenKeyMode') {\n newlineafter = true;\n }\n if (Config.funbox === 'arrows') {\n if (word.charAt(c) === '↑') {\n retval += `<letter><i class=\"fas fa-arrow-up\"></i></letter>`;\n }\n if (word.charAt(c) === '↓') {\n retval += `<letter><i class=\"fas fa-arrow-down\"></i></letter>`;\n }\n if (word.charAt(c) === '←') {\n retval += `<letter><i class=\"fas fa-arrow-left\"></i></letter>`;\n }\n if (word.charAt(c) === '→') {\n retval += `<letter><i class=\"fas fa-arrow-right\"></i></letter>`;\n }\n } else if (word.charAt(c) === '\\t') {\n retval += `<letter class='tabChar'><i class=\"fas fa-long-arrow-alt-right\"></i></letter>`;\n } else if (word.charAt(c) === '\\n') {\n newlineafter = true;\n retval += `<letter class='nlChar'><i class=\"fas fa-angle-down\"></i></letter>`;\n } else {\n retval += '<letter>' + word.charAt(c) + '</letter>';\n }\n }\n retval += '</div>';\n if (newlineafter) retval += \"<div class='newline'></div>\";\n return retval;\n}\n\nexport function showWords(): void {\n if (Config.indicateTypos === 'below') {\n words.classList.add('indicateTyposBelow');\n wordsWrapper.classList.add('indicateTyposBelow');\n } else {\n words.classList.remove('indicateTyposBelow');\n wordsWrapper.classList.remove('indicateTyposBelow');\n }\n\n let wordsHTML = '';\n for (let i = 0; i < TestWords.words.length; i++) {\n wordsHTML += getWordHTML(<string>TestWords.words.get(i));\n }\n\n words.innerHTML = wordsHTML;\n\n wordsWrapper.classList.remove('hidden');\n const currentWord = <Element>document.querySelector('.word');\n const currentWordStyle = window.getComputedStyle(currentWord);\n const wordHeight =\n parseFloat(currentWordStyle.marginTop) +\n parseFloat(currentWordStyle.marginBottom) +\n currentWord.getBoundingClientRect().height;\n\n words.style.height = wordHeight * (Config.funbox === 'tenKeyMode' ? 5 : 4) + 'px';\n words.style.overflow = 'hidden';\n words.style.width = '100%';\n words.style.marginLeft = 'unset';\n wordsWrapper.style.height = wordHeight * (Config.funbox === 'tenKeyMode' ? 5 : 3) + 'px';\n wordsWrapper.style.overflow = 'hidden';\n\n updateActiveElement();\n Caret.updatePosition();\n}\n\nexport function addWord(word: string): void {\n words.insertAdjacentHTML('beforeend', getWordHTML(word));\n}\n\nexport function updateWordElement(showError = !Config.blindMode): void {\n const input = TestInput.input.current;\n const wordAtIndex = <Element>document.querySelector('#words .word.active');\n const currentWord = TestWords.words.getCurrent();\n if (!currentWord && Config.mode !== 'zen') return;\n\n let ret = '';\n\n let newlineafter = false;\n\n if (Config.mode === 'zen') {\n for (let i = 0; i < TestInput.input.current.length; i++) {\n if (TestInput.input.current[i] === '\\t') {\n ret += `<letter class='tabChar correct' style=\"opacity: 0\"><i class=\"fas fa-long-arrow-alt-right\"></i></letter>`;\n } else if (TestInput.input.current[i] === '\\n') {\n newlineafter = true;\n ret += `<letter class='nlChar correct' style=\"opacity: 0\"><i class=\"fas fa-angle-down\"></i></letter>`;\n } else {\n ret += `<letter class=\"correct\">${TestInput.input.current[i]}</letter>`;\n }\n }\n } else {\n let correctSoFar = false;\n\n // slice earlier if input has trailing compose characters\n const inputWithoutComposeLength = Misc.trailingComposeChars.test(input)\n ? input.search(Misc.trailingComposeChars)\n : input.length;\n if (\n input.search(Misc.trailingComposeChars) < currentWord.length &&\n currentWord.slice(0, inputWithoutComposeLength) === input.slice(0, inputWithoutComposeLength)\n ) {\n correctSoFar = true;\n }\n\n let wordHighlightClassString = correctSoFar ? 'correct' : 'incorrect';\n if (Config.blindMode) {\n wordHighlightClassString = 'correct';\n }\n\n for (let i = 0; i < input.length; i++) {\n const charCorrect = currentWord[i] == input[i];\n\n let correctClass = 'correct';\n if (Config.highlightMode == 'off') {\n correctClass = '';\n }\n\n let currentLetter = currentWord[i];\n let tabChar = '';\n let nlChar = '';\n if (Config.funbox === 'arrows') {\n if (currentLetter === '↑') {\n currentLetter = `<i class=\"fas fa-arrow-up\"></i>`;\n }\n if (currentLetter === '↓') {\n currentLetter = `<i class=\"fas fa-arrow-down\"></i>`;\n }\n if (currentLetter === '←') {\n currentLetter = `<i class=\"fas fa-arrow-left\"></i>`;\n }\n if (currentLetter === '→') {\n currentLetter = `<i class=\"fas fa-arrow-right\"></i>`;\n }\n } else if (currentLetter === '\\t') {\n tabChar = 'tabChar';\n currentLetter = `<i class=\"fas fa-long-arrow-alt-right\"></i>`;\n } else if (currentLetter === '\\n') {\n nlChar = 'nlChar';\n currentLetter = `<i class=\"fas fa-angle-down\"></i>`;\n }\n\n if (charCorrect) {\n ret += `<letter class=\"${\n Config.highlightMode == 'word' ? wordHighlightClassString : correctClass\n } ${tabChar}${nlChar}\">${currentLetter}</letter>`;\n } else if (\n currentLetter !== undefined &&\n CompositionState.getComposing() &&\n i >= CompositionState.getStartPos()\n ) {\n ret += `<letter class=\"${\n Config.highlightMode == 'word' ? wordHighlightClassString : ''\n } dead\">${currentLetter}</letter>`;\n } else if (!showError) {\n if (currentLetter !== undefined) {\n ret += `<letter class=\"${\n Config.highlightMode == 'word' ? wordHighlightClassString : correctClass\n } ${tabChar}${nlChar}\">${currentLetter}</letter>`;\n }\n } else if (currentLetter === undefined) {\n if (!Config.hideExtraLetters) {\n let letter = input[i];\n if (letter == ' ' || letter == '\\t' || letter == '\\n') {\n letter = '_';\n }\n ret += `<letter class=\"${\n Config.highlightMode == 'word' ? wordHighlightClassString : 'incorrect'\n } extra ${tabChar}${nlChar}\">${letter}</letter>`;\n }\n } else {\n ret +=\n `<letter class=\"${\n Config.highlightMode == 'word' ? wordHighlightClassString : 'incorrect'\n } ${tabChar}${nlChar}\">` +\n (Config.indicateTypos === 'replace'\n ? input[i] == ' '\n ? '_'\n : input[i]\n : currentLetter) +\n (Config.indicateTypos === 'below' ? `<hint>${input[i]}</hint>` : '') +\n '</letter>';\n }\n }\n\n for (let i = input.length; i < currentWord.length; i++) {\n if (Config.funbox === 'arrows') {\n if (currentWord[i] === '↑') {\n ret += `<letter><i class=\"fas fa-arrow-up\"></i></letter>`;\n }\n if (currentWord[i] === '↓') {\n ret += `<letter><i class=\"fas fa-arrow-down\"></i></letter>`;\n }\n if (currentWord[i] === '←') {\n ret += `<letter><i class=\"fas fa-arrow-left\"></i></letter>`;\n }\n if (currentWord[i] === '→') {\n ret += `<letter><i class=\"fas fa-arrow-right\"></i></letter>`;\n }\n } else if (currentWord[i] === '\\t') {\n ret += `<letter class='tabChar'><i class=\"fas fa-long-arrow-alt-right\"></i></letter>`;\n } else if (currentWord[i] === '\\n') {\n ret += `<letter class='nlChar'><i class=\"fas fa-angle-down\"></i></letter>`;\n } else {\n ret +=\n `<letter class=\"${Config.highlightMode == 'word' ? wordHighlightClassString : ''}\">` +\n currentWord[i] +\n '</letter>';\n }\n }\n\n if (Config.highlightMode === 'letter' && Config.hideExtraLetters) {\n if (input.length > currentWord.length && !Config.blindMode) {\n wordAtIndex.classList.add('error');\n } else if (input.length == currentWord.length) {\n wordAtIndex.classList.remove('error');\n }\n }\n }\n wordAtIndex.innerHTML = ret;\n if (newlineafter) words.insertAdjacentHTML('beforeend', \"<div class='newline'></div>\");\n}\n\nexport function lineJump(currentTop: number): void {\n if (\n (Config.tapeMode === 'off' && currentTestLine > 0) ||\n (Config.tapeMode !== 'off' && currentTestLine >= 0)\n ) {\n const hideBound = currentTop;\n\n const toHide: any[] = [];\n const wordElements = document.querySelectorAll('#words .word') as NodeListOf<HTMLElement>;\n for (let i = 0; i < currentWordElementIndex; i++) {\n if (wordElements[i].classList.contains('hidden')) continue;\n const forWordTop = Math.floor(wordElements[i].offsetTop);\n if (forWordTop < (Config.tapeMode === 'off' ? hideBound - 10 : hideBound + 10)) {\n toHide.push(document.querySelectorAll('#words .word')[i]);\n }\n }\n toHide.forEach(el => el.remove());\n currentWordElementIndex -= toHide.length;\n }\n currentTestLine++;\n}\n\nexport function highlightBadWord(index: number, showError: boolean): void {\n if (!showError) return;\n document.querySelectorAll('#words .word')[index].classList.add('error');\n}\n\nexport function wordsInputFocusTestUI() {\n if (!resultVisible && Config.showOutOfFocusWarning) {\n OutOfFocus.hide();\n }\n Caret.show();\n}\n\nexport function wordsInputFocusOut() {\n if (!resultVisible && Config.showOutOfFocusWarning) {\n OutOfFocus.show();\n }\n Caret.hide();\n}\n\nexport function wordsWrapperClick() {\n focusWords();\n}\n","export let text = [\n \"The\",\n \"quick\",\n \"brown\",\n \"fox\",\n \"jumps\",\n \"over\",\n \"the\",\n \"lazy\",\n \"dog\",\n];\nexport let isWordRandom = false;\nexport let isTimeRandom = false;\nexport let word = -1;\nexport let time = -1;\nexport let delimiter = \" \";\n\nexport function setText(txt: string[]): void {\n text = txt;\n}\n\nexport function setIsWordRandom(val: boolean): void {\n isWordRandom = val;\n}\n\nexport function setIsTimeRandom(val: boolean): void {\n isTimeRandom = val;\n}\n\nexport function setTime(val: number): void {\n time = val;\n}\n\nexport function setWord(val: number): void {\n word = val;\n}\n\nexport function setDelimiter(val: string): void {\n delimiter = val;\n}\n\ntype CustomTextObject = Record<string, string>;\n\nexport function getCustomText(name: string): string[] {\n const customText = getCustomTextObject();\n\n return customText[name].split(/ +/);\n}\n\nexport function setCustomText(name: string, text: string | string[]): void {\n const customText = getCustomTextObject();\n\n if (typeof text === \"string\") customText[name] = text;\n else customText[name] = text.join(\" \");\n\n window.localStorage.setItem(\"customText\", JSON.stringify(customText));\n}\n\nexport function deleteCustomText(name: string): void {\n const customText = getCustomTextObject();\n\n if (customText[name]) delete customText[name];\n\n window.localStorage.setItem(\"customText\", JSON.stringify(customText));\n}\n\nfunction getCustomTextObject(): CustomTextObject {\n return JSON.parse(window.localStorage.getItem(\"customText\") ?? \"{}\");\n}\n\nexport function getCustomTextNames(): string[] {\n return Object.keys(getCustomTextObject());\n}\n","import Config from '../../helpers/config';\nimport * as Misc from '../../utils/misc';\nimport * as TestInput from './test-input';\nimport * as TestWords from './test-words';\nimport { MonkeyTypes } from '../../types/types';\ninterface CharCount {\n spaces: number;\n correctWordChars: number;\n allCorrectChars: number;\n incorrectChars: number;\n extraChars: number;\n missedChars: number;\n correctSpaces: number;\n}\n\ninterface Keypress {\n count: number;\n errors: number;\n words: number[];\n afk: boolean;\n}\n\ninterface KeypressTimings {\n spacing: {\n current: number;\n array: number[] | 'toolong';\n };\n duration: {\n current: number;\n array: number[] | 'toolong';\n };\n}\n\ninterface DebugStats {\n lastResult?: MonkeyTypes.Result<MonkeyTypes.Mode>;\n start: number;\n end: number;\n wpmHistory: number[];\n rawHistory: number[];\n burstHistory: number[];\n keypressPerSecond: Keypress[];\n currentKeypress: {\n count: number;\n errors: number;\n words: number[];\n afk: boolean;\n };\n lastKeypress: number;\n currentBurstStart: number;\n lastSecondNotRound: boolean;\n missedWords: {\n [word: string]: number;\n };\n accuracy: {\n correct: number;\n incorrect: number;\n };\n keypressTimings: KeypressTimings;\n keySpacingStats?: {\n average: number;\n sd: number;\n };\n keyDurationStats?: {\n average: number;\n sd: number;\n };\n}\n\ninterface Stats {\n wpm: number;\n wpmRaw: number;\n acc: number;\n correctChars: number;\n incorrectChars: number;\n missedChars: number;\n extraChars: number;\n allChars: number;\n time: number;\n spaces: number;\n correctSpaces: number;\n}\n\nexport let invalid = false;\nexport let start: number, end: number;\nexport let start2: number, end2: number;\nexport let lastSecondNotRound = false;\n\nexport let lastTestWpm = 0;\n\nexport function setLastTestWpm(wpm: number): void {\n lastTestWpm = wpm;\n}\n\nexport let lastResult: MonkeyTypes.Result<MonkeyTypes.Mode>;\n\nexport function setLastResult(result: MonkeyTypes.Result<MonkeyTypes.Mode>): void {\n lastResult = result;\n}\n\nlet wpmCalcDebug = false;\nexport function wpmCalculationDebug(): void {\n console.log('wpm calculation debug enabled');\n wpmCalcDebug = true;\n}\n\nexport function getStats(): DebugStats {\n const ret: DebugStats = {\n lastResult,\n start,\n end,\n wpmHistory: TestInput.wpmHistory,\n rawHistory: TestInput.wpmHistory,\n burstHistory: TestInput.burstHistory,\n keypressPerSecond: TestInput.keypressPerSecond,\n currentKeypress: TestInput.currentKeypress,\n lastKeypress: TestInput.lastKeypress,\n currentBurstStart: TestInput.currentBurstStart,\n lastSecondNotRound,\n missedWords: TestInput.missedWords,\n accuracy: TestInput.accuracy,\n keypressTimings: TestInput.keypressTimings,\n };\n\n try {\n ret.keySpacingStats = {\n average:\n (TestInput.keypressTimings.spacing.array as number[]).reduce(\n (previous, current) => (current += previous)\n ) / TestInput.keypressTimings.spacing.array.length,\n sd: Misc.stdDev(TestInput.keypressTimings.spacing.array as number[]),\n };\n } catch (e) {\n //\n }\n try {\n ret.keyDurationStats = {\n average:\n (TestInput.keypressTimings.duration.array as number[]).reduce(\n (previous, current) => (current += previous)\n ) / TestInput.keypressTimings.duration.array.length,\n sd: Misc.stdDev(TestInput.keypressTimings.duration.array as number[]),\n };\n } catch (e) {\n //\n }\n\n return ret;\n}\n\nexport function restart(): void {\n start = 0;\n end = 0;\n invalid = false;\n lastSecondNotRound = false;\n}\n\nexport let restartCount = 0;\nexport let incompleteSeconds = 0;\n\nexport function incrementRestartCount(): void {\n restartCount++;\n}\n\nexport function incrementIncompleteSeconds(val: number): void {\n incompleteSeconds += val;\n}\n\nexport function resetIncomplete(): void {\n restartCount = 0;\n incompleteSeconds = 0;\n}\n\nexport function setInvalid(): void {\n invalid = true;\n}\n\nexport function calculateTestSeconds(now?: number): number {\n if (now === undefined) {\n const endAfkSeconds = (end - TestInput.lastKeypress) / 1000;\n if ((Config.mode == 'zen' || TestInput.bailout) && endAfkSeconds < 7) {\n return (TestInput.lastKeypress - start) / 1000;\n } else {\n return (end - start) / 1000;\n }\n } else {\n return (now - start) / 1000;\n }\n}\n\nexport function calculateWpmAndRaw(): MonkeyTypes.WordsPerMinuteAndRaw {\n let chars = 0;\n let correctWordChars = 0;\n let spaces = 0;\n //check input history\n for (let i = 0; i < TestInput.input.history.length; i++) {\n const word = Config.mode == 'zen' ? TestInput.input.getHistory(i) : TestWords.words.get(i);\n if (TestInput.input.getHistory(i) == word) {\n //the word is correct\n //+1 for space\n correctWordChars += word.length;\n if (\n i < TestInput.input.history.length - 1 &&\n Misc.getLastChar(TestInput.input.getHistory(i) as string) !== '\\n'\n ) {\n spaces++;\n }\n }\n chars += TestInput.input.getHistory(i).length;\n }\n if (TestInput.input.current !== '') {\n const word = Config.mode == 'zen' ? TestInput.input.current : TestWords.words.getCurrent();\n //check whats currently typed\n const toAdd = {\n correct: 0,\n incorrect: 0,\n missed: 0,\n };\n for (let c = 0; c < word.length; c++) {\n if (c < TestInput.input.current.length) {\n //on char that still has a word list pair\n if (TestInput.input.current[c] == word[c]) {\n toAdd.correct++;\n } else {\n toAdd.incorrect++;\n }\n } else {\n //on char that is extra\n toAdd.missed++;\n }\n }\n chars += toAdd.correct;\n chars += toAdd.incorrect;\n chars += toAdd.missed;\n if (toAdd.incorrect == 0) {\n //word is correct so far, add chars\n correctWordChars += toAdd.correct;\n }\n }\n if (Config.funbox === 'nospace' || Config.funbox === 'arrows') {\n spaces = 0;\n }\n chars += TestInput.input.current.length;\n const testSeconds = calculateTestSeconds(performance.now());\n const wpm = Math.round(((correctWordChars + spaces) * (60 / testSeconds)) / 5);\n const raw = Math.round(((chars + spaces) * (60 / testSeconds)) / 5);\n return {\n wpm: wpm,\n raw: raw,\n };\n}\n\nexport function setEnd(e: number): void {\n end = e;\n end2 = Date.now();\n}\n\nexport function setStart(s: number): void {\n start = s;\n start2 = Date.now();\n}\n\nexport function calculateAfkSeconds(testSeconds: number): number {\n let extraAfk = 0;\n if (testSeconds !== undefined) {\n if (Config.mode === 'time') {\n extraAfk = Math.round(testSeconds) - TestInput.keypressPerSecond.length;\n } else {\n extraAfk = Math.ceil(testSeconds) - TestInput.keypressPerSecond.length;\n }\n if (extraAfk < 0) extraAfk = 0;\n // console.log(\"-- extra afk debug\");\n // console.log(\"should be \" + Math.ceil(testSeconds));\n // console.log(keypressPerSecond.length);\n // console.log(\n // `gonna add extra ${extraAfk} seconds of afk because of no keypress data`\n // );\n }\n const ret = TestInput.keypressPerSecond.filter(x => x.afk).length;\n return ret + extraAfk;\n}\n\nexport function setLastSecondNotRound(): void {\n lastSecondNotRound = true;\n}\n\nexport function calculateBurst(): number {\n const timeToWrite = (performance.now() - TestInput.currentBurstStart) / 1000;\n let wordLength: number;\n wordLength = TestInput.input.current.length;\n if (wordLength == 0) {\n wordLength = TestInput.input.getHistoryLast()?.length ?? 0;\n }\n if (wordLength == 0) return 0;\n const speed = Misc.roundTo2((wordLength * (60 / timeToWrite)) / 5);\n return Math.round(speed);\n}\n\nexport function calculateAccuracy(): number {\n const acc =\n (TestInput.accuracy.correct / (TestInput.accuracy.correct + TestInput.accuracy.incorrect)) *\n 100;\n return isNaN(acc) ? 0 : acc;\n}\n\nexport function removeAfkData(): void {\n const testSeconds = calculateTestSeconds();\n TestInput.keypressPerSecond.splice(testSeconds);\n TestInput.wpmHistory.splice(testSeconds);\n TestInput.burstHistory.splice(testSeconds);\n TestInput.rawHistory.splice(testSeconds);\n}\n\nfunction countChars(): CharCount {\n let correctWordChars = 0;\n let correctChars = 0;\n let incorrectChars = 0;\n let extraChars = 0;\n let missedChars = 0;\n let spaces = 0;\n let correctspaces = 0;\n for (let i = 0; i < TestInput.input.history.length; i++) {\n const word = Config.mode == 'zen' ? TestInput.input.getHistory(i) : TestWords.words.get(i);\n if (TestInput.input.getHistory(i) === '') {\n //last word that was not started\n continue;\n }\n if (TestInput.input.getHistory(i) == word) {\n //the word is correct\n correctWordChars += word.length;\n correctChars += word.length;\n if (\n i < TestInput.input.history.length - 1 &&\n Misc.getLastChar(TestInput.input.getHistory(i) as string) !== '\\n'\n ) {\n correctspaces++;\n }\n } else if (TestInput.input.getHistory(i).length >= word.length) {\n //too many chars\n for (let c = 0; c < TestInput.input.getHistory(i).length; c++) {\n if (c < word.length) {\n //on char that still has a word list pair\n if (TestInput.input.getHistory(i)[c] == word[c]) {\n correctChars++;\n } else {\n incorrectChars++;\n }\n } else {\n //on char that is extra\n extraChars++;\n }\n }\n } else {\n //not enough chars\n const toAdd = {\n correct: 0,\n incorrect: 0,\n missed: 0,\n };\n for (let c = 0; c < word.length; c++) {\n if (c < TestInput.input.getHistory(i).length) {\n //on char that still has a word list pair\n if (TestInput.input.getHistory(i)[c] == word[c]) {\n toAdd.correct++;\n } else {\n toAdd.incorrect++;\n }\n } else {\n //on char that is extra\n toAdd.missed++;\n }\n }\n correctChars += toAdd.correct;\n incorrectChars += toAdd.incorrect;\n if (i === TestInput.input.history.length - 1 && Config.mode == 'time') {\n //last word - check if it was all correct - add to correct word chars\n if (toAdd.incorrect === 0) correctWordChars += toAdd.correct;\n } else {\n missedChars += toAdd.missed;\n }\n }\n if (i < TestInput.input.history.length - 1) {\n spaces++;\n }\n }\n if (Config.funbox === 'nospace' || Config.funbox === 'arrows') {\n spaces = 0;\n correctspaces = 0;\n }\n return {\n spaces: spaces,\n correctWordChars: correctWordChars,\n allCorrectChars: correctChars,\n incorrectChars: Config.mode == 'zen' ? TestInput.accuracy.incorrect : incorrectChars,\n extraChars: extraChars,\n missedChars: missedChars,\n correctSpaces: correctspaces,\n };\n}\n\nexport function calculateStats(): Stats {\n let testSeconds = calculateTestSeconds();\n if (wpmCalcDebug) {\n console.log('date based time', (end2 - start2) / 1000);\n console.log('performance.now based time', testSeconds);\n }\n if (Config.mode != 'custom') {\n testSeconds = Misc.roundTo2(testSeconds);\n if (wpmCalcDebug) {\n console.log('mode is not custom - wounding');\n console.log('new time', testSeconds);\n }\n }\n const chars = countChars();\n const wpm = Misc.roundTo2(\n ((chars.correctWordChars + chars.correctSpaces) * (60 / testSeconds)) / 5\n );\n const wpmraw = Misc.roundTo2(\n ((chars.allCorrectChars + chars.spaces + chars.incorrectChars + chars.extraChars) *\n (60 / testSeconds)) /\n 5\n );\n if (wpmCalcDebug) {\n console.log('chars', chars);\n console.log('wpm', ((chars.correctWordChars + chars.correctSpaces) * (60 / testSeconds)) / 5);\n console.log('wpm rounded to 2', wpm);\n console.log('wpmraw', wpmraw);\n }\n const acc = Misc.roundTo2(calculateAccuracy());\n return {\n wpm: isNaN(wpm) ? 0 : wpm,\n wpmRaw: isNaN(wpmraw) ? 0 : wpmraw,\n acc: acc,\n correctChars: chars.correctWordChars,\n incorrectChars: chars.incorrectChars,\n missedChars: chars.missedChars,\n extraChars: chars.extraChars,\n allChars: chars.allCorrectChars + chars.spaces + chars.incorrectChars + chars.extraChars,\n time: Misc.roundTo2(testSeconds),\n spaces: chars.spaces,\n correctSpaces: chars.correctSpaces,\n };\n}\n","import * as Caret from './caret';\n\nconst unfocusPx = 3;\nlet state = false;\nlet middle: HTMLElement;\nlet capsWarning: HTMLElement;\n\nexport function setMiddleElement(middleElem: HTMLElement) {\n middle = middleElem;\n}\n\nexport function setCapsWarningElement(capsWarningElem: HTMLElement) {\n capsWarning = capsWarningElem;\n}\n\nexport function set(foc: boolean, withCursor = false): void {\n if (foc && !state) {\n state = true;\n Caret.stopAnimation();\n middle.classList.add('focus');\n capsWarning.classList.add('focus');\n } else if (!foc && state) {\n state = false;\n Caret.startAnimation();\n middle.classList.remove('focus');\n capsWarning.classList.remove('focus');\n }\n}\n\nexport function mousemove(event: { movementX: number; movementY: number }) {\n if (!state) return;\n // To avoid mouse/desk vibration from creating a flashy effect, we'll unfocus @ >5px instead of >0px\n if (\n middle.classList.contains('focus') &&\n (event.movementX > unfocusPx || event.movementY > unfocusPx)\n ) {\n set(false);\n }\n}\n","let time = 0;\n\nexport function get(): number {\n return time;\n}\n\nexport function set(active: number): void {\n time = active;\n}\n\nexport function increment(): void {\n time++;\n}\n","import Config from '../../helpers/config';\nimport * as Misc from '../../utils/misc';\nimport * as Time from '../states/time';\nimport { BehaviorSubject } from 'rxjs';\n\nexport const timeLeft = new BehaviorSubject<string>('1:00');\n\nexport function update(): void {\n const time = Time.get();\n const maxtime = Config.time;\n let displayTime = Misc.secondsToString(maxtime - time);\n if (maxtime === 0) {\n displayTime = Misc.secondsToString(time);\n }\n timeLeft.next(displayTime);\n}\n","type SubscribeFunction = (key: string, value?: string, value2?: string) => void;\n\nconst subscribers: SubscribeFunction[] = [];\n\nexport function subscribe(fn: SubscribeFunction): void {\n subscribers.push(fn);\n}\n\nexport function dispatch(key: string, value?: string, value2?: string): void {\n subscribers.forEach((fn) => {\n try {\n fn(key, value, value2);\n } catch (e) {\n console.error(\"Timer event subscriber threw an error\");\n console.error(e);\n }\n });\n}\n","let testActive = false;\n\nexport function get(): boolean {\n return testActive;\n}\n\nexport function set(active: boolean): void {\n testActive = active;\n}\n","// Most of the code is thanks to\n// https://stackoverflow.com/questions/29971898/how-to-create-an-accurate-timer-in-javascript\n\nimport Config from '../../helpers/config';\nimport { MonkeyTypes } from '../../types/types';\nimport * as Misc from '../../utils/misc';\nimport * as TimerEvent from '../observables/timer-event';\nimport * as SlowTimer from '../states/slow-timer';\nimport * as TestActive from '../states/test-active';\nimport * as Time from '../states/time';\nimport * as Caret from './caret';\nimport * as CustomText from './custom-text';\nimport * as TestInput from './test-input';\nimport * as TestStats from './test-stats';\nimport * as TestWords from './test-words';\nimport * as TimerProgress from './timer-progress';\nlet slowTimerCount = 0;\nlet timer: NodeJS.Timeout | null = null;\nconst interval = 1000;\nlet expected = 0;\n\nlet timerDebug = false;\nexport function enableTimerDebug(): void {\n timerDebug = true;\n}\n\nlet checkIfTimeIsUpDisabled = false;\nexport function disableCheckIfTimeIsUp(): void {\n checkIfTimeIsUpDisabled = true;\n}\n\nexport function clear(): void {\n Time.set(0);\n if (timer !== null) clearTimeout(timer);\n}\n\nfunction premid(): void {\n if (timerDebug) console.time('premid');\n const premidSecondsLeft = document.querySelector('#premidSecondsLeft');\n\n if (premidSecondsLeft !== null) {\n premidSecondsLeft.innerHTML = (Config.time - Time.get()).toString();\n }\n if (timerDebug) console.timeEnd('premid');\n}\n\nfunction updateTimer(): void {\n if (timerDebug) console.time('timer progress update');\n if (Config.mode === 'time' || (Config.mode === 'custom' && CustomText.isTimeRandom)) {\n TimerProgress.update();\n }\n if (timerDebug) console.timeEnd('timer progress update');\n}\n\nfunction calculateWpmRaw(): MonkeyTypes.WordsPerMinuteAndRaw {\n if (timerDebug) console.time('calculate wpm and raw');\n const wpmAndRaw = TestStats.calculateWpmAndRaw();\n if (timerDebug) console.timeEnd('calculate wpm and raw');\n if (timerDebug) console.time('push to history');\n TestInput.pushToWpmHistory(wpmAndRaw.wpm);\n TestInput.pushToRawHistory(wpmAndRaw.raw);\n if (timerDebug) console.timeEnd('push to history');\n return wpmAndRaw;\n}\n\nfunction monkey(wpmAndRaw: MonkeyTypes.WordsPerMinuteAndRaw): void {\n if (timerDebug) console.time('update monkey');\n const num = Config.blindMode ? wpmAndRaw.raw : wpmAndRaw.wpm;\n if (timerDebug) console.timeEnd('update monkey');\n}\n\nfunction calculateAcc(): number {\n if (timerDebug) console.time('calculate acc');\n const acc = Misc.roundTo2(TestStats.calculateAccuracy());\n if (timerDebug) console.timeEnd('calculate acc');\n return acc;\n}\n\nfunction layoutfluid(): void {\n if (timerDebug) console.time('layoutfluid');\n if (Config.funbox === 'layoutfluid' && Config.mode === 'time') {\n const layouts = Config.customLayoutfluid\n ? Config.customLayoutfluid.split('#')\n : ['qwerty', 'dvorak', 'colemak'];\n const switchTime = Config.time / layouts.length;\n const time = Time.get();\n const index = Math.floor(time / switchTime);\n const layout = layouts[index];\n const flooredSwitchTimes = [];\n\n for (let i = 1; i < layouts.length; i++) {\n flooredSwitchTimes.push(Math.floor(switchTime * i));\n }\n }\n if (timerDebug) console.timeEnd('layoutfluid');\n}\n\nfunction checkIfFailed(wpmAndRaw: MonkeyTypes.WordsPerMinuteAndRaw, acc: number): void {\n if (timerDebug) console.time('fail conditions');\n TestInput.pushKeypressesToHistory();\n if (\n Config.minWpm === 'custom' &&\n wpmAndRaw.wpm < Config.minWpmCustomSpeed &&\n TestWords.words.currentIndex > 3\n ) {\n if (timer !== null) clearTimeout(timer);\n SlowTimer.clear();\n slowTimerCount = 0;\n TimerEvent.dispatch('fail', 'min wpm');\n return;\n }\n if (Config.minAcc === 'custom' && acc < Config.minAccCustom) {\n if (timer !== null) clearTimeout(timer);\n SlowTimer.clear();\n slowTimerCount = 0;\n TimerEvent.dispatch('fail', 'min accuracy');\n return;\n }\n if (timerDebug) console.timeEnd('fail conditions');\n}\n\nfunction checkIfTimeIsUp(): void {\n if (timerDebug) console.time('times up check');\n if (Config.mode == 'time' || (Config.mode === 'custom' && CustomText.isTimeRandom)) {\n if (\n (Time.get() >= Config.time && Config.time !== 0 && Config.mode === 'time') ||\n (Time.get() >= CustomText.time && CustomText.time !== 0 && Config.mode === 'custom')\n ) {\n //times up\n if (timer !== null) clearTimeout(timer);\n Caret.hide();\n TestInput.input.pushHistory();\n TestInput.corrected.pushHistory();\n SlowTimer.clear();\n slowTimerCount = 0;\n TimerEvent.dispatch('finish');\n return;\n }\n }\n if (timerDebug) console.timeEnd('times up check');\n}\n\n// ---------------------------------------\n\nlet timerStats: MonkeyTypes.TimerStats[] = [];\n\nexport function getTimerStats(): MonkeyTypes.TimerStats[] {\n return timerStats;\n}\n\nasync function timerStep(): Promise<void> {\n if (timerDebug) console.time('timer step -----------------------------');\n Time.increment();\n premid();\n updateTimer();\n const wpmAndRaw = calculateWpmRaw();\n const acc = calculateAcc();\n monkey(wpmAndRaw);\n layoutfluid();\n checkIfFailed(wpmAndRaw, acc);\n if (!checkIfTimeIsUpDisabled) {\n checkIfTimeIsUp();\n }\n if (timerDebug) console.timeEnd('timer step -----------------------------');\n}\n\nexport async function start(): Promise<void> {\n SlowTimer.clear();\n slowTimerCount = 0;\n timerStats = [];\n expected = TestStats.start + interval;\n (function loop(): void {\n const delay = expected - performance.now();\n timerStats.push({\n dateNow: Date.now(),\n now: performance.now(),\n expected: expected,\n nextDelay: delay,\n });\n if (\n (Config.mode === 'time' && Config.time < 130 && Config.time > 0) ||\n (Config.mode === 'words' && Config.words < 250 && Config.words > 0)\n ) {\n if (delay < interval / 2) {\n //slow timer\n SlowTimer.set();\n }\n if (delay < interval / 10) {\n slowTimerCount++;\n if (slowTimerCount > 5) {\n TimerEvent.dispatch('fail', 'slow timer');\n }\n }\n }\n timer = setTimeout(function () {\n if (!TestActive.get()) {\n if (timer !== null) clearTimeout(timer);\n SlowTimer.clear();\n slowTimerCount = 0;\n return;\n }\n\n timerStep();\n\n expected += interval;\n loop();\n }, delay);\n })();\n}\n","import config from '../../helpers/config';\n\ntype ReplayAction =\n | 'correctLetter'\n | 'incorrectLetter'\n | 'backWord'\n | 'submitCorrectWord'\n | 'submitErrorWord'\n | 'setLetterIndex';\n\ninterface Replay {\n action: ReplayAction;\n value?: string | number;\n time: number;\n}\n\nlet wordsList: string[] = [];\nlet replayData: Replay[] = [];\nlet replayStartTime = 0;\nlet replayRecording = true;\nlet wordPos = 0;\nlet curPos = 0;\nlet targetWordPos = 0;\nlet targetCurPos = 0;\nlet timeoutList: NodeJS.Timeout[] = [];\nlet stopwatchList: NodeJS.Timeout[] = [];\nlet toggleButton: Element;\nlet replayStopwatch: HTMLElement;\n\nfunction setToggleButton(toggleButtonElement: HTMLElement) {\n toggleButton = toggleButtonElement?.children[0];\n}\n\nfunction setReplayStopwatch(replayStopwatchElement: HTMLElement) {\n replayStopwatch = replayStopwatchElement;\n}\n\nfunction replayGetWordsList(wordsListFromScript: string[]): void {\n wordsList = wordsListFromScript;\n}\n\nfunction initializeReplayPrompt(): void {\n const replayWordsElement = document.getElementById('replayWords');\n\n if (replayWordsElement === null) return;\n\n replayWordsElement.innerHTML = '';\n let wordCount = 0;\n replayData.forEach(item => {\n if (item.action === 'backWord') {\n wordCount--;\n } else if (item.action === 'submitCorrectWord' || item.action === 'submitErrorWord') {\n wordCount++;\n }\n });\n wordsList.forEach((item, i) => {\n if (i > wordCount) return;\n const x = document.createElement('div');\n x.className = 'word';\n for (i = 0; i < item.length; i++) {\n const letter = document.createElement('letter');\n letter.innerHTML = item[i];\n x.appendChild(letter);\n }\n replayWordsElement.appendChild(x);\n if (config.funbox === 'tenKeyMode') {\n const y = document.createElement('div');\n y.className = 'newline';\n replayWordsElement.appendChild(y);\n }\n });\n}\n\nexport function pauseReplay(): void {\n timeoutList.forEach(item => {\n clearTimeout(item);\n });\n timeoutList = [];\n stopwatchList.forEach(item => {\n clearTimeout(item);\n });\n stopwatchList = [];\n targetCurPos = curPos;\n targetWordPos = wordPos;\n\n if (toggleButton === undefined) return;\n\n toggleButton.className = 'Play';\n (toggleButton.parentNode as Element)?.setAttribute('aria-label', 'Resume replay');\n}\n\nfunction handleDisplayLogic(item: Replay, nosound = false): void {\n let activeWord = document.getElementById('replayWords')?.children[wordPos];\n\n if (activeWord === undefined) return;\n if (activeWord.className == 'newline') {\n curPos = 0;\n wordPos++;\n activeWord = document.getElementById('replayWords')?.children[wordPos];\n if (activeWord === undefined) return;\n }\n if (item.action === 'correctLetter') {\n // if (!nosound) playSound();\n activeWord.children[curPos].classList.add('correct');\n curPos++;\n } else if (item.action === 'incorrectLetter') {\n // if (!nosound) playSound(true);\n let myElement;\n if (curPos >= activeWord.children.length) {\n //if letter is an extra\n myElement = document.createElement('letter');\n myElement.classList.add('extra');\n myElement.innerHTML = item.value?.toString() ?? '';\n activeWord.appendChild(myElement);\n }\n myElement = activeWord.children[curPos];\n myElement.classList.add('incorrect');\n curPos++;\n } else if (item.action === 'setLetterIndex' && typeof item.value === 'number') {\n curPos = item.value;\n // remove all letters from cursor to end of word\n for (const myElement of Array.from(activeWord.children).slice(curPos)) {\n if (myElement.classList.contains('extra')) {\n myElement.remove();\n } else {\n myElement.className = '';\n }\n }\n } else if (item.action === 'submitCorrectWord') {\n wordPos++;\n curPos = 0;\n } else if (item.action === 'submitErrorWord') {\n activeWord.classList.add('error');\n wordPos++;\n curPos = 0;\n } else if (item.action === 'backWord') {\n wordPos--;\n\n const replayWords = document.getElementById('replayWords');\n\n if (replayWords !== null) activeWord = replayWords.children[wordPos];\n\n curPos = activeWord.children.length;\n while (activeWord.children[curPos - 1].className === '') curPos--;\n activeWord.classList.remove('error');\n }\n}\n\nfunction loadOldReplay(): number {\n let startingIndex = 0;\n curPos = 0;\n wordPos = 0;\n replayData.forEach((item, i) => {\n if (wordPos < targetWordPos || (wordPos === targetWordPos && curPos < targetCurPos)) {\n //quickly display everything up to the target\n handleDisplayLogic(item, true);\n startingIndex = i + 1;\n }\n });\n const time = Math.floor((replayData[startingIndex]?.time || 0) / 1000);\n replayStopwatch.innerText = time + 's';\n return startingIndex;\n}\n\nfunction startReplayRecording(): void {\n replayData = [];\n replayStartTime = performance.now();\n replayRecording = true;\n targetCurPos = 0;\n targetWordPos = 0;\n}\n\nfunction stopReplayRecording(): void {\n replayRecording = false;\n}\n\nfunction addReplayEvent(action: ReplayAction, value?: number | string): void {\n if (!replayRecording) {\n return;\n }\n\n const timeDelta = performance.now() - replayStartTime;\n replayData.push({ action: action, value: value, time: timeDelta });\n}\n\nfunction playReplay(): void {\n curPos = 0;\n wordPos = 0;\n\n if (toggleButton === undefined) return;\n\n toggleButton.className = 'Pause';\n (toggleButton.parentNode as Element)?.setAttribute('aria-label', 'Pause replay');\n initializeReplayPrompt();\n const startingIndex = loadOldReplay();\n const lastTime = replayData[startingIndex]?.time || 0;\n let swTime = Math.round(lastTime / 1000); //starting time\n const swEndTime = Math.round((replayData[replayData.length - 1]?.time || 0) / 1000);\n while (swTime <= swEndTime) {\n const time = swTime;\n stopwatchList.push(\n setTimeout(\n () => {\n replayStopwatch.innerText = time + 's';\n },\n time * 1000 - lastTime\n )\n );\n swTime++;\n }\n replayData.forEach((item, i) => {\n if (i < startingIndex) return;\n timeoutList.push(\n setTimeout(() => {\n handleDisplayLogic(item);\n }, item.time - lastTime)\n );\n });\n timeoutList.push(\n setTimeout(\n () => {\n //after the replay has finished, this will run\n targetCurPos = 0;\n targetWordPos = 0;\n toggleButton.className = 'Play';\n (toggleButton.parentNode as Element).setAttribute('aria-label', 'Start replay');\n },\n (replayData[replayData.length - 1]?.time || 0) - lastTime\n )\n );\n}\n\nfunction getReplayExport(): string {\n return JSON.stringify({\n replayData: replayData,\n wordsList: wordsList,\n });\n}\n\nfunction setReplayData(data: Replay[]) {\n replayData = data;\n}\n\nfunction playpauseReplayButtonClick() {\n if (toggleButton?.className === 'Play') {\n playReplay();\n } else if (toggleButton?.className === 'Pause') {\n pauseReplay();\n }\n}\n\nexport {\n addReplayEvent,\n getReplayExport,\n initializeReplayPrompt,\n loadOldReplay,\n playReplay,\n playpauseReplayButtonClick,\n replayGetWordsList,\n setReplayData,\n setReplayStopwatch,\n setToggleButton,\n startReplayRecording,\n stopReplayRecording,\n};\n","import * as TestInput from './test-input';\nimport { Wordset } from './wordset';\n\n// Changes how quickly it 'learns' scores - very roughly the score for a char\n// is based on last perCharCount occurrences. Make it smaller to adjust faster.\nconst perCharCount = 50;\n\n// Choose the highest scoring word from this many random words. Higher values\n// will choose words with more weak letters on average.\nconst wordSamples = 20;\n\n// Score penatly (in milliseconds) for getting a letter wrong.\nconst incorrectPenalty = 5000;\n\nconst scores: { [char: string]: Score } = {};\n\nclass Score {\n public average: number;\n public count: number;\n constructor() {\n this.average = 0.0;\n this.count = 0;\n }\n\n update(score: number): void {\n if (this.count < perCharCount) {\n this.count++;\n }\n const adjustRate = 1.0 / this.count;\n // Keep an exponential moving average of the score over time.\n this.average = score * adjustRate + this.average * (1 - adjustRate);\n }\n}\n\nexport function updateScore(char: string, isCorrect: boolean): void {\n const timings = TestInput.keypressTimings.spacing.array;\n if (timings.length === 0 || typeof timings === 'string') {\n return;\n }\n let score = timings[timings.length - 1];\n if (!isCorrect) {\n score += incorrectPenalty;\n }\n if (!(char in scores)) {\n scores[char] = new Score();\n }\n scores[char].update(score);\n}\n\nfunction score(word: string): number {\n let total = 0.0;\n let numChars = 0;\n for (const c of word) {\n if (c in scores) {\n total += scores[c].average;\n numChars++;\n }\n }\n return numChars == 0 ? 0.0 : total / numChars;\n}\n\nexport function getWord(wordset: Wordset): string {\n let highScore;\n let randomWord = '';\n for (let i = 0; i < wordSamples; i++) {\n const newWord = wordset.randomWord();\n const newScore = score(newWord);\n if (i == 0 || highScore === undefined || newScore > highScore) {\n randomWord = newWord;\n highScore = newScore;\n }\n }\n return randomWord;\n}\n","import { randomElementFromArray, randomIntFromRange } from '../../utils/misc';\n\nlet currentWordset: Wordset | null = null;\nlet currentWordGenerator: WordGenerator | null = null;\n\nexport class Wordset {\n public words: string[];\n public length: number;\n constructor(words: string[]) {\n this.words = words;\n this.length = this.words.length;\n }\n\n public randomWord(): string {\n return randomElementFromArray(this.words);\n }\n}\n\nconst prefixSize = 2;\n\nclass CharDistribution {\n public chars: { [char: string]: number };\n public count: number;\n constructor() {\n this.chars = {};\n this.count = 0;\n }\n\n public addChar(char: string): void {\n this.count++;\n if (char in this.chars) {\n this.chars[char]++;\n } else {\n this.chars[char] = 1;\n }\n }\n\n public randomChar(): string {\n const randomIndex = randomIntFromRange(0, this.count - 1);\n let runningCount = 0;\n for (const [char, charCount] of Object.entries(this.chars)) {\n runningCount += charCount;\n if (runningCount > randomIndex) {\n return char;\n }\n }\n\n return Object.keys(this.chars)[0];\n }\n}\n\nclass WordGenerator extends Wordset {\n public ngrams: { [prefix: string]: CharDistribution } = {};\n constructor(words: string[]) {\n super(words);\n // Can generate an unbounded number of words in theory.\n this.length = Infinity;\n\n for (let word of words) {\n // Mark the end of each word with a space.\n word += \" \";\n let prefix = \"\";\n for (const c of word) {\n // Add `c` to the distribution of chars that can come after `prefix`.\n if (!(prefix in this.ngrams)) {\n this.ngrams[prefix] = new CharDistribution();\n }\n this.ngrams[prefix].addChar(c);\n prefix = (prefix + c).substr(-prefixSize);\n }\n }\n }\n\n public override randomWord(): string {\n let word = \"\";\n for (;;) {\n const prefix = word.substr(-prefixSize);\n const charDistribution = this.ngrams[prefix];\n if (!charDistribution) {\n // This shouldn't happen if this.ngrams is complete. If it does\n // somehow, start generating a new word.\n word = \"\";\n continue;\n }\n // Pick a random char from the distribution that comes after `prefix`.\n const nextChar = charDistribution.randomChar();\n if (nextChar == \" \") {\n // A space marks the end of the word, so stop generating and return.\n break;\n }\n word += nextChar;\n }\n return word;\n }\n}\n\nexport function withWords(words: string[], funbox: string): Wordset {\n if (funbox == \"pseudolang\") {\n if (currentWordGenerator == null || words !== currentWordGenerator.words) {\n currentWordGenerator = new WordGenerator(words);\n }\n return currentWordGenerator;\n } else {\n if (currentWordset == null || words !== currentWordset.words) {\n currentWordset = new Wordset(words);\n }\n return currentWordset;\n }\n}\n","let pairsList: string[] = [];\n\nexport async function getList(): Promise<string[]> {\n if (pairsList.length === 0) {\n return fetch(\"/../assets/typing-test-languages/english_punctuation.json\")\n .then(res => res.json())\n .then(json => {\n pairsList = json;\n return pairsList;\n });\n }\n return pairsList;\n}\n\n// Check if word is in the group of pairs so it can be replaced\nexport async function check(word: string): Promise<boolean> {\n const list = await getList();\n if (\n list.find((a) => word.match(RegExp(`^([\\\\W]*${a[0]}[\\\\W]*)$`, \"gi\"))) ===\n undefined\n ) {\n return false;\n }\n return true;\n}\n\nexport async function replace(word: string): Promise<string> {\n const list = await getList();\n const replacement = list.find((a) =>\n word.match(RegExp(`^([\\\\W]*${a[0]}[\\\\W]*)$`, \"gi\"))\n );\n return replacement\n ? word.replace(\n RegExp(`^(?:([\\\\W]*)(${replacement[0]})([\\\\W]*))$`, \"gi\"),\n replacement[1]\n )\n : word;\n}\n","let activePage = 'test';\n\nexport function get(): string {\n return activePage;\n}\n\nexport function set(active: string): void {\n activePage = active;\n}\n","import { MonkeyTypes } from '../../types/types';\n\nexport let isRepeated = false;\nexport let isPaceRepeat = false;\nexport let activeChallenge: null | MonkeyTypes.Challenge = null;\n\nexport function setRepeated(tf: boolean): void {\n isRepeated = tf;\n}\n\nexport function setPaceRepeat(tf: boolean): void {\n isPaceRepeat = tf;\n}\n\nexport function setActiveChallenge(val: null | MonkeyTypes.Challenge): void {\n activeChallenge = val;\n}\n","let transition = true;\n\nexport function set(val: boolean): void {\n transition = val;\n}\n\nexport function get(): boolean {\n return transition;\n}\n","import Config from '../../helpers/config';\nimport QuotesController from '../controllers/quotes-controller';\nimport * as Misc from '../../utils/misc';\nimport * as ManualRestart from './manual-restart-tracker';\nimport * as TestUI from './test-ui';\nimport * as CustomText from './custom-text';\nimport * as TestStats from './test-stats';\nimport * as Focus from './focus';\nimport * as Caret from './caret';\nimport * as TimerProgress from './timer-progress';\nimport * as OutOfFocus from './out-of-focus';\nimport * as TestTimer from './test-timer';\nimport * as Replay from './replay';\nimport * as WeakSpot from './weak-spot';\nimport * as Wordset from './wordset';\nimport * as EnglishPunctuation from './english-punctuation';\nimport * as ActivePage from '../states/active-page';\nimport * as TestActive from '../states/test-active';\nimport * as TestInput from './test-input';\nimport * as TestState from './test-state';\nimport * as TestWords from './test-words';\nimport * as PageTransition from '../states/page-transition';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport * as TimerEvent from '../observables/timer-event';\nimport { MonkeyTypes } from '../../types/types';\n\nlet failReason = '';\n\nlet wordsInput: HTMLInputElement;\n\nexport const startTestSubject = new BehaviorSubject<boolean>(false);\nexport const resultSub = new Subject<any>();\n\nexport let notSignedInLastResult: MonkeyTypes.Result<MonkeyTypes.Mode> | null = null;\n\nexport function setWordsInputElementTestLogic(wordsElement: HTMLInputElement) {\n wordsInput = wordsElement;\n}\n\nexport function clearNotSignedInResult(): void {\n notSignedInLastResult = null;\n}\n\nfunction shouldCapitalize(lastChar: string): boolean {\n return /[?!.؟]/.test(lastChar);\n}\n\nfunction addDecimalPoint(word: string): string {\n if (Math.random() < 0.8) {\n const decimal = Misc.getNumbers(3, 0);\n if (decimal != '') {\n word = word + '.' + decimal;\n }\n }\n return word;\n}\n\nlet spanishSentenceTracker = '';\nexport async function punctuateWord(\n previousWord: string,\n currentWord: string,\n index: number,\n maxindex: number\n): Promise<string> {\n let word = currentWord;\n\n const currentLanguage = Config.language.split('_')[0];\n\n const lastChar = Misc.getLastChar(previousWord);\n\n if (Config.funbox === '58008') {\n if (currentWord.length > 3) {\n if (Math.random() < 0.5) {\n word = Misc.setCharAt(word, Misc.randomIntFromRange(1, word.length - 2), '.');\n }\n if (Math.random() < 0.75) {\n const index = Misc.randomIntFromRange(1, word.length - 2);\n if (word[index - 1] !== '.' && word[index + 1] !== '.' && word[index + 1] !== '0') {\n const special = Misc.randomElementFromArray(['/', '*', '-', '+']);\n word = Misc.setCharAt(word, index, special);\n }\n }\n }\n } else if (Config.funbox === 'tenKeyMode') {\n word = addDecimalPoint(word);\n const special = Misc.randomElementFromArray(['/', '*', '-', '+']);\n word = word + special + Misc.getNumbers(4);\n // 2nd number of expression\n word = addDecimalPoint(word);\n } else {\n if (currentLanguage != 'code' && (index == 0 || shouldCapitalize(lastChar))) {\n //always capitalise the first word or if there was a dot unless using a code alphabet\n\n word = Misc.capitalizeFirstLetterOfEachWord(word);\n\n if (currentLanguage == 'turkish') {\n word = word.replace(/I/g, 'İ');\n }\n\n if (currentLanguage == 'spanish' || currentLanguage == 'catalan') {\n const rand = Math.random();\n if (rand > 0.9) {\n word = '¿' + word;\n spanishSentenceTracker = '?';\n } else if (rand > 0.8) {\n word = '¡' + word;\n spanishSentenceTracker = '!';\n }\n }\n } else if (\n (Math.random() < 0.1 && lastChar != '.' && lastChar != ',' && index != maxindex - 2) ||\n index == maxindex - 1\n ) {\n if (currentLanguage == 'spanish' || currentLanguage == 'catalan') {\n if (spanishSentenceTracker == '?' || spanishSentenceTracker == '!') {\n word += spanishSentenceTracker;\n spanishSentenceTracker = '';\n }\n } else {\n const rand = Math.random();\n if (rand <= 0.8) {\n if (currentLanguage == 'kurdish') {\n word += '.';\n } else {\n word += '.';\n }\n } else if (rand > 0.8 && rand < 0.9) {\n if (currentLanguage == 'french') {\n word = '?';\n } else if (\n currentLanguage == 'arabic' ||\n currentLanguage == 'persian' ||\n currentLanguage == 'urdu' ||\n currentLanguage == 'kurdish'\n ) {\n word += '؟';\n } else if (currentLanguage == 'greek') {\n word += ';';\n } else {\n word += '?';\n }\n } else {\n if (currentLanguage == 'french') {\n word = '!';\n } else {\n word += '!';\n }\n }\n }\n } else if (\n Math.random() < 0.01 &&\n lastChar != ',' &&\n lastChar != '.' &&\n currentLanguage !== 'russian'\n ) {\n word = `\"${word}\"`;\n } else if (\n Math.random() < 0.011 &&\n lastChar != ',' &&\n lastChar != '.' &&\n currentLanguage !== 'russian' &&\n currentLanguage !== 'ukrainian'\n ) {\n word = `'${word}'`;\n } else if (Math.random() < 0.012 && lastChar != ',' && lastChar != '.') {\n if (currentLanguage == 'code') {\n const r = Math.random();\n if (r < 0.25) {\n word = `(${word})`;\n } else if (r < 0.5) {\n word = `{${word}}`;\n } else if (r < 0.75) {\n word = `[${word}]`;\n } else {\n word = `<${word}>`;\n }\n } else {\n word = `(${word})`;\n }\n } else if (\n Math.random() < 0.013 &&\n lastChar != ',' &&\n lastChar != '.' &&\n lastChar != ';' &&\n lastChar != '؛' &&\n lastChar != ':'\n ) {\n if (currentLanguage == 'french') {\n word = ':';\n } else if (currentLanguage == 'greek') {\n word = '·';\n } else {\n word += ':';\n }\n } else if (Math.random() < 0.014 && lastChar != ',' && lastChar != '.' && previousWord != '-') {\n word = '-';\n } else if (\n Math.random() < 0.015 &&\n lastChar != ',' &&\n lastChar != '.' &&\n lastChar != ';' &&\n lastChar != '؛' &&\n lastChar != ':'\n ) {\n if (currentLanguage == 'french') {\n word = ';';\n } else if (currentLanguage == 'greek') {\n word = '·';\n } else if (currentLanguage == 'arabic' || currentLanguage == 'kurdish') {\n word += '؛';\n } else {\n word += ';';\n }\n } else if (Math.random() < 0.2 && lastChar != ',') {\n if (\n currentLanguage == 'arabic' ||\n currentLanguage == 'urdu' ||\n currentLanguage == 'persian' ||\n currentLanguage == 'kurdish'\n ) {\n word += '،';\n } else {\n word += ',';\n }\n } else if (Math.random() < 0.25 && currentLanguage == 'code') {\n const specials = ['{', '}', '[', ']', '(', ')', ';', '=', '+', '%', '/'];\n\n word = Misc.randomElementFromArray(specials);\n } else if (\n Math.random() < 0.5 &&\n currentLanguage === 'english' &&\n (await EnglishPunctuation.check(word))\n ) {\n word = await applyEnglishPunctuationToWord(word);\n }\n }\n return word;\n}\n\nasync function applyEnglishPunctuationToWord(word: string): Promise<string> {\n return EnglishPunctuation.replace(word);\n}\n\nexport function startTest(): boolean {\n if (PageTransition.get()) {\n return false;\n }\n startTestSubject.next(true);\n TestActive.set(true);\n Replay.startReplayRecording();\n Replay.replayGetWordsList(TestWords.words.list);\n TestInput.resetKeypressTimings();\n TimerProgress.update();\n TestTimer.clear();\n\n TestStats.setStart(performance.now());\n TestTimer.start();\n return true;\n}\n\ninterface RestartOptions {\n withSameWordset?: boolean;\n nosave?: boolean;\n event?: { shiftKey: any };\n practiseMissed?: boolean;\n noAnim?: boolean;\n}\n\nexport function restart(options = {} as RestartOptions): void {\n const defaultOptions = {\n withSameWordset: false,\n practiseMissed: false,\n noAnim: false,\n nosave: false,\n };\n\n options = { ...defaultOptions, ...options };\n\n if (TestUI.testRestarting || TestUI.resultCalculating) {\n event?.preventDefault();\n return;\n }\n if (ActivePage.get() == 'test' && !TestUI.resultVisible) {\n if (!ManualRestart.get()) {\n if (TestWords.hasTab && !options.event?.shiftKey && Config.quickRestart !== 'esc') {\n return;\n }\n if (Config.mode !== 'zen') event?.preventDefault();\n if (!Misc.canQuickRestart(Config.mode, Config.words, Config.time, CustomText)) {\n return;\n }\n }\n }\n if (TestActive.get()) {\n if (\n Config.repeatQuotes === 'typing' &&\n Config.mode === 'quote' &&\n Config.language.replace(/_\\d*k$/g, '') === TestWords.randomQuote.language\n ) {\n options.withSameWordset = true;\n }\n if (TestState.isRepeated) {\n options.withSameWordset = true;\n }\n\n TestInput.pushKeypressesToHistory();\n const testSeconds = TestStats.calculateTestSeconds(performance.now());\n const afkseconds = TestStats.calculateAfkSeconds(testSeconds);\n let tt = testSeconds - afkseconds;\n if (tt < 0) tt = 0;\n TestStats.incrementIncompleteSeconds(tt);\n TestStats.incrementRestartCount();\n }\n\n let repeatWithPace = false;\n if (TestUI.resultVisible && Config.repeatedPace && options.withSameWordset) {\n repeatWithPace = true;\n }\n\n ManualRestart.reset();\n TestTimer.clear();\n TestStats.restart();\n TestInput.restart();\n TestInput.corrected.reset();\n startTestSubject.next(false);\n Caret.hide();\n TestActive.set(false);\n TestInput.setBailout(false);\n\n if (ActivePage.get() == 'test' && window.scrollY > 0) {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n\n wordsInput.value = ' ';\n\n TestUI.reset();\n\n TestUI.setResultVisible(false);\n PageTransition.set(true);\n TestUI.setTestRestarting(true);\n (async () => {\n if (ActivePage.get() == 'test') {\n Focus.set(false);\n }\n TestUI.focusWords();\n wordsInput.value = ' ';\n let shouldQuoteRepeat = false;\n if (Config.mode === 'quote' && Config.repeatQuotes === 'typing' && failReason !== '') {\n shouldQuoteRepeat = true;\n }\n\n if (!options.withSameWordset && !shouldQuoteRepeat) {\n TestState.setRepeated(false);\n TestState.setPaceRepeat(repeatWithPace);\n TestWords.setHasTab(false);\n try {\n await init();\n } catch {\n TestUI.setTestRestarting(false);\n return;\n }\n } else {\n TestState.setRepeated(true);\n TestState.setPaceRepeat(repeatWithPace);\n TestActive.set(false);\n TestWords.words.resetCurrentIndex();\n TestInput.input.reset();\n TestUI.showWords();\n }\n failReason = '';\n\n let fbtext = '';\n if (Config.funbox !== 'none') {\n fbtext = ' ' + Config.funbox;\n }\n\n TestUI.setTestRestarting(false);\n TestTimer.clear();\n PageTransition.set(false);\n\n // Added by me\n startTest();\n })();\n}\n\nfunction applyFunboxesToWord(word: string, wordset?: Wordset.Wordset): string {\n if (Config.funbox === 'rAnDoMcAsE') {\n let randomcaseword = '';\n for (let i = 0; i < word.length; i++) {\n if (i % 2 != 0) {\n randomcaseword += word[i].toUpperCase();\n } else {\n randomcaseword += word[i];\n }\n }\n word = randomcaseword;\n } else if (Config.funbox === 'capitals') {\n word = Misc.capitalizeFirstLetterOfEachWord(word);\n } else if (Config.funbox === 'gibberish') {\n word = Misc.getGibberish();\n } else if (Config.funbox === 'arrows') {\n word = Misc.getArrows();\n } else if (Config.funbox === 'tenKeyMode') {\n word = Misc.getNumbers(Config.punctuation ? 4 : 5, Config.punctuation ? 1 : 2);\n if (Config.language.split('_')[0] === 'kurdish') {\n word = Misc.convertNumberToArabicIndic(word);\n }\n } else if (Config.funbox === '58008') {\n word = Misc.getNumbers(7);\n if (Config.language.split('_')[0] === 'kurdish') {\n word = Misc.convertNumberToArabicIndic(word);\n }\n } else if (Config.funbox === 'specials') {\n word = Misc.getSpecials();\n } else if (Config.funbox === 'ascii') {\n word = Misc.getASCII();\n } else if (wordset !== undefined && Config.funbox === 'weakspot') {\n word = WeakSpot.getWord(wordset);\n }\n return word;\n}\n\nasync function getNextWord(\n wordset: Wordset.Wordset,\n language: MonkeyTypes.LanguageObject,\n wordsBound: number\n): Promise<string> {\n let randomWord = wordset.randomWord();\n const previousWord = TestWords.words.get(TestWords.words.length - 1, true);\n const previousWord2 = TestWords.words.get(TestWords.words.length - 2, true);\n\n // Added by TG\n if (Config.customTGQuotes) {\n if (TestWords.words.length - TestWords.words.currentIndex <= 40) {\n const randomQuote = QuotesController.getRandomQuote();\n let rq: MonkeyTypes.Quote | undefined | null = undefined;\n rq = randomQuote;\n\n if (rq !== (undefined || null)) {\n rq.text = rq.text.replace(/ +/gm, ' ');\n rq.text = rq.text.replace(/\\\\\\\\t/gm, '\\t');\n rq.text = rq.text.replace(/\\\\\\\\n/gm, '\\n');\n rq.text = rq.text.replace(/\\\\t/gm, '\\t');\n rq.text = rq.text.replace(/\\\\n/gm, '\\n');\n rq.text = rq.text.replace(/( *(\\r\\n|\\r|\\n) *)/g, '\\n ');\n rq.text = rq.text.replace(/…/g, '...');\n rq.text = rq.text.trim();\n rq.textSplit = rq.text.split(' ');\n rq.language = Config.language.replace(/_\\d*k$/g, '');\n TestWords.setRandomQuote(rq);\n }\n\n return TestWords.randomQuote.text;\n }\n } else if (Config.mode === 'quote') {\n randomWord = TestWords.randomQuote.textSplit?.[TestWords.words.length] ?? '';\n } else if (Config.mode == 'custom' && !CustomText.isWordRandom && !CustomText.isTimeRandom) {\n randomWord = CustomText.text[TestWords.words.length];\n } else {\n let regenarationCount = 0; //infinite loop emergency stop button\n while (\n regenarationCount < 100 &&\n (previousWord == randomWord ||\n previousWord2 == randomWord ||\n (Config.mode !== 'custom' && !Config.punctuation && randomWord == 'I') ||\n (Config.mode !== 'custom' &&\n !Config.punctuation &&\n /[-=_+[\\]{};'\\\\:\"|,./<>?]/i.test(randomWord)))\n ) {\n regenarationCount++;\n randomWord = wordset.randomWord();\n }\n }\n\n if (randomWord === undefined) {\n randomWord = wordset.randomWord();\n }\n\n randomWord = randomWord.replace(/ +/gm, ' ');\n randomWord = randomWord.replace(/^ | $/gm, '');\n randomWord = applyFunboxesToWord(randomWord, wordset);\n\n if (Config.punctuation) {\n randomWord = await punctuateWord(\n TestWords.words.get(TestWords.words.length - 1),\n randomWord,\n TestWords.words.length,\n wordsBound\n );\n }\n if (Config.numbers) {\n if (Math.random() < 0.1) {\n randomWord = Misc.getNumbers(4);\n\n if (Config.language.split('_')[0] === 'kurdish') {\n randomWord = Misc.convertNumberToArabicIndic(randomWord);\n }\n }\n }\n\n return randomWord;\n}\n\nexport async function init(): Promise<void> {\n TestActive.set(false);\n TestWords.words.reset();\n TestUI.setCurrentWordElementIndex(0);\n\n TestInput.input.resetHistory();\n TestInput.input.resetCurrent();\n\n let language;\n try {\n language = await Misc.getLanguage(Config.language);\n } catch (e) {\n Misc.emitQuoteNetworkError();\n throw e;\n }\n\n let wordsBound = 100;\n if (Config.showAllLines) {\n if (Config.mode === 'quote') {\n wordsBound = 100;\n } else if (Config.mode === 'custom') {\n if (CustomText.isWordRandom) {\n wordsBound = CustomText.word;\n } else if (CustomText.isTimeRandom) {\n wordsBound = 100;\n } else {\n wordsBound = CustomText.text.length;\n }\n } else if (Config.mode != 'time') {\n wordsBound = Config.words;\n }\n } else {\n if (Config.mode === 'words' && Config.words < wordsBound) {\n wordsBound = Config.words;\n }\n if (Config.mode == 'custom' && CustomText.isWordRandom && CustomText.word < wordsBound) {\n wordsBound = CustomText.word;\n }\n if (Config.mode == 'custom' && CustomText.isTimeRandom) {\n wordsBound = 100;\n }\n if (\n Config.mode == 'custom' &&\n !CustomText.isWordRandom &&\n !CustomText.isTimeRandom &&\n CustomText.text.length < wordsBound\n ) {\n wordsBound = CustomText.text.length;\n }\n }\n\n if (\n (Config.mode === 'custom' && CustomText.isWordRandom && CustomText.word == 0) ||\n (Config.mode === 'custom' && CustomText.isTimeRandom && CustomText.time == 0)\n ) {\n wordsBound = 100;\n }\n\n if (Config.mode === 'words' && Config.words === 0) {\n wordsBound = 100;\n }\n if (Config.funbox === 'plus_one') {\n wordsBound = 2;\n if (Config.mode === 'words' && Config.words < wordsBound) {\n wordsBound = Config.words;\n }\n }\n if (Config.funbox === 'plus_two') {\n wordsBound = 3;\n if (Config.mode === 'words' && Config.words < wordsBound) {\n wordsBound = Config.words;\n }\n }\n\n if (\n (Config.mode == 'time' || Config.mode == 'words' || Config.mode == 'custom') &&\n !Config.customTGQuotes\n ) {\n let wordList = language.words;\n if (Config.mode == 'custom') {\n wordList = CustomText.text;\n }\n const wordset = Wordset.withWords(wordList, Config.funbox);\n\n if ((Config.funbox == 'wikipedia' || Config.funbox == 'poetry') && Config.mode != 'custom') {\n // Skip word generation for wikipedia/poetry funboxes in non-custom mode\n } else {\n for (let i = 0; i < wordsBound; i++) {\n const randomWord = await getNextWord(wordset, language, wordsBound);\n\n if (/\\t/g.test(randomWord)) {\n TestWords.setHasTab(true);\n }\n\n const te = randomWord.replace('\\n', '\\n ').trim();\n\n if (/ +/.test(te)) {\n const randomList = te.split(' ');\n let id = 0;\n while (id < randomList.length) {\n TestWords.words.push(randomList[id]);\n id++;\n\n if (\n TestWords.words.length == wordsBound &&\n Config.mode == 'custom' &&\n CustomText.isWordRandom\n ) {\n break;\n }\n }\n if (Config.mode == 'custom' && !CustomText.isWordRandom && !CustomText.isTimeRandom) {\n // Custom mode with fixed text - no adjustment needed\n } else {\n i = TestWords.words.length - 1;\n }\n } else {\n TestWords.words.push(randomWord);\n }\n }\n }\n }\n\n // Added by TG\n if (Config.customTGQuotes) {\n let quotesCollection;\n\n try {\n quotesCollection = await QuotesController.getQuotes(\n Config.language,\n Config.testVersion,\n Config.quoteLength\n );\n } catch (e) {\n Misc.emitQuoteNetworkError();\n throw e;\n }\n\n let rq: MonkeyTypes.Quote | undefined | null = undefined;\n const randomQuote = QuotesController.getRandomQuote();\n rq = randomQuote;\n\n if (rq === (undefined || null)) return;\n\n rq.text = rq.text.replace(/ +/gm, ' ');\n rq.text = rq.text.replace(/\\\\\\\\t/gm, '\\t');\n rq.text = rq.text.replace(/\\\\\\\\n/gm, '\\n');\n rq.text = rq.text.replace(/\\\\t/gm, '\\t');\n rq.text = rq.text.replace(/\\\\n/gm, '\\n');\n rq.text = rq.text.replace(/( *(\\r\\n|\\r|\\n) *)/g, '\\n ');\n rq.text = rq.text.replace(/…/g, '...');\n rq.text = rq.text.trim();\n rq.textSplit = rq.text.split(' ');\n rq.language = Config.language.replace(/_\\d*k$/g, '');\n\n TestWords.setRandomQuote(rq);\n\n const w = TestWords.randomQuote.textSplit;\n\n if (w === undefined) return;\n\n for (let i = 0; i < w.length; i++) {\n if (/\\t/g.test(w[i])) {\n TestWords.setHasTab(true);\n }\n\n w[i] = applyFunboxesToWord(w[i]);\n\n TestWords.words.push(w[i]);\n }\n }\n\n TestUI.showWords();\n}\n\nexport async function addWord(): Promise<void> {\n let bound = 100;\n if (Config.funbox === 'plus_one') bound = 1;\n if (Config.funbox === 'plus_two') bound = 2;\n if (\n TestWords.words.length - TestInput.input.history.length > bound ||\n (Config.mode === 'words' && TestWords.words.length >= Config.words && Config.words > 0) ||\n (Config.mode === 'custom' &&\n CustomText.isWordRandom &&\n TestWords.words.length >= CustomText.word &&\n CustomText.word != 0) ||\n (Config.mode === 'custom' &&\n !CustomText.isWordRandom &&\n !CustomText.isTimeRandom &&\n TestWords.words.length >= CustomText.text.length) ||\n (Config.mode === 'quote' &&\n TestWords.words.length >= (TestWords.randomQuote.textSplit?.length ?? 0))\n ) {\n return;\n }\n\n const language: MonkeyTypes.LanguageObject =\n Config.mode !== 'custom'\n ? await Misc.getCurrentLanguage(Config.language)\n : {\n //borrow the direction of the current language\n ...(await Misc.getCurrentLanguage(Config.language)),\n words: CustomText.text,\n };\n const wordset = Wordset.withWords(language.words, Config.funbox);\n\n const randomWord = await getNextWord(wordset, language, bound);\n\n const split = randomWord.split(' ');\n\n if (!Config.customTGQuotes) {\n if (split.length > 1) {\n split.forEach(word => {\n TestWords.words.push(word);\n TestUI.addWord(word);\n });\n } else {\n TestWords.words.push(randomWord);\n TestUI.addWord(randomWord);\n }\n } else {\n if (split.length > 1) {\n split.forEach(word => {\n TestWords.words.push(word);\n TestUI.addWord(word);\n });\n }\n }\n}\n\ninterface CompletedEvent extends MonkeyTypes.Result<MonkeyTypes.Mode> {\n keySpacing: number[] | 'toolong';\n keyDuration: number[] | 'toolong';\n customText: MonkeyTypes.CustomText;\n smoothConsistency: number;\n wpmConsistency: number;\n lang: string;\n challenge?: string | null;\n}\n\ntype PartialCompletedEvent = Omit<Partial<CompletedEvent>, 'chartData'> & {\n chartData: Partial<MonkeyTypes.ChartData>;\n};\n\ninterface RetrySaving {\n completedEvent: CompletedEvent | null;\n canRetry: boolean;\n}\n\nconst retrySaving: RetrySaving = {\n completedEvent: null,\n canRetry: false,\n};\n\nfunction buildCompletedEvent(difficultyFailed: boolean): CompletedEvent {\n //build completed event object\n const completedEvent: PartialCompletedEvent = {\n wpm: undefined,\n rawWpm: undefined,\n kph: -1,\n charStats: undefined,\n acc: undefined,\n mode: Config.mode,\n mode2: undefined as never,\n quoteLength: -1,\n punctuation: Config.punctuation,\n numbers: Config.numbers,\n lazyMode: Config.lazyMode,\n timestamp: Date.now(),\n language: Config.language,\n restartCount: TestStats.restartCount,\n incompleteTestSeconds:\n TestStats.incompleteSeconds < 0 ? 0 : Misc.roundTo2(TestStats.incompleteSeconds),\n difficulty: Config.difficulty,\n blindMode: Config.blindMode,\n tags: undefined,\n keySpacing: TestInput.keypressTimings.spacing.array,\n keyDuration: TestInput.keypressTimings.duration.array,\n consistency: undefined,\n keyConsistency: undefined,\n funbox: Config.funbox,\n bailedOut: TestInput.bailout,\n chartData: {\n wpm: TestInput.wpmHistory,\n raw: undefined,\n err: undefined,\n },\n customText: undefined,\n testDuration: undefined,\n afkDuration: undefined,\n };\n\n // stats\n const stats = TestStats.calculateStats();\n if (stats.time % 1 != 0 && Config.mode !== 'time') {\n TestStats.setLastSecondNotRound();\n }\n TestStats.setLastTestWpm(stats.wpm);\n completedEvent.wpm = stats.wpm;\n completedEvent.rawWpm = stats.wpmRaw;\n completedEvent.charStats = [\n stats.correctChars + stats.correctSpaces,\n stats.incorrectChars,\n stats.extraChars,\n stats.missedChars,\n ];\n completedEvent.acc = stats.acc;\n if (Config.funbox === 'tenKeyMode') {\n completedEvent.kph = stats.wpm * 5 * 60;\n }\n\n // if the last second was not rounded, add another data point to the history\n if (TestStats.lastSecondNotRound && !difficultyFailed) {\n const wpmAndRaw = TestStats.calculateWpmAndRaw();\n TestInput.pushToWpmHistory(wpmAndRaw.wpm);\n TestInput.pushToRawHistory(wpmAndRaw.raw);\n TestInput.pushKeypressesToHistory();\n }\n\n //consistency\n const rawPerSecond = TestInput.keypressPerSecond.map(f => Math.round((f.count / 5) * 60));\n const stddev = Misc.stdDev(rawPerSecond);\n const avg = Misc.mean(rawPerSecond);\n let consistency = Misc.roundTo2(Misc.kogasa(stddev / avg));\n let keyConsistencyArray =\n TestInput.keypressTimings.spacing.array === 'toolong'\n ? []\n : TestInput.keypressTimings.spacing.array.slice();\n if (keyConsistencyArray.length > 0) {\n keyConsistencyArray = keyConsistencyArray.slice(0, keyConsistencyArray.length - 1);\n }\n let keyConsistency = Misc.roundTo2(\n Misc.kogasa(Misc.stdDev(keyConsistencyArray) / Misc.mean(keyConsistencyArray))\n );\n if (!consistency || isNaN(consistency)) {\n consistency = 0;\n }\n if (!keyConsistency || isNaN(keyConsistency)) {\n keyConsistency = 0;\n }\n completedEvent.keyConsistency = keyConsistency;\n completedEvent.consistency = consistency;\n const smoothedraw = Misc.smooth(rawPerSecond, 1);\n completedEvent.chartData.raw = smoothedraw;\n completedEvent.chartData.unsmoothedRaw = rawPerSecond;\n\n //smoothed consistency\n const stddev2 = Misc.stdDev(smoothedraw);\n const avg2 = Misc.mean(smoothedraw);\n const smoothConsistency = Misc.roundTo2(Misc.kogasa(stddev2 / avg2));\n completedEvent.smoothConsistency = smoothConsistency;\n\n //wpm consistency\n const stddev3 = Misc.stdDev(completedEvent.chartData.wpm ?? []);\n const avg3 = Misc.mean(completedEvent.chartData.wpm ?? []);\n const wpmConsistency = Misc.roundTo2(Misc.kogasa(stddev3 / avg3));\n completedEvent.wpmConsistency = wpmConsistency;\n\n completedEvent.testDuration = parseFloat(stats.time.toString());\n completedEvent.afkDuration = TestStats.calculateAfkSeconds(completedEvent.testDuration);\n\n completedEvent.chartData.err = [];\n for (let i = 0; i < TestInput.keypressPerSecond.length; i++) {\n completedEvent.chartData.err.push(TestInput.keypressPerSecond[i].errors);\n }\n\n if (Config.mode === 'quote') {\n completedEvent.quoteLength = TestWords.randomQuote.group;\n completedEvent.language = Config.language.replace(/_\\d*k$/g, '');\n } else {\n delete completedEvent.quoteLength;\n }\n\n // @ts-expect-error TODO fix this\n completedEvent.mode2 = Misc.getMode2(Config, TestWords.randomQuote);\n\n if (Config.mode === 'custom') {\n completedEvent.customText = <MonkeyTypes.CustomText>{};\n completedEvent.customText.textLen = CustomText.text.length;\n completedEvent.customText.isWordRandom = CustomText.isWordRandom;\n completedEvent.customText.isTimeRandom = CustomText.isTimeRandom;\n completedEvent.customText.word = CustomText.word;\n completedEvent.customText.time = CustomText.time;\n } else {\n delete completedEvent.customText;\n }\n\n //tags\n const activeTagsIds: string[] = [];\n completedEvent.tags = activeTagsIds;\n\n if (completedEvent.mode != 'custom') delete completedEvent.customText;\n\n return <CompletedEvent>completedEvent;\n}\n\nexport function stopTest(): void {\n TestActive.set(false);\n Focus.set(false);\n Caret.hide();\n OutOfFocus.hide();\n TestTimer.clear();\n}\n\nexport async function finish(difficultyFailed = false): Promise<void> {\n if (!TestActive.get()) return;\n\n startTestSubject.next(false);\n\n TestInput.recordKeypressSpacing(); //this is needed in case there is afk time at the end - to make sure test duration makes sense\n\n TestUI.setResultCalculating(true);\n TestUI.setResultVisible(true);\n TestStats.setEnd(performance.now());\n TestActive.set(false);\n Focus.set(false);\n Caret.hide();\n OutOfFocus.hide();\n TestTimer.clear();\n\n if (TestInput.burstHistory.length !== TestInput.input.getHistory().length) {\n const burst = TestStats.calculateBurst();\n TestInput.pushBurstToHistory(burst);\n }\n\n if (Config.mode == 'zen' || TestInput.bailout) {\n TestStats.removeAfkData();\n }\n\n const completedEvent = buildCompletedEvent(difficultyFailed);\n\n function countUndefined(input: unknown): number {\n if (typeof input === 'undefined') {\n return 1;\n } else if (typeof input === 'object' && input !== null) {\n return Object.values(input).reduce((a, b) => a + countUndefined(b), 0) as number;\n } else {\n return 0;\n }\n }\n\n if (countUndefined(completedEvent) > 0) {\n console.log(completedEvent);\n return;\n }\n\n const kps = TestInput.keypressPerSecond.slice(-5);\n let afkDetected = kps.every(second => second.afk);\n if (TestInput.bailout) afkDetected = false;\n\n let tooShort = false;\n let dontSave = false;\n if (difficultyFailed) {\n dontSave = true;\n } else if (afkDetected) {\n dontSave = true;\n } else if (TestState.isRepeated) {\n dontSave = true;\n } else if (\n (Config.mode === 'time' && completedEvent.mode2 < 15 && completedEvent.mode2 > 0) ||\n (Config.mode === 'time' && completedEvent.mode2 == 0 && completedEvent.testDuration < 15) ||\n (Config.mode === 'words' && completedEvent.mode2 < 10 && completedEvent.mode2 > 0) ||\n (Config.mode === 'words' && completedEvent.mode2 == 0 && completedEvent.testDuration < 15) ||\n (Config.mode === 'custom' &&\n !CustomText.isWordRandom &&\n !CustomText.isTimeRandom &&\n CustomText.text.length < 10) ||\n (Config.mode === 'custom' &&\n CustomText.isWordRandom &&\n !CustomText.isTimeRandom &&\n CustomText.word < 10) ||\n (Config.mode === 'custom' &&\n !CustomText.isWordRandom &&\n CustomText.isTimeRandom &&\n CustomText.time < 15) ||\n (Config.mode === 'zen' && completedEvent.testDuration < 15)\n ) {\n tooShort = true;\n dontSave = true;\n } else if (completedEvent.wpm < 0 || completedEvent.wpm > 350) {\n TestStats.setInvalid();\n dontSave = true;\n } else if (completedEvent.acc < 75 || completedEvent.acc > 100) {\n TestStats.setInvalid();\n dontSave = true;\n }\n\n TestStats.setLastResult(completedEvent);\n\n resultSub.next({\n completedEvent: completedEvent,\n difficultyFailed: difficultyFailed,\n failReason: failReason,\n afkDetected: afkDetected,\n isRepeated: TestState.isRepeated,\n tooShort: tooShort,\n randomQuote: TestWords.randomQuote,\n dontSave: dontSave,\n wpmHistory: TestInput.wpmHistory,\n });\n\n if (completedEvent.chartData !== 'toolong') {\n delete completedEvent.chartData.unsmoothedRaw;\n }\n\n if (completedEvent.testDuration > 122) {\n completedEvent.chartData = 'toolong';\n completedEvent.keySpacing = 'toolong';\n completedEvent.keyDuration = 'toolong';\n TestInput.setKeypressTimingsTooLong();\n }\n\n if (\n Config.difficulty == 'normal' ||\n ((Config.difficulty == 'master' || Config.difficulty == 'expert') && !difficultyFailed)\n ) {\n TestStats.resetIncomplete();\n }\n}\n\nexport function fail(reason: string): void {\n failReason = reason;\n TestInput.pushKeypressesToHistory();\n finish(true);\n const testSeconds = TestStats.calculateTestSeconds(performance.now());\n const afkseconds = TestStats.calculateAfkSeconds(testSeconds);\n let tt = testSeconds - afkseconds;\n if (tt < 0) tt = 0;\n TestStats.incrementIncompleteSeconds(tt);\n TestStats.incrementRestartCount();\n}\n\nTimerEvent.subscribe((eventKey, eventValue) => {\n if (eventKey === 'fail' && eventValue !== undefined) fail(eventValue);\n if (eventKey === 'finish') finish();\n});\n","import * as TestLogic from '../test/test-logic';\nimport * as TestUI from '../test/test-ui';\nimport * as TestStats from '../test/test-stats';\nimport Config, * as UpdateConfig from '../config';\nimport * as Misc from '../../utils/misc';\nimport * as Caret from '../test/caret';\nimport * as CustomText from '../test/custom-text';\nimport * as TimerProgress from '../test/timer-progress';\nimport * as Focus from '../test/focus';\nimport * as Replay from '../test/replay';\nimport * as WeakSpot from '../test/weak-spot';\nimport * as TestActive from '../states/test-active';\nimport * as CompositionState from '../states/composition';\nimport * as TestInput from '../test/test-input';\nimport * as TestWords from '../test/test-words';\n\nlet dontInsertSpace = false;\nconst correctShiftUsed = true;\n\nlet wordsInput: HTMLInputElement;\n\nfunction setWordsInput(value: string): void {\n // Only change #wordsInput if it's not already the wanted value\n // Avoids Safari triggering unneeded events, causing issues with\n // dead keys.\n if (value !== wordsInput.value) {\n wordsInput.value = value;\n }\n}\n\nfunction updateUI(): void {\n const acc = Misc.roundTo2(TestStats.calculateAccuracy());\n}\n\nfunction backspaceToPrevious(): void {\n if (!TestActive.get()) return;\n\n if (TestInput.input.history.length == 0 || TestUI.currentWordElementIndex == 0) {\n return;\n }\n\n if (\n (TestInput.input.history[TestWords.words.currentIndex - 1] ==\n TestWords.words.get(TestWords.words.currentIndex - 1) &&\n !Config.freedomMode) ||\n document\n .querySelectorAll('.word')\n [TestWords.words.currentIndex - 1]?.classList.contains('hidden')\n ) {\n return;\n }\n\n if (Config.confidenceMode === 'on' || Config.confidenceMode === 'max') {\n return;\n }\n\n TestInput.input.current = TestInput.input.popHistory();\n TestInput.corrected.popHistory();\n if (Config.funbox === 'nospace' || Config.funbox === 'arrows') {\n TestInput.input.current = TestInput.input.current.slice(0, -1);\n }\n TestWords.words.decreaseCurrentIndex();\n TestUI.setCurrentWordElementIndex(TestUI.currentWordElementIndex - 1);\n TestUI.updateActiveElement(true);\n TestUI.updateWordElement();\n\n Caret.updatePosition();\n Replay.addReplayEvent('backWord');\n}\n\nfunction handleSpace(): void {\n if (!TestActive.get()) return;\n\n if (TestInput.input.current === '') return;\n\n const currentWord = TestWords.words.getCurrent();\n if (Config.funbox === 'layoutfluid' && Config.mode !== 'time') {\n // here I need to check if Config.customLayoutFluid exists because of my scuffed solution of returning whenever value is undefined in the setCustomLayoutfluid function\n const layouts = Config.customLayoutfluid\n ? Config.customLayoutfluid.split('#')\n : ['qwerty', 'dvorak', 'colemak'];\n let index = 0;\n const outof = TestWords.words.length;\n index = Math.floor((TestInput.input.history.length + 1) / (outof / layouts.length));\n }\n dontInsertSpace = true;\n\n const burst = TestStats.calculateBurst();\n TestInput.pushBurstToHistory(burst);\n\n //correct word or in zen mode\n const isWordCorrect = currentWord == TestInput.input.current || Config.mode == 'zen';\n TestInput.incrementAccuracy(isWordCorrect);\n if (isWordCorrect) {\n TestInput.input.pushHistory();\n TestWords.words.increaseCurrentIndex();\n TestUI.setCurrentWordElementIndex(TestUI.currentWordElementIndex + 1);\n TestUI.updateActiveElement();\n Caret.updatePosition();\n TestInput.incrementKeypressCount();\n TestInput.pushKeypressWord(TestWords.words.currentIndex);\n Replay.addReplayEvent('submitCorrectWord');\n } else {\n TestInput.pushMissedWord(TestWords.words.getCurrent());\n TestInput.incrementKeypressErrors();\n const cil = TestInput.input.current.length;\n if (cil <= TestWords.words.getCurrent().length) {\n if (cil >= TestInput.corrected.current.length) {\n TestInput.corrected.current += '_';\n } else {\n TestInput.corrected.current =\n TestInput.corrected.current.substring(0, cil) +\n '_' +\n TestInput.corrected.current.substring(cil + 1);\n }\n }\n if (Config.stopOnError != 'off') {\n if (Config.difficulty == 'expert' || Config.difficulty == 'master') {\n //failed due to diff when pressing space\n TestLogic.fail('difficulty');\n return;\n }\n if (Config.stopOnError == 'word') {\n dontInsertSpace = false;\n Replay.addReplayEvent('incorrectLetter', '_');\n TestUI.updateWordElement(true);\n Caret.updatePosition();\n }\n return;\n }\n TestInput.input.pushHistory();\n TestUI.highlightBadWord(TestUI.currentWordElementIndex, !Config.blindMode);\n TestWords.words.increaseCurrentIndex();\n TestUI.setCurrentWordElementIndex(TestUI.currentWordElementIndex + 1);\n TestUI.updateActiveElement();\n Caret.updatePosition();\n TestInput.incrementKeypressCount();\n TestInput.pushKeypressWord(TestWords.words.currentIndex);\n TestInput.updateLastKeypress();\n if (Config.difficulty == 'expert' || Config.difficulty == 'master') {\n TestLogic.fail('difficulty');\n return;\n } else if (TestWords.words.currentIndex == TestWords.words.length) {\n //submitted last word that is incorrect\n TestLogic.finish();\n return;\n }\n Replay.addReplayEvent('submitErrorWord');\n }\n\n let wordLength;\n if (Config.mode === 'zen') {\n wordLength = TestInput.input.current.length;\n } else {\n wordLength = TestWords.words.getCurrent().length;\n }\n\n const flex = Misc.whorf(Config.minBurstCustomSpeed, wordLength);\n\n TestInput.corrected.pushHistory();\n\n if (\n !Config.showAllLines ||\n Config.mode == 'time' ||\n (CustomText.isWordRandom && CustomText.word == 0) ||\n CustomText.isTimeRandom\n ) {\n const currentTop = Math.floor(\n document.querySelectorAll<HTMLElement>('#words .word')[TestUI.currentWordElementIndex - 1]\n .offsetTop\n );\n let nextTop;\n try {\n nextTop = Math.floor(\n document.querySelectorAll<HTMLElement>('#words .word')[TestUI.currentWordElementIndex]\n .offsetTop\n );\n } catch (e) {\n nextTop = 0;\n }\n\n if (nextTop > currentTop && !TestUI.lineTransition) {\n TestUI.lineJump(currentTop);\n }\n } //end of line wrap\n\n if (\n Config.mode === 'words' ||\n Config.mode === 'custom' ||\n Config.mode === 'quote' ||\n Config.mode === 'zen'\n ) {\n TimerProgress.update();\n }\n if (\n Config.mode == 'time' ||\n Config.mode == 'words' ||\n Config.mode == 'custom' ||\n Config.mode == 'quote'\n ) {\n TestLogic.addWord();\n }\n}\n\nfunction isCharCorrect(char: string, charIndex: number): boolean {\n if (!correctShiftUsed) return false;\n\n if (Config.mode == 'zen') {\n return true;\n }\n\n const originalChar = TestWords.words.getCurrent()[charIndex];\n\n if (originalChar == char) {\n return true;\n }\n\n if (Config.language.split('_')[0] == 'russian') {\n if ((char === 'е' || char === 'e') && originalChar == 'ё') {\n return true;\n }\n if (char === 'ё' && (originalChar == 'е' || originalChar === 'e')) {\n return true;\n }\n }\n\n if (Config.funbox === 'arrows') {\n if ((char === 'w' || char === 'ArrowUp') && originalChar == '↑') {\n return true;\n }\n if ((char === 's' || char === 'ArrowDown') && originalChar == '↓') {\n return true;\n }\n if ((char === 'a' || char === 'ArrowLeft') && originalChar == '←') {\n return true;\n }\n if ((char === 'd' || char === 'ArrowRight') && originalChar == '→') {\n return true;\n }\n }\n\n if (\n (char === `’` || char === '‘' || char === \"'\") &&\n (originalChar == `’` || originalChar === '‘' || originalChar === \"'\")\n ) {\n return true;\n }\n\n if (\n (char === `\"` || char === '”' || char == '“' || char === '„') &&\n (originalChar == `\"` || originalChar === '”' || originalChar === '“' || originalChar === '„')\n ) {\n return true;\n }\n\n if (\n (char === '–' || char === '—' || char == '-') &&\n (originalChar == '-' || originalChar === '–' || originalChar === '—')\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction handleChar(char: string, charIndex: number): void {\n if (TestUI.resultCalculating || TestUI.resultVisible) {\n return;\n }\n\n if (char === '…') {\n for (let i = 0; i < 3; i++) {\n handleChar('.', charIndex + i);\n }\n\n return;\n }\n\n if (char === '\\n' && (Config.funbox === '58008' || Config.funbox === 'tenKeyMode')) {\n char = ' ';\n }\n\n if (char !== '\\n' && char !== '\\t' && /\\s/.test(char)) {\n if (Config.funbox === 'nospace' || Config.funbox === 'arrows') return;\n handleSpace();\n\n //insert space for expert and master or strict space,\n //or for stop on error set to word,\n //otherwise dont do anything\n if (\n Config.difficulty !== 'normal' ||\n (Config.strictSpace && Config.mode !== 'zen') ||\n Config.stopOnError === 'word'\n ) {\n if (dontInsertSpace) {\n dontInsertSpace = false;\n return;\n }\n } else {\n return;\n }\n }\n\n if (Config.mode !== 'zen' && TestWords.words.getCurrent()[charIndex] !== '\\n' && char === '\\n') {\n return;\n }\n\n //start the test\n if (!TestActive.get() && !TestLogic.startTest()) {\n return;\n }\n\n Focus.set(true);\n Caret.stopAnimation();\n\n const thisCharCorrect = isCharCorrect(char, charIndex);\n\n if (thisCharCorrect && Config.mode !== 'zen') {\n char = TestWords.words.getCurrent().charAt(charIndex);\n }\n\n if (!thisCharCorrect && char === '\\n') {\n if (TestInput.input.current === '') return;\n char = ' ';\n }\n\n if (TestInput.input.current === '') {\n TestInput.setBurstStart(performance.now());\n }\n\n const resultingWord =\n TestInput.input.current.substring(0, charIndex) +\n char +\n TestInput.input.current.substring(charIndex + 1);\n\n // If a trailing composed char is used, ignore it when counting accuracy\n if (\n !thisCharCorrect &&\n Misc.trailingComposeChars.test(resultingWord) &&\n CompositionState.getComposing()\n ) {\n TestInput.input.current = resultingWord;\n TestUI.updateWordElement();\n Caret.updatePosition();\n return;\n }\n\n // MonkeyPower.addPower(thisCharCorrect);\n TestInput.incrementAccuracy(thisCharCorrect);\n\n if (!thisCharCorrect) {\n TestInput.incrementKeypressErrors();\n TestInput.pushMissedWord(TestWords.words.getCurrent());\n }\n\n WeakSpot.updateScore(\n Config.mode === 'zen' ? char : TestWords.words.getCurrent()[charIndex],\n thisCharCorrect\n );\n\n if (!correctShiftUsed && Config.difficulty != 'master') return;\n\n //update current corrected version. if its empty then add the current char. if its not then replace the last character with the currently pressed one / add it\n if (TestInput.corrected.current === '') {\n TestInput.corrected.current += resultingWord;\n } else {\n if (charIndex >= TestInput.corrected.current.length) {\n TestInput.corrected.current += char;\n } else if (!thisCharCorrect) {\n TestInput.corrected.current =\n TestInput.corrected.current.substring(0, charIndex) +\n char +\n TestInput.corrected.current.substring(charIndex + 1);\n }\n }\n\n TestInput.incrementKeypressCount();\n TestInput.updateLastKeypress();\n TestInput.pushKeypressWord(TestWords.words.currentIndex);\n\n if (Config.difficulty !== 'master' && Config.stopOnError == 'letter' && !thisCharCorrect) {\n return;\n }\n\n Replay.addReplayEvent(thisCharCorrect ? 'correctLetter' : 'incorrectLetter', char);\n\n //update the active word top, but only once\n if (TestInput.input.current.length === 1 && TestWords.words.currentIndex === 0) {\n TestUI.setActiveWordTop((<HTMLElement>document.querySelector('#words .active'))?.offsetTop);\n }\n\n //max length of the input is 20 unless in zen mode then its 30\n if (\n (Config.mode === 'zen' && charIndex < 30) ||\n (Config.mode !== 'zen' && charIndex < TestWords.words.getCurrent().length + 20)\n ) {\n TestInput.input.current = resultingWord;\n }\n\n if (!thisCharCorrect && Config.difficulty == 'master') {\n TestInput.input.pushHistory();\n TestInput.corrected.pushHistory();\n TestLogic.fail('difficulty');\n return;\n }\n\n if (Config.mode != 'zen') {\n //not applicable to zen mode\n //auto stop the test if the last word is correct\n const currentWord = TestWords.words.getCurrent();\n const lastindex = TestWords.words.currentIndex;\n if (\n (currentWord == TestInput.input.current ||\n (Config.quickEnd &&\n currentWord.length == TestInput.input.current.length &&\n Config.stopOnError == 'off')) &&\n lastindex == TestWords.words.length - 1\n ) {\n TestInput.input.pushHistory();\n TestInput.corrected.pushHistory();\n TestLogic.finish();\n return;\n }\n }\n\n const activeWordTopBeforeJump = document.querySelector<HTMLElement>('#words .word.active')\n ?.offsetTop as number;\n TestUI.updateWordElement();\n\n if (!Config.hideExtraLetters) {\n const newActiveTop = document.querySelector<HTMLElement>('#words .word.active')\n ?.offsetTop as number;\n //stop the word jump by slicing off the last character, update word again\n if (\n activeWordTopBeforeJump < newActiveTop &&\n !TestUI.lineTransition &&\n TestInput.input.current.length > 1\n ) {\n if (Config.mode == 'zen') {\n const currentTop = Math.floor(\n document.querySelectorAll<HTMLElement>('#words .word')[TestUI.currentWordElementIndex - 1]\n ?.offsetTop\n ) as number;\n if (!Config.showAllLines) TestUI.lineJump(currentTop);\n } else {\n TestInput.input.current = TestInput.input.current.slice(0, -1);\n TestUI.updateWordElement();\n }\n }\n }\n\n //simulate space press in nospace funbox\n if (\n ((Config.funbox === 'nospace' || Config.funbox === 'arrows') &&\n TestInput.input.current.length === TestWords.words.getCurrent().length) ||\n (char === '\\n' && thisCharCorrect)\n ) {\n handleSpace();\n }\n\n if (char !== '\\n') {\n Caret.updatePosition();\n }\n}\n\nfunction handleTab(\n event: { preventDefault: () => void; shiftKey: any },\n popupVisible: boolean\n): void {\n if (TestUI.resultCalculating) {\n event.preventDefault();\n return;\n }\n\n let shouldInsertTabCharacter = false;\n\n if ((Config.mode == 'zen' && !event.shiftKey) || (TestWords.hasTab && !event.shiftKey)) {\n shouldInsertTabCharacter = true;\n }\n}\n\nexport function setWordsInputElement(wordsElement: HTMLInputElement) {\n wordsInput = wordsElement;\n}\n\nexport async function inputKeydown(event: any, wordsFocused: boolean) {\n const allowTyping = !TestUI.resultVisible && (wordsFocused || event.key !== 'Enter');\n\n //no space for tenKeyMode\n if (Config.funbox === 'tenKeyMode' && event.keyCode === 32) {\n event.preventDefault();\n }\n\n if (allowTyping && !wordsFocused && event.key !== 'Enter') {\n TestUI.focusWords();\n if (Config.showOutOfFocusWarning) {\n event.preventDefault();\n }\n }\n\n //tab\n if (event.key == 'Tab') {\n handleTab(event, false);\n }\n\n if (!allowTyping) return;\n\n if (!event.isTrusted || TestUI.testRestarting) {\n event.preventDefault();\n return;\n }\n\n if (TestInput.spacingDebug) {\n console.log(\n 'spacing debug',\n 'keypress',\n event.key,\n 'length',\n TestInput.keypressTimings.spacing.array.length\n );\n }\n TestInput.recordKeypressSpacing();\n TestInput.setKeypressDuration(performance.now());\n TestInput.setKeypressNotAfk();\n\n //blocking firefox from going back in history with backspace\n if (event.key === 'Backspace') {\n const t = /INPUT|SELECT|TEXTAREA/i;\n if (!t.test((event.target as unknown as Element).tagName)) {\n event.preventDefault();\n }\n\n if (Config.confidenceMode === 'max') {\n event.preventDefault();\n return;\n }\n }\n\n if (Config.funbox !== 'arrows' && /Arrow/i.test(event.key)) {\n event.preventDefault();\n return;\n }\n\n if (event.key === 'Backspace' && TestInput.input.current.length === 0) {\n backspaceToPrevious();\n if (TestInput.input.current) {\n setWordsInput(' ' + TestInput.input.current + ' ');\n }\n }\n\n if (event.key === 'Enter') {\n if (event.shiftKey && Config.mode == 'zen') {\n TestLogic.finish();\n } else if (\n event.shiftKey &&\n ((Config.mode == 'time' && Config.time === 0) ||\n (Config.mode == 'words' && Config.words === 0))\n ) {\n TestInput.setBailout(true);\n TestLogic.finish();\n } else {\n handleChar('\\n', TestInput.input.current.length);\n setWordsInput(' ' + TestInput.input.current);\n }\n }\n\n //show dead keys\n if (event.key === 'Dead' && !CompositionState.getComposing()) {\n const word = document.querySelector<HTMLElement>('#words .word.active');\n const len = TestInput.input.current.length; // have to do this because prettier wraps the line and causes an error\n\n // Check to see if the letter actually exists to toggle it as dead\n const deadLetter = word?.querySelectorAll('letter')[len];\n if (deadLetter) {\n deadLetter.classList.toggle('dead');\n }\n }\n\n if (Config.funbox === 'arrows') {\n let char = event.key;\n if (['ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'].includes(char)) {\n if (char === 'ArrowLeft') char = 'a';\n if (char === 'ArrowRight') char = 'd';\n if (char === 'ArrowDown') char = 's';\n if (char === 'ArrowUp') char = 'w';\n event.preventDefault();\n handleChar(char, TestInput.input.current.length);\n updateUI();\n setWordsInput(' ' + TestInput.input.current);\n }\n }\n}\n\nexport function wordsInputKeyup(event: any) {\n if (!event.isTrusted || TestUI.testRestarting) {\n event.preventDefault();\n return;\n }\n\n if (TestUI.resultVisible) return;\n const now = performance.now();\n if (TestInput.keypressTimings.duration.current !== -1) {\n const diff = Math.abs(TestInput.keypressTimings.duration.current - now);\n TestInput.pushKeypressDuration(diff);\n }\n TestInput.setKeypressDuration(now);\n}\n\nexport function wordsInputBeforeinput(event: any) {\n if (!event.isTrusted) return;\n if ((event.target as HTMLInputElement).value === '') {\n (event.target as HTMLInputElement).value = ' ';\n }\n}\n\nexport function wordsInputInput(event: any) {\n if (!event.isTrusted || TestUI.testRestarting) {\n (event.target as HTMLInputElement).value = ' ';\n return;\n }\n\n TestInput.setKeypressNotAfk();\n\n const realInputValue = (event.target as HTMLInputElement).value.normalize();\n const inputValue = realInputValue.slice(1);\n\n // input will be modified even with the preventDefault() in\n // beforeinput/keydown if it's part of a compose sequence. this undoes\n // the effects of that and takes the input out of compose mode.\n if (Config.layout !== 'default' && inputValue.length >= TestInput.input.current.length) {\n setWordsInput(' ' + TestInput.input.current);\n return;\n }\n\n if (realInputValue.length === 0 && TestInput.input.current.length === 0) {\n // fallback for when no Backspace keydown event (mobile)\n backspaceToPrevious();\n } else if (inputValue.length < TestInput.input.current.length) {\n TestInput.input.current = inputValue;\n TestUI.updateWordElement();\n Caret.updatePosition();\n if (!CompositionState.getComposing()) {\n Replay.addReplayEvent('setLetterIndex', TestInput.input.current.length);\n }\n } else if (inputValue !== TestInput.input.current) {\n let diffStart = 0;\n while (inputValue[diffStart] === TestInput.input.current[diffStart]) {\n diffStart++;\n }\n\n for (let i = diffStart; i < inputValue.length; i++) {\n handleChar(inputValue[i], i);\n }\n }\n\n setWordsInput(' ' + TestInput.input.current);\n updateUI();\n\n const statebefore = CompositionState.getComposing();\n setTimeout(() => {\n // checking composition state during the input event and on the next loop\n // this is done because some browsers (e.g. Chrome) will fire the input\n // event before the compositionend event.\n // this ensures the UI is correct\n\n const stateafter = CompositionState.getComposing();\n if (statebefore !== stateafter) {\n TestUI.updateWordElement();\n }\n\n // force caret at end of input\n // doing it on next cycle because Chromium on Android won't let me edit\n // the selection inside the input event\n if (\n (event.target as HTMLInputElement).selectionStart !==\n (event.target as HTMLInputElement).value.length &&\n (!Misc.trailingComposeChars.test((event.target as HTMLInputElement).value) ||\n ((event.target as HTMLInputElement).selectionStart ?? 0) <\n (event.target as HTMLInputElement).value.search(Misc.trailingComposeChars))\n ) {\n (event.target as HTMLInputElement).selectionStart = (\n event.target as HTMLInputElement\n ).selectionEnd = (event.target as HTMLInputElement).value.length;\n }\n }, 0);\n}\n\nexport function wordsInputFocus(event: { target: HTMLInputElement }) {\n (event.target as HTMLInputElement).selectionStart = (\n event.target as HTMLInputElement\n ).selectionEnd = (event.target as HTMLInputElement).value.length;\n}\n\nexport function wordsInputCopy(event: { preventDefault: () => void }) {\n event.preventDefault();\n}\n\nexport function wordsInputPaste(event: { preventDefault: () => void }) {\n event.preventDefault();\n}\n\n// Composing events\nexport function wordsInputCompositionstart() {\n CompositionState.setComposing(true);\n CompositionState.setStartPos(TestInput.input.current.length);\n}\n\nexport function wordsInputCompositionend() {\n CompositionState.setComposing(false);\n}\n","import { BehaviorSubject } from 'rxjs';\nimport Config from '../../helpers/config';\nexport let capsState = false;\n\nexport const showCaps = new BehaviorSubject<boolean>(false);\n\nfunction show(): void {\n showCaps.next(true);\n}\n\nfunction hide(): void {\n showCaps.next(false);\n}\n\nexport function capsKeydown(event: KeyboardEvent) {\n if (event.getModifierState('CapsLock')) {\n capsState = true;\n } else {\n capsState = false;\n }\n\n try {\n if (Config.capsLockWarning && capsState) {\n show();\n } else {\n hide();\n }\n } catch {\n console.error('Error showing caps warning');\n }\n}\n\nexport function capsKeyup(event: KeyboardEvent) {\n // filthy fix but optional chaining refuses to work\n if (event.getModifierState('CapsLock')) {\n capsState = true;\n } else {\n capsState = false;\n }\n\n try {\n if (Config.capsLockWarning && capsState) {\n show();\n } else {\n hide();\n }\n } catch {\n console.error('Error showing caps warning');\n }\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport {\n setCustomTGQuotes,\n setFunbox,\n setNumbers,\n setPunctuation,\n setTestVersionForSentences,\n setTime,\n} from '../../helpers/config';\nimport {\n inputKeydown,\n setWordsInputElement,\n wordsInputBeforeinput,\n wordsInputCompositionend,\n wordsInputCompositionstart,\n wordsInputCopy,\n wordsInputFocus,\n wordsInputInput,\n wordsInputKeyup,\n wordsInputPaste,\n} from '../../helpers/controllers/input-controller';\nimport { capsKeydown, capsKeyup, showCaps } from '../../helpers/test/caps-warning';\nimport { caretAnimation, caretLeft, caretShow, caretTop } from '../../helpers/test/caret';\nimport { mousemove, setCapsWarningElement, setMiddleElement } from '../../helpers/test/focus';\nimport { outOfFocusShow } from '../../helpers/test/out-of-focus';\nimport { getReplayExport } from '../../helpers/test/replay';\nimport * as TestLogic from '../../helpers/test/test-logic';\nimport * as TestUI from '../../helpers/test/test-ui';\nimport {\n setWordsElement,\n setWordsInputElementTestUI,\n setWordsWrapperElement,\n wordsInputFocusOut,\n wordsInputFocusTestUI,\n wordsWrapperClick,\n} from '../../helpers/test/test-ui';\nimport { timeLeft } from '../../helpers/test/timer-progress';\nimport { QuoteNetworkError$ } from '../../utils/misc';\nimport * as TestActive from '../../helpers/states/test-active';\nimport quoteController from '../../helpers/controllers/quotes-controller';\nimport { disableCheckIfTimeIsUp } from '../../helpers/test/test-timer';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'tgo-typing-test',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tgo-typing-test.component.html',\n styleUrl: '../../styles/index.scss',\n animations: [\n trigger('fadeIn', [\n state('show', style({opacity: 1})),\n state('hide', style({opacity: 0})),\n transition('show => hide', [\n animate('125ms')\n ]),\n transition('hide => show', [\n animate('125ms')\n ])\n ]),\n trigger('updatePositionCaret', [\n state('true',\n style({\n top: '{{caretTopPos}}px',\n left: '{{caretLeftPos}}px'\n }),\n {\n params: {caretTopPos: 0, caretLeftPos: 0}\n }\n ),\n state('false',\n style({\n top: '{{caretTopPos}}px',\n left: '{{caretLeftPos}}px'\n }),\n {\n params: {caretTopPos: 0, caretLeftPos: 0}\n }\n ),\n transition('true => false', [\n animate('100ms')\n ]),\n transition('false => true', [\n animate('100ms')\n ])\n ])\n ]\n})\nexport class TgoTypingTestComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n showCaps$: BehaviorSubject<boolean>;\n showCaret$: BehaviorSubject<boolean>;\n caretAnimation$: BehaviorSubject<string>;\n showTimer$: BehaviorSubject<boolean>;\n timeLeft$: BehaviorSubject<string>;\n caretLeft = 0;\n caretTop = 0;\n state = 'true';\n outOfFocusShow$: BehaviorSubject<boolean>;\n\n subscriptions: Subscription[] = [];\n replayIntervalID: any;\n\n @Output() resultEvent = new EventEmitter<any>();\n @Output() replayExport = new EventEmitter<any>();\n @Output() errorEvent = new EventEmitter<string>();\n\n @Input() time = 180;\n @Input() punctuation = false;\n @Input() numbers = false;\n @Input() funbox = 'none';\n @Input() customTGQuotes = false;\n @Input() showMiniTimerAndLiveWpm = true;\n @Input() restartTest = false;\n @Input() testVersion = 1;\n @Input() testExpiration$?: Observable<void>;\n\n constructor() {\n this.showCaps$ = showCaps;\n this.showCaret$ = caretShow;\n this.caretAnimation$ = caretAnimation;\n this.showTimer$ = TestLogic.startTestSubject;\n this.outOfFocusShow$ = outOfFocusShow;\n this.timeLeft$ = timeLeft;\n }\n\n @ViewChild('wordsInput') wordsInput!: ElementRef;\n @ViewChild('wordsWrapper') wordsWrapper!: ElementRef;\n @ViewChild('words') words!: ElementRef;\n @ViewChild('middle') middle!: ElementRef;\n @ViewChild('capsWarning') capsWarning!: ElementRef;\n\n ngOnInit() {\n TestUI.setResultCalculating(false);\n TestUI.setResultVisible(false);\n this.caretLeft = 0;\n this.caretTop = 0;\n setTime(this.time);\n setPunctuation(this.punctuation);\n setNumbers(this.numbers);\n setFunbox(this.funbox);\n setCustomTGQuotes(this.customTGQuotes);\n setTestVersionForSentences(this.testVersion);\n const caretLeftSub = caretLeft.subscribe(res => {\n if (res !== this.caretLeft) {\n this.caretLeft = res;\n if (this.state == 'true') {\n this.state = 'false';\n } else {\n this.state = 'true';\n }\n }\n });\n\n const caretTopSub = caretTop.subscribe(res => {\n this.caretTop = res;\n });\n\n const testResultSub = TestLogic.resultSub.subscribe(res => {\n this.replayExport.emit(getReplayExport());\n this.resultEvent.emit(res);\n });\n\n const errorSub = QuoteNetworkError$.subscribe({\n next: e => {\n if (!e) return;\n this.errorEvent.emit(e);\n TestLogic.stopTest();\n },\n });\n\n this.replayIntervalID = setInterval(() => {\n this.replayExport.emit(getReplayExport());\n }, 20000);\n\n this.subscriptions.push(caretLeftSub, caretTopSub, testResultSub, errorSub);\n\n if (this.testExpiration$) {\n disableCheckIfTimeIsUp();\n this.subscriptions.push(\n this.testExpiration$.subscribe(() => {\n TestLogic.finish();\n })\n );\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['restartTest']) {\n if (!changes['restartTest'].isFirstChange()) {\n this.restart();\n }\n }\n}\n\n wordsInputKeyup(event: any) {\n wordsInputKeyup(event);\n }\n\n wordsInputBeforeinput(event: any) {\n wordsInputBeforeinput(event);\n }\n\n wordsInputInput(event: any) {\n wordsInputInput(event);\n }\n\n wordsInputFocus(event: any) {\n if (!TestActive.get()) return;\n wordsInputFocus(event);\n wordsInputFocusTestUI();\n }\n\n wordsInputFocusOut() {\n if (!TestActive.get()) return;\n wordsInputFocusOut();\n }\n\n wordsInputCopy(event: any) {\n wordsInputCopy(event);\n }\n\n wordsInputPaste(event: any) {\n wordsInputPaste(event);\n }\n\n wordsInputCompositionstart() {\n wordsInputCompositionstart();\n }\n\n wordsInputCompositionend() {\n wordsInputCompositionend();\n }\n\n wordsWrapperClick() {\n wordsWrapperClick();\n }\n\n ngAfterViewInit() {\n setWordsInputElement(this.wordsInput.nativeElement);\n setWordsInputElementTestUI(this.wordsInput.nativeElement);\n TestLogic.setWordsInputElementTestLogic(this.wordsInput.nativeElement);\n setWordsWrapperElement(this.wordsWrapper.nativeElement);\n setWordsElement(this.words.nativeElement);\n setMiddleElement(this.middle.nativeElement);\n setCapsWarningElement(this.capsWarning.nativeElement);\n TestLogic.restart();\n }\n\n restart() {\n TestUI.setResultCalculating(false);\n TestUI.setResultVisible(false);\n this.caretLeft = 0;\n this.caretTop = 0;\n TestLogic.restart();\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardDown(event: KeyboardEvent) {\n capsKeydown(event);\n inputKeydown(event, document.activeElement === this.wordsInput.nativeElement);\n }\n\n @HostListener('document:keyup', ['$event'])\n handleKeyboardUp(event: KeyboardEvent) {\n capsKeyup(event);\n }\n\n @HostListener('document:mousemove', ['$event'])\n handleMouseMove(event: MouseEvent) {\n mousemove(event);\n }\n\n ngOnDestroy(): void {\n TestLogic.stopTest();\n quoteController.resetQuotes();\n clearInterval(this.replayIntervalID);\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n}\n","<div id=\"centerContent\">\n <div id=\"middle\" #middle>\n <div class=\"page pageTest active\">\n <div id=\"typingTest\">\n <div id=\"capsWarning\" [ngClass]=\"{ hidden: (showCaps$ | async) === false }\" #capsWarning>\n Caps Lock\n </div>\n <div id=\"memoryTimer\">Time left to memorise all words: 0s</div>\n <div id=\"testModesNotice\"></div>\n <input\n id=\"wordsInput\"\n class=\"\"\n tabindex=\"0\"\n type=\"text\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n data-gramm=\"false\"\n data-gramm_editor=\"false\"\n data-enable-grammarly=\"false\"\n list=\"autocompleteOff\"\n (keyup)=\"wordsInputKeyup($event)\"\n (beforeinput)=\"wordsInputBeforeinput($event)\"\n (input)=\"wordsInputInput($event)\"\n (focus)=\"wordsInputFocus($event)\"\n (focusout)=\"wordsInputFocusOut()\"\n (copy)=\"wordsInputCopy($event)\"\n (paste)=\"wordsInputPaste($event)\"\n (compositionstart)=\"wordsInputCompositionstart()\"\n (compositionend)=\"wordsInputCompositionend()\"\n #wordsInput\n />\n @if (showMiniTimerAndLiveWpm) {\n <div id=\"miniTimerAndLiveWpm\" class=\"timerMain size2\">\n <div class=\"time\" [@fadeIn]=\"(showTimer$ | async) ? 'show' : 'hide'\">\n {{ timeLeft$ | async }}\n </div>\n <div class=\"wpm hidden\">60</div>\n <div class=\"acc hidden\">100%</div>\n <div class=\"burst hidden\">1</div>\n </div>\n }\n \n @if (outOfFocusShow$ | async) {\n <div class=\"outOfFocusWarning\">\n Click or press any key to focus\n </div>\n }\n \n @if (errorEvent | async; as errorMessage) {\n <div class=\"errorWarning\"> \n {{ errorMessage }} Reload the page or <a href=\"https://candidates.testgorilla.com/hc/en-us/requests/new\" target=\"_blank\">contact support</a>.\n </div>\n }\n \n <div id=\"wordsWrapper\" translate=\"no\" #wordsWrapper (click)=\"wordsWrapperClick()\">\n <div id=\"paceCaret\" class=\"default size2 hidden\"></div>\n @if (showCaret$ | async) {\n <div id=\"caret\" [@updatePositionCaret]=\"{\n value: state,\n params: { caretTopPos: caretTop, caretLeftPos: caretLeft }\n }\" \n [ngStyle]=\"{ 'animation-name': (caretAnimation$ | async) }\" class=\"default size2\">\n </div>\n }\n <div id=\"words\" class=\"size2\" #words [ngClass]=\"{ blurred: (outOfFocusShow$ | async) }\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n ","import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { setFunbox } from '../../helpers/config';\nimport {\n initializeReplayPrompt,\n loadOldReplay,\n playpauseReplayButtonClick,\n playReplay,\n replayGetWordsList,\n setReplayData,\n setReplayStopwatch,\n setToggleButton,\n} from '../../helpers/test/replay';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'tgo-typing-replay-input',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tgo-typing-replay-input.component.html',\n styleUrls: ['../../styles/index.scss'],\n})\nexport class TgoTypingReplayInputComponent implements OnInit, AfterViewInit {\n @Input() replayExport: any;\n @Input() funbox = 'none';\n replayExportData: any;\n\n @ViewChild('toggleButton') toggleButton!: ElementRef;\n @ViewChild('replayStopwatch') replayStopwatch!: ElementRef;\n\n ngOnInit(): void {\n this.replayExportData = JSON.parse(this.replayExport);\n setFunbox(this.funbox);\n replayGetWordsList(this.replayExportData['wordsList']);\n setReplayData(this.replayExportData['replayData']);\n }\n\n ngAfterViewInit() {\n setToggleButton(this.toggleButton.nativeElement);\n setReplayStopwatch(this.replayStopwatch.nativeElement);\n initializeReplayPrompt();\n loadOldReplay();\n playReplay();\n }\n\n playpauseReplayButtonClick() {\n playpauseReplayButtonClick();\n }\n}\n","<div id=\"centerContent\">\n <div id=\"middle\" #middle>\n <div class=\"page pageTest active\">\n <div id=\"result\" tabindex=\"0\">\n <div class=\"bottom\" style=\"grid-column: 1/3\">\n <div id=\"resultReplay\">\n <div class=\"title\">\n Watch replay\n <span\n id=\"playpauseReplayButton\"\n class=\"textButton\"\n aria-label=\"Start replay\"\n data-balloon-pos=\"up\"\n style=\"display: inline-block\"\n (click)=\"playpauseReplayButtonClick()\"\n #toggleButton\n >\n <div id=\"key\" class=\"Play\" #playpauseelem>{{ playpauseelem.className }}</div>\n </span>\n <p id=\"replayStopwatch\" #replayStopwatch>0s</p>\n </div>\n <div id=\"wordsWrapper\">\n <div id=\"replayWords\" class=\"words\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["setTime","subscribers","subscribe","dispatch","state","set","reset","get","words","TestWords.words","restart","clear","Config","SlowTimer.get","hide","TestInput.input","Misc.getCurrentLanguage","show","Misc.clearTimeouts","wordsInput","Caret.updatePosition","addWord","input","Misc.trailingComposeChars","CompositionState.getComposing","CompositionState.getStartPos","OutOfFocus.hide","Caret.show","OutOfFocus.show","Caret.hide","time","start","TestInput.wpmHistory","TestInput.burstHistory","TestInput.keypressPerSecond","TestInput.currentKeypress","TestInput.lastKeypress","TestInput.currentBurstStart","TestInput.missedWords","TestInput.accuracy","TestInput.keypressTimings","Misc.stdDev","TestInput.bailout","Misc.getLastChar","Misc.roundTo2","TestInput.rawHistory","Caret.stopAnimation","Caret.startAnimation","Time.get","Misc.secondsToString","Time.set","CustomText.isTimeRandom","TimerProgress.update","TestStats.calculateWpmAndRaw","TestInput.pushToWpmHistory","TestInput.pushToRawHistory","TestStats.calculateAccuracy","TestInput.pushKeypressesToHistory","SlowTimer.clear","TimerEvent.dispatch","CustomText.time","TestInput.corrected","Time.increment","TestStats.start","SlowTimer.set","TestActive.get","Misc.getNumbers","Misc.setCharAt","Misc.randomIntFromRange","Misc.randomElementFromArray","Misc.capitalizeFirstLetterOfEachWord","EnglishPunctuation.check","EnglishPunctuation.replace","PageTransition.get","TestActive.set","Replay.startReplayRecording","Replay.replayGetWordsList","TestInput.resetKeypressTimings","TestTimer.clear","TestStats.setStart","TestTimer.start","TestUI.testRestarting","TestUI.resultCalculating","ActivePage.get","TestUI.resultVisible","ManualRestart.get","TestWords.hasTab","Misc.canQuickRestart","TestWords.randomQuote","TestState.isRepeated","TestStats.calculateTestSeconds","TestStats.calculateAfkSeconds","TestStats.incrementIncompleteSeconds","TestStats.incrementRestartCount","ManualRestart.reset","TestStats.restart","TestInput.restart","TestInput.setBailout","TestUI.reset","TestUI.setResultVisible","PageTransition.set","TestUI.setTestRestarting","Focus.set","TestUI.focusWords","TestState.setRepeated","TestState.setPaceRepeat","TestWords.setHasTab","TestUI.showWords","Misc.getGibberish","Misc.getArrows","Misc.convertNumberToArabicIndic","Misc.getSpecials","Misc.getASCII","WeakSpot.getWord","randomQuote","QuotesController","TestWords.setRandomQuote","CustomText.isWordRandom","CustomText.text","TestUI.setCurrentWordElementIndex","Misc.getLanguage","Misc.emitQuoteNetworkError","CustomText.word","Wordset.withWords","TestUI.addWord","TestStats.restartCount","TestStats.incompleteSeconds","TestStats.calculateStats","TestStats.setLastSecondNotRound","TestStats.setLastTestWpm","TestStats.lastSecondNotRound","Misc.mean","Misc.kogasa","Misc.smooth","Misc.getMode2","TestInput.recordKeypressSpacing","TestUI.setResultCalculating","TestStats.setEnd","TestStats.calculateBurst","TestInput.pushBurstToHistory","TestStats.removeAfkData","TestStats.setInvalid","TestStats.setLastResult","TestInput.setKeypressTimingsTooLong","TestStats.resetIncomplete","TimerEvent.subscribe","TestUI.currentWordElementIndex","TestUI.updateActiveElement","TestUI.updateWordElement","Replay.addReplayEvent","TestInput.incrementAccuracy","TestInput.incrementKeypressCount","TestInput.pushKeypressWord","TestInput.pushMissedWord","TestInput.incrementKeypressErrors","TestLogic.fail","TestUI.highlightBadWord","TestInput.updateLastKeypress","TestLogic.finish","Misc.whorf","TestUI.lineTransition","TestUI.lineJump","TestLogic.addWord","TestLogic.startTest","TestInput.setBurstStart","WeakSpot.updateScore","TestUI.setActiveWordTop","TestInput.spacingDebug","TestInput.setKeypressDuration","TestInput.setKeypressNotAfk","TestInput.pushKeypressDuration","CompositionState.setComposing","CompositionState.setStartPos","TestLogic.startTestSubject","TestLogic.resultSub","TestLogic.stopTest","TestLogic.setWordsInputElementTestLogic","TestLogic.restart","transition","Input"],"mappings":"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"}
|