Statt fixer Reihenfolge werden alle 5 Werte nach dem API-Fetch
per .sort() aufsteigend geordnet und der Streifen neu aufgebaut.
Damit steht immer die kleinste Zahl links, die größte rechts —
unabhängig davon wie die Zahlen wachsen.
SW by-v1000, APP_VER 1000
Beim ersten offline-Event pro Session erscheint ein blauer Info-Toast (8s):
'App im Vordergrund lassen — so bleiben Offline-Funktionen wie GPS und
Datenspeicherung aktiv.'
sessionStorage-Guard verhindert Wiederholung. SW by-v997, APP_VER 997
_startRecInOvl() crashte bei null _recMap auf L.polyline().addTo(_recMap) →
WakeLock, watchPosition, _resetRecInactTimer() wurden nie erreicht → Dim-Screen
wurde nie aktiviert, GPS-Track lief nicht.
- L.polyline nur erstellen wenn _recMap && window.L vorhanden
- watchPosition-Callback: _recPolyline?.addLatLng, _recLocMarker?.setLatLng,
_recMap?.setView alle mit Optional Chaining gesichert
- SW by-v996, APP_VER 996
L.map() warf ReferenceError wenn Leaflet offline nicht geladen → _openRecOvl()
crashte, Event-Listener für #rk-rec-cancel und #rk-rec-startbtn wurden nie
angehängt. Fix:
- Listener direkt nach appendChild() registrieren (vor jeder async-Operation)
- Map-Setup in try/catch; bei fehlendem Leaflet: Offline-Platzhalter im Map-Bereich
- _recMap?.setView / _recLocMarker?.setLatLng mit Optional Chaining (null-safe)
- SW by-v994, APP_VER 994
Statt sofort zu schließen zeigt das Modal nach dem Submit eine Bestätigung:
'Wir kümmern uns darum und melden es den anderen Nutzern in der Umgebung.
Vielen Dank, dass du die Community schützt!'
Auto-Close nach 5 Sekunden, OK-Button zum sofortigen Schließen.
Bei gequeuter Meldung (offline) zusätzlicher Hinweis auf spätere Synchronisierung.
SW by-v993, APP_VER 993
Wenn der SW einen POST in die Offline-Queue legt, gibt api.js { _queued: true }
zurück (202). Ohne Guard versuchten poison/walks/diary den Response als echtes
Server-Objekt zu nutzen → undefined lat/lon → Leaflet-Crash, undefined id → Upload-Fehler.
Nach dem Guard wird das Modal nur geschlossen; der QUEUE_PROCESSED-Toast informiert
den User sobald synchronisiert.
- poison.js: _queued guard nach API.poison.report()
- walks.js: _queued guard + try-catch statt navigator.onLine
- diary.js: _queued guard nach API.diary.create()
- SW by-v992, APP_VER 992
- Pulsierender Marker: Wechsel von position:absolute-Ring auf box-shadow-Animation
(by-lost-pulse-r/p), kein Overflow-Problem mit Leaflet divIcon, iOS-kompatibel
- navigator.onLine iOS-Falsch-Positiv: Formular-Submit versucht API zuerst,
fällt nur bei TypeError (fetch failed) auf Pending-Modus zurück
- _openDetail(): früher Return für Pending-Einträge (verhindert delete mit
string-ID "pending_..." → Backend-Fehler "unable to parse integer")
- SW by-v991, APP_VER 991
- Deduplication in _loadReports(): Pending-Einträge die bereits auf dem Server
sind (Race-Condition beim Sync) werden automatisch aus dem Pending-Store entfernt
- Verwerfen-Button für offline-gespeicherte Meldungen (pending), Notiz-Button nur
für Server-Einträge sichtbar
- Pulsierender Kreis-Marker (CSS @keyframes by-lost-ping) statt statischem Pin;
Pending-Einträge in Orange, Server-Einträge in Rot
- Card-Click für pending deaktiviert (kein Detail-Modal für unsynchronisierte Daten)
- worlds.js: Alert-Radius für vermisste Hunde von 5 auf 20 km erhöht (wie Giftköder)
- SW by-v990, APP_VER 990
- worlds.js: bdayDog = _dogs.find(...) — Geburtstag gilt für alle Hunde, nicht nur den aktiven
- Banner, KI-Call, "Was hat sich X gewünscht?" nutzen bdayDog.name
- stats.py: kotbeutel-Count aus user_map_pois WHERE type='kotbeutel'
- landing: Stats-Band 5. Kachel "Kotbeutel-Stationen"
- <meta name="color-scheme" content="light dark"> ergänzt
- color-scheme: light dark / dark in :root
- Alle Dark-Mode-Regeln auf !important umgestellt um Inline-Styles zu schlagen
- #funktionen, #warum, #vergleich, #preise, #ueber ergänzt
- main.py APP_VER 951→953 behebt Update-Loop auf Desktop
- Dark-Mode: vollständige @media (prefers-color-scheme: dark) Regeln für alle Sections
- Emojis im Verbindung-Block (🏡🔍🐶) durch Phosphor SVG ersetzt
- 🐾 in Testimonials und Footer durch paw-print SVG ersetzt