Files
gott/wwwroot/js/app.js
T
Meleki c9c15279d5 Claude-Statusbar global auf allen Seiten anzeigen + Schließen-Button
- #claudeStatusBar aus Dashboard-Template nach body verschoben (vor #app)
- loadClaudeStatus() von dashboard.js nach app.js (einmalig beim Start)
- Schließen-Button (×) zum Ausblenden der Statusbar
- Status-Bar CSS von dashboard.css nach main.css verschoben
2026-03-03 16:25:23 +01:00

73 lines
1.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ── Global User State ──
var currentUser = null;
// ── App Init ──
document.addEventListener('DOMContentLoaded', async () => {
// Auth-Check: Eingeloggt?
var user = await apiMe();
if (!user) {
await navigateTo('login', {}, { replace: true });
return;
}
currentUser = user;
loadClaudeStatus();
const { page, id } = parseHash();
var target = page === 'login' ? 'dashboard' : page;
await navigateTo(target, { id }, { replace: true });
});
async function loadClaudeStatus() {
const statusBar = document.getElementById('claudeStatusBar');
if (!statusBar) return;
// Schließen-Button
const closeBtn = statusBar.querySelector('.status-close');
if (closeBtn) {
closeBtn.addEventListener('click', () => { statusBar.hidden = true; });
}
try {
const res = await fetch('https://status.claude.com/api/v2/status.json');
if (!res.ok) return;
const data = await res.json();
const indicator = data.status?.indicator || 'none';
const description = data.status?.description || '';
if (indicator === 'none') return;
statusBar.classList.add(`status-${indicator}`);
statusBar.querySelector('.status-text').textContent = description;
statusBar.hidden = false;
} catch {
// Status-Abruf fehlgeschlagen – still ignorieren
}
}
// Browser Zurück/Vor-Button
window.addEventListener('popstate', async (e) => {
var page, id;
if (e.state && e.state.page) {
page = e.state.page;
id = e.state.params ? e.state.params.id : null;
} else {
const parsed = parseHash();
page = parsed.page;
id = parsed.id;
}
// Login-Seite immer erlauben, alles andere nur wenn eingeloggt
if (page !== 'login') {
var user = await apiMe();
if (!user) {
await navigateTo('login', {}, { replace: true });
return;
}
}
await navigateTo(page, { id }, { replace: true });
});