- #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
73 lines
1.9 KiB
JavaScript
73 lines
1.9 KiB
JavaScript
// ── 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 });
|
||
});
|