DRINGEND: Panel war seit 2026.8.30.14 syntaktisch kaputt (2026.8.30.19)

Beim "Zuendung an"-Patch habe ich den Begruendungskommentar in den
${...}-Ausdruck gesetzt statt in den Markup-Text. Dort ist <!-- kein
HTML-Kommentar, sondern JavaScript. Folge: audi-dashboard-app.js liess sich
nicht mehr als Modul parsen, connectedCallback() brach ab, das Panel hatte
keinen Shadow Root - der Bildschirm blieb leer.

Betroffen sind .14 bis .18, also alles, was seit dem auf Gitea lag. Wer in
dieser Zeit aktualisiert und neu gestartet hat, bekam ein totes Panel.

Warum es durchrutschte - und das ist der eigentliche Befund: "node --check"
prueft eine .js-Datei als SCRIPT, und dort sind HTML-artige Kommentare per
Annex B ausdruecklich erlaubt. Der Browser laedt dieselbe Datei als MODUL,
wo sie verboten sind. Die Pruefung, auf die sich dieses Projekt bei jeder
Panel-Aenderung verlaesst, kann diesen Fehler grundsaetzlich nicht finden.

Ab sofort gilt: die Datei vor dem Ausliefern als Modul pruefen, also unter
.mjs kopieren und node --check darauf laufen lassen. Rueckwirkend ueber alle
heutigen Commits geprueft - .14 ist der erste kaputte.

Erschwerend kam dazu, dass ich den Panel-Tab nach .14 nie neu geladen habe.
Alle spaeteren "live geprueft"-Aussagen zur Panel-Seite liefen gegen das noch
im Speicher stehende alte Skript und waren damit wertlos.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-31 00:01:08 +02:00
parent c300aab223
commit d622d74434
5 changed files with 23 additions and 15 deletions
@@ -1 +1 @@
{"version":"2026.8.30.17","sha256":"a84ccaf1e51725fbf9c08ab8a9f8e5d1d13abba6c3dbc762ca1878b757a6ffea","bytes":257009,"gebaut":"2026-08-30T21:51:10Z"}
{"version":"2026.8.30.19","sha256":"b2f7235423d33bf179b1a7ab4212f9e5e9dc30f065a632f5d255f082f273f00a","bytes":257013,"gebaut":"2026-08-30T22:00:51Z"}
@@ -1192,13 +1192,18 @@ function vStandort() {
<button type="button" class="standortmenu-griff" data-standort-umschalten
aria-expanded="${STANDORTMENU_OFFEN}" aria-controls="standortmenu"
aria-label="Fahrzeugdetails ${STANDORTMENU_OFFEN ? "einklappen" : "aufklappen"}"></button>
${STANDORTMENU_OFFEN ? `
<!-- Nur im aufgezogenen Zustand. Im halb verdeckten Ruhezustand hat
Schließen nichts zu schließen - der Knopf sah bedienbar aus und
tat nichts. -->
<!-- Nur im aufgezogenen Zustand sichtbar - im halb verdeckten
Ruhezustand hat Schließen nichts zu schließen. Die Sichtbarkeit
haengt bewusst an der CSS-Klasse .offen und NICHT an
STANDORTMENU_OFFEN im Markup: standortMenuOeffnen()/-Schliessen()
schalten nur die Klasse um und rufen kein render() (das wuerde die
Leaflet-Karte neu aufbauen und den Ausschnitt verlieren). Ein
Markup-Zweig blieb deshalb auf dem Stand des letzten Zeichnens
stehen - der Knopf war im eingeklappten Zustand noch da und im
aufgezogenen mitunter gar nicht. -->
<button type="button" class="standortmenu-schliessen" data-standort-schliessen aria-label="Schließen">
<svg viewBox="0 0 20 20" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><path d="M5 5l10 10M15 5 5 15"/></svg>
</button>` : ""}
</button>
<div class="standortmenu-kopf">
<div class="standortmenu-name">${esc(CONFIG.fahrzeugtitel)}</div>
<div class="standortmenu-distanz" id="standortDistanz">${distanz}</div>
@@ -1207,14 +1212,14 @@ function vStandort() {
<div class="standortmenu-adresse" id="standortAdresse">${esc(adresseText)}</div>
<div class="standortmenu-status">
${zustand.faehrt
<!-- Der Text sagt "Zuendung an", nicht "Fahrzeug faehrt". Es gibt keinen
/* Der Text sagt "Zuendung an", nicht "Fahrzeug faehrt". Es gibt keinen
Bewegungssensor am Fahrzeug - der einzige Anhaltspunkt ist ZUENDUNG_SENSOR,
und der meldet on auch bei blosser Zuendung oder Zubehoerstellung. Auch die
erkannte Fahrt hilft nicht weiter: fahrt_start_ts in fahrterkennung.py wird
aus genau demselben Signal abgeleitet, waere also nur eine zweite Huelle um
dieselbe Aussage. Der umgekehrte Fall ist unbedenklich: Zuendung aus heisst
verlaesslich, dass gerade nicht gefahren wird - "steht"/"Geparkt seit"
bleiben deshalb stehen. -->
bleiben deshalb stehen. */
? `<span class="dot"></span><span>Zündung an</span>`
: zustand.unbekannt
? `${ciSVG(CI.parking)}<span>Fahrzustand unbekannt</span>`
@@ -1041,6 +1041,9 @@ button.leaf:active { background: var(--tile-2); }
display: flex; align-items: center; justify-content: center;
background: var(--ios-fill); border: none; color: var(--fg2); cursor: pointer; padding: 0;
}
/* Sichtbar nur im aufgezogenen Blatt (Begruendung am Knopf im Markup). */
.standortmenu-schliessen { display: none; }
.standortmenu.offen .standortmenu-schliessen { display: flex; }
.standortmenu-kopf { margin-top: 8px; padding-right: 44px; }
.standortmenu-name { font-size: 17px; color: var(--fg); }
.standortmenu-distanz { font-size: 12.5px; color: var(--fg3); margin-top: 4px; }
@@ -1,7 +1,7 @@
{
"domain": "audi_dashboard",
"name": "Audi Dashboard",
"version": "2026.8.30.17",
"version": "2026.8.30.19",
"documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
"codeowners": ["@paul"],