/* * Beamer Viewer, a web-based PDF presentation viewer * Copyright 2018-2024 Pacien TRAN-GIRARD * SPDX-License-Identifier: EUPL-1.2 */ "use strict"; // script put at the root of the app so it can intercept all requests made from the current directory. class AppCache { constructor() { this.cacheName = "cache"; this.filesToCache = [ ".", "appcache.js", "favicon.ico", "sample/demo.pdf", "beamer/pdfjs/pdf.js", "beamer/pdfjs/pdf.worker.js", "beamer/viewer/viewer.css", "beamer/viewer/init.js", "beamer/viewer/viewer.js", "beamer/viewer/presentation.js", "beamer/viewer/stage/stage.js", "beamer/viewer/stage/actions.js", "beamer/viewer/screen/screen.js", "beamer/viewer/screen/timer.js" ]; self.addEventListener("install", event => event.waitUntil(this.onInstall())); self.addEventListener("fetch", event => event.respondWith(this.onFetch(event.request))); } onInstall() { return caches.open(this.cacheName) .then(cache => cache.addAll(this.filesToCache)); } onFetch(request) { return caches.open(this.cacheName) .then(cache => this._serve(cache, request)); } _serve(cache, request) { return cache.match(request).then(cachedResponse => { const update = this._fetchUpdate(cache, request); return cachedResponse || update; }); } _fetchUpdate(cache, request) { return fetch(request).then(networkResponse => { cache.put(request, networkResponse.clone()); return networkResponse; }); } } const appCache = new AppCache();