Wunsch: "ich will auch immer bei jeder seite auch immer einen knopf
haben damit ich zurueck gehen kann auf die seite vorher."
Neues gemeinsames Modul assets/js/kopf.js. Blindes history.back() reicht
dafuer nicht: Wer die Adresse direkt eingibt oder gerade von der
Anmeldung kommt, landet damit ausserhalb des Workspace oder wieder im
Anmeldeformular. Deshalb wird zuerst geprueft, woher der Aufruf kam:
* vorherige Seite im Workspace -> "Zurueck", history.back()
(fuehrt wirklich dorthin zurueck, samt Bildlaufposition)
* kein Verlauf, aber Unterseite -> "Uebersicht", geht zur Startseite
* kein Verlauf auf der Startseite -> Knopf bleibt verborgen
Ein Knopf, der nichts tut, ist schlimmer als keiner.
Der Knopf sitzt links in der Kopfleiste, an derselben Stelle wie im
Browser.
Nebenbei aufgeraeumt: Das Abmelden stand bisher in jeder der fuenf
Seitendateien noch einmal -- fuenfmal derselbe Block, fuenfmal eine
Stelle zum Vergessen. Liegt jetzt ebenfalls in kopf.js.
Geprueft: Start nach Login -> verborgen; Aufgaben von Start ->
"Zurueck", fuehrt zurueck; Kalender direkt aufgerufen -> "Uebersicht".
Keine Konsolenfehler, Abmelden funktioniert weiterhin.
Nur statische Dateien, kein Neustart noetig.
69 lines
2.8 KiB
JavaScript
69 lines
2.8 KiB
JavaScript
/* ===================================================================
|
|
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/');
|
|
});
|
|
}
|
|
})();
|