Skip to content

feat(settings): Einstellungen nach dem Muster der Plugin-Seiten - #390

Merged
CallMeTechie merged 3 commits into
masterfrom
feat/settings-plugin-pattern
Nov 2, 2026
Merged

CallMeTechie merged 3 commits into
masterfrom
feat/settings-plugin-pattern

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Die Einstellungen folgen jetzt demselben Seitenmuster wie Einstellungen › Plugins und nutzen dessen Bausteine (pgx-). Umgesetzt nach den freigegebenen Mockups „Einstellungen – Neugestaltung“ (Start, Formular-Seite, Listen-Seite, Seite mit Seitenspalte, Handy).

Was sich ändert

  • Menü wie die Plugin-Seitennavigation: ohne Kartenrahmen, Suche „Einstellung suchen“ oben im Menü, „Übersicht“ mit Zähler offener Punkte, Gruppen in Versalien, Pro-Kennzeichen, gelber Punkt bei Handlungsbedarf. Jeder Eintrag ist ein echter Link mit eigener Adresse /settings/<sektion> (aria-current="page"); Umschalten ohne Neuladen (pushState, Zurück/Vor funktioniert), ohne JavaScript normale Links. „Plugins“ führt direkt nach /settings/plugins.
  • Alte Adressen bleiben gültig: #sektion, alte Tab-Namen (#backup, #security …), Element-IDs, ?tab=, ?plugin= / ?install=, /settings/<alter Tab> und /settings/uebersicht werden weitergeleitet (Server: settingsTarget in routes/index.js, Browser: followLocation in settings.js). Interne Links (Sicherheits-Check, Dashboard-Probleme, Lizenzhinweis, Benachrichtigungen, Benutzer, Schnellsuche) zeigen auf die neuen Adressen.
  • Neue Start-Seite /settings: Seitenkopf mit Statuszeile, „Backup jetzt erstellen“ (mit Lizenz) und „Update ansehen“ nur wenn ein Update im Wartungsfenster wartet; Kacheln Dienste, Domains, Backup, Lizenz; „Braucht deine Aufmerksamkeit“ nur aus vorhandenen Signalen; „Alle Bereiche“ mit dem aktuellen Stand je Eintrag. Die bisherige Sektion „Übersicht“ (Dienste mit Neu starten / Neu laden, Server-Infos) lebt hier weiter. Quelle: neu GET /api/v1/settings/overview (services/settingsOverview.js, nur lesend, liefert Schlüssel statt Texte, jede Quelle einzeln abgesichert; für API-Tokens gesperrt). WireGuard/Caddy fragt die Seite wie bisher über /api/v1/wg/status und /api/v1/caddy/status.
  • Einheitlicher Seitenaufbau in allen Sektionen: Seitenkopf (Überschrift, Statuszeile mit echtem Zustand, höchstens Zweit- und Hauptknopf), Kacheln wo sinnvoll (Domains, Backups, Lizenz, Client-Updates), Karten mit Kopf und Aktion rechts im Kopf (nie im Fuß), Zeilen mit fester Bedienspalte (380 px), geänderte Felder markiert („· geändert“), Listen als Zeilen, eine Knopf-Familie, eine Hinweis-Box-Familie. Keine gestrichelten „+ hinzufügen“-Knöpfe mehr: Hinzufügen ist Seiten- oder Kartenaktion und öffnet die Eingabe über der Liste.
  • Gleiche Breite wie die Plugin-Seiten (bis 1380 px, linksbündig), nichts mehr zentriert.
  • Speichern: überall dieselbe Speicherleiste – auch bei KI-Anbieter (der eigene „Speichern“-Knopf entfällt). Testen, Hinzufügen, Löschen bleiben sofort.
  • KI-Anbieter mit Haupt- und Seitenspalte: Anbieter als Zeilen (Standard/Ausweich, Zustand, „Verwalten“ = Schlüssel/Test/Modell im Dialog, Schalter), Plugin-Freigaben als Schalterliste, Allgemein-Karte; Seitenspalte mit Verbrauch, Standard & Ausweich, Datenschutz.
  • Client-Richtlinien als Zeilen mit Segmenten und Schaltern (client-policy-form.js, Layout rows; der Peer-Dialog bleibt unverändert), Split-Tunnel als Segment, Lizenz mit Kacheln und kompakter, aufklappbarer Funktionsliste.
  • Gefahrenzone bündelt die Gefahrenaktionen: WireGuard stoppen, Aktivitätsprotokoll leeren, Backup wiederherstellen, Lizenz entfernen. Daten und Backups verweisen dorthin.
  • Handy (< 900 px): Start ist die Bereichsliste mit Stand, Unterseiten mit „‹ Einstellungen“, Felder untereinander, Speicherleiste unten. Der Plugin-Bereich ist unverändert.
  • Gemeinsame Bausteine statt drittem System: die Regeln der Plugin-Bausteine (Knöpfe, Pills, Schalter, Segmente) gelten per gemeinsamem Selektor auch für die Einstellungen; keine neuen Token, die alte Settings-Layout-CSS (st-page, st-nav*, st-layout, st-compact) ist entfernt.
  • Texte de/en vollständig; fehlende Umlaute korrigiert („ausgewählte“, „ändern“).

Abweichungen von den Mockups

  • „Auf 1.220.2 aktualisieren“: GateControl kennt keine neuere Version, nur „Update wartet auf das Wartungsfenster“ (waiting_window) – der Knopf heißt daher „Update ansehen“ und erscheint nur dann.
  • KI: Kosten je Plugin, „Alle erlauben“, „Anbieter hinzufügen“ und Zeitlimit gibt es nicht als Daten/Funktion – weggelassen. Die vier Anbieter sind fest.
  • Domains: „DNS-Einträge anzeigen“ bleibt je Domain („Records anzeigen“), „Neu erkennen“ der Server-Adresse gibt es nicht. Die Kachel „Zertifikate“ zeigt die Tage bis zum nächsten Ablauf aus dem TLS-Status.
  • Handy-Start: die Suche steht über der Bereichsliste (unter Kacheln und Aufmerksamkeit), damit die Seite im Desktop dieselbe Fokus-Reihenfolge behält; die Aufmerksamkeitsliste bleibt ausgeschrieben statt einer Sammelzeile.
  • Server-Adresse und Let’s Encrypt sind zwei Karten (Kontaktadresse und Fehlversuche wie bisher; einen Produktion/Test-Schalter gibt es nicht).

Tests

  • Neu tests/settings_pages.test.js: alle Adressen /settings/<sektion> (sichtbare Sektion, aria-current, Breadcrumb), Weiterleitungen alter Adressen, 404, Pi-hole ohne Lizenz, Speicherleiste/Feldzugehörigkeit, Seitenkopf-Aktionen, Gefahrenaktionen, Overview-API und jede Aufmerksamkeits-Quelle (Domains, Server-IP, Update-Marker, Backups, SMTP, Lizenzabhängigkeit, ausfallende Quelle), Texte aller Arten/Zustände in beiden Sprachen.
  • Angepasst: aurora_theme, settings_ui, plugins_ui, nav_palette, Lizenz-, Ops-, Notify- und CSS-Tests; Browser-Szenario settings (Adressen, Zurück/Vor, Start-Seite, Speicherleiste je Sektion inkl. KI, „Verwalten“-Dialog, Handy-Liste und Zurück-Link).
  • Lokal: npm test grün bis auf zwei Tests, die auch auf master in dieser Umgebung scheitern (Stub-Version der lokalen Abhängigkeiten, signiertes Plugin); alle CI-Browser-Szenarien grün; ESLint (security + no-undef) ohne Fehler.

Generated by Claude Code

Claude added 3 commits November 2, 2026 16:24
Die Einstellungen bekommen dasselbe Seitenmuster wie Einstellungen ›
Plugins und nutzen dessen Bausteine (pgx-): Menü ohne Kartenrahmen mit
Suche oben, „Übersicht“ mit Zähler offener Punkte, Gruppen in Versalien,
Pro-Kennzeichen und Punkt bei Handlungsbedarf. Jeder Eintrag ist ein
echter Link mit eigener Adresse /settings/<sektion>; #sektion, alte
Tab-Namen, ?tab=, ?plugin=/?install= und /settings/<alter Tab> werden
weitergeleitet, „Plugins“ führt direkt nach /settings/plugins.

- Neue Start-Seite /settings: Kacheln (Dienste, Domains, Backup, Lizenz),
  „Braucht deine Aufmerksamkeit“ aus vorhandenen Signalen (Update wartet /
  zurückgerollt / fehlgeschlagen, update.sh veraltet, Backup ohne Ziel
  außer Haus / Ziel fehlerhaft / zu alt, Domains mit ausstehendem oder
  falschem DNS, Server-IP, fehlende Zertifikate, Plugins mit Problemen
  oder fehlender Lizenz, Plugin-Updates, Lizenzprüfung, SMTP fehlt,
  WireGuard/Caddy gestört), „Alle Bereiche“ mit dem Stand je Eintrag;
  Dienste (Neu starten / Neu laden) und Server-Infos der bisherigen
  „Übersicht“ leben hier weiter. Quelle: GET /api/v1/settings/overview
  (services/settingsOverview.js, nur lesend, ohne Texte).
- Alle Sektionen: Seitenkopf mit Statuszeile aus echtem Zustand und
  höchstens Zweit- und Hauptknopf, Kacheln wo sinnvoll, Karten mit
  Aktion rechts im Kartenkopf, Zeilen mit fester Bedienspalte (380 px),
  geänderte Felder markiert, Listen als Zeilen, eine Knopf- und eine
  Hinweis-Box-Familie; Hinzufügen ist Seiten- oder Kartenaktion.
- KI-Anbieter mit Haupt- und Seitenspalte; die allgemeinen Einstellungen
  laufen über die Speicherleiste, der eigene „Speichern“-Knopf entfällt.
- Client-Richtlinien als Zeilen mit Segmenten und Schaltern, Split-Tunnel
  als Segment, Lizenz-Funktionen kompakt und aufklappbar; Wiederherstellen
  und Lizenz entfernen liegen in der Gefahrenzone, die doppelte
  Aufräumen-Karte in Daten verweist dorthin.
- Gleiche Breite wie die Plugin-Seiten, Hell/Dunkel, Handy (< 900 px):
  Start ist die Bereichsliste mit Stand, Unterseiten mit „‹ Einstellungen“.
- Texte de/en vollständig, fehlende Umlaute korrigiert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
- KI-Anbieter: die Karte „Allgemein“ steht in voller Breite unter den
  Spalten und hat dasselbe Zeilenmuster wie alle Formulare (Beschriftung
  und Hilfe links, Bedienelement in der festen Spalte). Schmalere Karten
  behalten die Zeilen mit einer 330-px-Spalte; untereinander nur noch in
  Karten unter 560 px (Handy).
- Segmente brechen nie um: Eine Auswahl, deren Optionen nicht einzeilig in
  die Bedienspalte passen, wird als Auswahlfeld gezeigt – als Regel im
  Baustein (segRow in settings.njk, fitsSegment in client-policy-form.js),
  z. B. „Automatisch verbinden“, Gerätebindung, Split-Tunnel-Modus.
- Alle Bedienelemente beginnen bündig am linken Rand der Bedienspalte;
  Segmente füllen die Spalte nicht mehr auf.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
Ursache des roten „Browser tests“-Laufs: Das Szenario wechselte die
Sektion ohne Neuladen und wartete auf networkidle – das bezieht sich auf
das Laden der Seite und war längst erreicht. Die Änderung (Portal-Schalter)
landete deshalb mitunter, bevor die Sektion ihre gespeicherten Werte
geladen hatte; der Wert galt dann nicht als geändert, die Speicherleiste
blieb aus und der folgende Klick auf „Verwerfen“ lief in den Timeout.

settings.js gibt das Laden der gezeigten Sektion als
GCSettings.whenLoaded() heraus; das Szenario wartet nach jedem Wechsel
darauf statt auf eine feste Pause.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
@CallMeTechie
CallMeTechie merged commit 9504888 into master Nov 2, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants