From 7519931b1bb61bc48fae3d845bcc4f7c01e22ddd Mon Sep 17 00:00:00 2001 From: Miodec Date: Mon, 4 Aug 2025 16:48:51 +0200 Subject: [PATCH 1/2] fix: move time setting before mode --- frontend/src/ts/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/ts/config.ts b/frontend/src/ts/config.ts index 1e1208767768..ffdf2783ba53 100644 --- a/frontend/src/ts/config.ts +++ b/frontend/src/ts/config.ts @@ -812,10 +812,10 @@ const lastConfigsToApply: Set = new Set([ "paceCaret", "quoteLength", //quote length sets mode, "words", + "time", "mode", // mode sets punctuation and numbers "numbers", "punctuation", - "time", "funbox", ]); From 3f72e31df96e34a1f58bca197b2085aec6d9360c Mon Sep 17 00:00:00 2001 From: Miodec Date: Mon, 4 Aug 2025 19:59:05 +0200 Subject: [PATCH 2/2] fix(test config): sometimes showing too many elements at once --- frontend/src/ts/test/test-config.ts | 70 +++++++++++++++++++---------- 1 file changed, 47 insertions(+), 23 deletions(-) diff --git a/frontend/src/ts/test/test-config.ts b/frontend/src/ts/test/test-config.ts index 08692b8593c3..95dab00cb47f 100644 --- a/frontend/src/ts/test/test-config.ts +++ b/frontend/src/ts/test/test-config.ts @@ -23,7 +23,7 @@ export async function instantUpdate(): Promise { ); $("#testConfig .puncAndNum").addClass("hidden"); - $("#testConfig .spacer").addClass("scrolled"); + $("#testConfig .spacer").css("transition", "none").addClass("scrolled"); $("#testConfig .time").addClass("hidden"); $("#testConfig .wordCount").addClass("hidden"); $("#testConfig .customText").addClass("hidden"); @@ -36,19 +36,19 @@ export async function instantUpdate(): Promise { $("#testConfig .rightSpacer").removeClass("scrolled"); $("#testConfig .time").removeClass("hidden"); - updateExtras("time", Config.time); + updateActiveExtraButtons("time", Config.time); } else if (Config.mode === "words") { $("#testConfig .puncAndNum").removeClass("hidden"); $("#testConfig .leftSpacer").removeClass("scrolled"); $("#testConfig .rightSpacer").removeClass("scrolled"); $("#testConfig .wordCount").removeClass("hidden"); - updateExtras("words", Config.words); + updateActiveExtraButtons("words", Config.words); } else if (Config.mode === "quote") { $("#testConfig .rightSpacer").removeClass("scrolled"); $("#testConfig .quoteLength").removeClass("hidden"); - updateExtras("quoteLength", Config.quoteLength); + updateActiveExtraButtons("quoteLength", Config.quoteLength); } else if (Config.mode === "custom") { $("#testConfig .puncAndNum").removeClass("hidden"); $("#testConfig .leftSpacer").removeClass("scrolled"); @@ -56,14 +56,29 @@ export async function instantUpdate(): Promise { $("#testConfig .customText").removeClass("hidden"); } - updateExtras("numbers", Config.numbers); - updateExtras("punctuation", Config.punctuation); + updateActiveExtraButtons("numbers", Config.numbers); + updateActiveExtraButtons("punctuation", Config.punctuation); + + setTimeout(() => { + $("#testConfig .spacer").css("transition", ""); + }, 125); } -export async function update(previous: Mode, current: Mode): Promise { +async function update(previous: Mode, current: Mode): Promise { if (previous === current) return; - $("#testConfig .mode .textButton").removeClass("active"); - $("#testConfig .mode .textButton[mode='" + current + "']").addClass("active"); + updateActiveModeButtons(current); + + let m2; + + if (Config.mode === "time") { + m2 = Config.time; + } else if (Config.mode === "words") { + m2 = Config.words; + } else if (Config.mode === "quote") { + m2 = Config.quoteLength; + } + + if (m2 !== undefined) updateActiveExtraButtons(Config.mode, m2); const submenu = { time: "time", @@ -202,7 +217,12 @@ export async function update(previous: Mode, current: Mode): Promise { ); } -export function updateExtras(key: string, value: ConfigValue): void { +function updateActiveModeButtons(mode: Mode): void { + $("#testConfig .mode .textButton").removeClass("active"); + $("#testConfig .mode .textButton[mode='" + mode + "']").addClass("active"); +} + +function updateActiveExtraButtons(key: string, value: ConfigValue): void { if (key === "time") { $("#testConfig .time .textButton").removeClass("active"); const timeCustom = ![15, 30, 60, 120].includes(value as number) @@ -258,27 +278,31 @@ export function hideFavoriteQuoteLength(): void { $("#testConfig .quoteLength .favorite").addClass("hidden"); } +let ignoreConfigEvent = false; + ConfigEvent.subscribe((eventKey, eventValue, _nosave, eventPreviousValue) => { - if (ActivePage.get() !== "test") return; - if (eventKey === "mode") { - void update(eventPreviousValue as Mode, eventValue as Mode); + if (eventKey === "fullConfigChange") { + ignoreConfigEvent = true; + } + if (eventKey === "fullConfigChangeFinished") { + ignoreConfigEvent = false; - let m2; + void instantUpdate(); + } - if (Config.mode === "time") { - m2 = Config.time; - } else if (Config.mode === "words") { - m2 = Config.words; - } else if (Config.mode === "quote") { - m2 = Config.quoteLength; - } + // this is here to prevent calling set / preview multiple times during a full config loading + // once the full config is loaded, we can apply everything once + if (ignoreConfigEvent) return; - if (m2 !== undefined) updateExtras(Config.mode, m2); + if (ActivePage.get() !== "test") return; + if (eventKey === "mode") { + void update(eventPreviousValue as Mode, eventValue as Mode); } else if ( ["time", "quoteLength", "words", "numbers", "punctuation"].includes( eventKey ) ) { - if (eventValue !== undefined) updateExtras(eventKey, eventValue); + if (eventValue !== undefined) + updateActiveExtraButtons(eventKey, eventValue); } });