From acce544b19d5bf8a5ef091ae66ea1202f61af963 Mon Sep 17 00:00:00 2001 From: Miodec Date: Mon, 5 Feb 2024 13:16:05 +0100 Subject: [PATCH] refactor: add util functions for handling language strings --- frontend/src/ts/account/result-filters.ts | 5 ++--- .../src/ts/commandline/lists/languages.ts | 7 +++++-- .../src/ts/controllers/quotes-controller.ts | 20 +++++++++---------- frontend/src/ts/elements/modes-notice.ts | 14 ++++--------- frontend/src/ts/pages/settings.ts | 2 +- frontend/src/ts/popups/pb-tables-popup.ts | 4 ++-- frontend/src/ts/test/test-logic.ts | 2 +- frontend/src/ts/test/test-ui.ts | 8 +++++--- frontend/src/ts/test/words-generator.ts | 2 +- frontend/src/ts/utils/misc.ts | 17 ++++++++++++++++ 10 files changed, 48 insertions(+), 33 deletions(-) diff --git a/frontend/src/ts/account/result-filters.ts b/frontend/src/ts/account/result-filters.ts index 602abe35c..7241f8ac4 100644 --- a/frontend/src/ts/account/result-filters.ts +++ b/frontend/src/ts/account/result-filters.ts @@ -652,9 +652,8 @@ export async function appendButtons(): Promise { if (languageList) { let html = ""; for (const language of languageList) { - html += ``; } const el = document.querySelector( diff --git a/frontend/src/ts/commandline/lists/languages.ts b/frontend/src/ts/commandline/lists/languages.ts index 3559055e2..52c32db48 100644 --- a/frontend/src/ts/commandline/lists/languages.ts +++ b/frontend/src/ts/commandline/lists/languages.ts @@ -1,5 +1,8 @@ import * as UpdateConfig from "../../config"; -import { capitalizeFirstLetterOfEachWord } from "../../utils/misc"; +import { + capitalizeFirstLetterOfEachWord, + getLanguageDisplayString, +} from "../../utils/misc"; const subgroup: MonkeyTypes.CommandsSubgroup = { title: "Language...", @@ -26,7 +29,7 @@ function update(languages: string[]): void { languages.forEach((language) => { subgroup.list.push({ id: "changeLanguage" + capitalizeFirstLetterOfEachWord(language), - display: language.replace(/_/g, " "), + display: getLanguageDisplayString(language), configValue: language, exec: (): void => { UpdateConfig.setLanguage(language); diff --git a/frontend/src/ts/controllers/quotes-controller.ts b/frontend/src/ts/controllers/quotes-controller.ts index a9544ddd1..b8f0696cb 100644 --- a/frontend/src/ts/controllers/quotes-controller.ts +++ b/frontend/src/ts/controllers/quotes-controller.ts @@ -1,4 +1,8 @@ -import { randomElementFromArray, shuffle } from "../utils/misc"; +import { + randomElementFromArray, + removeLanguageSize, + shuffle, +} from "../utils/misc"; import { subscribe } from "../observables/config-event"; import * as DB from "../db"; @@ -30,10 +34,6 @@ const defaultQuoteCollection: QuoteCollection = { groups: [], }; -function normalizeLanguage(language: string): string { - return language.replace(/_\d*k$/g, ""); -} - class QuotesController { private quoteCollection: QuoteCollection = defaultQuoteCollection; @@ -44,7 +44,7 @@ class QuotesController { language: string, quoteLengths?: number[] ): Promise { - const normalizedLanguage = normalizeLanguage(language); + const normalizedLanguage = removeLanguageSize(language); if (this.quoteCollection.language !== normalizedLanguage) { try { @@ -160,12 +160,12 @@ class QuotesController { return null; } - const normalizedLanguage = normalizeLanguage(language); + const normalizedLanguage = removeLanguageSize(language); const quoteIds: string[] = []; const { favoriteQuotes } = snapshot; Object.keys(favoriteQuotes).forEach((language) => { - if (normalizeLanguage(language) !== normalizedLanguage) { + if (removeLanguageSize(language) !== normalizedLanguage) { return; } @@ -190,10 +190,10 @@ class QuotesController { const { favoriteQuotes } = snapshot; - const normalizedQuoteLanguage = normalizeLanguage(quoteLanguage); + const normalizedQuoteLanguage = removeLanguageSize(quoteLanguage); const matchedLanguage = Object.keys(favoriteQuotes).find((language) => { - if (normalizedQuoteLanguage !== normalizeLanguage(language)) { + if (normalizedQuoteLanguage !== removeLanguageSize(language)) { return false; } return (favoriteQuotes[language] ?? []).includes(id.toString()); diff --git a/frontend/src/ts/elements/modes-notice.ts b/frontend/src/ts/elements/modes-notice.ts index deffb8311..23c975214 100644 --- a/frontend/src/ts/elements/modes-notice.ts +++ b/frontend/src/ts/elements/modes-notice.ts @@ -8,7 +8,7 @@ import * as ConfigEvent from "../observables/config-event"; import { Auth } from "../firebase"; import * as CustomTextState from "../states/custom-text-name"; import { get as getTypingSpeedUnit } from "../utils/typing-speed-units"; -import { roundTo2 } from "../utils/misc"; +import { getLanguageDisplayString, roundTo2 } from "../utils/misc"; ConfigEvent.subscribe((eventKey) => { if ( @@ -84,16 +84,10 @@ export async function update(): Promise { } if (Config.mode !== "zen") { - let language = Config.language; - - if (Config.mode === "quote") { - language = language.split(/_\d+k$/)[0] as string; - } - $(".pageTest #testModesNotice").append( - `
${language.replace( - /_/g, - " " + `
${getLanguageDisplayString( + Config.language, + Config.mode === "quote" )}
` ); } diff --git a/frontend/src/ts/pages/settings.ts b/frontend/src/ts/pages/settings.ts index 07b3390b7..005693107 100644 --- a/frontend/src/ts/pages/settings.ts +++ b/frontend/src/ts/pages/settings.ts @@ -439,7 +439,7 @@ async function fillSettingsPage(): Promise { let langComboBox = ``; group.languages.forEach((language: string) => { langComboBox += ``; }); langComboBox += ``; diff --git a/frontend/src/ts/popups/pb-tables-popup.ts b/frontend/src/ts/popups/pb-tables-popup.ts index 71f9780d8..342944539 100644 --- a/frontend/src/ts/popups/pb-tables-popup.ts +++ b/frontend/src/ts/popups/pb-tables-popup.ts @@ -1,7 +1,7 @@ import * as DB from "../db"; import format from "date-fns/format"; import * as Skeleton from "./skeleton"; -import { isPopupVisible } from "../utils/misc"; +import { getLanguageDisplayString, isPopupVisible } from "../utils/misc"; interface PersonalBest extends SharedTypes.PersonalBest { mode2: SharedTypes.Mode2; @@ -68,7 +68,7 @@ function update(mode: SharedTypes.Mode): void { } ${pb.difficulty} - ${pb.language ? pb.language.replace(/_/g, " ") : "-"} + ${pb.language ? getLanguageDisplayString(pb.language) : "-"} ${pb.punctuation ? '' : ""} ${pb.lazyMode ? '' : ""} ${dateText} diff --git a/frontend/src/ts/test/test-logic.ts b/frontend/src/ts/test/test-logic.ts index e4e597101..63543606f 100644 --- a/frontend/src/ts/test/test-logic.ts +++ b/frontend/src/ts/test/test-logic.ts @@ -802,7 +802,7 @@ function buildCompletedEvent( const afkDuration = TestStats.calculateAfkSeconds(duration); let language = Config.language; if (Config.mode === "quote") { - language = Config.language.replace(/_\d*k$/g, ""); + language = Misc.removeLanguageSize(Config.language); } const quoteLength = TestWords.randomQuote?.group ?? -1; diff --git a/frontend/src/ts/test/test-ui.ts b/frontend/src/ts/test/test-ui.ts index 12fc44b29..5d93f6a39 100644 --- a/frontend/src/ts/test/test-ui.ts +++ b/frontend/src/ts/test/test-ui.ts @@ -27,7 +27,7 @@ const debouncedZipfCheck = debounce(250, () => { if (supports === "no") { Notifications.add( `${Misc.capitalizeFirstLetter( - Config.language.replace(/_/g, " ") + Misc.getLanguageDisplayString(Config.language) )} does not support Zipf funbox, because the list is not ordered by frequency. Please try another word list.`, 0, { @@ -38,7 +38,7 @@ const debouncedZipfCheck = debounce(250, () => { if (supports === "unknown") { Notifications.add( `${Misc.capitalizeFirstLetter( - Config.language.replace(/_/g, " ") + Misc.getLanguageDisplayString(Config.language) )} may not support Zipf funbox, because we don't know if it's ordered by frequency or not. If you would like to add this label, please contact us.`, 0, { @@ -789,7 +789,9 @@ export function updatePremid(): void { fbtext = " " + Config.funbox.split("#").join(" "); } $(".pageTest #premidTestMode").text( - `${Config.mode} ${mode2} ${Config.language.replace(/_/g, " ")}${fbtext}` + `${Config.mode} ${mode2} ${Misc.getLanguageDisplayString( + Config.language + )}${fbtext}` ); $(".pageTest #premidSecondsLeft").text(Config.time); } diff --git a/frontend/src/ts/test/words-generator.ts b/frontend/src/ts/test/words-generator.ts index 1cbf00b7f..77ebb8c0a 100644 --- a/frontend/src/ts/test/words-generator.ts +++ b/frontend/src/ts/test/words-generator.ts @@ -595,7 +595,7 @@ async function generateQuoteWords( rq = randomQuote; } - rq.language = Config.language.replace(/_\d*k$/g, ""); + rq.language = Misc.removeLanguageSize(Config.language); rq.text = rq.text.replace(/ +/gm, " "); rq.text = rq.text.replace(/( *(\r\n|\r|\n) *)/g, "\n "); rq.text = rq.text.replace(/…/g, "..."); diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index f50750393..88ad06cfc 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -1753,4 +1753,21 @@ export function lastElementFromArray(array: T[]): T | undefined { return array[array.length - 1]; } +export function getLanguageDisplayString( + language: string, + noSizeString = false +): string { + let out = ""; + if (noSizeString) { + out = removeLanguageSize(language); + } else { + out = language; + } + return out.replace(/_/g, " "); +} + +export function removeLanguageSize(language: string): string { + return language.replace(/_\d*k$/g, ""); +} + // DO NOT ALTER GLOBAL OBJECTSONSTRUCTOR, IT WILL BREAK RESULT HASHES