From 2edf69be4967af983fb2b6a36f127fb538f7cfbb Mon Sep 17 00:00:00 2001 From: ---ZAIN--- Date: Thu, 11 Jun 2026 14:46:51 +0200 Subject: [PATCH 1/3] Add service worker for caching and offline support --- sw.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 sw.js diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..3839179 --- /dev/null +++ b/sw.js @@ -0,0 +1,50 @@ +const GHPATH = '/zainojdaf/web-dashers.github.io'; +const CACHE_NAME = 'web-dashers-dynamic-v1'; + +// We cachen handmatig alleen de absolute basis om de app op te starten +const INITIAL_CORE = [ + `${GHPATH}/`, + `${GHPATH}/index.html` +]; + +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(CACHE_NAME).then((cache) => { + return cache.addAll(INITIAL_CORE); + }) + ); +}); + +// DYNAMISCH CACHEN: Dit vangt ELK bestand op dat de game probeert te laden +self.addEventListener('fetch', (event) => { + // Alleen GET-verzoeken cachen (bestanden, audio, scripts) + if (event.request.method !== 'GET') return; + + event.respondWith( + caches.match(event.request).then((cachedResponse) => { + // 1. Als het bestand al in de cache staat, laad het direct (werkt offline!) + if (cachedResponse) { + return cachedResponse; + } + + // 2. Staat het er niet in? Haal het op van internet en sla het direct op voor de volgende keer + return fetch(event.request).then((networkResponse) => { + // Controleer of het verzoek geldig is + if (!networkResponse || networkResponse.status !== 200 || networkResponse.type !== 'basic') { + return networkResponse; + } + + // Sla een kopie van het bestand op in de cache + const responseToCache = networkResponse.clone(); + caches.open(CACHE_NAME).then((cache) => { + cache.put(event.request, responseToCache); + }); + + return networkResponse; + }).catch(() => { + // Fallback als je volledig offline bent en het bestand niet in de cache staat + return caches.match(`${GHPATH}/index.html`); + }); + }) + ); +}); From 48cc69ee026a57f8c6c24c1fc9b6a3ed91c1b6e4 Mon Sep 17 00:00:00 2001 From: ---ZAIN--- Date: Thu, 11 Jun 2026 14:49:16 +0200 Subject: [PATCH 2/3] Implement service worker registration in index.html Add service worker registration for offline support. --- index.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/index.html b/index.html index e2bb38a..62c34f4 100644 --- a/index.html +++ b/index.html @@ -55,6 +55,17 @@ + + + From 6fd61ad154a50217fe4f4c1d6378cf3f370e0e17 Mon Sep 17 00:00:00 2001 From: ---ZAIN--- Date: Fri, 12 Jun 2026 11:10:00 +0200 Subject: [PATCH 3/3] Refactor comments and improve fetch event handling --- sw.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/sw.js b/sw.js index 3839179..e25b558 100644 --- a/sw.js +++ b/sw.js @@ -1,7 +1,6 @@ const GHPATH = '/zainojdaf/web-dashers.github.io'; const CACHE_NAME = 'web-dashers-dynamic-v1'; -// We cachen handmatig alleen de absolute basis om de app op te starten const INITIAL_CORE = [ `${GHPATH}/`, `${GHPATH}/index.html` @@ -15,26 +14,24 @@ self.addEventListener('install', (event) => { ); }); -// DYNAMISCH CACHEN: Dit vangt ELK bestand op dat de game probeert te laden self.addEventListener('fetch', (event) => { - // Alleen GET-verzoeken cachen (bestanden, audio, scripts) + // (files, audio, scripts) if (event.request.method !== 'GET') return; event.respondWith( caches.match(event.request).then((cachedResponse) => { - // 1. Als het bestand al in de cache staat, laad het direct (werkt offline!) + // if the file is loaded it works offline :) if (cachedResponse) { return cachedResponse; } - // 2. Staat het er niet in? Haal het op van internet en sla het direct op voor de volgende keer return fetch(event.request).then((networkResponse) => { - // Controleer of het verzoek geldig is + // Test if the request works (this is important) if (!networkResponse || networkResponse.status !== 200 || networkResponse.type !== 'basic') { return networkResponse; } - // Sla een kopie van het bestand op in de cache + // makes a copy of the file (thats how it works offline heh) const responseToCache = networkResponse.clone(); caches.open(CACHE_NAME).then((cache) => { cache.put(event.request, responseToCache); @@ -42,7 +39,7 @@ self.addEventListener('fetch', (event) => { return networkResponse; }).catch(() => { - // Fallback als je volledig offline bent en het bestand niet in de cache staat + // Fallback if you are offline and you dont have ANY files loaded return caches.match(`${GHPATH}/index.html`); }); })