Skip to content

Commit 51904be

Browse files
committed
Added service worker that caches pages and allows users to view them even when offline
1 parent 9e2f7bd commit 51904be

File tree

6 files changed

+114
-1
lines changed

6 files changed

+114
-1
lines changed

app/app/Http/Controllers/PWAController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ public function manifest()
3434
]
3535
]);
3636
}
37-
}
37+
}

app/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,8 @@
1515
"lodash": "^4.16.2",
1616
"vue": "^2.0.1",
1717
"vue-resource": "^1.0.3"
18+
},
19+
"dependencies": {
20+
"firebase": "^5.3.0"
1821
}
1922
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js');
2+
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js');
3+
firebase.initializeApp({
4+
messagingSenderId: "your messagingSenderId again"
5+
});
6+
const messaging = firebase.messaging();
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
if ('serviceWorker' in navigator) {
2+
navigator.serviceWorker
3+
.register('./service-worker.js', { scope: './'})
4+
.then((registration)=> {
5+
firebase.messaging().useServiceWorker(registration);
6+
})
7+
.catch(function(err) {
8+
console.log("Service Worker Failed to Register", err);
9+
})
10+
}

app/public/service-worker.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
var cacheName = 'v1';
2+
3+
var cacheFiles = [];
4+
5+
self.addEventListener('install', function(e) {
6+
try {
7+
e.waitUntil(
8+
caches.open(cacheName).then(function(cache) {
9+
return cache.addAll(cacheFiles);
10+
})
11+
)
12+
} catch(e) {
13+
console.log(e);
14+
}
15+
16+
})
17+
18+
self.addEventListener('activate', function(e) {
19+
e.waitUntil(
20+
caches.keys().then(function(cacheNames) {
21+
return Promise.all(cacheNames.map(function(thisCacheName) {
22+
23+
if (thisCacheName !== cacheName) {
24+
return caches.delete(thisCacheName);
25+
}
26+
}));
27+
})
28+
);
29+
e.waitUntil(
30+
31+
caches.keys().then(function(cacheNames) {
32+
return Promise.all(cacheNames.map(function(thisCacheName) {
33+
34+
if (thisCacheName !== cacheName) {
35+
return caches.delete(thisCacheName);
36+
}
37+
}));
38+
})
39+
);
40+
})
41+
42+
self.addEventListener('fetch',function(e) {
43+
e.respondWith(
44+
45+
caches.match(e.request)
46+
47+
48+
.then(function(response) {
49+
50+
if (response) {
51+
return response;
52+
}
53+
54+
var requestClone = e.request.clone();
55+
return fetch(requestClone)
56+
.then(function(response) {
57+
58+
if (!response) {
59+
return response;
60+
}
61+
62+
var responseClone = response.clone();
63+
caches.open(cacheName).then(function(cache) {
64+
cache.put(e.request, responseClone);
65+
return response;
66+
});
67+
68+
})
69+
.catch(function(err) {
70+
console.log('[ServiceWorker] Error Fetching & Caching New Data', err);
71+
});
72+
73+
74+
})
75+
);
76+
})

app/resources/views/pages/home.blade.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<script src="/js/utils.js" type="text/javascript"></script>
55
<script src="/js/home.js" type="text/javascript"></script>
66
<script src="/js/hover_text.js" type="text/javascript"></script>
7+
<script src="/js/service_worker_script.js" type="text/javascript"></script>
78
<script type="text/javascript">
89
var default_location = {
910
'latitude': {{ $default_location['latitude'] }},
@@ -13,6 +14,23 @@
1314
<script type="text/javascript" async defer
1415
src="//maps.googleapis.com/maps/api/js?key={{ $google_map_api_key }}&amp;callback=initMap">
1516
</script>
17+
18+
<!-- Firebase App is always required and must be first -->
19+
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-app.js"></script>
20+
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-messaging.js"></script>
21+
22+
<script>
23+
// Initialize Firebase
24+
var config = {
25+
apiKey: "AIzaSyBX6l4geba-CjXE_WlQwOX6pxCIrVl-tjk",
26+
authDomain: "wise-bongo-209220.firebaseapp.com",
27+
databaseURL: "https://wise-bongo-209220.firebaseio.com",
28+
projectId: "wise-bongo-209220",
29+
storageBucket: "wise-bongo-209220.appspot.com",
30+
messagingSenderId: "926874022337"
31+
};
32+
firebase.initializeApp(config);
33+
</script>
1634
@stop
1735
@section('content')
1836
<div class="home-page">

0 commit comments

Comments
 (0)