1. Generischer Ja/Nein-Dialog bei ungespeicherten Aenderungen (kein Opt-in
pro Seite noetig): initUnsavedChangesGuard() erkennt automatisch jedes
Formular mit echten Eingabefeldern, das seit dem Laden der Seite
veraendert wurde, und fragt beim Klick auf einen Link (z.B. Sidebar-
Navigation), ob zuerst gespeichert werden soll -- eigener Dialog
(confirmSaveDiscard) statt des bestehenden confirmAction (dort ist
"Abbrechen" = Bleiben, hier gibt es bewusst nur die zwei angefragten
Optionen: speichern oder verwerfen, beide verlassen die Seite).
"Ja, speichern" sendet das Formular ganz normal ab (echter POST) und
merkt sich das eigentliche Ziel in sessionStorage, um danach automatisch
dorthin weiterzuleiten.
Nachtrag noch in dieser Session gefixt: ein normales Speichern ueber den
Seiten-eigenen Button loeste zusaetzlich die native Browser-Warnung
(beforeunload) aus, obwohl die Aenderung bereits gespeichert wurde --
navigatingAway-Flag wird jetzt bei jedem Submit eines beobachteten
Formulars (eigener Button ODER eigener Ja/Nein-Dialog) gesetzt, die
generische Browser-Warnung erscheint dadurch nur noch bei tatsaechlich
ungefragter Navigation (Tab schliessen, Reload, Adresszeile). Live per
Playwright in drei Szenarien verifiziert (direktes Speichern, Ja via
eigenem Dialog, Nein via eigenem Dialog) -- kein Browser-Popup in den
ersten beiden Faellen, korrektes Redirect zum urspruenglichen Ziel nach
"Ja".
2. DHCP-Options-Dropdown (Reservierungs-Dialog) verschiebt ein neu
ausgewaehltes Options-Feld jetzt direkt unter das Dropdown (in einen
.poe-added-options-Container) statt es nur an seiner urspruenglichen
Stelle in der bis zu 57 Eintraege langen Liste einzublenden -- lag dort
oft ausserhalb des sichtbaren Modal-Ausschnitts und wirkte, als waere
nichts passiert. Bereits gesetzte Overrides stehen von Anfang an im
selben Container, weitere haengen sich beim Auswaehlen unten an.
3. Cache-Busting fuer app.js/style.css (asset_url()-Helper, haengt die
Aenderungszeit der Datei als ?v=... an) -- ein im Browser gecachtes,
veraltetes app.js konnte nach einem Update sonst den Eindruck erwecken,
eine neue Funktion wuerde "nicht funktionieren", obwohl der Code auf dem
Server laengst aktuell war.
Alle drei live auf der Test-VM deployt und per Playwright verifiziert,
keine Fehler im journalctl-Log. (Testartefakt aufgeraeumt: der echte
Host-Hostname wurde durch die Playwright-Tests versehentlich auf
"directsave-test"/"navsave-test" geaendert und wieder auf POETEST
zurueckgesetzt.)
- Neues, eigenständiges Frontend (Sidebar, zentriertes Logo in der Topbar,
Dark/Light-Theme, Karten-Dashboard, Toasts/Modals statt Bootstrap)
- Oeffentliches Kurz-Dashboard ohne Login (Status-Uebersicht)
- Browser-SSH-Terminal (paramiko, plattformunabhaengig) zum Testen von
Switch-Zugangsdaten inkl. interaktiver Host-Key-Bestaetigung
- Granulares Rechtesystem mit Gruppen (Devices/Switches-Berechtigungen)
- Aufgeraeumtes Backend mit konfigurierbaren Pfaden, auto-generierten
Secrets statt hart codierter Werte im Original
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>