Add fullscreen toggle and wake lock to prevent screen sleep
## Features - Fullscreen button (⛶) in header to toggle fullscreen mode - Wake Lock API integration to keep screen on while using the app - Sun icon (☀) indicator shows wake lock status (bright = active) ## Wake Lock behavior - Automatically requests wake lock when page loads - Re-acquires wake lock when returning to the page - Visual indicator pulses when active - Gracefully hidden if Wake Lock API not supported ## Fullscreen - Works on Android Chrome and desktop browsers - iOS Safari has limited support (no fullscreen API) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ class MacroPadApp {
|
||||
this.tabs = [];
|
||||
this.currentTab = 'All';
|
||||
this.ws = null;
|
||||
this.wakeLock = null;
|
||||
|
||||
this.init();
|
||||
}
|
||||
@@ -15,6 +16,7 @@ class MacroPadApp {
|
||||
await this.loadMacros();
|
||||
this.setupWebSocket();
|
||||
this.setupEventListeners();
|
||||
this.setupWakeLock();
|
||||
this.checkInstallPrompt();
|
||||
}
|
||||
|
||||
@@ -245,6 +247,58 @@ class MacroPadApp {
|
||||
this.loadTabs();
|
||||
this.loadMacros();
|
||||
}
|
||||
|
||||
// Fullscreen
|
||||
toggleFullscreen() {
|
||||
if (!document.fullscreenElement) {
|
||||
document.documentElement.requestFullscreen().catch(err => {
|
||||
console.log('Fullscreen error:', err);
|
||||
});
|
||||
} else {
|
||||
document.exitFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
// Wake Lock - prevents screen from sleeping
|
||||
async setupWakeLock() {
|
||||
if (!('wakeLock' in navigator)) {
|
||||
console.log('Wake Lock API not supported');
|
||||
document.getElementById('wake-lock-status')?.remove();
|
||||
return;
|
||||
}
|
||||
|
||||
// Request wake lock
|
||||
await this.requestWakeLock();
|
||||
|
||||
// Re-acquire wake lock when page becomes visible again
|
||||
document.addEventListener('visibilitychange', async () => {
|
||||
if (document.visibilityState === 'visible') {
|
||||
await this.requestWakeLock();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async requestWakeLock() {
|
||||
try {
|
||||
this.wakeLock = await navigator.wakeLock.request('screen');
|
||||
this.updateWakeLockStatus(true);
|
||||
|
||||
this.wakeLock.addEventListener('release', () => {
|
||||
this.updateWakeLockStatus(false);
|
||||
});
|
||||
} catch (err) {
|
||||
console.log('Wake Lock error:', err);
|
||||
this.updateWakeLockStatus(false);
|
||||
}
|
||||
}
|
||||
|
||||
updateWakeLockStatus(active) {
|
||||
const status = document.getElementById('wake-lock-status');
|
||||
if (status) {
|
||||
status.classList.toggle('active', active);
|
||||
status.title = active ? 'Screen will stay on' : 'Screen may sleep';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize app
|
||||
|
||||
Reference in New Issue
Block a user