- 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
48 lines
2.0 KiB
JavaScript
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();
|
|
});
|