M15-Karte: Pruefkette als Akkordeon in drei Abschnitten
User-Wunsch. Die Karte war auf zehn Zeilen gewachsen und dominierte das Dashboard; jetzt sind sie in drei aufklappbare Gruppen sortiert: ① - ④ Pruefkette (offen) Bias · Kosten · Zone · Reichweite ⑤ Kontext - Motor · M5 · RSI (zu) Motor/Raum · M5-Zustand · RSI ⑥ - ⑦ Selbstmessung · Ausfuehrung · Veto (zu) Track · Exec · Veto Das Status-Banner bleibt IMMER sichtbar - es ist die eine Zeile, die eine Handlungsaussage traegt, und es bestaetigt ausdruecklich auch das Nicht-Handeln. ⚠⚠ NATIVES <details>/<summary>, kein JS fuer das Klappen. Entscheidend ist, dass die Elemente IM DOM bleiben: der Render schreibt weiter in alle zehn IDs, auch wenn ein Abschnitt zugeklappt ist. Ein Container, der die Elemente ENTFERNT, haette den Render abbrechen lassen - genau der Ausfall von gestern Abend, als ein ReferenceError in renderM15 das halbe Dashboard auf "—" stehen liess. JS macht nur EINES: den Auf-/Zu-Zustand in localStorage merken. Ohne das waere jeder Reload ein Rueckschritt - und die Seite wird bei jedem ?v=-Bump neu geladen. Faellt localStorage aus (privater Modus), greift der Default. Verifiziert: 10 m15-Items unveraendert vorhanden, keine doppelten IDs, div 86/86 und details 3/3 ausgeglichen, node --check gruen, Render-Probe (Stufe B2) gruen. Reine Frontend-Aenderung (v=190), kein Neustart. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
5684589878
commit
d3d613068c
+23
@@ -2183,3 +2183,26 @@ async function setMgGlobal() {
|
||||
if (e.key === "Enter") { e.preventDefault(); e.target.blur(); }
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// --- M15-Akkordeon: Auf-/Zuklappen merken -------------------------------
|
||||
// ⚠ Das Auf- und Zuklappen macht natives <details> selbst - hier wird NUR der
|
||||
// Zustand gemerkt, damit die Karte nach jedem Reload so aussieht, wie der
|
||||
// Nutzer sie zuletzt hatte. Ohne das waere jede Seitenaktualisierung ein
|
||||
// Rueckschritt, und die Seite wird bei jedem `?v=`-Bump neu geladen.
|
||||
// ⚠ KEIN Eingriff in den Render: die Elemente bleiben im DOM, auch zugeklappt.
|
||||
// Ein zugeklapptes <details> ist nur nicht sichtbar - `textContent` wird
|
||||
// weiter gesetzt, und die naechste Oeffnung zeigt den aktuellen Stand.
|
||||
{
|
||||
const KEY = "oil_m15_akk";
|
||||
let stand = {};
|
||||
try { stand = JSON.parse(localStorage.getItem(KEY) || "{}"); } catch (e) { stand = {}; }
|
||||
document.querySelectorAll("details.m15-akk").forEach(el => {
|
||||
const k = el.dataset.akk;
|
||||
if (k && Object.prototype.hasOwnProperty.call(stand, k)) el.open = !!stand[k];
|
||||
el.addEventListener("toggle", () => {
|
||||
stand[k] = el.open;
|
||||
try { localStorage.setItem(KEY, JSON.stringify(stand)); } catch (e) { /* privater Modus */ }
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user