From 4e1028e1a1cb343b823b7ff117e6488c821f89e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20K=C3=BChn?= Date: Sat, 2 May 2026 09:53:41 +0200 Subject: [PATCH] Keep screen awake via Wake Lock API while stopwatch is running Co-Authored-By: Claude Sonnet 4.6 --- public/app.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/public/app.js b/public/app.js index cd56561..e6991f4 100644 --- a/public/app.js +++ b/public/app.js @@ -955,6 +955,18 @@ var sw = (function(){ var swEl = document.getElementById('sw'); var state = 0; // 0=stopped, 1=running, 2=paused var start = 0, elapsed = 0, raf = null; + var wakeLock = null; + + function acquireWakeLock(){ + if(!('wakeLock' in navigator)) return; + navigator.wakeLock.request('screen').then(function(s){ wakeLock = s; }).catch(function(){}); + } + function releaseWakeLock(){ + if(wakeLock){ wakeLock.release(); wakeLock = null; } + } + document.addEventListener('visibilitychange', function(){ + if(document.visibilityState === 'visible' && state === 1) acquireWakeLock(); + }); function getMs(){ return state === 1 ? elapsed + (Date.now() - start) : elapsed; } @@ -975,18 +987,18 @@ var sw = (function(){ if(state === 0){ start = Date.now(); elapsed = 0; swEl.classList.add('running'); - state = 1; tick(); + state = 1; tick(); acquireWakeLock(); } else if(state === 1){ cancelAnimationFrame(raf); elapsed += Date.now() - start; swEl.textContent = fmt(elapsed); swEl.classList.remove('running'); - state = 2; updateFillBtns(); + state = 2; updateFillBtns(); releaseWakeLock(); } else { cancelAnimationFrame(raf); elapsed = 0; swEl.textContent = '0.00s'; swEl.classList.remove('running'); - state = 0; updateFillBtns(); + state = 0; updateFillBtns(); releaseWakeLock(); } });