diff --git a/static/dist/styles.css b/static/dist/styles.css index 05382cf..4065ca3 100644 --- a/static/dist/styles.css +++ b/static/dist/styles.css @@ -750,7 +750,7 @@ input[type="radio"]:checked::before { LAYOUT */ /* basic */ -body { +body, html { display: flex; flex-direction: column-reverse; diff --git a/static/dist/support.js b/static/dist/support.js index 6a59920..2545bbf 100644 --- a/static/dist/support.js +++ b/static/dist/support.js @@ -1,3 +1,4 @@ +// TABS document.querySelector("main").addEventListener("scroll", () => { const links = document.querySelectorAll(".tab-link"); links.forEach((element) => element.removeAttribute("active")); @@ -8,3 +9,18 @@ document.querySelector("main").addEventListener("scroll", () => { if (links[currentPage]) links[currentPage].setAttribute("active", ""); }); + +// SERVICE WORKER +async function registerServiceWorker() { + if ("serviceWorker" in navigator) { + try { + await navigator.serviceWorker.register("/sw.js", { + scope: "/", + }); + } catch (error) { + console.error(`Could not install service worker: ${error}`); + } + } +} + +registerServiceWorker(); diff --git a/static/dist/sw.js b/static/dist/sw.js new file mode 100644 index 0000000..5768bc6 --- /dev/null +++ b/static/dist/sw.js @@ -0,0 +1,38 @@ +const CACHE_VERSION = "v1"; + +async function handleRequest(event) { + const responsePromise = getResponse(event); + event.respondWith(responsePromise); +} + +async function getResponse(event) { + try { + return await fetchAndCache(event); + } catch { + return await getFromCache(event); + } +} + +async function fetchAndCache(event) { + const request = event.request; + + const response = await fetch(request); + + const cache = await caches.open(CACHE_VERSION); + await cache.put(request, response.clone()); + + return response; +} + +async function getFromCache(event) { + const request = event.request; + + const cache = await caches.open(CACHE_VERSION); + const response = await cache.match(request); + + return response; +} + +self.addEventListener("fetch", (event) => { + handleRequest(event); +}); \ No newline at end of file