From fb797a2eec2a86ae2e5422ee328d4a58eb519163 Mon Sep 17 00:00:00 2001 From: Sean Kooyman Date: Mon, 29 Apr 2024 21:35:00 -0400 Subject: [PATCH 1/3] service worker init --- bf-service-worker.js | 39 ++++++++++++++++++++++++++++++++++++ by_father.php | 47 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 bf-service-worker.js diff --git a/bf-service-worker.js b/bf-service-worker.js new file mode 100644 index 0000000..1da6f09 --- /dev/null +++ b/bf-service-worker.js @@ -0,0 +1,39 @@ +const CACHE_NAME = 'v1'; +const urlsToCache = [ + '/by_father.php' +]; + +self.addEventListener('install', event => { + event.waitUntil( + caches.open(CACHE_NAME) + .then(cache => { + console.log('Opened cache'); + return cache.addAll(urlsToCache); + }) + ); +}); + +self.addEventListener('fetch', event => { + event.respondWith( + caches.match(event.request) + .then(response => { + if (response) { + return response; // return the cached response if available + } + return fetch(event.request).then(response => { + // Check if we received a valid response + if (!response || response.status !== 200 || response.type !== 'basic') { + return response; + } + let responseToCache = response.clone(); + + caches.open(CACHE_NAME) + .then(cache => { + cache.put(event.request, responseToCache); + }); + + return response; + }); + }) + ); +}); \ No newline at end of file diff --git a/by_father.php b/by_father.php index 9243177..8a3cc7d 100644 --- a/by_father.php +++ b/by_father.php @@ -59,8 +59,32 @@ function loadFile(filePath) { $('#sidebarMenu').removeClass('show'); } + const CACHE_NAME = 'v1'; $(document).ready(function(){ - $('#cfmenu').jstree(); + $('#cfmenu').jstree({ + "plugins" : ["contextmenu"], + "contextmenu": { + "items": function($node) { + return { + "saveOffline": { + "label": "Save for offline reading", + "action": function (obj) { + const fname = $node.data.fname; + const urlToCache = "https://historicalchristianfaith.github.io/Writings-Database/" + fname; + caches.open(CACHE_NAME).then(cache => { + cache.add(urlToCache).then(() => { + console.log('File cached for offline use:', urlToCache); + // Optionally, change the node icon to indicate it's saved for offline + $node.icon = "fas fa-file-download"; + $('#cfmenu').jstree(true).redraw(true); + }); + }); + } + } + }; + } + } + }); const urlParams = new URLSearchParams(window.location.search); const file = urlParams.get('file'); if (file) { @@ -75,7 +99,7 @@ function loadFile(filePath) { if(nodeToSelect) { tree.select_node(nodeToSelect.id); } else { - console.log('No node found with data-fname:', fnameParam); + console.log('No node found with data-fname:', file); } } $('#cfmenu').on("changed.jstree", function (e, data) { @@ -94,6 +118,25 @@ function loadFile(filePath) { } }); + + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('/bf-service-worker.js') + .then(function(registration) { + console.log('Service Worker registered with scope:', registration.scope); + }) + .catch(function(err) { + console.log('Service Worker registration failed:', err); + }); + } + + caches.open(CACHE_NAME).then(cache => { + cache.add(urlToCache).then(() => { + console.log('File cached for offline use:', urlToCache); + // Optionally, change the node icon to indicate it's saved for offline + $node.icon = "fas fa-file-download"; + $('#cfmenu').jstree(true).redraw(true); + }); + }); }); From d0cdd282994547dd693993f87c5fb82292405aed Mon Sep 17 00:00:00 2001 From: Sean Kooyman Date: Wed, 1 May 2024 08:02:02 -0400 Subject: [PATCH 2/3] caching seems to work --- bf-service-worker.js | 41 +++++++++++++++--- by_father.php | 101 ++++++++++++++++++++++++------------------- 2 files changed, 92 insertions(+), 50 deletions(-) diff --git a/bf-service-worker.js b/bf-service-worker.js index 1da6f09..5cac334 100644 --- a/bf-service-worker.js +++ b/bf-service-worker.js @@ -1,5 +1,5 @@ -const CACHE_NAME = 'v1'; -const urlsToCache = [ +const CACHE_NAME = 'v3'; +const urlsToCacheOnPageLoad = [ '/by_father.php' ]; @@ -8,14 +8,42 @@ self.addEventListener('install', event => { caches.open(CACHE_NAME) .then(cache => { console.log('Opened cache'); - return cache.addAll(urlsToCache); + return cache.addAll(urlsToCacheOnPageLoad); + }) + ); +}); + +self.addEventListener('activate', event => { + event.waitUntil( + caches.keys().then(cacheNames => { + return Promise.all( + cacheNames.map(cacheName => { + if (cacheName != CACHE_NAME) { + return caches.delete(cacheName); + } + }) + ); }) ); }); self.addEventListener('fetch', event => { + // Check if the request is for /by_father.php and strip query parameters if so + let cacheRequest = event.request; + if (event.request.url.includes('/by_father.php')) { + let url = new URL(event.request.url); + // Create a new request without the search parameters + cacheRequest = new Request(url.origin + url.pathname, { + method: event.request.method, + headers: event.request.headers, + mode: 'same-origin', // ensure requests are made to the same origin + credentials: event.request.credentials, + redirect: 'manual' // ensure fetches are only for navigation within the same origin + }); + } + event.respondWith( - caches.match(event.request) + caches.match(cacheRequest) .then(response => { if (response) { return response; // return the cached response if available @@ -29,11 +57,12 @@ self.addEventListener('fetch', event => { caches.open(CACHE_NAME) .then(cache => { - cache.put(event.request, responseToCache); + console.log("*****cached another...", cacheRequest.url) + cache.put(cacheRequest, responseToCache); // store the response in cache }); return response; }); }) ); -}); \ No newline at end of file +}); diff --git a/by_father.php b/by_father.php index 8a3cc7d..924bb7a 100644 --- a/by_father.php +++ b/by_father.php @@ -49,6 +49,7 @@ } From 3667cd56dc81f26037aa22527a7ffc43170f2228 Mon Sep 17 00:00:00 2001 From: Sean Kooyman Date: Wed, 1 May 2024 08:02:25 -0400 Subject: [PATCH 3/3] Update bf-service-worker.js --- bf-service-worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bf-service-worker.js b/bf-service-worker.js index 5cac334..ff4e1f5 100644 --- a/bf-service-worker.js +++ b/bf-service-worker.js @@ -57,7 +57,7 @@ self.addEventListener('fetch', event => { caches.open(CACHE_NAME) .then(cache => { - console.log("*****cached another...", cacheRequest.url) + //console.log("*****cached another...", cacheRequest.url) cache.put(cacheRequest, responseToCache); // store the response in cache });