feat: add styled PWA update modal with auto cache purge

This commit is contained in:
2026-07-24 19:35:13 +04:00
parent f760dfb72c
commit 7f1bdaa2ab
14 changed files with 331 additions and 52 deletions
+13 -18
View File
@@ -1,6 +1,9 @@
const CACHE_NAME = 'fediverse-oki-08072026-0720';
const STATIC_CACHE_NAME = 'fediverse-oki-static-08072026-0720';
const DYNAMIC_CACHE_NAME = 'fediverse-oki-dynamic-08072026-0720';
// Version du cache : à bumper à chaque déploiement (format JJMMAAAA-HHMM).
// Tout changement de ce fichier déclenche l'installation d'un nouveau
// Service Worker chez les visiteurs ; les anciens caches sont purgés à
// l'activation (voir l'event 'activate' plus bas).
const STATIC_CACHE_NAME = 'annu-kute-ced-static-24072026-0612';
const DYNAMIC_CACHE_NAME = 'annu-kute-ced-dynamic-24072026-0612';
// Ressources à mettre en cache immédiatement
const STATIC_ASSETS = [
@@ -46,13 +49,15 @@ self.addEventListener('install', event => {
console.log('Service Worker: Mise en cache des assets statiques');
return cache.addAll(STATIC_ASSETS);
})
.then(() => {
return self.skipWaiting();
})
.catch(err => {
console.error('Service Worker: Erreur lors de la mise en cache:', err);
})
);
// Note : pas de skipWaiting() ici. Lors d'une mise à jour, le nouveau SW
// reste en attente jusqu'à ce que l'utilisateur accepte la mise à jour
// via le modal (message SKIP_WAITING envoyé par js/pwa-update.js).
// Lors de la toute première visite (aucun SW actif), l'activation est
// immédiate.
});
// Activation du Service Worker
@@ -202,20 +207,10 @@ function isApiRequest(url) {
url.includes('mastodon-config.php');
}
// Gestion des messages du client
// Gestion des messages du client : l'utilisateur a accepté la mise à jour,
// le SW en attente prend le contrôle (purge des anciens caches à l'activation).
self.addEventListener('message', event => {
if (event.data && event.data.type === 'SKIP_WAITING') {
self.skipWaiting();
}
});
// Notification de mise à jour
self.addEventListener('message', event => {
if (event.data && event.data.type === 'CHECK_UPDATE') {
// Vérifier s'il y a une mise à jour
event.ports[0].postMessage({
type: 'UPDATE_AVAILABLE',
version: CACHE_NAME
});
}
});