/** * DeskHub Service Worker – Mitarbeiterbereich (scope: /staff/) */ const CACHE = 'deskhub-staff-v1'; const OFFLINE_URL = '/offline.html'; const PRECACHE = ['/offline.html', '/assets/css/style.css']; self.addEventListener('install', e => { e.waitUntil(caches.open(CACHE).then(c => c.addAll(PRECACHE))); self.skipWaiting(); }); self.addEventListener('activate', e => { e.waitUntil( caches.keys().then(keys => Promise.all(keys.filter(k => k !== CACHE).map(k => caches.delete(k))) ) ); self.clients.claim(); }); self.addEventListener('fetch', e => { if (e.request.method !== 'GET') return; if (e.request.url.match(/\.(css|js|woff2?|png|svg|ico|webp)(\?.*)?$/)) { e.respondWith( caches.match(e.request).then(cached => cached || fetch(e.request).then(resp => { caches.open(CACHE).then(c => c.put(e.request, resp.clone())); return resp; }) ) ); return; } e.respondWith( fetch(e.request).catch(() => caches.match(OFFLINE_URL)) ); });