Kleinere Befunde und Dokumentation aus dem Review
Frontend, kleinere Befunde: - Das Standort-Menue liess sich nur wischen oder ueber den Kartenmarker oeffnen. Der Griff ist jetzt ein Knopf mit aria-expanded, damit auch per Tastatur erreichbar; der Umschalter Strasse/Satellit hat aria-pressed und ein Label, das den Zustand nennt. - Der Filterschalter "Nur passende Sensoren anzeigen" wirkte nicht, solange eine Auswahlliste offen war: der Klick-Handler ersetzte das Overlay-DOM, bevor das change-Ereignis des Kontrollkaestchens ausgeliefert wurde. Er wird jetzt vor dem Schliessen der Liste behandelt. - Der Theme-Wechsel zeichnete nicht neu, die Leaflet-Kacheln blieben bis zum naechsten Backend-Update im alten Stil - seit der Dauerkarte auf der Uebersicht deutlich sichtbar. - Toter Code entfernt (fahrzeugGlyphPfade, .dot.neutral) und zwei Kommentare berichtigt, die Gegenteiliges behaupteten. Dokumentation: - AGENTS.md widersprach sich an sechs Stellen. Berichtigt: Fahrterkennung laeuft ueber die Zuendung, nicht ueber WLAN; Datenweg ist flespi, nicht MQTT; Modulzahl und Zeilenzahl stimmen wieder; Entity-IDs werden im Setup-Menue zugeordnet, nicht in einstellungen.py; STANDORT_TRACKER ist belegt, nicht leer. - SPECIFICATION.md beschreibt durchgehend den Stand vor der FMM003- Umstellung. Statt es zu Teilen umzuschreiben und dabei Ungenauigkeiten zu riskieren, steht jetzt ein datierter Hinweis am Anfang, der die drei geaenderten Punkte benennt und auf AGENTS.md verweist. Alles Uebrige des Dokuments gilt unveraendert weiter. - INSTALL.md: Die zirkulaere Schrittfolge (Schritt 4 verweist auf 9, Schritt 7 auf 4) ist als solche benannt und aufgeloest. Die Override-Datei ist mit Pfad genannt, samt dem Hinweis, dass sie gesichert wird. Und die drei mit Test-Entitaeten der Entwicklungsinstanz vorbelegten Rollen sind erwaehnt - auf einer frischen Installation zeigen sie ins Leere. - README, Profilvorlage: WLAN-Reste entfernt, zwei Falschaussagen aus dem ersten Review nachgezogen (Statistik rechnet echt, die 97-Prozent-Volltankungsregel wurde entfernt), Dateiuebersicht um die fuenf fehlenden pyscript-Dateien und entitaeten.py ergaenzt. - update.ps1 liefert jetzt auch shell_beleg_parser.py aus. Die Datei liegt in data/, ist aber Code - Aenderungen am Belegleser, dem einzigen getesteten Teil des Projekts, kamen bisher auf keiner Instanz an. - design/README: Zwei Dateien der Inhaltstabelle liegen gar nicht in dem Ordner, weshalb das Board aus der Repo-Kopie heraus leer bleibt - jetzt vermerkt. Ausserdem die Behauptung berichtigt, die Auflage ruehre audi-dashboard-app.js nicht an: der Stylesheet-Loader wurde dort ergaenzt. Geprueft: Panel laedt, alle neun pyscript-Entitaeten werden veroeffentlicht, Zuordnen und Zuruecksetzen funktionieren, keine neuen Fehler im Protokoll.
This commit is contained in:
@@ -500,13 +500,6 @@ const STANDORT_PEEK_PX = 96; // sichtbarer Anteil im geschlossenen Zustand, muss
|
||||
|
||||
function standortBekannt() { return CAR.standortLat != null && CAR.standortLon != null; }
|
||||
|
||||
/* Fahrzeug-Symbol im myAudi-Stil: einfaches Top-down-Glyph, noch fuer
|
||||
Vorschauen in Gebrauch; die Kartenmarkierung nutzt poi-car (Audi CI). */
|
||||
function fahrzeugGlyphPfade() {
|
||||
return `<path d="M5 15.3 6.4 9.9a2 2 0 0 1 1.9-1.5h7.4a2 2 0 0 1 1.9 1.5l1.4 5.4"/>
|
||||
<path d="M4.6 15.3h14.8a.9.9 0 0 1 .9.9v1.1a.9.9 0 0 1-.9.9H4.6a.9.9 0 0 1-.9-.9v-1.1a.9.9 0 0 1 .9-.9Z"/>
|
||||
<path d="M7.4 11.4h9.2"/>`;
|
||||
}
|
||||
/* Kartenmarkierung: poi-car aus dem Audi-CI-Satz (assets/icons/poi-car.svg).
|
||||
Die Spitze sitzt unten, deshalb ankert Leaflet am unteren Rand. */
|
||||
function fahrzeugMarkerSVG(px = 34) {
|
||||
@@ -514,12 +507,14 @@ function fahrzeugMarkerSVG(px = 34) {
|
||||
}
|
||||
|
||||
/* Fahrzustand fürs Menü: "fährt" solange die aktuelle Fahrt noch offen ist
|
||||
(siehe fahrterkennung.py), sonst "steht" - erst ab der in "Fahrten
|
||||
zusammenfassen" hinterlegten Pausenzeit (CONFIG.pauseMin) gilt der
|
||||
Stillstand als endgültig genug für "Letzter Parkplatz" statt eines
|
||||
bloßen Zwischenstopps. Ohne echtes Bewegungssignal vom Fahrzeug (siehe
|
||||
AGENTS.md, FMM003/flespi offen) ist das die beste Näherung aus den
|
||||
bereits vorhandenen Fahrtdaten. */
|
||||
(siehe fahrterkennung.py), sonst "steht". Ohne echtes Bewegungssignal vom
|
||||
Fahrzeug (siehe AGENTS.md, FMM003/flespi offen) ist das die beste Näherung
|
||||
aus den bereits vorhandenen Fahrtdaten.
|
||||
|
||||
parkplatz unterscheidet einen endgültigen Stillstand (laenger als die in
|
||||
"Fahrten zusammenfassen" hinterlegte Pausenzeit) von einem blossen
|
||||
Zwischenstopp. Das Feld ist vorbereitet, wird aber derzeit von keiner
|
||||
Ansicht gelesen - eine "Letzter Parkplatz"-Anzeige gibt es noch nicht. */
|
||||
function standortZustand() {
|
||||
const t = TRIPS[0];
|
||||
if (t && t.status === "offen") return { faehrt: true, seitTs: null, parkplatz: false };
|
||||
@@ -812,7 +807,8 @@ function vStandort() {
|
||||
<div class="standort-vollbild">
|
||||
<div id="smap" class="standort-karte"></div>
|
||||
<div class="kartensteuerung">
|
||||
<button type="button" data-standort-layer aria-label="Kartendarstellung wählen">
|
||||
<button type="button" data-standort-layer aria-pressed="${SMAP_STIL === "satellit"}"
|
||||
aria-label="${SMAP_STIL === "satellit" ? "Satellitenansicht, zur Straßenkarte wechseln" : "Straßenkarte, zur Satellitenansicht wechseln"}">
|
||||
${ciSVG(CI.mapLayer, 22)}
|
||||
</button>
|
||||
<button type="button" data-standort-fahrzeug aria-label="Fahrzeug auf der Karte suchen">
|
||||
@@ -827,7 +823,12 @@ function vStandort() {
|
||||
</div>
|
||||
<div class="standortmenu" id="standortmenu">
|
||||
<div class="standortmenu-griffzone">
|
||||
<div class="standortmenu-griff"></div>
|
||||
<!-- Als Knopf, nicht als reines div: sonst laesst sich das Menue
|
||||
ausschliesslich per Wischgeste oder Klick auf den Kartenmarker
|
||||
oeffnen und ist mit Tastatur gar nicht erreichbar. -->
|
||||
<button type="button" class="standortmenu-griff" data-standort-umschalten
|
||||
aria-expanded="${STANDORTMENU_OFFEN}" aria-controls="standortmenu"
|
||||
aria-label="Fahrzeugdetails ${STANDORTMENU_OFFEN ? "einklappen" : "aufklappen"}"></button>
|
||||
<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>
|
||||
@@ -3095,6 +3096,12 @@ function ereignisseVerdrahten() {
|
||||
ROOT.getElementById("theme").addEventListener("click", () => {
|
||||
themeSetzen(HOST.dataset.theme === "nacht" ? "tag" : "nacht");
|
||||
themeIcon();
|
||||
/* Neu zeichnen, damit auch die Leaflet-Kacheln den Stil wechseln: die
|
||||
Kachel-URL wird beim Aufbau aus TILES[theme] gewaehlt und nicht
|
||||
nachtraeglich aktualisiert. Ohne dies blieb die Karte bis zum naechsten
|
||||
Backend-Update im alten Stil - seit der Dauerkarte auf der Uebersicht
|
||||
deutlich sichtbar. */
|
||||
render();
|
||||
});
|
||||
// Wischgeste über Pointer Events (nicht Touch Events), damit dieselbe
|
||||
// Logik auch mit der Maus funktioniert (z. B. beim Testen im Browser).
|
||||
@@ -3316,6 +3323,14 @@ function ereignisseVerdrahten() {
|
||||
// Klick irgendwo sonst im Popup (aber nicht auf den Catcher, der schon
|
||||
// oben behandelt wurde) schließt ein offenes Dropdown, ohne das ganze
|
||||
// Popup zu verlassen.
|
||||
/* Den Filterschalter VOR dem Schliessen der Auswahlliste behandeln.
|
||||
Sonst ersetzt render() unten das Overlay-DOM, bevor das
|
||||
change-Ereignis des Kontrollkaestchens ausgeliefert wird - der
|
||||
Schalter sprang dann beim naechsten Zeichnen einfach zurueck. */
|
||||
if (e.target.closest("[data-setup-nurpassend]") || e.target.closest(".switch")) {
|
||||
const kasten = ROOT.querySelector("[data-setup-nurpassend]");
|
||||
if (kasten) { setupNurPassend = !setupNurPassend; render(); return; }
|
||||
}
|
||||
if (setupSucheOffen && !e.target.closest(".entitaet-combo")) { setupSucheOffen = null; setupSuchtext = ""; render(); return; }
|
||||
return;
|
||||
}
|
||||
@@ -3590,6 +3605,7 @@ function ereignisseVerdrahten() {
|
||||
if (art) { const tr = TRIPS.find((x) => x.trip_id === art.dataset.art); tr.art = tr.art === "arbeitsweg" ? "privat" : "arbeitsweg"; render(); return; }
|
||||
// Standort (Vollbild) - Karten-/Menü-Bedienung manipuliert SMAP/das Menü-
|
||||
// DOM direkt statt über render() (siehe Kopfkommentar Standort-Abschnitt).
|
||||
if (e.target.closest("[data-standort-umschalten]")) { standortMenuUmschalten(); return; }
|
||||
if (e.target.closest("[data-standort-layer]")) { SMAP_STIL = SMAP_STIL === "satellit" ? "strasse" : "satellit"; standortTiles(); return; }
|
||||
if (e.target.closest("[data-standort-fahrzeug]")) { standortAufFahrzeug(); return; }
|
||||
if (e.target.closest("[data-standort-user]")) { standortAufUser(); return; }
|
||||
|
||||
Reference in New Issue
Block a user