/* =================================================================== Gemeinsames Verhalten der Kopfleiste: Zurück-Knopf und Abmelden. Liegt bewusst in einer eigenen Datei. Vorher stand das Abmelden in jeder Seitendatei noch einmal -- fünfmal derselbe Block, fünfmal eine Stelle zum Vergessen, wenn sich etwas ändert. =================================================================== */ (() => { 'use strict'; const START = '/workspace/start.html'; /* Gibt es eine sinnvolle vorherige Seite INNERHALB des Workspace? Blindes history.back() reicht nicht: Wer die Adresse direkt eingibt oder gerade von der Anmeldung kommt, landet damit außerhalb des Workspace oder wieder im Anmeldeformular. Deshalb wird zuerst geprüft, woher der Aufruf kam. */ function hatVorherigeSeite() { if (!document.referrer) return false; let u; try { u = new URL(document.referrer); } catch { return false; } if (u.origin !== location.origin) return false; if (!u.pathname.startsWith('/workspace/')) return false; /* Die Anmeldeseite ist kein sinnvolles Ziel -- wer angemeldet ist, würde dort sofort wieder weitergeleitet. */ if (u.pathname === '/workspace/' || u.pathname.endsWith('/index.html')) return false; /* Gleiche Seite heißt: neu geladen, nicht hergekommen. */ if (u.pathname === location.pathname) return false; return true; } const knopf = document.getElementById('zurueck'); if (knopf) { const aufStartseite = location.pathname.endsWith('/start.html'); if (hatVorherigeSeite()) { knopf.hidden = false; knopf.addEventListener('click', () => { /* history.back() statt eines festen Ziels: Es führt wirklich dorthin zurück, wo man war -- samt Bildlaufposition. Nur wenn es keine Historie gibt, wird ersatzweise umgeleitet. */ if (history.length > 1) history.back(); else location.assign(START); }); } else if (!aufStartseite) { /* Kein Verlauf, aber wir sind in einem Unterbereich: dann wenigstens ein Weg zur Übersicht. */ knopf.hidden = false; knopf.textContent = '← Übersicht'; knopf.addEventListener('click', () => location.assign(START)); } /* Auf der Startseite ohne Verlauf bleibt der Knopf aus -- ein Knopf, der nichts tut, ist schlimmer als keiner. */ } const abmelden = document.getElementById('abmelden'); if (abmelden) { abmelden.addEventListener('click', async () => { abmelden.disabled = true; try { await fetch('/workspace/api/abmelden', { method: 'POST', credentials: 'same-origin', }); } catch { /* Auch ohne Antwort weiterleiten -- das Cookie läuft ohnehin ab. */ } location.assign('/workspace/'); }); } })();