1var debug = false; 2var CACHE_NAME = 'my-site-cache-v3'; 3var CACHE_NAME_DYNAMIC = 'my-dyn-site-cache-v3'; 4var urlsToCache = [ 5 6 // Style files 7 '/css/main.min.css?v00064', 8 '/css/objectPage.min.css?v00064', 9 10 // Scripts 11 '/js/loadCaches.min.js?v00064', 12 '/js/mdFunctions.min.js?v00064', 13 '/js/mdFunctionsPostloaded.min.js?v00064', 14 // '/js/_mergedMdObjectPage.min.js?v00064', 15 '/js/_mergedMdObjPageAbF.min.js?v00064', 16 '/js/offline.js', 17 '/manifest.webmanifest', 18 '/', 19 20 '/css/mainPostloaded.min.css?v00064', 21 22 // Static pages 23 '/offline.htm', 24 25]; 26 27self.addEventListener('install', function(event) { 28 // Perform install steps 29 event.waitUntil( 30 Promise.all([ 31 caches.open(CACHE_NAME) 32 .then(function(cache) { 33 if (debug === true) console.log('Opened cache'); 34 return cache.addAll(urlsToCache.map(url => new Request(url, {credentials: 'same-origin'}))); 35 }), 36 ]) 37 ); 38}); 39 40self.addEventListener('activate', event => { 41 console.log('Activating new service worker...'); 42 43 const cacheAllowlist = [CACHE_NAME, CACHE_NAME_DYNAMIC]; 44 45 event.waitUntil( 46 caches.keys().then(cacheNames => { 47 return Promise.all( 48 cacheNames.map(cacheName => { 49 if (cacheAllowlist.indexOf(cacheName) === -1) { 50 return caches.delete(cacheName); 51 console.log("Delete from sw: " + cacheName); 52 } 53 }) 54 ); 55 }) 56 ); 57}); 58 59var cacheOpportunistically = [ 60 '/js/_mergedMdObjPageBeF.min.js?v00064', 61 // "/js/shariff/shariff.complete.js", 62 "/js/OpenLayers10/ol.js", 63 "/js/OpenLayers10/ol.css", 64 "/js/runMap.min.js?v00064", 65 "/js/mdSpeech.min.js?v00064", 66 "/js/jquery-3.6.4.slim.min.js", 67 "/js/justifiedGallery/justifiedGallery.min.css", 68 "/js/justifiedGallery/jquery.justifiedGallery.min.js", 69 "/js/mdSearchResultsPerMuseum.js", 70 "/js/singleImage.min.js?v00064", 71 "/js/graph.min.js?v00064", 72 "/css/graph.min.css?v00064", 73 "/db_images_gestaltung/go.gif", 74 "/js/open-close-thesaurus-info.min.js?v00064", 75 "/authorities/family-tree.php?output=js", 76 // "js/mdImageSearch.js", 77]; 78 79var cacheOpportunisticallyDyn = [ 80 "/topics", 81 "/contact", 82 "/imprint", 83 "/privacy", 84 "/rss", 85]; 86 87self.addEventListener('fetch', function(event) { 88 89 if (event.request.url.startsWith(location.origin) === false || ( 90 event.request.url.indexOf("/object/") !== -1 91 )) return; 92 93 event.respondWith( 94 caches.match(event.request) 95 .then(function(response) { 96 97 if (response) { 98 if (debug === true) console.log("Serving " + event.request.url + " from cache."); 99 return response; 100 } 101 102 // IMPORTANT: Clone the request. A request is a stream and 103 // can only be consumed once. Since we are consuming this 104 // once by cache and once by the browser for fetch, we need 105 // to clone the response. 106 var fetchRequest = event.request.clone(); 107 108 return fetch(fetchRequest).then( 109 function(response) { 110 // Check if we received a valid response 111 if(!response || response.status !== 200 || response.type !== 'basic') { 112 return response; 113 } 114 115 let useCache = false; 116 if (event.request.url.indexOf(".css") > 0) useCache = true; 117 else if (event.request.url.indexOf(".js") > 0) useCache = true; 118 else if (event.request.url.indexOf(".svg") > 0) useCache = true; 119 else if (event.request.url.indexOf(".gif") > 0) useCache = true; 120 else if (event.request.url.indexOf(".png") > 0) useCache = true; 121 for (let i = 0, max = cacheOpportunistically.length; i < max; i++) { 122 if (event.request.url.endsWith(cacheOpportunistically)) useCache = true; 123 } 124 125 if (useCache == true) { 126 var responseToCache = response.clone(); 127 128 caches.open(CACHE_NAME) 129 .then(function(cache) { 130 if (debug === true) console.log("Added " + event.request.url + "to cache"); 131 cache.put(event.request, responseToCache); 132 }); 133 } 134 135 else { 136 137 let useCacheDyn = false;
138 if (event.request.url.indexOf("/object/") > 0) useCacheDyn = true; 139 for (let i = 0, max = cacheOpportunisticallyDyn.length; i < max; i++) { 140 if (event.request.url.endsWith(cacheOpportunisticallyDyn)) useCacheDyn = true; 141 } 142 143 if (useCacheDyn == true) { 144 145 var responseToCache = response.clone(); 146 147 caches.open(CACHE_NAME_DYNAMIC) 148 .then(function(cache) { 149 if (debug === true) console.log("Added " + event.request.url + "to cache"); 150 cache.put(event.request, responseToCache); 151 }); 152 153 } 154 } 155 156 return response; 157 } 158 ).catch( 159 () => { 160 console.log("Problem"); 161 if (event.request.url.indexOf("index.php?") == -1) return; 162 else { 163 console.log("Fixing"); 164 return caches.open(CACHE_NAME).then( 165 function(cache) { 166 // cache.keys().then(function(keys) { console.log(keys); }) 167 return cache.match("/offline.htm") 168 }); 169 } 170 } 171 ); 172 }) 173 ); 174});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.