-
Notifications
You must be signed in to change notification settings - Fork 0
/
serviceworker.js
114 lines (101 loc) · 3.7 KB
/
serviceworker.js
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
const path = (new URL(self.registration.scope)).pathname;
importScripts(path + "scripts/jsonUtils.js");
var cacheName = "NYC-V1.0";
const cachefiles = [
path,
path + "manifest.webmanifest",
path + "activities/sightseeing",
path + "activities/sightseeing.html",
path + "activities/photoshoot",
path + "activities/photoshoot.html",
path + "activities/boring",
path + "activities/boring.html",
path + "fonts/montserrat-latin.woff2",
path + "images/boringstuff3.jpg",
path + "images/down-arrow.svg",
path + "images/icons-32.png",
path + "images/icons-192.png",
path + "images/icons-512.png",
path + "images/nyc-vectorstock.svg",
path + "images/photodate.jpg",
path + "images/screen_2x.jpg",
path + "images/sightseeing-unsplash%20compressed.jpg",
path + "images/william-wachter-HLNLtyon-xg-unsplash%20compressed.jpg",
path + "scripts/CSSRulePlugin3.min.js",
path + "scripts/ScrollMagic.min.js",
path + "scripts/animation.gsap.min.js",
path + "scripts/app.js",
path + "scripts/debug.addIndicators.min.js",
path + "scripts/gsap.min.js",
path + "styles/keyframes.css",
path + "styles/main-mobile.css",
path + "styles/main.css",
path + "styles/montserrat.css",
path + "styles/secondSlide.css",
path + "styles/sightseeing.css"
]
self.addEventListener("install", event => {
console.log("Installing...");
self.skipWaiting();
event.waitUntil(
caches.open(cacheName).then(function(cache) {
return cache.addAll(cachefiles);
})
);
});
self.addEventListener("activate", event => {
console.log("Activating...");
clients.claim();
});
self.addEventListener("fetch", event => {
const parsedUrl = new URL(event.request.url);
// might have to clone request and response
if(parsedUrl.pathname.endsWith(".js") || parsedUrl.pathname.endsWith(".css") || parsedUrl.pathname.endsWith(".jpg") ||
parsedUrl.pathname.endsWith(".jpeg") || parsedUrl.pathname.endsWith(".svg") || parsedUrl.pathname.endsWith(".png") ||
parsedUrl.pathname.endsWith(".woff2") || parsedUrl.pathname.endsWith(".webmanifest")) {
if(parsedUrl.host == self.location.host) {
event.respondWith(
caches.match(event.request).then(function(response) {
return response || fetch(event.request);
})
);
} else {
return;
}
}
else if(parsedUrl.pathname.match(new RegExp(`^${path}cost*`))) {
if(navigator.onLine == false) {
console.log("You are offline.");
event.respondWith(new Response("Cannot Load Cost"))
}
else {
event.respondWith(
fetch(path + "data/expenses.json")
.then(response => {
return response.json();
})
.then(data => {
console.log(data);
return new Response(`$${calcCost(data)}`);
}).catch(error => {
console.log("Could not retrieve cost. Network error.");
return new Response("Network Error");
})
);
}
}
else if(parsedUrl.pathname.match(new RegExp(`^${path}data|activities*`))) {
event.respondWith(
caches.match(event.request).then(function(response) {
return response || fetch(event.request);
})
);
}
else {
event.respondWith(
caches.match(path).then(function(response) {
return response || fetch(path);
})
);
}
});