// ── Global State ── var currentUser = null; var currentSettings = null; const SETTINGS_DEFAULTS = { pageWidth: 900, toolCallDisplay: 'modifications', chainMetaDisplay: 'sometimes', showDeletedMessages: false }; function loadSettings() { return Object.assign({}, SETTINGS_DEFAULTS, currentSettings); } async function saveSettings(settings) { currentSettings = settings; applySettings(); try { await apiSaveSettings(settings); } catch (_) {} } function applySettings() { var s = loadSettings(); document.documentElement.style.setProperty('--page-width', s.pageWidth + 'px'); } // ── App Init ── document.addEventListener('DOMContentLoaded', async () => { // Auth-Check: Eingeloggt? const { page, id } = parseHash(); // Shared-Page braucht kein Login if (page === 'shared') { await navigateTo('shared', { id }, { replace: true }); return; } var user = await apiMe(); if (!user) { await navigateTo('login', {}, { replace: true }); return; } currentUser = user; currentSettings = await apiGetSettings(); applySettings(); loadClaudeStatus(); 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- und Shared-Seite immer erlauben, alles andere nur wenn eingeloggt if (page !== 'login' && page !== 'shared') { var user = await apiMe(); if (!user) { await navigateTo('login', {}, { replace: true }); return; } } await navigateTo(page, { id }, { replace: true }); });