Workspace: Zurueck-Knopf hochwertiger, auf der Startseite entfernt
Zwei Rueckmeldungen umgesetzt. 1. Auf der Startseite gibt es den Knopf jetzt gar nicht mehr im Dokument. Vorher erschien er dort, sobald man von einer anderen Workspace-Seite kam -- aber die Startseite IST die oberste Ebene, ein "davor" gibt es nicht. 2. Aussehen: statt des Textzeichens "<-" jetzt ein echtes SVG-Winkel- symbol, Pillenform, und ein Verlaufsrahmen. Wichtig dabei: Die Fuellung ist DECKEND. Beim ersten Versuch war sie halbtransparent, dadurch schien der Rahmenverlauf durch die ganze Flaeche und der Knopf sah aus wie eine Hauptaktion -- genau das soll er nicht. Jetzt bleibt vom Verlauf nur der 1px schmale Rand sichtbar. Ruhezustand: dunkle Pille, feine Stahlkante, gedaempfter Text. Ueberfahren: Cyan-Violett-Rand, heller Text, weicher Schein, und der Pfeil rueckt zwei Pixel nach links -- die Bewegung sagt die Richtung ohne zusaetzlichen Text. Bei prefers-reduced-motion faellt sie weg. Geprueft: Start -> kein Knopf; Aufgaben -> "Zurueck", fuehrt zurueck; Personen direkt aufgerufen -> "Uebersicht". Keine Konsolenfehler. Nur statische Dateien, kein Neustart noetig.
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
/* ===================================================================
|
||||
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;
|
||||
}
|
||||
|
||||
/* Die Startseite hat den Knopf gar nicht erst im Dokument -- dort gibt
|
||||
es kein "davor". Deshalb genügt hier die Prüfung, ob er existiert. */
|
||||
const knopf = document.getElementById('zurueck');
|
||||
if (knopf) {
|
||||
const beschriftung = knopf.querySelector('.zurueck-knopf__text');
|
||||
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 {
|
||||
/* Kein Verlauf, aber wir sind in einem Unterbereich: dann wenigstens
|
||||
ein Weg zur Übersicht. */
|
||||
knopf.hidden = false;
|
||||
if (beschriftung) beschriftung.textContent = 'Übersicht';
|
||||
knopf.addEventListener('click', () => location.assign(START));
|
||||
}
|
||||
}
|
||||
|
||||
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/');
|
||||
});
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user