- Bytt del-knappen frå tekstpila ↪ til ein innebygd Material-stil
SVG (20×20). Den førre Unicode-pila vart teikna mykje mindre enn
ℹ og ↻ av dei fleste fontar — no har alle tre ikona same visuelle
vekt på tvers av nettlesarar og operativsystem.
- Lagt til ein controllerchange-lyttar som utløyser ein omlasting
*neste* gong appen vert lagt i bakgrunnen (visibilityState ===
'hidden'), ikkje umiddelbart. Slik tek nye distribusjonar effekt
utan brukarinngrep, men utan å rive vekk skjermen midt i ein
tilfluktsromnavigering. registerType: 'autoUpdate' åleine sørgjer
for at den nye SW-en skipWaiting + clientsClaim, men det reload-ar
ikkje den allereie køyrande JavaScripten — denne lyttaren stettar
det utan å bryte noregisseringsflyt.
Påverkar ikkje fråkopla bruk: omlasting skjer berre etter at ein ny
SW har vorte aktivert, og ein ny SW kan berre installerast medan
nettverket er tilgjengeleg. Sjølve omlastinga løyser alle ressursar
frå presjekken og fungerer fråkopla.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Bytt djuplenkjenøkkel frå lokalId til romnr fordi Geonorge
regenererer lokalId-UUID-en på kvar eksport (556/556 endra på sju
dagar), medan romnr er DSB sin stabile rom-nummer-nøkkel. Dokumentert
i ARCHITECTURE.md.
- PWA: ny del-knapp som genererer same HTTPS-djuplenke som Android-appen
(Web Share API med utklippstavle-fallback).
- PWA: vald tilfluktsrom overlever no posisjonsoppdateringar og
manuell dataoppdatering — sporast på romnr i staden for lista.
- Android: kart-bufferspørsmålet dukkar berre opp éin gong per økt
("Hopp over" sit), og forceRefresh viser lasteoverlegg + hindrar
samtidige refresh-kall.
- i18n.ts: vakta DOM-skriving slik at vitest køyrer utan jsdom.
- Oppdatert pakka tilfluktsromdata frå Geonorge.
Refs #15
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Fjern maximum-scale/user-scalable på viewport slik at siden kan
zoomes (WCAG 1.4.4). Leaflet håndterer gestikk på kartet selv.
- Legg til Apple-meta-tagger for standalone-modus og statuslinje.
- Vis engangsbanner på iOS Safari om å legge til på hjemskjerm,
siden iOS ikke støtter beforeinstallprompt.
- Gi tydelig statusmelding når bruker avslår kompasstilgang i
stedet for å stille reversere til kartmodus.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Appen kan nå serveres både på / og under en understi som
/tilfluktsrom uten endringer.
- Sett base: './' i vite.config.ts
- Endre alle absolutte stier i index.html til relative
- Oppdater manifest.webmanifest med start_url: "." og scope: "."
- navigateFallback uten ledende skråstrek
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Leaflet vendora:
- Fjerna CDN <link> for Leaflet CSS (allereie bundla via npm-import)
- Kartmarkør-ikon brukar bundla bilete i staden for unpkg URL-ar
- CSP stramma: unpkg ikkje lenger naudsynt i style-src/img-src
Slett buffer:
- «Slett lagra data»-knapp i om-dialogen
- Slettar localStorage, IndexedDB og tenestararbeidar-bufferar
- Lokalisert til en/nb/nn
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Om-side (Android + PWA):
- Ny AboutDialog med personvernerklæring, datakjelder og opphavsrett
- Opphavsrett flytta frå sivilforsvardialogen til om-sida
- Tilgjengeleg via «Om denne appen»-lenke i sivilforsvarsdialogen (Android)
og ny om-knapp i statuslinja (PWA)
- Lokalisert til en/nb/nn
Personvern og sikkerheit:
- Lagra GPS-posisjon utløper etter 24 timar (widget_prefs)
- Widget viser «Trykk for å oppdatere» når posisjon manglar eller er utløpt
- Eigendefinert User-Agent (Tilfluktsrom/1.6.1) i OkHttp
- Content Security Policy (CSP) meta-tag i PWA
- Tenararbeidar bufrar berre HTTP 200-svar (ikkje opake)
- Kartbuffer-metadata runda til ~11km presisjon i localStorage
- crossorigin="anonymous" på Leaflet CSS
i18n-opprydding:
- Unicode-escapes erstatta med UTF-8-teikn i nb.ts og nn.ts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tilgjengelegheit (Android + PWA):
- Semantiske landemerke (header, main, aside, role=dialog)
- aria-live-regionar for statusoppdateringar og lasteoverlegg
- Fokusindikatorar (:focus-visible) og prefers-reduced-motion
- Auka trykkmål til 48dp (infoknapp, oppdater, del, widget)
- contentDescription på kart, kompass og framdriftsindikator
- aria-current og role=listitem på tilfluktsromliste
- Fokusfangst og fokusgjenoppretting i lasteoverlegg
- Ikkje-farge-indikator (▶) for valt tilfluktsrom
- Dynamisk lang-attributt basert på oppdaga språk
- Lokaliserte aria-label (en/nb/nn)
Nordindikator:
- DirectionArrowView teiknar diskret «N»-markør på omkrinsen
- Roterer uavhengig av hovudpila for kompasskalibrering
- Berre på stor kompassvisning, ikkje minipila
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Legg til role=img og aria-label på retningspil-canvas
- Oppdater aria-label dynamisk med avstand ved val av tilfluktsrom
- Legg til direction_arrow_description-streng i alle tre språk
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Vite + TypeScript PWA that mirrors the Android app's core features:
- Pre-processed shelter data (build-time UTM33N→WGS84 conversion)
- Leaflet map with shelter markers, user location, and offline tiles
- Canvas compass arrow (ported from DirectionArrowView.kt)
- IndexedDB shelter cache with 7-day staleness check
- Service worker with CacheFirst tiles and precached app shell
- i18n for en, nb, nn (ported from Android strings.xml)
- iOS/Android compass handling with low-pass filter
- Respects user map interaction (no auto-snap on pan/zoom)
- Build revision cache-breaker for reliable SW updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>