Cache HTML page with Service Worker ()

This is the first step to make Mastodon work offline. It is also required
by Chromium to trigger Web Manifest automated install prompt.
This commit is contained in:
Akihiko Odaki 2018-03-17 20:35:13 +09:00 committed by Eugen Rochko
parent 64fc8d2b07
commit f0cd957c7a
1 changed files with 21 additions and 1 deletions
app/javascript/mastodon/service_worker

View File

@ -1,10 +1,30 @@
import './web_push_notifications';
function fetchRoot() {
return fetch('/', { credentials: 'include' });
}
// Cause a new version of a registered Service Worker to replace an existing one
// that is already installed, and replace the currently active worker on open pages.
self.addEventListener('install', function(event) {
event.waitUntil(self.skipWaiting());
const promises = Promise.all([caches.open('mastodon-web'), fetchRoot()]);
const asyncAdd = promises.then(([cache, root]) => cache.put('/', root));
event.waitUntil(asyncAdd);
});
self.addEventListener('activate', function(event) {
event.waitUntil(self.clients.claim());
});
self.addEventListener('fetch', function(event) {
const url = new URL(event.request.url);
if (url.pathname.startsWith('/web/')) {
event.respondWith(fetchRoot().then(response => {
if (response.ok) {
return response;
}
throw null;
}).catch(() => caches.match('/')));
}
});