Files
control/public/assets/wakelock.js
T
2026-06-07 00:33:58 +09:00

71 lines
1.7 KiB
JavaScript

(() => {
'use strict';
const button = document.querySelector('#wakeLockBtn');
if (!button) return;
let wakeLock = null;
let wanted = false;
function supported() {
return 'wakeLock' in navigator;
}
function active() {
return wakeLock !== null && wakeLock.released === false;
}
function render() {
const isActive = active();
button.disabled = !supported();
button.classList.toggle('wake-active', isActive);
button.textContent = 'WakeLock';
button.title = supported() ? '화면 꺼짐 방지' : '현재 브라우저에서 WakeLock을 지원하지 않습니다.';
}
async function requestWakeLock() {
if (!supported()) {
render();
return;
}
wakeLock = await navigator.wakeLock.request('screen');
wakeLock.addEventListener('release', () => {
wakeLock = null;
render();
});
render();
}
async function releaseWakeLock() {
wanted = false;
if (wakeLock) {
await wakeLock.release();
}
wakeLock = null;
render();
}
button.addEventListener('click', () => {
const job = active() ? releaseWakeLock() : (async () => {
wanted = true;
await requestWakeLock();
})();
job.catch(error => {
wanted = false;
wakeLock = null;
alert(error.message || 'WakeLock failed');
render();
});
});
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible' && wanted && !active()) {
requestWakeLock().catch(() => render());
}
});
render();
})();