forked from udacity/mws-restaurant-stage-1
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsw.js
More file actions
71 lines (64 loc) · 2.06 KB
/
sw.js
File metadata and controls
71 lines (64 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
let staticCacheName = 'mws-pro1-static-v3';
let imgCacheName = 'mws-pro1-images';
let allCaches = [
staticCacheName,
imgCacheName
];
self.addEventListener('install', async event => {
event.waitUntil((await caches.open(staticCacheName)).addAll([
'/',
'/index.html',
'/restaurant.html',
'/css/styles.css',
'/js/',
'/js/private.js',
'/js/idb.js',
'/js/idbhelper.js',
'/js/dbhelper.js',
'/js/main.js',
'/js/restaurant_info.js',
'/js/register.js',
'/js/lazysizes.min.js'
]));
});
self.addEventListener('activate', async event => {
event.waitUntil(Promise.all(
(await caches.keys()).filter(cacheName => {
return cacheName.startsWith('mws-pro1-') &&
!allCaches.includes(cacheName);
}).map(cacheName => {
return caches.delete(cacheName);
})
));
});
self.addEventListener('fetch', event => {
let cacheRequest = event.request;
let requestUrl = new URL(cacheRequest.url);
if (requestUrl.hostname !== 'localhost') {
cacheRequest.mode = 'no-cors';
}
if (requestUrl.pathname.startsWith('/restaurant.html')) {
event.respondWith(serveRestaurant(cacheRequest));
}
else if (requestUrl.pathname.startsWith('/img/')) {
event.respondWith(servePhoto(cacheRequest));
}
else {
event.respondWith(serveOther(cacheRequest));
}
});
async function serveOther(cacheRequest) {
return (await caches.match(cacheRequest)) || fetch(cacheRequest);
}
async function serveRestaurant(cacheRequest) {
return (await caches.match(cacheRequest.url.split('?')[0])) || fetch(cacheRequest);
}
async function servePhoto(request) {
let storageUrl = (new URL(request.url)).pathname.replace(/_\dx\.jpg$/, '');
let cache = await caches.open(imgCacheName);
let response = await cache.match(storageUrl);
if (response) return response;
let networkResponse = await fetch(request);
cache.put(storageUrl, networkResponse.clone());
return networkResponse;
}