feat: persist TTS speed, voice, and auto-next in localStorage

Settings are loaded on page init and saved on every change so they carry
over across chapter navigation and page reloads.
This commit is contained in:
Admin
2026-03-01 15:39:18 +05:00
parent 46f49f47ac
commit a4def535d8

View File

@@ -718,10 +718,44 @@ const chapterTmpl = `
var prefetchAbort = null;
var prefetchReady = false; // true once canplay fired on prefetchAudio
// ── localStorage persistence ─────────────────────────────────────────────────
// Settings saved: tts_speed, tts_voice, tts_autonext
// Loaded once on page init; written on every change.
var LS_SPEED = 'tts_speed';
var LS_VOICE = 'tts_voice';
var LS_AUTONEXT = 'tts_autonext';
(function loadSettings() {
var savedSpeed = localStorage.getItem(LS_SPEED);
if (savedSpeed !== null) {
speedSlider.value = savedSpeed;
speedLabel.textContent = parseFloat(savedSpeed).toFixed(1) + '\u00D7';
}
var savedVoice = localStorage.getItem(LS_VOICE);
if (savedVoice !== null) {
var opt = voiceSel.querySelector('option[value="' + savedVoice + '"]');
if (opt) voiceSel.value = savedVoice;
}
var savedAutoNext = localStorage.getItem(LS_AUTONEXT);
if (savedAutoNext !== null) {
autoplayChk.checked = savedAutoNext === 'true';
}
})();
// ── speed slider ─────────────────────────────────────────────────────────────
speedSlider.addEventListener('input', function () {
speedLabel.textContent = parseFloat(speedSlider.value).toFixed(1) + '\u00D7';
localStorage.setItem(LS_SPEED, speedSlider.value);
});
voiceSel.addEventListener('change', function () {
localStorage.setItem(LS_VOICE, voiceSel.value);
});
autoplayChk.addEventListener('change', function () {
localStorage.setItem(LS_AUTONEXT, autoplayChk.checked ? 'true' : 'false');
});
// ── paragraph indexing ───────────────────────────────────────────────────────