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:
@@ -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 ───────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user