From 4320b14441faeecb3b1a6956db257516c6c29233 Mon Sep 17 00:00:00 2001 From: Danny Date: Fri, 24 Apr 2026 11:28:57 +0200 Subject: [PATCH] feat(webapp): settings toggle for the +/- weight button Users on devices with a proper numeric+sign keyboard (most Android, desktop) don't need the +/- button and may find it clutter. Added a "Negative weight button" toggle in Settings; default on. Co-Authored-By: Claude Opus 4.7 (1M context) --- webapp/app.js | 17 +++++++++++++++-- webapp/index.html | 9 +++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/webapp/app.js b/webapp/app.js index 6c9c658..6559fac 100644 --- a/webapp/app.js +++ b/webapp/app.js @@ -203,7 +203,7 @@ let currentExercise = null; let editingWorkoutId = null; // non-null when editing a saved workout let lastSetAt = null; // ms-epoch of most recent addSet, or null let restTimerInterval = null; -let settings = { rest_timer: true }; +let settings = { rest_timer: true, weight_sign_button: true }; function settingEnabled(key, def = true) { const v = settings[key]; @@ -922,7 +922,7 @@ async function loadSettings() { if (!userId) return; try { const data = await api("GET", "/settings"); - settings = { rest_timer: true, ...(data.settings || {}) }; + settings = { rest_timer: true, weight_sign_button: true, ...(data.settings || {}) }; applySettingsToUI(); updateRestTimer(); } catch (e) { @@ -930,15 +930,24 @@ async function loadSettings() { } } +function applyWeightSignVisibility() { + if (!btnWeightSign) return; + btnWeightSign.classList.toggle("hidden", !settingEnabled("weight_sign_button")); +} + function applySettingsToUI() { const restToggle = document.getElementById("setting-rest-timer"); if (restToggle) restToggle.checked = settingEnabled("rest_timer"); + const signToggle = document.getElementById("setting-weight-sign"); + if (signToggle) signToggle.checked = settingEnabled("weight_sign_button"); + applyWeightSignVisibility(); } async function saveSetting(key, value) { // Optimistic: update locally first, then sync. settings[key] = value; updateRestTimer(); + applyWeightSignVisibility(); try { await api("PUT", "/settings", { [key]: value }); } catch (e) { @@ -951,6 +960,10 @@ document.getElementById("setting-rest-timer")?.addEventListener("change", (e) => saveSetting("rest_timer", e.target.checked); }); +document.getElementById("setting-weight-sign")?.addEventListener("change", (e) => { + saveSetting("weight_sign_button", e.target.checked); +}); + // ── Version badge ─────────────────────────────────────────────── async function loadVersion() { try { diff --git a/webapp/index.html b/webapp/index.html index 6efa8a4..dc5f84a 100644 --- a/webapp/index.html +++ b/webapp/index.html @@ -105,6 +105,15 @@ +
+ +