feat(ui): persist header brightness slider in localStorage
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,8 +2,44 @@
|
|||||||
let currentZoneId = null;
|
let currentZoneId = null;
|
||||||
let brightnessSendTimeout = null;
|
let brightnessSendTimeout = null;
|
||||||
|
|
||||||
|
const UI_BRIGHTNESS_STORAGE_KEY = "led_controller_ui_brightness";
|
||||||
|
|
||||||
|
function clamp255(n) {
|
||||||
|
const v = parseInt(n, 10);
|
||||||
|
if (Number.isNaN(v)) return null;
|
||||||
|
return Math.max(0, Math.min(255, v));
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadSavedUiBrightness() {
|
||||||
|
try {
|
||||||
|
const raw = localStorage.getItem(UI_BRIGHTNESS_STORAGE_KEY);
|
||||||
|
if (raw == null) return null;
|
||||||
|
return clamp255(raw);
|
||||||
|
} catch (_) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function persistUiBrightness(value) {
|
||||||
|
const v = clamp255(value);
|
||||||
|
if (v === null) return;
|
||||||
|
try {
|
||||||
|
localStorage.setItem(UI_BRIGHTNESS_STORAGE_KEY, String(v));
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function applyBrightnessSliders(val) {
|
||||||
|
const v = clamp255(val);
|
||||||
|
if (v === null) return;
|
||||||
|
const headerSlider = document.getElementById("header-brightness-slider");
|
||||||
|
const menuSlider = document.getElementById("menu-brightness-slider");
|
||||||
|
if (headerSlider) headerSlider.value = String(v);
|
||||||
|
if (menuSlider) menuSlider.value = String(v);
|
||||||
|
}
|
||||||
|
|
||||||
function sendZoneBrightness(value) {
|
function sendZoneBrightness(value) {
|
||||||
const val = Math.max(0, Math.min(255, parseInt(value, 10) || 0));
|
const val = Math.max(0, Math.min(255, parseInt(value, 10) || 0));
|
||||||
|
persistUiBrightness(val);
|
||||||
const headerSlider = document.getElementById('header-brightness-slider');
|
const headerSlider = document.getElementById('header-brightness-slider');
|
||||||
const menuSlider = document.getElementById('menu-brightness-slider');
|
const menuSlider = document.getElementById('menu-brightness-slider');
|
||||||
if (headerSlider && String(headerSlider.value) !== String(val)) {
|
if (headerSlider && String(headerSlider.value) !== String(val)) {
|
||||||
@@ -990,17 +1026,21 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const menuBrightnessSlider = document.getElementById('menu-brightness-slider');
|
const menuBrightnessSlider = document.getElementById('menu-brightness-slider');
|
||||||
|
const headerBrightnessSlider = document.getElementById('header-brightness-slider');
|
||||||
|
const savedBr = loadSavedUiBrightness();
|
||||||
|
if (savedBr !== null) {
|
||||||
|
applyBrightnessSliders(savedBr);
|
||||||
|
}
|
||||||
if (menuBrightnessSlider) {
|
if (menuBrightnessSlider) {
|
||||||
menuBrightnessSlider.addEventListener('input', (e) => {
|
menuBrightnessSlider.addEventListener('input', (e) => {
|
||||||
sendZoneBrightness(e.target.value);
|
sendZoneBrightness(e.target.value);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const headerBrightnessSlider = document.getElementById('header-brightness-slider');
|
|
||||||
if (headerBrightnessSlider) {
|
if (headerBrightnessSlider) {
|
||||||
headerBrightnessSlider.addEventListener('input', (e) => {
|
headerBrightnessSlider.addEventListener('input', (e) => {
|
||||||
sendZoneBrightness(e.target.value);
|
sendZoneBrightness(e.target.value);
|
||||||
});
|
});
|
||||||
// Initial sync so both controls start aligned.
|
// Apply saved (or default) level to devices once the page is ready.
|
||||||
sendZoneBrightness(headerBrightnessSlider.value);
|
sendZoneBrightness(headerBrightnessSlider.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user