From 280664b8a358086b336ab246f29b9fe3e69e113a Mon Sep 17 00:00:00 2001 From: fds2610-bot Date: Tue, 18 Aug 2026 11:45:45 +0200 Subject: [PATCH] =?UTF-8?q?Seitenleiste:=20Marke=20mit=20M=C3=BCnzstapel,?= =?UTF-8?q?=20ein=20Klick=20schiebt=20sie=20auf=20Symbolbreite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Marke oben in der Seitenleiste trägt jetzt das Coinstack-Symbol aus den Altdaten und den zweifarbigen Schriftzug Finanz|manager – wie die sidebar-brand im Steuerkram. Sie ist zugleich der Schalter: Ein Klick schiebt die Leiste von 232 px auf 64 px zusammen, ein Klick auf das Symbol klappt sie wieder auf. Die Menüpunkte behalten dabei Ziel und Symbol. Der Zustand steht in einem Cookie und nicht im localStorage: So rendert der Server die Leiste schon in der richtigen Breite, statt sie bei jedem Seitenwechsel kurz breit aufblitzen zu lassen. Die Beschriftungen wandern eingeklappt per clip-path aus dem Bild statt per display:none – sonst verlören die Verweise ihren Namen für Vorleseprogramme. Nebenbei: Die Marke hieß bisher .marke, wie die kleine Statusmarke weiter unten im Stilblatt, deren Regeln sie überschrieben. Sie heißt jetzt .seitenleisten-marke. Co-Authored-By: Claude Opus 5 --- Changes.md | 23 +++ public/static/app.css | 80 +++++++- public/static/app.js | 18 ++ public/static/coinstack.png | Bin 0 -> 26229 bytes src/Views/layout/kopf.php | 25 ++- tests/33_SeitenleisteEinklappenTest.php | 231 ++++++++++++++++++++++++ tests/e2e/specs/seitenleiste.spec.js | 72 ++++++++ 7 files changed, 440 insertions(+), 9 deletions(-) create mode 100644 public/static/coinstack.png create mode 100644 tests/33_SeitenleisteEinklappenTest.php create mode 100644 tests/e2e/specs/seitenleiste.spec.js diff --git a/Changes.md b/Changes.md index c08d702..79a0849 100644 --- a/Changes.md +++ b/Changes.md @@ -1,5 +1,28 @@ # Änderungen +## Seitenleiste: Marke mit Münzstapel, ein Klick schiebt sie auf Symbolbreite (18.08.2026) + +Oben in der Seitenleiste steht jetzt eine richtige **Marke**: das Bild `Coinstack.png` aus den +Altdaten als Symbol (`public/static/coinstack.png`, auf 128 px gerechnet) und daneben der +zweifarbige Schriftzug **Finanz**manager – dieselbe Machart wie die `sidebar-brand` im +Schwesterprojekt Steuerkram. + +Die Marke ist zugleich der **Schalter**: Ein Klick schiebt die Seitenleiste von 232 px auf +64 px zusammen, dann stehen dort nur noch das Markensymbol und die Symbole der Menüpunkte – +mit unveränderten Zielen; der gewonnene Platz geht an den Hauptbereich. Ein Klick auf das +Symbol ganz oben klappt sie wieder auf ihre alte Breite auf. + +Zwei Feinheiten: Der Zustand steht in einem **Cookie**, nicht im `localStorage` – so rendert +der Server die Leiste schon in der richtigen Breite, statt sie bei jedem Seitenwechsel kurz +breit aufblitzen zu lassen. Und die Beschriftungen werden eingeklappt nur **aus dem Bild +geschoben** (`clip-path`), nicht mit `display:none` entfernt: Sonst verlören die Verweise +ihren Namen für Vorleseprogramme. In schmalen Fenstern, wo die Navigation ohnehin waagerecht +liegt, bleibt alles wie gehabt. + +Nebenbei behoben: Die Marke der Seitenleiste hieß bisher schlicht `.marke` – dieselbe Klasse +wie die kleine Statusmarke weiter unten im Stilblatt, deren Regeln sie überschrieben. Sie +heißt jetzt `.seitenleisten-marke`. + ## Bankleitzahlen-Verzeichnis: die FinTS-Adresse nachschlagen statt suchen (18.08.2026) Beim Anlegen einer FinTS-Verbindung fehlt in aller Regel genau eine Angabe: der diff --git a/public/static/app.css b/public/static/app.css index 6b27610..63ad251 100644 --- a/public/static/app.css +++ b/public/static/app.css @@ -24,6 +24,7 @@ --navi-text: #cdd7e2; --navi-text-aktiv: #ffffff; --navi-aktiv: #1f6feb; + --navi-marke: #6ea8fe; --positiv: #1a7f4b; --negativ: #c0392b; --warnung: #9a6700; @@ -117,14 +118,41 @@ code { overflow-y: auto; } -.marke { +/* Die Marke der Seitenleiste hat eine eigene Klasse: ".marke" allein ist + weiter unten die kleine Statusmarke, deren Regeln hier sonst gewönnen. */ +.seitenleisten-marke { + display: flex; + align-items: center; + gap: .6rem; + width: 100%; + background: none; + border: 0; + border-bottom: 1px solid rgba(255, 255, 255, .08); + font-family: inherit; font-size: 1.05rem; - font-weight: 600; + font-weight: 700; color: #fff; - padding: 1.25rem 1.25rem 1rem; + padding: 1.1rem 1.25rem; letter-spacing: .01em; + text-align: left; + cursor: pointer; } +.seitenleisten-marke:hover { background: rgba(255, 255, 255, .05); } + + +.marken-symbol { + width: 1.6em; + height: 1.6em; + flex-shrink: 0; + object-fit: contain; +} + +.marken-text { color: #fff; white-space: nowrap; } + +/* Wie im Steuerkram: die zweite Worthälfte trägt die Akzentfarbe. */ +.marken-text span { color: var(--navi-marke); } + .seitenleiste ul { list-style: none; margin: 0; @@ -166,6 +194,32 @@ code { min-width: 0; } +/* ── Eingeklappte Seitenleiste ───────────────────────────────────────────── */ + +/* Ein Klick auf die Marke schiebt die Leiste auf Symbolbreite zusammen. Die + Beschriftungen verschwinden nur aus dem Bild, nicht aus dem Baum – sonst + verlören die Verweise ihren Namen für Vorleseprogramme. */ +.rahmen.eingeklappt { grid-template-columns: 64px 1fr; } + +.rahmen.eingeklappt .seitenleisten-marke, +.rahmen.eingeklappt .seitenleiste a { + justify-content: center; + gap: 0; + padding-left: 0; + padding-right: 0; +} + + +.rahmen.eingeklappt .marken-text, +.rahmen.eingeklappt .beschriftung { + position: absolute; + width: 1px; + height: 1px; + overflow: hidden; + clip-path: inset(50%); + white-space: nowrap; +} + /* ── Werkzeugleiste ──────────────────────────────────────────────────────── */ .werkzeugleiste { @@ -2070,7 +2124,25 @@ table.liste tr.luecke td { /* ── Schmale Fenster ─────────────────────────────────────────────────────── */ @media (max-width: 820px) { - .rahmen { grid-template-columns: 1fr; } + .rahmen, + .rahmen.eingeklappt { grid-template-columns: 1fr; } + + /* Waagerecht gibt es nichts zu sparen: Beschriftungen bleiben sichtbar. */ + .rahmen.eingeklappt .marken-text, + .rahmen.eingeklappt .beschriftung { + position: static; + width: auto; + height: auto; + clip-path: none; + } + + .rahmen.eingeklappt .seitenleisten-marke, + .rahmen.eingeklappt .seitenleiste a { + justify-content: flex-start; + gap: .6rem; + padding-left: 1.25rem; + padding-right: 1.25rem; + } .seitenleiste { position: static; diff --git a/public/static/app.js b/public/static/app.js index 97c97a8..b0935d6 100644 --- a/public/static/app.js +++ b/public/static/app.js @@ -11,6 +11,24 @@ (function () { 'use strict'; + // Die Marke klappt die Seitenleiste auf Symbolbreite zusammen und wieder + // auf. Der Zustand steht in einem Cookie und nicht im localStorage: So + // rendert der Server die Leiste schon in der richtigen Breite, statt sie + // bei jedem Seitenwechsel kurz breit aufblitzen zu lassen. + const schalter = document.querySelector('[data-seitenleiste-schalter]'); + const rahmen = document.querySelector('.rahmen'); + if (schalter && rahmen) { + schalter.addEventListener('click', function () { + const eingeklappt = rahmen.classList.toggle('eingeklappt'); + + schalter.setAttribute('aria-expanded', eingeklappt ? 'false' : 'true'); + schalter.title = eingeklappt ? 'Seitenleiste ausklappen' : 'Seitenleiste einklappen'; + + document.cookie = 'seitenleiste=' + (eingeklappt ? 'eingeklappt' : 'offen') + + '; path=/; max-age=31536000; samesite=lax'; + }); + } + // Formulare mit data-bestaetigen fragen vor dem Absenden nach. // In der Capture-Phase, damit die Rückfrage auch dann greift, wenn ein // anderer Handler das Ereignis unterwegs stoppt. diff --git a/public/static/coinstack.png b/public/static/coinstack.png new file mode 100644 index 0000000000000000000000000000000000000000..40b952c7ef8dcc87522e77f55fec9e9976a37d91 GIT binary patch literal 26229 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 '/verwaltung', 'name' => 'Verwaltung', 'icon' => '⚙', 'auch' => ['/termine', '/vertraege']], ]; +// Ob die Seitenleiste eingeklappt ist, merkt sich ein Cookie. Das Skript +// setzt es beim Umschalten; hier entscheidet es schon beim Rendern, damit die +// breite Leiste nicht bei jedem Seitenwechsel kurz aufblitzt. +$eingeklappt = ($_COOKIE['seitenleiste'] ?? '') === 'eingeklappt'; + /** @param list $auch */ $istAktiv = static function (string $pfad, array $auch = []) use ($aktuellerPfad): bool { if (!is_string($aktuellerPfad)) { @@ -50,16 +55,26 @@ $istAktiv = static function (string $pfad, array $auch = []) use ($aktuellerPfad -
-