1'use strict'; 2 3var expectedCaches = [ 'bm-core-v1', 'bm-pages', 'bm-assets' ]; 4var c_pages = [ '/','/offline','/home' ]; 5var c_core = [ '/css/styles.css?cee10459', '/css/style_bm.css?6702cbea', 'https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700?59372dae', '/js/vendor/jquery.flexslider-min.js?66cd1602', '/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js?0d1d5c9a', '/js/vendor/jquery.jplayer.min.js?95af5642', '/js/vendor/jplayer.playlist.min.js?fefc2c68', '/js/main.js?fc460036' ]; 6var c_assets = [ ]; 7 8self.addEventListener('install', function(event) { 9 event.waitUntil(async function() { 10 const pages = await caches.open('bm-pages'); 11 pages.addAll( c_pages ); 12 const assets = await caches.open('bm-assets'); 13 assets.addAll( c_assets ); 14 caches.open('bm-core-v1').then(function(cache) { 15 var todo=c_core.slice(); 16 cache.keys().then(function (keys) { 17 keys.map( req => { 18 var url=new URL(req.url); 19 if (url.origin==location.origin) url=url.pathname+url.search; else url=req.url; 20 if (todo.indexOf(url)>=0) todo.splice(todo.indexOf(url),1); 21 }); 22 }); 23 //console.log(todo); 24 return cache.addAll( todo ); 25 }).then(function() { 26 return self.skipWaiting(); 27 }) 28 }()); 29}); 30 31self.addEventListener('activate', function(event) { 32 self.clients.claim(); 33 console.log('activate'); 34 event.waitUntil(Promise.all( [ 35 caches.keys().then(function(cacheNames) { 36 return Promise.all( 37 cacheNames.map(function(cacheName) { 38 if (!/^bm-/.test(cacheName)) { 39 return; 40 } 41 if (expectedCaches.indexOf(cacheName) == -1) { 42 return caches.delete(cacheName); 43 } 44 }) 45 ); 46 }) 47 ,caches.open('bm-core-v1').then(function(cache) { 48 cache.keys().then(function(items) { 49 items.map(item => { 50 var url=new URL(item.url); 51 if (url.origin==location.origin) url=url.pathname+url.search; 52 else url=item.url; 53 if (c_core.indexOf(url)==-1) { 54 console.log("del "+url); 55 cache.delete(item); 56 } 57 }); 58 }) 59 }) 60 ] ) ); 61}); 62 63self.addEventListener('fetch', function(evt) { 64 var url=new URL(evt.request.url); 65 if (url.origin==location.origin) url=url.pathname+url.search; else url=evt.request.url; 66 67 if (c_core.find(el => el.split("?")[0] == url)) { 68 console.log('core '+evt.request.url); 69 evt.respondWith(fromCache(evt.request,'bm-core-v1').catch(function() { 70 console.log('fallback net'); 71 return fetch(evt.request); 72 })); 73 } 74 if (c_pages.find(el => el.split("?")[0] == url)) { 75 console.log('page '+evt.request.url); 76 evt.respondWith(networkOrCache(evt.request,'bm-pages')); 77 } 78}); 79 80function networkOrCache(request,cachename) { 81 return fromNetwork(request, 2500).catch(function () { 82 console.log('fallback cache'); 83 return fromCache(request,cachename); 84 }); 85} 86 87function fromCache(request, cachename) { 88 return caches.open(cachename).then(function (cache) { 89 return cache.match(request,{ignoreSearch:true,ignoreMethod:true,ignoreVary:true}).then(function (matching) { 90 return matching || Promise.reject('no-match'); 91 }); 92 }); 93} 94 95function fromNetwork(request, timeout) { 96 return new Promise(function (fulfill, reject) { 97 var timeoutId = setTimeout(reject, timeout); 98 fetch(request).then(function (response) { 99 clearTimeout(timeoutId); 100 fulfill(response); 101 }, reject); 102 }); 103} 104 105var FALLBACK = 106 '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="180" stroke-linejoin="round">' + 107 ' <path stroke="#DDD" stroke-width="25" d="M99,18 15,162H183z"/>' + 108 ' <path stroke-width="17" fill="#FFF" d="M99,18 15,162H183z" stroke="#eee"/>' + 109 ' <path d="M91,70a9,9 0 0,1 18,0l-5,50a4,4 0 0,1-8,0z" fill="#aaa"/>' + 110 ' <circle cy="138" r="9" cx="100" fill="#aaa"/>' + 111 '</svg>'; 112 113function useFallback() { 114 return Promise.resolve(new Response(FALLBACK, { headers: { 115 'Content-Type': 'image/svg+xml' 116 }})); 117} 118
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.