/* Nur die Programmhuelle wird gecacht. Kartendaten und Bilder kommen immer frisch vom Server - eine veraltete Liste waere schlimmer als keine. */ const CACHE = "bcs-shell-v1"; const SHELL = ["/", "/static/style.css", "/static/app.js", "/manifest.webmanifest"]; self.addEventListener("install", (event) => { event.waitUntil(caches.open(CACHE).then((cache) => cache.addAll(SHELL))); self.skipWaiting(); }); self.addEventListener("activate", (event) => { event.waitUntil( caches.keys().then((keys) => Promise.all(keys.filter((key) => key !== CACHE).map((key) => caches.delete(key))) ) ); self.clients.claim(); }); self.addEventListener("fetch", (event) => { const url = new URL(event.request.url); if (event.request.method !== "GET" || url.origin !== self.location.origin) return; if (url.pathname.startsWith("/api/") || url.pathname.startsWith("/vcf")) return; // Fuer die Huelle den HTTP-Cache umgehen: sonst liefert ein Deploy noch // tagelang die alte CSS- und JS-Datei aus. const shell = SHELL.includes(url.pathname); event.respondWith( fetch(event.request, shell ? { cache: "no-store" } : undefined) .then((response) => { if (shell) { const copy = response.clone(); caches.open(CACHE).then((cache) => cache.put(event.request, copy)); } return response; }) .catch(() => caches.match(event.request).then((hit) => hit || caches.match("/"))) ); });