summaryrefslogtreecommitdiffstats
path: root/public/js
diff options
context:
space:
mode:
authorKen D'Ambrosio <ken@jots.org>2026-05-12 06:12:37 +0000
committerKen D'Ambrosio <ken@jots.org>2026-05-12 06:12:37 +0000
commit9072f98160a12945a8706b64b226bdf3ea63ee2d (patch)
tree16a1d6b34c86a28050ab411eb49ba79d62cb20ea /public/js
parente1e93e4ded6d8f8bfa12a99b12abe7e7e3b29775 (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/js')
-rw-r--r--public/js/slideshow.js17
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