Files
customerTicket/templates/pwa/service-worker.js
T
2026-09-10 11:34:19 +03:30

7 lines
1.9 KiB
JavaScript

{% load static %}
const CACHE='sales-ticket-{{ static_asset_version }}';
const SHELL=['{% static "fonts/vazirmatn-arabic-wght-normal.woff2" %}?v={{ static_asset_version }}','{{ company_logo_url }}?v={{ static_asset_version }}-{{ branding_version }}','{{ favicon_url }}?v={{ static_asset_version }}-{{ branding_version }}','{{ pwa_icon_url }}?v={{ static_asset_version }}-{{ branding_version }}'];
self.addEventListener('install',event=>event.waitUntil(caches.open(CACHE).then(cache=>cache.addAll(SHELL)).then(()=>self.skipWaiting())));
self.addEventListener('activate',event=>event.waitUntil(caches.keys().then(keys=>Promise.all(keys.filter(key=>key!==CACHE).map(key=>caches.delete(key)))).then(()=>self.clients.claim())));
self.addEventListener('fetch',event=>{if(event.request.method!=='GET'||new URL(event.request.url).origin!==location.origin)return;const url=new URL(event.request.url);if(event.request.mode==='navigate'){event.respondWith(fetch(event.request,{cache:'no-store'}).catch(()=>new Response('برای مشاهده تیکت‌ها به اینترنت متصل شوید.',{status:503,headers:{'Content-Type':'text/plain; charset=utf-8'}})));return}const isStatic=url.pathname.startsWith('/static/');const isAvatar=url.pathname.includes('/experts/')&&url.pathname.endsWith('/avatar/');if(!isStatic&&!isAvatar){event.respondWith(fetch(event.request,{cache:'no-store'}));return}const mutable=event.request.destination==='style'||event.request.destination==='script'||isAvatar;if(mutable){event.respondWith(fetch(event.request,{cache:'no-store'}).then(response=>{const copy=response.clone();caches.open(CACHE).then(cache=>cache.put(event.request,copy));return response}).catch(()=>caches.match(event.request)));return}event.respondWith(caches.match(event.request).then(cached=>cached||fetch(event.request).then(response=>{const copy=response.clone();caches.open(CACHE).then(cache=>cache.put(event.request,copy));return response}))) });