From d11f7b48769d513be1c406925257439aa80729d4 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Wed, 25 Mar 2026 22:35:11 +0100 Subject: [PATCH] [feat](trx-frontend-http): add F1 keyboard shortcuts overlay Press F1 to toggle a help overlay listing available keyboard shortcuts. Dismiss with F1, Escape, or clicking the backdrop. Refactored the global keydown handler to route all shortcuts through one listener. Co-Authored-By: Claude Opus 4.6 (1M context) Signed-off-by: Stan Grams --- .../trx-frontend-http/assets/web/app.js | 48 +++++++++++- .../trx-frontend-http/assets/web/index.html | 13 ++++ .../trx-frontend-http/assets/web/style.css | 77 +++++++++++++++++++ 3 files changed, 135 insertions(+), 3 deletions(-) diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js index 706d687..f4d228a 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js +++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js @@ -9823,13 +9823,55 @@ function shouldIgnoreGlobalShortcut(target) { return !!target.closest("[contenteditable='true']"); } +// ── Shortcut help overlay ───────────────────────────────────────────────────── +function toggleShortcutOverlay() { + const el = document.getElementById("shortcut-overlay"); + if (!el) return; + el.classList.toggle("is-hidden"); +} +function hideShortcutOverlay() { + const el = document.getElementById("shortcut-overlay"); + if (el) el.classList.add("is-hidden"); +} +function isShortcutOverlayVisible() { + const el = document.getElementById("shortcut-overlay"); + return el && !el.classList.contains("is-hidden"); +} +document.addEventListener("DOMContentLoaded", () => { + const overlay = document.getElementById("shortcut-overlay"); + if (overlay) overlay.addEventListener("click", (e) => { + if (e.target === overlay) hideShortcutOverlay(); + }); +}); + window.addEventListener("keydown", (event) => { if (event.defaultPrevented || event.repeat || event.isComposing) return; + + const key = (event.key || "").toLowerCase(); + + // F1 — toggle shortcut help + if (event.key === "F1") { + event.preventDefault(); + toggleShortcutOverlay(); + return; + } + + // Escape — close shortcut overlay if open + if (event.key === "Escape" && isShortcutOverlayVisible()) { + event.preventDefault(); + hideShortcutOverlay(); + return; + } + if (event.ctrlKey || event.metaKey || event.altKey) return; if (shouldIgnoreGlobalShortcut(event.target)) return; - if ((event.key || "").toLowerCase() !== "s") return; - event.preventDefault(); - void captureSpectrumScreenshot(); + + // S — spectrum screenshot + if (key === "s") { + event.preventDefault(); + void captureSpectrumScreenshot(); + return; + } }, { capture: true }); // ── Zoom helpers ────────────────────────────────────────────────────────────── diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/index.html b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/index.html index 8f6f489..9a3dc37 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/index.html +++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/index.html @@ -1046,6 +1046,19 @@ +