diff options
| author | Ken D'Ambrosio <ken@jots.org> | 2026-05-12 06:12:37 +0000 |
|---|---|---|
| committer | Ken D'Ambrosio <ken@jots.org> | 2026-05-12 06:12:37 +0000 |
| commit | 9072f98160a12945a8706b64b226bdf3ea63ee2d (patch) | |
| tree | 16a1d6b34c86a28050ab411eb49ba79d62cb20ea /public | |
| parent | e1e93e4ded6d8f8bfa12a99b12abe7e7e3b29775 (diff) | |
Keep screen awake during slideshow via Wake Lock API
Acquire a screen wake lock when the slideshow is playing; release on
pause or page hide; re-acquire when the tab returns to the foreground.
Failures are silently ignored so older browsers degrade gracefully.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'public')
| -rw-r--r-- | public/js/slideshow.js | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/public/js/slideshow.js b/public/js/slideshow.js index 7df0955..b8e2a11 100644 --- a/public/js/slideshow.js +++ b/public/js/slideshow.js @@ -4,6 +4,17 @@ let ssIdx = 0; let ssTimer = null; let ssPlaying = true; let ssQueue = SS_ENTRIES.slice(); +let wakeLock = null; + +async function acquireWakeLock() { + if (!('wakeLock' in navigator) || document.hidden) return; + try { wakeLock = await navigator.wakeLock.request('screen'); } catch (_) {} +} + +function releaseWakeLock() { + wakeLock?.release(); + wakeLock = null; +} const img = document.getElementById('ss-img'); const vid = document.getElementById('ss-video'); @@ -87,7 +98,8 @@ function ssPrev() { function ssToggle() { ssPlaying = !ssPlaying; btn.textContent = ssPlaying ? '⏸ Pause' : '▶ Play'; - if (ssPlaying) ssSchedule(); else clearTimeout(ssTimer); + if (ssPlaying) { ssSchedule(); acquireWakeLock(); } + else { clearTimeout(ssTimer); releaseWakeLock(); } } // ── Shuffle ──────────────────────────────────────────────────────────────────── @@ -140,11 +152,13 @@ document.addEventListener('fullscreenchange', onFsChange); document.addEventListener('webkitfullscreenchange', onFsChange); // Pause timer while tab is hidden; reschedule fresh on return so no burst catch-up. +// Wake lock is auto-released by the browser on hide; re-acquire on return. document.addEventListener('visibilitychange', () => { if (document.hidden) { clearTimeout(ssTimer); } else if (ssPlaying) { ssSchedule(); + acquireWakeLock(); } }); @@ -190,6 +204,7 @@ if (ssParams.get('shuffle') === '1') { if (ssQueue.length > 0) { ssShow(0, true); ssSchedule(); + acquireWakeLock(); } // Browsers require a live user gesture for requestFullscreen — entering it |
