Split app.js into one script per feature; versioning covers every public file; README for the new features
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c1f4a220f9
commit
1564941ea5
20 files changed
+2297
-2275
No files matched your search
@@ -0,0 +1,35 @@
|
||||
'use strict';
|
||||
// ---- Boot
|
||||
(async () => {
|
||||
try { cfg = { ...cfg, ...(await (await fetch('/api/config')).json()) }; } catch {}
|
||||
const loadedBuild = cfg.build;
|
||||
// When a new version is deployed, an open page keeps running the old one. Tell the person, and offer a reload.
|
||||
const checkForUpdate = async () => {
|
||||
try {
|
||||
const c = await (await fetch('/api/config', { cache: 'no-store' })).json();
|
||||
if (c.build && loadedBuild && c.build !== loadedBuild && !document.getElementById('upd')) {
|
||||
const b = document.createElement('div'); b.id = 'upd';
|
||||
b.innerHTML = 'A new version of NE Hub is available. <button class="btn" id="updgo">Reload</button>';
|
||||
document.body.appendChild(b); document.getElementById('updgo').onclick = () => location.reload();
|
||||
}
|
||||
} catch {}
|
||||
};
|
||||
document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'visible') checkForUpdate(); });
|
||||
setInterval(checkForUpdate, 10 * 60e3);
|
||||
await loadMe();
|
||||
await loadSettings();
|
||||
sgStart();
|
||||
addEventListener('hashchange', route);
|
||||
restorePlayer();
|
||||
route();
|
||||
if ('serviceWorker' in navigator) navigator.serviceWorker.register('/sw.js').catch(() => {});
|
||||
})();
|
||||
|
||||
// Keyboard (desktop): space play/pause, arrows seek, N/P next/previous.
|
||||
addEventListener('keydown', e => {
|
||||
const tag = e.target.tagName || '', k = e.key;
|
||||
if (e.metaKey || e.ctrlKey || e.altKey || !cur() || /^(INPUT|TEXTAREA|SELECT)$/.test(tag) || (k === ' ' && /^(BUTTON|A)$/.test(tag))) return;
|
||||
if (k === ' ') { e.preventDefault(); toggle(); }
|
||||
else if (k === 'ArrowRight') pl.a.currentTime += 10; else if (k === 'ArrowLeft') pl.a.currentTime = Math.max(0, pl.a.currentTime - 10);
|
||||
else if (k === 'n' || k === 'N') next(); else if (k === 'p' || k === 'P') prev();
|
||||
});
|
||||
Reference in new issue
Block a user