Files
Catalyst/js/app.js
josh 9576b847bd
Some checks failed
Build / build (push) Has been cancelled
Build / release (push) Has been cancelled
Build / test (push) Has been cancelled
adds version to web ui
2026-03-28 01:44:09 -04:00

49 lines
1.8 KiB
JavaScript

// ── Router ────────────────────────────────────────────────────────────────────
function navigate(page, vmid) {
document.querySelectorAll('.page').forEach(p => p.classList.remove('active'));
if (page === 'dashboard') {
document.getElementById('page-dashboard').classList.add('active');
history.pushState({ page: 'dashboard' }, '', '/');
renderDashboard();
} else if (page === 'instance') {
document.getElementById('page-detail').classList.add('active');
history.pushState({ page: 'instance', vmid }, '', `/instance/${vmid}`);
renderDetailPage(vmid);
}
}
function handleRoute() {
const m = window.location.pathname.match(/^\/instance\/(\d+)/);
if (m) {
document.getElementById('page-detail').classList.add('active');
renderDetailPage(parseInt(m[1], 10));
} else {
document.getElementById('page-dashboard').classList.add('active');
}
}
window.addEventListener('popstate', e => {
document.querySelectorAll('.page').forEach(p => p.classList.remove('active'));
if (e.state?.page === 'instance') {
document.getElementById('page-detail').classList.add('active');
renderDetailPage(e.state.vmid);
} else {
document.getElementById('page-dashboard').classList.add('active');
renderDashboard();
}
});
// ── Bootstrap ─────────────────────────────────────────────────────────────────
fetch('/package.json')
.then(r => r.json())
.then(pkg => { document.getElementById('nav-version').textContent = `v${pkg.version}`; })
.catch(() => {});
initDB().then(() => {
renderDashboard();
handleRoute();
});