chore(sw.js): add lightweight service worker
This commit is contained in:
parent
2b3a15bf9b
commit
5accae02cc
6 changed files with 86 additions and 3 deletions
4
package-lock.json
generated
4
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "coryd.dev",
|
||||
"version": "4.0.6",
|
||||
"version": "4.1.7",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "coryd.dev",
|
||||
"version": "4.0.6",
|
||||
"version": "4.1.7",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"html-minifier-terser": "7.2.0",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "coryd.dev",
|
||||
"version": "4.0.6",
|
||||
"version": "4.1.7",
|
||||
"description": "The source for my personal site. Built using 11ty (and other tools).",
|
||||
"type": "module",
|
||||
"engines": {
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
window.addEventListener("load", () => {
|
||||
// service worker
|
||||
if ('serviceWorker' in navigator) navigator.serviceWorker.register('/assets/scripts/sw.js');
|
||||
|
||||
// dialog controls
|
||||
(() => {
|
||||
const dialogButtons = document.querySelectorAll(".dialog-open");
|
||||
|
|
59
src/assets/scripts/sw.js
Normal file
59
src/assets/scripts/sw.js
Normal file
|
@ -0,0 +1,59 @@
|
|||
const cacheName = 'coryd.dev-static-assets';
|
||||
const staticAssets = [
|
||||
'/assets/styles/index.css',
|
||||
'/assets/styles/noscript.css',
|
||||
'/assets/fonts/sg.woff2',
|
||||
'/assets/fonts/dm.woff2',
|
||||
'/assets/fonts/dmi.woff2',
|
||||
'/assets/fonts/ml.woff2',
|
||||
'/assets/scripts/index.js',
|
||||
'/assets/scripts/components/now-playing.js',
|
||||
'/assets/scripts/components/select-pagination.js',
|
||||
];
|
||||
|
||||
self.addEventListener('install', event => {
|
||||
event.waitUntil(
|
||||
caches.open(cacheName)
|
||||
.then(cache => cache.addAll(staticAssets))
|
||||
.then(() => self.skipWaiting())
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('activate', event => {
|
||||
event.waitUntil(
|
||||
(async () => {
|
||||
const keys = await caches.keys();
|
||||
await Promise.all(
|
||||
keys.filter(key => key !== cacheName).map(key => caches.delete(key))
|
||||
);
|
||||
|
||||
if (self.registration.navigationPreload) await self.registration.navigationPreload.enable();
|
||||
|
||||
await self.clients.claim();
|
||||
})()
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('fetch', event => {
|
||||
const request = event.request;
|
||||
|
||||
if (request.method !== 'GET') return;
|
||||
if (request.headers.get('Accept').includes('text/html')) {
|
||||
event.respondWith(
|
||||
(async () => {
|
||||
try {
|
||||
const preloadResponse = await event.preloadResponse;
|
||||
if (preloadResponse) return preloadResponse;
|
||||
|
||||
return await fetch(request);
|
||||
} catch (err) {
|
||||
return Response.error();
|
||||
}
|
||||
})()
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
event.respondWith(caches.match(request).then(response => response || fetch(request))
|
||||
);
|
||||
});
|
21
src/feeds/manifest.json.liquid
Normal file
21
src/feeds/manifest.json.liquid
Normal file
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
permalink: "/manifest.json"
|
||||
layout: null
|
||||
eleventyExcludeFromCollections: true
|
||||
excludeFromSitemap: true
|
||||
---
|
||||
{
|
||||
"lang": "{{ globals.lang }}",
|
||||
"name": "{{ globals.site_name }}",
|
||||
"description": "{{ globals.site_description }}",
|
||||
"background_color": "#f9fafb",
|
||||
"theme_color": "#f9fafb"
|
||||
"display": "minimal-ui",
|
||||
"dir": "ltr",
|
||||
"icons": [
|
||||
{ "src": "{{ globals.url }}/og/w200/{% appVersion %}{{ globals.avatar }}", "type": "image/png", "sizes": "192x192" },
|
||||
{ "src": "{{ globals.url }}/og/w800/{% appVersion %}{{ globals.avatar }}", "type": "image/png", "sizes": "512x512" },
|
||||
{ "src": "{{ globals.url }}/og/w800/{% appVersion %}{{ globals.avatar }}", "type": "image/png", "sizes": "512x512", "purpose": "maskable" }
|
||||
],
|
||||
"start_url": "/",
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue