123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- 'use strict';
- /* ================================== */
- /* NOTE: Registration done in main.js */
- /* ================================== */
-
- /* =================================== */
- /* NOTE: CacheKey & FilesToCache Lists */
- /* =================================== */
- const version = '1';
- const appPrefix = 'ohmnews-';
- const staticCacheKey = appPrefix + 'static-v' + version;
- const dataCacheKey = appPrefix + 'content-data';
- var allCacheKey = [
- staticCacheKey,
- dataCacheKey
- ];
-
- /* ================================== */
- /* NOTE: Install: Save files to cache */
- /* ================================== */
- // Install new service worker even when old version still in use.
- // Install happens only once a lifetime of a service worker.
- const cacheResources = async () => {
- const staticFilesToCache = [
- './',
- 'favicon.ico',
- 'index.html',
- 'main.js',
- 'manifest.json',
- 'font/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2',
- 'font/KFOlCnqEu92Fr1MmEU9fBBc4.woff2',
- 'font/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2',
- 'font/KFOlCnqEu92Fr1MmSU5fBBc4.woff2',
- 'font/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2',
- 'font/KFOlCnqEu92Fr1MmWUlfBBc4.woff2',
- 'font/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2',
- 'font/KFOmCnqEu92Fr1Mu4mxK.woff2',
- 'font/KFOmCnqEu92Fr1Mu7GxKOzY.woff2',
- 'img/launcher/launcher_app_icon_152.png',
- 'img/launcher/launcher_app_icon_167.png',
- 'img/launcher/launcher_app_icon_180.png',
- 'img/launcher/launcher_app_icon_192.png',
- 'img/launcher/launcher_app_icon_512.png',
- 'img/app_icon.png',
- 'img/launcher_app_icon.png',
- 'img/profil_icon.png',
- 'lib/bootstrap-font-and-icons.css',
- 'lib/bootstrap-material-design.js',
- 'lib/bootstrap-material-design.min.css',
- 'lib/jquery-3.3.1.min.js',
- 'lib/popper-1.12.6.js',
- 'lib/vue-router.js',
- 'lib/vue.js',
- 'routes/bookmark.js',
- 'routes/createMessage.js',
- 'routes/files.js',
- 'routes/home.js',
- 'routes/messageData.js',
- 'routes/msgCard.js',
- 'routes/profil.js',
- 'routes/profilCard.js',
- 'routes/profilData.js',
- 'style/style.css',
- ];
- const dataFilesToCache = [];
-
- const cacheStatic = await caches.open(staticCacheKey);
- cacheStatic.addAll(staticFilesToCache);
- console.log('[ServiceWorker] Cache static files.');
-
- const cacheData = await caches.open(dataCacheKey);
- cacheData.addAll(dataFilesToCache);
- console.log('[ServiceWorker] Cache data files.');
- return;
- }
- self.addEventListener('install', event => {
- // don't wait
- self.skipWaiting();
- // cache static files
- event.waitUntil(cacheResources())
- console.log('[ServiceWorker] Install');
- });
-
- /* ================================================================ */
- /* NOTE: Activate: new service worker and delete old cache versions */
- /* ================================================================ */
- // No fetch or pull is called before succesfull activate event.
- const cacheCleanUp = async () => {
- const cacheKeyList = await caches.keys();
- const deletions = cacheKeyList
- .filter(key => key.startsWith(appPrefix) && !allCacheKey.includes(key))
- .map(key => {
- caches.delete(key)
- console.log('[ServiceWorker] Removing old cache', key);
- });
- for (const success of deletions) {
- await success;
- }
- return;
- }
- self.addEventListener('activate', event => {
- event.waitUntil(cacheCleanUp());
- clients.claim();
- console.log('[ServiceWorker] Activate');
- });
-
- /* ========================================= */
- /* NOTE: Fetch: Update logic for cache files */
- /* ========================================= */
-
- self.addEventListener('fetch', event => {
- // Provide HTTPS URL for query data.
- const dataUrl = 'https://me.efi.th-nuernberg.de/om/';
- // Parse the URL:
- const requestURL = new URL(event.request.url);
-
-
- // Start the network request as soon as possible.
- //const networkPromise = fetch('/data.json');
-
- event.respondWith(
- caches.match(event.request)
- .then(cachedResponse => {
- if (cachedResponse) {
- return cachedResponse;
- }
- console.log('[ServiceWorker] Fetch', requestURL.href);
- return fetch(event.request).then(response => {
- // Check if we received a valid response
- // - Ensure the response is valid.
- // - Check the status is 200 on the response.
- // - Make sure the response type is basic, which indicates that it's a request from our origin.
- // This means that requests to third party assets aren't cached as well.
- if (!response || response.status !== 200 || response.type !== 'basic') {
- return response;
- }
-
- // We have to clone the response here because request bodies
- // can only be read once. Placing a response in the cache
- // counts as a read and so does the `res.json` call below.
- var responseToCache = response.clone();
-
- caches.open(staticCacheKey).then(cache => {
- cache.put(event.request, responseToCache);
- });
-
- return response;
- });
- })
- );
- });
|