// Service Worker pour Forum Communautaire const CACHE_NAME = 'forum-communautaire-v1'; const ASSETS_TO_CACHE = [ '/', '/static/css/styles.css', '/static/js/forum.js', '/static/js/editor.js', '/static/icons/icon-192x192.png', '/static/icons/icon-512x512.png', 'https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js', 'https://cdn.tailwindcss.com' ]; // Installation du service worker self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE_NAME) .then((cache) => { console.log('Cache ouvert'); return cache.addAll(ASSETS_TO_CACHE); }) ); }); // Activation du service worker self.addEventListener('activate', (event) => { const cacheWhitelist = [CACHE_NAME]; event.waitUntil( caches.keys().then((cacheNames) => { return Promise.all( cacheNames.map((cacheName) => { if (cacheWhitelist.indexOf(cacheName) === -1) { return caches.delete(cacheName); } }) ); }) ); }); // Récupération des ressources lors des requêtes self.addEventListener('fetch', (event) => { event.respondWith( caches.match(event.request) .then((response) => { // Cache hit - return response if (response) { return response; } // Cloner la requête car elle ne peut être utilisée qu'une fois const fetchRequest = event.request.clone(); return fetch(fetchRequest).then( (response) => { // Vérifier si la réponse est valide if(!response || response.status !== 200 || response.type !== 'basic') { return response; } // Cloner la réponse car elle ne peut être utilisée qu'une fois const responseToCache = response.clone(); caches.open(CACHE_NAME) .then((cache) => { cache.put(event.request, responseToCache); }); return response; } ); }) ); });