From 778e6959411424f3ce438c16eada73e556aa50bb Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Sat, 28 Feb 2026 12:21:39 +0100 Subject: [PATCH] [fix](trx-frontend-http): sanitize stale tune step options Co-authored-by: Codex Signed-off-by: Stan Grams --- .../trx-frontend-http/assets/web/app.js | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 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 646d3e8..e042253 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 @@ -1720,6 +1720,7 @@ const jogDownBtn = document.getElementById("jog-down"); const jogUpBtn = document.getElementById("jog-up"); const jogStepEl = document.getElementById("jog-step"); const jogMultEl = document.getElementById("jog-mult"); +const VALID_JOG_DIVISORS = new Set([1, 10]); function applyJogStep() { jogStep = Math.max(Math.round(jogUnit / jogMult), minFreqStepHz); @@ -1731,7 +1732,7 @@ function applyJogStep() { } function setJogDivisor(divisor) { - const next = divisor === 10 ? 10 : 1; + const next = VALID_JOG_DIVISORS.has(divisor) ? divisor : 1; jogMult = next; if (jogMultEl) { jogMultEl.querySelectorAll("button[data-mult]").forEach((b) => { @@ -1820,13 +1821,16 @@ jogStepEl.addEventListener("click", (e) => { // Step multiplier selector if (jogMultEl) { + jogMultEl.querySelectorAll("button[data-mult]").forEach((btn) => { + const divisor = parseInt(btn.dataset.mult, 10); + if (!VALID_JOG_DIVISORS.has(divisor)) { + btn.remove(); + } + }); jogMultEl.addEventListener("click", (e) => { const btn = e.target.closest("button[data-mult]"); if (!btn) return; - jogMult = parseInt(btn.dataset.mult, 10); - jogMultEl.querySelectorAll("button").forEach((b) => b.classList.remove("active")); - btn.classList.add("active"); - applyJogStep(); + setJogDivisor(parseInt(btn.dataset.mult, 10)); }); } @@ -1844,12 +1848,16 @@ if (jogMultEl) { if (jogMultEl) { const multBtns = Array.from(jogMultEl.querySelectorAll("button[data-mult]")); const activeMult = - multBtns.find((b) => parseInt(b.dataset.mult, 10) === jogMult) || + multBtns.find((b) => parseInt(b.dataset.mult, 10) === jogMult && VALID_JOG_DIVISORS.has(jogMult)) || multBtns.find((b) => parseInt(b.dataset.mult, 10) === 1) || multBtns[0]; if (activeMult) { - jogMult = parseInt(activeMult.dataset.mult, 10); + jogMult = VALID_JOG_DIVISORS.has(parseInt(activeMult.dataset.mult, 10)) + ? parseInt(activeMult.dataset.mult, 10) + : 1; multBtns.forEach((b) => b.classList.toggle("active", b === activeMult)); + } else { + jogMult = 1; } } jogStep = Math.max(Math.round(jogUnit / jogMult), minFreqStepHz);