From 832dd240112ecde7269d078e9110a2e8bcfc9f45 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 20:54:51 +0200 Subject: [PATCH 01/33] Fix caps warning inverted --- frontend/src/ts/test/caps-warning.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 87a7ed847ac7..21bd1fa10a13 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -23,15 +23,14 @@ function hide(): void { } function update(event: KeyboardEvent): void { - if (event.key === "CapsLock" && capsState !== null) { + capsState = event?.getModifierState("CapsLock"); + + if (event.key === "CapsLock") { capsState = !capsState; - } else { - const modState = event.getModifierState?.("CapsLock"); - if (modState !== undefined) { - capsState = modState; - } } +} +function updateWarningVisibility(): void { try { if (Config.capsLockWarning && capsState) { show(); @@ -41,8 +40,12 @@ function update(event: KeyboardEvent): void { } catch {} } -document.addEventListener("keyup", update); +document.addEventListener("keyup", (event) => { + updateWarningVisibility(); + if (Misc.isMac()) update(event); +}); document.addEventListener("keydown", (event) => { - if (Misc.isMac()) update(event); + update(event); + if (Misc.isMac()) updateWarningVisibility(); }); From 24ea851c513a7481eeb48425eec85e8dae50cc0b Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:05:16 +0200 Subject: [PATCH 02/33] Change mac handling --- frontend/src/ts/test/caps-warning.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 21bd1fa10a13..9715545c97cc 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -40,12 +40,23 @@ function updateWarningVisibility(): void { } catch {} } +function updateCapsForMac(eventType: "keyup" | "keydown"): void { + if (eventType === "keyup") { + capsState = false; + } else { + capsState = true; + } +} + document.addEventListener("keyup", (event) => { + if (Misc.isMac()) updateCapsForMac("keyup"); updateWarningVisibility(); - if (Misc.isMac()) update(event); }); document.addEventListener("keydown", (event) => { - update(event); - if (Misc.isMac()) updateWarningVisibility(); + if (Misc.isMac()) { + updateCapsForMac("keyup"); + } else { + update(event); + } }); From 5f3b1843fa4fe62bdaf1bd4e668a0d59403b325d Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:06:40 +0200 Subject: [PATCH 03/33] keydown --- frontend/src/ts/test/caps-warning.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 9715545c97cc..a76db0cf7c40 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -55,7 +55,7 @@ document.addEventListener("keyup", (event) => { document.addEventListener("keydown", (event) => { if (Misc.isMac()) { - updateCapsForMac("keyup"); + updateCapsForMac("keydown"); } else { update(event); } From 012db8e96a90fb28a66555d2a9919bc30a05b315 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:15:36 +0200 Subject: [PATCH 04/33] Visibility --- frontend/src/ts/test/caps-warning.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index a76db0cf7c40..ebbc6ac2a113 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -56,6 +56,7 @@ document.addEventListener("keyup", (event) => { document.addEventListener("keydown", (event) => { if (Misc.isMac()) { updateCapsForMac("keydown"); + updateWarningVisibility(); } else { update(event); } From 32e454fc7f168f604aaaf360546760f8a45a3c70 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:18:59 +0200 Subject: [PATCH 05/33] Caps check --- frontend/src/ts/test/caps-warning.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index ebbc6ac2a113..3308f5125160 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -49,12 +49,12 @@ function updateCapsForMac(eventType: "keyup" | "keydown"): void { } document.addEventListener("keyup", (event) => { - if (Misc.isMac()) updateCapsForMac("keyup"); + if (Misc.isMac() && event.key === "CapsLock") updateCapsForMac("keyup"); updateWarningVisibility(); }); document.addEventListener("keydown", (event) => { - if (Misc.isMac()) { + if (Misc.isMac() && event.key === "CapsLock") { updateCapsForMac("keydown"); updateWarningVisibility(); } else { From 998bc92ca514bccab02391fccdd6a8e60a390526 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:18:05 +0200 Subject: [PATCH 06/33] fehmer's implementation --- frontend/src/ts/test/caps-warning.ts | 54 ++++++++++++++++------------ frontend/src/ts/utils/misc.ts | 4 +++ 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 3308f5125160..a21cd568f027 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -1,10 +1,13 @@ import Config from "../config"; -import * as Misc from "../utils/misc"; import { qsr } from "../utils/dom"; +import { isMac, isLinux, isWindows } from "../utils/misc"; const el = qsr("#capsWarning"); export let capsState = false; +const isMacOs = isMac(); +const isLinuxOs = isLinux(); +const isWindowsOs = isWindows(); let visible = false; @@ -22,15 +25,7 @@ function hide(): void { } } -function update(event: KeyboardEvent): void { - capsState = event?.getModifierState("CapsLock"); - - if (event.key === "CapsLock") { - capsState = !capsState; - } -} - -function updateWarningVisibility(): void { +function updateIndicator(): void { try { if (Config.capsLockWarning && capsState) { show(); @@ -40,24 +35,39 @@ function updateWarningVisibility(): void { } catch {} } -function updateCapsForMac(eventType: "keyup" | "keydown"): void { - if (eventType === "keyup") { - capsState = false; - } else { - capsState = true; +function update(event: KeyboardEvent): void { + if (event.key !== "CapsLock") { + capsState = event.getModifierState("CapsLock"); } + updateIndicator(); } document.addEventListener("keyup", (event) => { - if (Misc.isMac() && event.key === "CapsLock") updateCapsForMac("keyup"); - updateWarningVisibility(); + if (isMacOs) { + if (event.key === "CapsLock") { + capsState = event.getModifierState("CapsLock"); + } + } else if (isWindowsOs) { + if (event.key === "CapsLock") { + capsState = event.getModifierState("CapsLock"); + } + } else { + update(event); + } + updateIndicator(); }); document.addEventListener("keydown", (event) => { - if (Misc.isMac() && event.key === "CapsLock") { - updateCapsForMac("keydown"); - updateWarningVisibility(); - } else { - update(event); + if (isMacOs) { + if (event.key === "CapsLock") { + capsState = event.getModifierState("CapsLock"); + } else { + update(event); + } + } else if (isLinuxOs) { + if (event.key === "CapsLock") { + capsState = !event.getModifierState("CapsLock"); + } } + updateIndicator(); }); diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index 8666e9eece3a..fc59c59b5f3f 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -716,6 +716,10 @@ function isPlatform(searchTerm: string | RegExp): boolean { } } +export function isWindows(): boolean { + return isPlatform("Win"); +} + export function isLinux(): boolean { return isPlatform("Linux"); } From c7a63353f0743323ef2a588a4f5b30fb7807c2d5 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:23:07 +0200 Subject: [PATCH 07/33] Rename --- frontend/src/ts/test/caps-warning.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index a21cd568f027..6c08ec66f727 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -25,7 +25,7 @@ function hide(): void { } } -function updateIndicator(): void { +function updateCapsWarningVisibility(): void { try { if (Config.capsLockWarning && capsState) { show(); @@ -39,7 +39,7 @@ function update(event: KeyboardEvent): void { if (event.key !== "CapsLock") { capsState = event.getModifierState("CapsLock"); } - updateIndicator(); + updateCapsWarningVisibility(); } document.addEventListener("keyup", (event) => { @@ -54,7 +54,7 @@ document.addEventListener("keyup", (event) => { } else { update(event); } - updateIndicator(); + updateCapsWarningVisibility(); }); document.addEventListener("keydown", (event) => { @@ -69,5 +69,5 @@ document.addEventListener("keydown", (event) => { capsState = !event.getModifierState("CapsLock"); } } - updateIndicator(); + updateCapsWarningVisibility(); }); From eeaf210913ad3d9701a08f599f69db9876e798a0 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:23:54 +0200 Subject: [PATCH 08/33] Remove updateCapsLockVisibility from update --- frontend/src/ts/test/caps-warning.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 6c08ec66f727..20dd97a3b8af 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -39,7 +39,6 @@ function update(event: KeyboardEvent): void { if (event.key !== "CapsLock") { capsState = event.getModifierState("CapsLock"); } - updateCapsWarningVisibility(); } document.addEventListener("keyup", (event) => { From 70d0f6a8adda40f8ee6e3629f9b002b8ba4c4cdf Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:25:33 +0200 Subject: [PATCH 09/33] Comments --- frontend/src/ts/test/caps-warning.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 20dd97a3b8af..98f93f071215 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -36,7 +36,13 @@ function updateCapsWarningVisibility(): void { } function update(event: KeyboardEvent): void { + /* + CapsLock is pressed. We cannot use the modifierState for "CapsLock" in this case + because the browser implementation differs widely depending on the browser and even the + operating system. + */ if (event.key !== "CapsLock") { + /* on all other key presses we can trust the modifierState */ capsState = event.getModifierState("CapsLock"); } } @@ -47,6 +53,9 @@ document.addEventListener("keyup", (event) => { capsState = event.getModifierState("CapsLock"); } } else if (isWindowsOs) { + /** + * Windows sends the correct state on keyup + */ if (event.key === "CapsLock") { capsState = event.getModifierState("CapsLock"); } @@ -58,12 +67,16 @@ document.addEventListener("keyup", (event) => { document.addEventListener("keydown", (event) => { if (isMacOs) { + /* macOs sends only keyDown when enabling CapsLock and only keyUp when disabling. */ if (event.key === "CapsLock") { capsState = event.getModifierState("CapsLock"); } else { update(event); } } else if (isLinuxOs) { + /** + * Linux sends the correct state before the toggle only on keydown, so we invert the modifier state + */ if (event.key === "CapsLock") { capsState = !event.getModifierState("CapsLock"); } From c52510e328ffb155381502f5887690f077459fb3 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:14:48 +0200 Subject: [PATCH 10/33] Refactor --- frontend/src/ts/test/caps-warning.ts | 37 ++++++---------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 98f93f071215..c0a2cabe1d33 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -35,32 +35,17 @@ function updateCapsWarningVisibility(): void { } catch {} } -function update(event: KeyboardEvent): void { - /* - CapsLock is pressed. We cannot use the modifierState for "CapsLock" in this case - because the browser implementation differs widely depending on the browser and even the - operating system. - */ - if (event.key !== "CapsLock") { - /* on all other key presses we can trust the modifierState */ - capsState = event.getModifierState("CapsLock"); - } -} - document.addEventListener("keyup", (event) => { if (isMacOs) { + /* macOs sends only keyDown when enabling CapsLock and only keyUp when disabling. */ if (event.key === "CapsLock") { capsState = event.getModifierState("CapsLock"); } } else if (isWindowsOs) { - /** - * Windows sends the correct state on keyup - */ - if (event.key === "CapsLock") { - capsState = event.getModifierState("CapsLock"); - } - } else { - update(event); + /* Windows always sends the correct state on keyup (for CapsLock and regular keys */ + capsState = event.getModifierState("CapsLock"); + } else if (event.key !== "CapsLock") { + capsState = event.getModifierState("CapsLock"); } updateCapsWarningVisibility(); }); @@ -68,18 +53,12 @@ document.addEventListener("keyup", (event) => { document.addEventListener("keydown", (event) => { if (isMacOs) { /* macOs sends only keyDown when enabling CapsLock and only keyUp when disabling. */ - if (event.key === "CapsLock") { - capsState = event.getModifierState("CapsLock"); - } else { - update(event); - } + capsState = event.getModifierState("CapsLock"); + updateCapsWarningVisibility(); } else if (isLinuxOs) { - /** - * Linux sends the correct state before the toggle only on keydown, so we invert the modifier state - */ + /* Linux sends the correct state before the toggle only on keydown, so we invert the modifier state */ if (event.key === "CapsLock") { capsState = !event.getModifierState("CapsLock"); } } - updateCapsWarningVisibility(); }); From d8318a5c6faffeaf3241035acc6ae4c88e2667b3 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:17:24 +0200 Subject: [PATCH 11/33] Refactor --- frontend/src/ts/test/caps-warning.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index c0a2cabe1d33..c45d24246148 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -35,17 +35,21 @@ function updateCapsWarningVisibility(): void { } catch {} } +function isCapsLockOn(event: KeyboardEvent): boolean { + return event.getModifierState("CapsLock"); +} + document.addEventListener("keyup", (event) => { if (isMacOs) { /* macOs sends only keyDown when enabling CapsLock and only keyUp when disabling. */ if (event.key === "CapsLock") { - capsState = event.getModifierState("CapsLock"); + capsState = isCapsLockOn(event); } } else if (isWindowsOs) { /* Windows always sends the correct state on keyup (for CapsLock and regular keys */ - capsState = event.getModifierState("CapsLock"); + capsState = isCapsLockOn(event); } else if (event.key !== "CapsLock") { - capsState = event.getModifierState("CapsLock"); + capsState = isCapsLockOn(event); } updateCapsWarningVisibility(); }); @@ -53,12 +57,12 @@ document.addEventListener("keyup", (event) => { document.addEventListener("keydown", (event) => { if (isMacOs) { /* macOs sends only keyDown when enabling CapsLock and only keyUp when disabling. */ - capsState = event.getModifierState("CapsLock"); + capsState = isCapsLockOn(event); updateCapsWarningVisibility(); } else if (isLinuxOs) { /* Linux sends the correct state before the toggle only on keydown, so we invert the modifier state */ if (event.key === "CapsLock") { - capsState = !event.getModifierState("CapsLock"); + capsState = !isCapsLockOn(event); } } }); From 59791a4392a8b1b7878d1f239d3fff4a27f63506 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:19:44 +0200 Subject: [PATCH 12/33] Change comments --- frontend/src/ts/test/caps-warning.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index c45d24246148..01fceb582e12 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -41,12 +41,12 @@ function isCapsLockOn(event: KeyboardEvent): boolean { document.addEventListener("keyup", (event) => { if (isMacOs) { - /* macOs sends only keyDown when enabling CapsLock and only keyUp when disabling. */ + // macOs sends only keydown when enabling CapsLock and only keyup when disabling. if (event.key === "CapsLock") { capsState = isCapsLockOn(event); } } else if (isWindowsOs) { - /* Windows always sends the correct state on keyup (for CapsLock and regular keys */ + // Windows always sends the correct state on keyup (for CapsLock and regular keys capsState = isCapsLockOn(event); } else if (event.key !== "CapsLock") { capsState = isCapsLockOn(event); @@ -56,11 +56,13 @@ document.addEventListener("keyup", (event) => { document.addEventListener("keydown", (event) => { if (isMacOs) { - /* macOs sends only keyDown when enabling CapsLock and only keyUp when disabling. */ + // macOs sends only keydown when enabling CapsLock and only keyup when disabling. capsState = isCapsLockOn(event); updateCapsWarningVisibility(); } else if (isLinuxOs) { - /* Linux sends the correct state before the toggle only on keydown, so we invert the modifier state */ + /* Linux sends the correct state before the toggle only on keydown, + * so we invert the modifier state + */ if (event.key === "CapsLock") { capsState = !isCapsLockOn(event); } From 1c744fa989c36126de273dec3ca78638feda3d4a Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:28:24 +0200 Subject: [PATCH 13/33] Refactor --- frontend/src/ts/test/caps-warning.ts | 43 +++++++++++++++++++++------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 01fceb582e12..2f772dd5127b 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -5,9 +5,6 @@ import { isMac, isLinux, isWindows } from "../utils/misc"; const el = qsr("#capsWarning"); export let capsState = false; -const isMacOs = isMac(); -const isLinuxOs = isLinux(); -const isWindowsOs = isWindows(); let visible = false; @@ -39,27 +36,45 @@ function isCapsLockOn(event: KeyboardEvent): boolean { return event.getModifierState("CapsLock"); } -document.addEventListener("keyup", (event) => { - if (isMacOs) { +function getCurrentOs(): string { + if (isMac()) { + return "Mac"; + } + + if (isLinux()) { + return "Linux"; + } + + if (isWindows()) { + return "Windows"; + } + + return "Unknown"; +} + +function updateCapsKeyup(event: KeyboardEvent): void { + const os = getCurrentOs(); + if (os === "Mac") { // macOs sends only keydown when enabling CapsLock and only keyup when disabling. if (event.key === "CapsLock") { capsState = isCapsLockOn(event); } - } else if (isWindowsOs) { + } else if (os === "Windows") { // Windows always sends the correct state on keyup (for CapsLock and regular keys capsState = isCapsLockOn(event); } else if (event.key !== "CapsLock") { capsState = isCapsLockOn(event); } updateCapsWarningVisibility(); -}); +} -document.addEventListener("keydown", (event) => { - if (isMacOs) { +function updateCapsKeydown(event: KeyboardEvent): void { + const os = getCurrentOs(); + if (os === "Mac") { // macOs sends only keydown when enabling CapsLock and only keyup when disabling. capsState = isCapsLockOn(event); updateCapsWarningVisibility(); - } else if (isLinuxOs) { + } else if (os === "Linux") { /* Linux sends the correct state before the toggle only on keydown, * so we invert the modifier state */ @@ -67,4 +82,12 @@ document.addEventListener("keydown", (event) => { capsState = !isCapsLockOn(event); } } +} + +document.addEventListener("keyup", (event) => { + updateCapsKeyup(event); +}); + +document.addEventListener("keydown", (event) => { + updateCapsKeydown(event); }); From 54d4bac300e9e7e978e2c78a6d0414d96b326aef Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:30:16 +0200 Subject: [PATCH 14/33] Style --- frontend/src/ts/test/caps-warning.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 2f772dd5127b..963321a007cd 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -40,15 +40,12 @@ function getCurrentOs(): string { if (isMac()) { return "Mac"; } - if (isLinux()) { return "Linux"; } - if (isWindows()) { return "Windows"; } - return "Unknown"; } From f1cfe915a9759beeb4612528bfe058ff9e7a25e0 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:34:51 +0200 Subject: [PATCH 15/33] Refactor --- frontend/src/ts/test/caps-warning.ts | 18 ++---------------- frontend/src/ts/utils/misc.ts | 13 +++++++++++++ 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 963321a007cd..0189741b77e3 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -1,10 +1,11 @@ import Config from "../config"; import { qsr } from "../utils/dom"; -import { isMac, isLinux, isWindows } from "../utils/misc"; +import { getCurrentOs } from "../utils/misc"; const el = qsr("#capsWarning"); export let capsState = false; +const os = getCurrentOs(); let visible = false; @@ -36,21 +37,7 @@ function isCapsLockOn(event: KeyboardEvent): boolean { return event.getModifierState("CapsLock"); } -function getCurrentOs(): string { - if (isMac()) { - return "Mac"; - } - if (isLinux()) { - return "Linux"; - } - if (isWindows()) { - return "Windows"; - } - return "Unknown"; -} - function updateCapsKeyup(event: KeyboardEvent): void { - const os = getCurrentOs(); if (os === "Mac") { // macOs sends only keydown when enabling CapsLock and only keyup when disabling. if (event.key === "CapsLock") { @@ -66,7 +53,6 @@ function updateCapsKeyup(event: KeyboardEvent): void { } function updateCapsKeydown(event: KeyboardEvent): void { - const os = getCurrentOs(); if (os === "Mac") { // macOs sends only keydown when enabling CapsLock and only keyup when disabling. capsState = isCapsLockOn(event); diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index fc59c59b5f3f..609a1788ba52 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -732,6 +732,19 @@ export function isMacLike(): boolean { return isPlatform(/Mac|iPod|iPhone|iPad/); } +export function getCurrentOs(): string { + if (isMac()) { + return "Mac"; + } + if (isLinux()) { + return "Linux"; + } + if (isWindows()) { + return "Windows"; + } + return "Unknown"; +} + export function scrollToCenterOrTop(el: HTMLElement | null): void { if (!el) return; From ad37cf4ef31313b7169411dc0831b1d538608462 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:39:30 +0200 Subject: [PATCH 16/33] Comment --- frontend/src/ts/test/caps-warning.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 0189741b77e3..5bf42d8fb96d 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -44,7 +44,7 @@ function updateCapsKeyup(event: KeyboardEvent): void { capsState = isCapsLockOn(event); } } else if (os === "Windows") { - // Windows always sends the correct state on keyup (for CapsLock and regular keys + // Windows always sends the correct state on keyup (for CapsLock and for regular keys) capsState = isCapsLockOn(event); } else if (event.key !== "CapsLock") { capsState = isCapsLockOn(event); From f29ffd4dc50987b9087fd819d8852bbe8a0ee64b Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:50:57 +0200 Subject: [PATCH 17/33] Factory --- frontend/src/ts/test/caps-warning.ts | 59 ++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 5bf42d8fb96d..3b6cd37855fd 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -37,38 +37,65 @@ function isCapsLockOn(event: KeyboardEvent): boolean { return event.getModifierState("CapsLock"); } -function updateCapsKeyup(event: KeyboardEvent): void { +function updateCapsKeyupFactory(os: string): (event: KeyboardEvent) => void { if (os === "Mac") { // macOs sends only keydown when enabling CapsLock and only keyup when disabling. - if (event.key === "CapsLock") { - capsState = isCapsLockOn(event); - } - } else if (os === "Windows") { + return (event: KeyboardEvent) => { + if (event.key === "CapsLock") { + capsState = isCapsLockOn(event); + } + }; + } + if (os === "Windows") { // Windows always sends the correct state on keyup (for CapsLock and for regular keys) - capsState = isCapsLockOn(event); - } else if (event.key !== "CapsLock") { - capsState = isCapsLockOn(event); + return (event: KeyboardEvent) => (capsState = isCapsLockOn(event)); } - updateCapsWarningVisibility(); + + if (os === "Linux") { + return (event: KeyboardEvent) => { + if (event.key !== "CapsLock") { + capsState = isCapsLockOn(event); + } + }; + } + + return (event: KeyboardEvent) => { + return; + }; } -function updateCapsKeydown(event: KeyboardEvent): void { +function updateCapsKeydownFactory(os: string): (event: KeyboardEvent) => void { if (os === "Mac") { // macOs sends only keydown when enabling CapsLock and only keyup when disabling. - capsState = isCapsLockOn(event); - updateCapsWarningVisibility(); - } else if (os === "Linux") { + return (event: KeyboardEvent) => { + capsState = isCapsLockOn(event); + updateCapsWarningVisibility(); + }; + } + + if (os === "Linux") { /* Linux sends the correct state before the toggle only on keydown, * so we invert the modifier state */ - if (event.key === "CapsLock") { - capsState = !isCapsLockOn(event); - } + + return (event: KeyboardEvent) => { + if (event.key === "CapsLock") { + capsState = !isCapsLockOn(event); + } + }; } + + return (event: KeyboardEvent) => { + return; + }; } +const updateCapsKeyup = updateCapsKeyupFactory(os); +const updateCapsKeydown = updateCapsKeydownFactory(os); + document.addEventListener("keyup", (event) => { updateCapsKeyup(event); + updateCapsWarningVisibility(); }); document.addEventListener("keydown", (event) => { From 370bb82d2096512c8c57a961c61fde9ea637dceb Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:52:41 +0200 Subject: [PATCH 18/33] Revert "Factory" This reverts commit f29ffd4dc50987b9087fd819d8852bbe8a0ee64b. --- frontend/src/ts/test/caps-warning.ts | 59 ++++++++-------------------- 1 file changed, 16 insertions(+), 43 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 3b6cd37855fd..5bf42d8fb96d 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -37,65 +37,38 @@ function isCapsLockOn(event: KeyboardEvent): boolean { return event.getModifierState("CapsLock"); } -function updateCapsKeyupFactory(os: string): (event: KeyboardEvent) => void { +function updateCapsKeyup(event: KeyboardEvent): void { if (os === "Mac") { // macOs sends only keydown when enabling CapsLock and only keyup when disabling. - return (event: KeyboardEvent) => { - if (event.key === "CapsLock") { - capsState = isCapsLockOn(event); - } - }; - } - if (os === "Windows") { + if (event.key === "CapsLock") { + capsState = isCapsLockOn(event); + } + } else if (os === "Windows") { // Windows always sends the correct state on keyup (for CapsLock and for regular keys) - return (event: KeyboardEvent) => (capsState = isCapsLockOn(event)); - } - - if (os === "Linux") { - return (event: KeyboardEvent) => { - if (event.key !== "CapsLock") { - capsState = isCapsLockOn(event); - } - }; + capsState = isCapsLockOn(event); + } else if (event.key !== "CapsLock") { + capsState = isCapsLockOn(event); } - - return (event: KeyboardEvent) => { - return; - }; + updateCapsWarningVisibility(); } -function updateCapsKeydownFactory(os: string): (event: KeyboardEvent) => void { +function updateCapsKeydown(event: KeyboardEvent): void { if (os === "Mac") { // macOs sends only keydown when enabling CapsLock and only keyup when disabling. - return (event: KeyboardEvent) => { - capsState = isCapsLockOn(event); - updateCapsWarningVisibility(); - }; - } - - if (os === "Linux") { + capsState = isCapsLockOn(event); + updateCapsWarningVisibility(); + } else if (os === "Linux") { /* Linux sends the correct state before the toggle only on keydown, * so we invert the modifier state */ - - return (event: KeyboardEvent) => { - if (event.key === "CapsLock") { - capsState = !isCapsLockOn(event); - } - }; + if (event.key === "CapsLock") { + capsState = !isCapsLockOn(event); + } } - - return (event: KeyboardEvent) => { - return; - }; } -const updateCapsKeyup = updateCapsKeyupFactory(os); -const updateCapsKeydown = updateCapsKeydownFactory(os); - document.addEventListener("keyup", (event) => { updateCapsKeyup(event); - updateCapsWarningVisibility(); }); document.addEventListener("keydown", (event) => { From 9e60760c100f871114a48a7ee719733f1ef758c8 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:55:32 +0200 Subject: [PATCH 19/33] Remove export for windows util --- frontend/src/ts/utils/misc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index 609a1788ba52..5df1cd6701d1 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -716,7 +716,7 @@ function isPlatform(searchTerm: string | RegExp): boolean { } } -export function isWindows(): boolean { +function isWindows(): boolean { return isPlatform("Win"); } From f3055947bab4f1c96b56e0118550444378bcd2aa Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 09:56:00 +0200 Subject: [PATCH 20/33] Remove exports for all os utils --- frontend/src/ts/utils/misc.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index 5df1cd6701d1..76e52d71d9e4 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -720,11 +720,11 @@ function isWindows(): boolean { return isPlatform("Win"); } -export function isLinux(): boolean { +function isLinux(): boolean { return isPlatform("Linux"); } -export function isMac(): boolean { +function isMac(): boolean { return isPlatform("Mac"); } From 7ea70ed0a9b24fb470ec0f77ed57cdb1696e03f6 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 10:01:32 +0200 Subject: [PATCH 21/33] Capitalization --- frontend/src/ts/test/caps-warning.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 5bf42d8fb96d..f8a0239b07d7 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -39,7 +39,7 @@ function isCapsLockOn(event: KeyboardEvent): boolean { function updateCapsKeyup(event: KeyboardEvent): void { if (os === "Mac") { - // macOs sends only keydown when enabling CapsLock and only keyup when disabling. + // macOS sends only keydown when enabling CapsLock and only keyup when disabling. if (event.key === "CapsLock") { capsState = isCapsLockOn(event); } @@ -54,7 +54,7 @@ function updateCapsKeyup(event: KeyboardEvent): void { function updateCapsKeydown(event: KeyboardEvent): void { if (os === "Mac") { - // macOs sends only keydown when enabling CapsLock and only keyup when disabling. + // macOS sends only keydown when enabling CapsLock and only keyup when disabling. capsState = isCapsLockOn(event); updateCapsWarningVisibility(); } else if (os === "Linux") { From baabf8e5ecd87380cffc4bea89b92c3c3647c0f5 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 10:04:56 +0200 Subject: [PATCH 22/33] Comment --- frontend/src/ts/test/caps-warning.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index f8a0239b07d7..163e3ec689d6 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -58,7 +58,7 @@ function updateCapsKeydown(event: KeyboardEvent): void { capsState = isCapsLockOn(event); updateCapsWarningVisibility(); } else if (os === "Linux") { - /* Linux sends the correct state before the toggle only on keydown, + /* Linux sends the correct state before CapsLock is toggled only on keydown, * so we invert the modifier state */ if (event.key === "CapsLock") { From 5e03fb979007f0f790d8ef9390da28ee66272aa3 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 10:05:31 +0200 Subject: [PATCH 23/33] Caps Lock style --- frontend/src/ts/test/caps-warning.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 163e3ec689d6..4ba2fe50ae39 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -39,12 +39,12 @@ function isCapsLockOn(event: KeyboardEvent): boolean { function updateCapsKeyup(event: KeyboardEvent): void { if (os === "Mac") { - // macOS sends only keydown when enabling CapsLock and only keyup when disabling. + // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { capsState = isCapsLockOn(event); } } else if (os === "Windows") { - // Windows always sends the correct state on keyup (for CapsLock and for regular keys) + // Windows always sends the correct state on keyup (for Caps Lock and for regular keys) capsState = isCapsLockOn(event); } else if (event.key !== "CapsLock") { capsState = isCapsLockOn(event); @@ -54,11 +54,11 @@ function updateCapsKeyup(event: KeyboardEvent): void { function updateCapsKeydown(event: KeyboardEvent): void { if (os === "Mac") { - // macOS sends only keydown when enabling CapsLock and only keyup when disabling. + // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. capsState = isCapsLockOn(event); updateCapsWarningVisibility(); } else if (os === "Linux") { - /* Linux sends the correct state before CapsLock is toggled only on keydown, + /* Linux sends the correct state before Caps Lock is toggled only on keydown, * so we invert the modifier state */ if (event.key === "CapsLock") { From f73769ea51f0097799f6295c460b75ac883cf457 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 12:22:18 +0200 Subject: [PATCH 24/33] Mac --- frontend/src/ts/test/caps-warning.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 4ba2fe50ae39..0b6e6d4275a4 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -41,7 +41,7 @@ function updateCapsKeyup(event: KeyboardEvent): void { if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { - capsState = isCapsLockOn(event); + capsState = false; } } else if (os === "Windows") { // Windows always sends the correct state on keyup (for Caps Lock and for regular keys) @@ -55,7 +55,7 @@ function updateCapsKeyup(event: KeyboardEvent): void { function updateCapsKeydown(event: KeyboardEvent): void { if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. - capsState = isCapsLockOn(event); + capsState = true; updateCapsWarningVisibility(); } else if (os === "Linux") { /* Linux sends the correct state before Caps Lock is toggled only on keydown, From 8acdb8e37048ed91e28663f41559164acaca18cb Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 12:23:17 +0200 Subject: [PATCH 25/33] Should still use isCapsLockOn --- frontend/src/ts/test/caps-warning.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 0b6e6d4275a4..c3e8672cc362 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -55,7 +55,7 @@ function updateCapsKeyup(event: KeyboardEvent): void { function updateCapsKeydown(event: KeyboardEvent): void { if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. - capsState = true; + capsState = isCapsLockOn(event); updateCapsWarningVisibility(); } else if (os === "Linux") { /* Linux sends the correct state before Caps Lock is toggled only on keydown, From 7d0f7221eb0877d11389d4d8ae36a22525053f1f Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 12:31:53 +0200 Subject: [PATCH 26/33] Change mac handling --- frontend/src/ts/test/caps-warning.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index c3e8672cc362..f2e6fa654d19 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -42,6 +42,8 @@ function updateCapsKeyup(event: KeyboardEvent): void { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { capsState = false; + } else { + capsState = isCapsLockOn(event); } } else if (os === "Windows") { // Windows always sends the correct state on keyup (for Caps Lock and for regular keys) @@ -55,8 +57,10 @@ function updateCapsKeyup(event: KeyboardEvent): void { function updateCapsKeydown(event: KeyboardEvent): void { if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. - capsState = isCapsLockOn(event); - updateCapsWarningVisibility(); + if (event.key === "CapsLock") { + capsState = true; + updateCapsWarningVisibility(); + } } else if (os === "Linux") { /* Linux sends the correct state before Caps Lock is toggled only on keydown, * so we invert the modifier state From 764df085d78487f36533a4b7c016464ef20cd18d Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 12:35:13 +0200 Subject: [PATCH 27/33] Add Linux comment --- frontend/src/ts/test/caps-warning.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index f2e6fa654d19..119a3b352e31 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -49,6 +49,7 @@ function updateCapsKeyup(event: KeyboardEvent): void { // Windows always sends the correct state on keyup (for Caps Lock and for regular keys) capsState = isCapsLockOn(event); } else if (event.key !== "CapsLock") { + // Linux sends the correct state on keyup if key isn't Caps Lock capsState = isCapsLockOn(event); } updateCapsWarningVisibility(); From 9187d23151c10082fb25a7cfa03297217ec99e3d Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 12:51:06 +0200 Subject: [PATCH 28/33] Remove getCurrentOs --- frontend/src/ts/test/caps-warning.ts | 11 +++++------ frontend/src/ts/utils/misc.ts | 19 +++---------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 119a3b352e31..f4241c008658 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -1,11 +1,10 @@ import Config from "../config"; import { qsr } from "../utils/dom"; -import { getCurrentOs } from "../utils/misc"; +import { isMac, isLinux, isWindows } from "../utils/misc"; const el = qsr("#capsWarning"); export let capsState = false; -const os = getCurrentOs(); let visible = false; @@ -38,14 +37,14 @@ function isCapsLockOn(event: KeyboardEvent): boolean { } function updateCapsKeyup(event: KeyboardEvent): void { - if (os === "Mac") { + if (isMac()) { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { capsState = false; } else { capsState = isCapsLockOn(event); } - } else if (os === "Windows") { + } else if (isWindows()) { // Windows always sends the correct state on keyup (for Caps Lock and for regular keys) capsState = isCapsLockOn(event); } else if (event.key !== "CapsLock") { @@ -56,13 +55,13 @@ function updateCapsKeyup(event: KeyboardEvent): void { } function updateCapsKeydown(event: KeyboardEvent): void { - if (os === "Mac") { + if (isMac()) { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { capsState = true; updateCapsWarningVisibility(); } - } else if (os === "Linux") { + } else if (isLinux()) { /* Linux sends the correct state before Caps Lock is toggled only on keydown, * so we invert the modifier state */ diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index 76e52d71d9e4..fc59c59b5f3f 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -716,15 +716,15 @@ function isPlatform(searchTerm: string | RegExp): boolean { } } -function isWindows(): boolean { +export function isWindows(): boolean { return isPlatform("Win"); } -function isLinux(): boolean { +export function isLinux(): boolean { return isPlatform("Linux"); } -function isMac(): boolean { +export function isMac(): boolean { return isPlatform("Mac"); } @@ -732,19 +732,6 @@ export function isMacLike(): boolean { return isPlatform(/Mac|iPod|iPhone|iPad/); } -export function getCurrentOs(): string { - if (isMac()) { - return "Mac"; - } - if (isLinux()) { - return "Linux"; - } - if (isWindows()) { - return "Windows"; - } - return "Unknown"; -} - export function scrollToCenterOrTop(el: HTMLElement | null): void { if (!el) return; From 0468c1c5fcb3f1387f75f0117854974aa3a88365 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 12:53:48 +0200 Subject: [PATCH 29/33] Inline updateCapsKeyup and updateCapsKeydown --- frontend/src/ts/test/caps-warning.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index f4241c008658..a1e33fd97f35 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -36,7 +36,7 @@ function isCapsLockOn(event: KeyboardEvent): boolean { return event.getModifierState("CapsLock"); } -function updateCapsKeyup(event: KeyboardEvent): void { +document.addEventListener("keyup", (event) => { if (isMac()) { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { @@ -52,9 +52,9 @@ function updateCapsKeyup(event: KeyboardEvent): void { capsState = isCapsLockOn(event); } updateCapsWarningVisibility(); -} +}); -function updateCapsKeydown(event: KeyboardEvent): void { +document.addEventListener("keydown", (event) => { if (isMac()) { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { @@ -69,12 +69,4 @@ function updateCapsKeydown(event: KeyboardEvent): void { capsState = !isCapsLockOn(event); } } -} - -document.addEventListener("keyup", (event) => { - updateCapsKeyup(event); -}); - -document.addEventListener("keydown", (event) => { - updateCapsKeydown(event); }); From 2a472ab5175b3952445d1004a443a0b8374e9b05 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 12:57:57 +0200 Subject: [PATCH 30/33] Add back getCurrentOs --- frontend/src/ts/test/caps-warning.ts | 11 ++++++----- frontend/src/ts/utils/misc.ts | 19 ++++++++++++++++--- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index a1e33fd97f35..40e8b956f477 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -1,10 +1,11 @@ import Config from "../config"; import { qsr } from "../utils/dom"; -import { isMac, isLinux, isWindows } from "../utils/misc"; +import { getCurrentOs } from "../utils/misc"; const el = qsr("#capsWarning"); export let capsState = false; +const os = getCurrentOs(); let visible = false; @@ -37,14 +38,14 @@ function isCapsLockOn(event: KeyboardEvent): boolean { } document.addEventListener("keyup", (event) => { - if (isMac()) { + if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { capsState = false; } else { capsState = isCapsLockOn(event); } - } else if (isWindows()) { + } else if (os === "Windows") { // Windows always sends the correct state on keyup (for Caps Lock and for regular keys) capsState = isCapsLockOn(event); } else if (event.key !== "CapsLock") { @@ -55,13 +56,13 @@ document.addEventListener("keyup", (event) => { }); document.addEventListener("keydown", (event) => { - if (isMac()) { + if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { capsState = true; updateCapsWarningVisibility(); } - } else if (isLinux()) { + } else if (os === "Linux") { /* Linux sends the correct state before Caps Lock is toggled only on keydown, * so we invert the modifier state */ diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index fc59c59b5f3f..7b6c1b58d84d 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -716,18 +716,31 @@ function isPlatform(searchTerm: string | RegExp): boolean { } } -export function isWindows(): boolean { +function isWindows(): boolean { return isPlatform("Win"); } -export function isLinux(): boolean { +function isLinux(): boolean { return isPlatform("Linux"); } -export function isMac(): boolean { +function isMac(): boolean { return isPlatform("Mac"); } +export function getCurrentOs(): "Mac" | "Linux" | "Windows" | "Unknown" { + if (isMac()) { + return "Mac"; + } + if (isLinux()) { + return "Linux"; + } + if (isWindows()) { + return "Windows"; + } + return "Unknown"; +} + export function isMacLike(): boolean { return isPlatform(/Mac|iPod|iPhone|iPad/); } From 5f44564faf79537c2dbb93f2a59ddc226a9695c9 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 16:33:45 +0200 Subject: [PATCH 31/33] Hopefully fix mac --- frontend/src/ts/test/caps-warning.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 40e8b956f477..800412222603 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -42,8 +42,6 @@ document.addEventListener("keyup", (event) => { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { capsState = false; - } else { - capsState = isCapsLockOn(event); } } else if (os === "Windows") { // Windows always sends the correct state on keyup (for Caps Lock and for regular keys) @@ -60,8 +58,10 @@ document.addEventListener("keydown", (event) => { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { capsState = true; - updateCapsWarningVisibility(); + } else { + capsState = isCapsLockOn(event); } + updateCapsWarningVisibility(); } else if (os === "Linux") { /* Linux sends the correct state before Caps Lock is toggled only on keydown, * so we invert the modifier state From 66bac514d3195b654ddce7864ed80eaceb2baef4 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 16:36:29 +0200 Subject: [PATCH 32/33] Revert --- frontend/src/ts/test/caps-warning.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index 800412222603..ab2ec75e1b27 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -41,7 +41,7 @@ document.addEventListener("keyup", (event) => { if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { - capsState = false; + capsState = isCapsLockOn(event); } } else if (os === "Windows") { // Windows always sends the correct state on keyup (for Caps Lock and for regular keys) @@ -56,11 +56,7 @@ document.addEventListener("keyup", (event) => { document.addEventListener("keydown", (event) => { if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. - if (event.key === "CapsLock") { - capsState = true; - } else { - capsState = isCapsLockOn(event); - } + capsState = isCapsLockOn(event); updateCapsWarningVisibility(); } else if (os === "Linux") { /* Linux sends the correct state before Caps Lock is toggled only on keydown, From 744609cc44caae5ec49e98ff9e31a62175855c48 Mon Sep 17 00:00:00 2001 From: Leonabcd123 <156839416+Leonabcd123@users.noreply.github.com> Date: Sat, 7 Feb 2026 21:43:39 +0200 Subject: [PATCH 33/33] Always false --- frontend/src/ts/test/caps-warning.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/ts/test/caps-warning.ts b/frontend/src/ts/test/caps-warning.ts index ab2ec75e1b27..30d63daf5797 100644 --- a/frontend/src/ts/test/caps-warning.ts +++ b/frontend/src/ts/test/caps-warning.ts @@ -41,7 +41,7 @@ document.addEventListener("keyup", (event) => { if (os === "Mac") { // macOS sends only keydown when enabling Caps Lock and only keyup when disabling. if (event.key === "CapsLock") { - capsState = isCapsLockOn(event); + capsState = false; } } else if (os === "Windows") { // Windows always sends the correct state on keyup (for Caps Lock and for regular keys)