PageSourceSearch

https://st.museum-digital.de/sw.js

js museum-digital.de collected 2026-10-01 10:34:26 UTC 6,438 bytes, 174 lines download raw bytes

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.