Files
adminandClaude Sonnet 5 6fe10b48db GUI-Feedback Runde 2: Bug-Fixes, Reiter-Splits, Icons, Darkmode
- Status-Spalte (Kunden-Geraeteliste) jetzt auch sortierbar.
- Admin-Flotte: Kennung jetzt aufklappbar (analog Kunden-Geraeteliste).
- Merkmale: Kategorie-Checkbox-Filter (kombiniert mit Suche, neues
  filtereNachKategorie() in table-tools.js).
- Backends/Blueprints -> "Flottenmatrix" umbenannt (Label, ueberall).
- Organisation (Kunde): "Stammdaten/Konten" in zwei eigene Seiten
  aufgeteilt (/organisation, /organisation/konten) - Kolleg:innen-
  Verwaltung jetzt eigenstaendig statt Teil der Organisationsdaten-Seite.
- Admin "Kunden" -> "Organisationen" umbenannt (Nav-Label + Seiten),
  Detail-Seite von einer langen Seite auf sechs Reiter aufgeteilt
  (Organisationsdaten/Hostnamenkonvention/Aktivierungscodes/
  Bereitstellungsvorlagen/Kundenkonten/Gruppen) - jeder Reiter holt nur
  die Daten, die er braucht (_render_detail_tab()-Helper).
- Manueller Darkmode-Umschalter (static/theme-toggle.js) - Pico folgt
  bereits automatisch der Systemeinstellung, dieser Knopf erlaubt
  zusaetzlich eine manuelle, persistierte Wahl unabhaengig vom System.
- Emoji-Icons fuer die Hauptnavigation (Flotte/Organisation/
  Installationsmedium/Organisationen/Datenbank/Flows/Admin-Accounts).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-10 15:48:07 +02:00

48 lines
2.0 KiB
JavaScript

// Optionaler manueller Darkmode-Umschalter (11.09.2026) - Pico folgt
// bereits automatisch der Systemeinstellung (prefers-color-scheme), dieser
// Knopf erlaubt zusätzlich eine manuelle, in localStorage persistierte Wahl
// unabhängig vom System (Pico unterstützt das eingebaute [data-theme]-
// Attribut auf <html> für genau diesen Zweck). Drei Zustände im Kreis:
// System folgen -> Dunkel -> Hell -> wieder System folgen.
document.addEventListener("DOMContentLoaded", () => {
const knopf = document.getElementById("theme-toggle");
if (!knopf) return;
const aktualisiereBeschriftung = () => {
const aktuell = document.documentElement.dataset.theme;
if (aktuell === "dark") {
knopf.textContent = "🌙";
knopf.title = "Dunkles Design aktiv - klicken für Helles Design";
} else if (aktuell === "light") {
knopf.textContent = "☀️";
knopf.title = "Helles Design aktiv - klicken, um wieder dem System zu folgen";
} else {
knopf.textContent = "🌓";
knopf.title = "Design folgt der Systemeinstellung - klicken für Dunkles Design";
}
};
knopf.addEventListener("click", () => {
const aktuell = document.documentElement.dataset.theme;
const naechster = aktuell === "dark" ? "light" : aktuell === "light" ? "" : "dark";
try {
if (naechster) {
document.documentElement.dataset.theme = naechster;
localStorage.setItem("tuxflotte-theme", naechster);
} else {
delete document.documentElement.dataset.theme;
localStorage.removeItem("tuxflotte-theme");
}
} catch (e) {
// localStorage kann in seltenen Kontexten (z.B. manche privaten
// Fenster) werfen - der Umschalter wirkt dann nur für diese
// Seitenansicht, statt ganz zu scheitern.
document.documentElement.dataset.theme = naechster;
}
aktualisiereBeschriftung();
});
aktualisiereBeschriftung();
});