From 5aeaf2f352e7da0a0d55a7ad2cd7dbd3869b875a Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Sat, 8 Jan 2022 17:27:42 +0530 Subject: add service worker --- src/assets/sw.mjs | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/assets/sw.mjs (limited to 'src/assets/sw.mjs') diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs new file mode 100644 index 0000000..432e630 --- /dev/null +++ b/src/assets/sw.mjs @@ -0,0 +1,63 @@ +const cache_name = "v3" + +const install_sw = async event => { + const precache = async() => { + const cache = await caches.open(cache_name); + return cache.addAll([ + '/index.css', + '/prism.css', + '/index.js', + '/sw.js', + '/favicon.svg', + '/offline.html', + '/' + ]) + } + event.waitUntil(precache()) +} + +const activate_sw = async event => { + const cachepreserve = ['v3']; + + const invalidatecache = async() => { + const keys = await caches.keys() + Promise.all( + keys.map((key) => { + if (cachepreserve.indexOf(key) === -1) { + return caches.delete(key) + } + })) + } + event.waitUntil(invalidatecache()) +} + +const fetch_sw = async event => { + const cache_fetch = async() => { + if (event.request.method != 'GET') { + return + } + const cacheres = await caches.match(event.request) + if (cacheres !== undefined) { + return cacheres + } + try { + const response = await fetch(event.request) + const cache = await caches.open(cache_name) + cache.put(event.request, response.clone()) + return response + } catch { + return caches.match('/offline.html') + } + } + + event.respondWith(cache_fetch()) +} + +const main = async() => { + self.addEventListener('install', install_sw) + self.addEventListener('activate', activate_sw) + self.addEventListener('fetch', fetch_sw) + +} + +main() \ No newline at end of file -- cgit v1.2.3-70-g09d2 From d363d4952fc318c51b6e11165b62ed2902eb23ab Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Sat, 8 Jan 2022 18:37:38 +0530 Subject: fixed sw.js --- .eleventy.js | 6 ++-- src/assets/index.css | 73 +++++++++++++++++++++++++++++++++++++++++++++++ src/assets/sw.11tydata.js | 3 +- src/assets/sw.mjs | 14 ++++----- src/data/env.js | 4 +-- src/index.css | 73 ----------------------------------------------- 6 files changed, 87 insertions(+), 86 deletions(-) create mode 100644 src/assets/index.css delete mode 100644 src/index.css (limited to 'src/assets/sw.mjs') diff --git a/.eleventy.js b/.eleventy.js index 96fd134..21850eb 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -37,8 +37,9 @@ module.exports = eleventyConfig => { eleventyConfig.addExtension("mjs", { outputFileExtension: "js", - compile: (content, filename) => - async data => { + compile: (content, filename) => { + return async data => { + console.log(data.page) const js = await babel.transformAsync(content, { presets: [ ["@babel/preset-env", { @@ -53,6 +54,7 @@ module.exports = eleventyConfig => { }) return js.code } + } }) diff --git a/src/assets/index.css b/src/assets/index.css new file mode 100644 index 0000000..7984af2 --- /dev/null +++ b/src/assets/index.css @@ -0,0 +1,73 @@ +:root { + font-family: serif; +} + +@media screen { + body { + max-width: 920px; + min-height: 98vh; + display: flex; + flex-direction: column; + margin: auto; + padding: 0.5rem; + } + main { + flex-grow: 1; + } + :any-link { + color: inherit; + text-decoration: underline; + } + :any-link:hover, + :any-link:active { + font-style: italic; + } + #menu { + background: darkred; + text-decoration: none; + font-weight: bold; + color: white; + padding: 1rem; + font-size: 1rem; + } + @media (max-width: 450px) { + #menu a { + display: block; + text-align: center; + margin: auto; + padding: 20px; + } + } + #menu :any-link { + text-decoration: none; + margin-right: 1rem; + padding-left: 0rem; + padding-right: 0rem; + } + #menu :any-link:hover { + text-decoration: none; + } + .err { + color: darkred; + } + @media (prefers-color-scheme: dark) { + :root { + background: black; + color: white; + } + #menu nav { + background: red; + } + .err { + color: red; + } + } +} + +@media print { + header, + nav, + footer { + display: none; + } +} \ No newline at end of file diff --git a/src/assets/sw.11tydata.js b/src/assets/sw.11tydata.js index 3f89dbf..4a20677 100644 --- a/src/assets/sw.11tydata.js +++ b/src/assets/sw.11tydata.js @@ -1,3 +1,4 @@ module.exports = { - "permalink": "/sw.js" + dynamicPermalink: false, + permalink: "/sw.js" } \ No newline at end of file diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs index 432e630..88bf684 100644 --- a/src/assets/sw.mjs +++ b/src/assets/sw.mjs @@ -2,7 +2,7 @@ const cache_name = "v3" const install_sw = async event => { const precache = async() => { - const cache = await caches.open(cache_name); + const cache = await window.caches.open(cache_name); return cache.addAll([ '/index.css', '/prism.css', @@ -20,11 +20,11 @@ const activate_sw = async event => { const cachepreserve = ['v3']; const invalidatecache = async() => { - const keys = await caches.keys() + const keys = await window.caches.keys() Promise.all( keys.map((key) => { if (cachepreserve.indexOf(key) === -1) { - return caches.delete(key) + return window.caches.delete(key) } })) } @@ -36,17 +36,17 @@ const fetch_sw = async event => { if (event.request.method != 'GET') { return } - const cacheres = await caches.match(event.request) + const cacheres = await window.caches.match(event.request) if (cacheres !== undefined) { return cacheres } try { - const response = await fetch(event.request) - const cache = await caches.open(cache_name) + const response = await window.fetch(event.request) + const cache = await window.caches.open(cache_name) cache.put(event.request, response.clone()) return response } catch { - return caches.match('/offline.html') + return window.caches.match('/offline.html') } } diff --git a/src/data/env.js b/src/data/env.js index f1d2920..8a3d3c1 100644 --- a/src/data/env.js +++ b/src/data/env.js @@ -1,8 +1,6 @@ const { env } = require("process") -module.exports = () => { - return { +module.exports = { isdevel: env.NODE_ENV == "develoment", env: env - } } \ No newline at end of file diff --git a/src/index.css b/src/index.css deleted file mode 100644 index 7984af2..0000000 --- a/src/index.css +++ /dev/null @@ -1,73 +0,0 @@ -:root { - font-family: serif; -} - -@media screen { - body { - max-width: 920px; - min-height: 98vh; - display: flex; - flex-direction: column; - margin: auto; - padding: 0.5rem; - } - main { - flex-grow: 1; - } - :any-link { - color: inherit; - text-decoration: underline; - } - :any-link:hover, - :any-link:active { - font-style: italic; - } - #menu { - background: darkred; - text-decoration: none; - font-weight: bold; - color: white; - padding: 1rem; - font-size: 1rem; - } - @media (max-width: 450px) { - #menu a { - display: block; - text-align: center; - margin: auto; - padding: 20px; - } - } - #menu :any-link { - text-decoration: none; - margin-right: 1rem; - padding-left: 0rem; - padding-right: 0rem; - } - #menu :any-link:hover { - text-decoration: none; - } - .err { - color: darkred; - } - @media (prefers-color-scheme: dark) { - :root { - background: black; - color: white; - } - #menu nav { - background: red; - } - .err { - color: red; - } - } -} - -@media print { - header, - nav, - footer { - display: none; - } -} \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 544621babdd479a524a1fa7ccf962bda315812f9 Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Sat, 8 Jan 2022 18:47:08 +0530 Subject: fixed incorrect window usage in service worker --- .eleventy.js | 1 - src/assets/sw.mjs | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) (limited to 'src/assets/sw.mjs') diff --git a/.eleventy.js b/.eleventy.js index 21850eb..eadd855 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -39,7 +39,6 @@ module.exports = eleventyConfig => { outputFileExtension: "js", compile: (content, filename) => { return async data => { - console.log(data.page) const js = await babel.transformAsync(content, { presets: [ ["@babel/preset-env", { diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs index 88bf684..f981da5 100644 --- a/src/assets/sw.mjs +++ b/src/assets/sw.mjs @@ -2,7 +2,7 @@ const cache_name = "v3" const install_sw = async event => { const precache = async() => { - const cache = await window.caches.open(cache_name); + const cache = await self.caches.open(cache_name); return cache.addAll([ '/index.css', '/prism.css', @@ -20,11 +20,11 @@ const activate_sw = async event => { const cachepreserve = ['v3']; const invalidatecache = async() => { - const keys = await window.caches.keys() + const keys = await self.caches.keys() Promise.all( keys.map((key) => { if (cachepreserve.indexOf(key) === -1) { - return window.caches.delete(key) + return self.caches.delete(key) } })) } @@ -36,17 +36,17 @@ const fetch_sw = async event => { if (event.request.method != 'GET') { return } - const cacheres = await window.caches.match(event.request) + const cacheres = await self.caches.match(event.request) if (cacheres !== undefined) { return cacheres } try { - const response = await window.fetch(event.request) - const cache = await window.caches.open(cache_name) + const response = await self.fetch(event.request) + const cache = await self.caches.open(cache_name) cache.put(event.request, response.clone()) return response } catch { - return window.caches.match('/offline.html') + return self.caches.match('/offline.html') } } -- cgit v1.2.3-70-g09d2 From 244bdce8ee0b7bdb26c33b4f337a26e00374c6d0 Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Sun, 9 Jan 2022 08:57:52 +0530 Subject: create a json file Signed-off-by: Marc Pervaz Boocha --- .eleventy.js | 10 ++- _headers | 2 +- src/assets/index.css | 34 +++++--- src/assets/index.mjs | 21 ++--- src/assets/sw.mjs | 51 +++++------- src/assets/sw_cache.11tydata.js | 22 ++++++ src/assets/sw_cache.njk | 4 + src/data/env.js | 7 +- src/data/err.js | 121 +++++++++++++++++++++++++++++ src/data/err.json | 166 ---------------------------------------- src/data/metadata.js | 12 +++ src/data/metadata.json | 12 --- src/data/navigator.js | 13 ++++ src/data/navigator.json | 14 ---- src/layouts/base.njk | 6 +- 15 files changed, 239 insertions(+), 256 deletions(-) create mode 100644 src/assets/sw_cache.11tydata.js create mode 100644 src/assets/sw_cache.njk create mode 100644 src/data/err.js delete mode 100644 src/data/err.json create mode 100644 src/data/metadata.js delete mode 100644 src/data/metadata.json create mode 100644 src/data/navigator.js delete mode 100644 src/data/navigator.json (limited to 'src/assets/sw.mjs') diff --git a/.eleventy.js b/.eleventy.js index 4da8b9b..d913ac6 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -19,6 +19,8 @@ module.exports = eleventyConfig => { }).use(markdownattrs)) eleventyConfig.addFilter('datefmt', date => DateTime.fromJSDate(date, { zone: 'utc' }).toFormat("dd LLL yyyy")) + eleventyConfig.addFilter("tojson", obj => JSON.stringify(obj)) + eleventyConfig.addExtension("css", { outputFileExtension: "css", @@ -31,13 +33,17 @@ module.exports = eleventyConfig => { .use(postcssenv) .process(content, { from: filename, - map: data.env.isdevel + map: data.env.NODE_ENV == "develoment" }) return css.css } }) + eleventyConfig.setBrowserSyncConfig({ + snippet: false, + }); + eleventyConfig.addExtension("mjs", { outputFileExtension: "js", compileOptions: { @@ -54,7 +60,7 @@ module.exports = eleventyConfig => { bugfixes: true }] ], - sourceMaps: data.env.isdevel ? "inline" : false, + sourceMaps: data.env.NODE_ENV == "develoment" ? "inline" : false, sourceFileName: filename }) return js.code diff --git a/_headers b/_headers index f5711e6..cab0f76 100644 --- a/_headers +++ b/_headers @@ -2,4 +2,4 @@ X-Frame-Options: DENY X-Content-Type-Options: nosniff Permissions-Policy: document-domain=() - Content-Security-Policy: default-src 'self'; script-src 'self' static.cloudflareinsights.com; connect-src self cloudflareinsights.com frame-ancestors 'none'; \ No newline at end of file + Content-Security-Policy: default-src 'self'; script-src 'self' static.cloudflareinsights.com 'unsafe-inline'; connect-src 'self' cloudflareinsights.com 'unsafe-inline'; frame-ancestors 'none'; \ No newline at end of file diff --git a/src/assets/index.css b/src/assets/index.css index 7984af2..3d04fb2 100644 --- a/src/assets/index.css +++ b/src/assets/index.css @@ -22,7 +22,7 @@ :any-link:active { font-style: italic; } - #menu { + .topnav { background: darkred; text-decoration: none; font-weight: bold; @@ -30,23 +30,33 @@ padding: 1rem; font-size: 1rem; } - @media (max-width: 450px) { - #menu a { - display: block; - text-align: center; - margin: auto; - padding: 20px; - } - } - #menu :any-link { - text-decoration: none; + #nav-toogle, + .topnav a { margin-right: 1rem; padding-left: 0rem; padding-right: 0rem; } - #menu :any-link:hover { + .topnav :any-link { + text-decoration: none; + } + .topnav :any-link:hover { text-decoration: none; } + @media (max-width: 450px) { + #nav-toogle, + .topnav a { + display: block; + margin: auto; + text-align: center; + padding: 16px; + } + .topnav .navlinks { + display: none; + } + .topnav .navlinks.navopen { + display: block + } + } .err { color: darkred; } diff --git a/src/assets/index.mjs b/src/assets/index.mjs index 17062bc..4d7c2b0 100644 --- a/src/assets/index.mjs +++ b/src/assets/index.mjs @@ -1,9 +1,12 @@ -const main = async() => { - window.addEventListener('load', async() => { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.register('/sw.js') - } - }) -} - -main() \ No newline at end of file +document.getElementById("nav-toogle").addEventListener("click", async() => { + const navlinks = Array.from(document.getElementsByClassName("navlinks")) + for (const navlink of navlinks) { + navlink.classList.toggle("navopen") + } + return false +}) +window.addEventListener('load', async() => { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('/sw.js') + } +}) \ No newline at end of file diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs index f981da5..e20102a 100644 --- a/src/assets/sw.mjs +++ b/src/assets/sw.mjs @@ -1,38 +1,34 @@ -const cache_name = "v3" +const get_cache_info = async() => { + const response = await fetch('/cache.json') + return response.json() +} -const install_sw = async event => { +self.addEventListener('install', async event => { const precache = async() => { - const cache = await self.caches.open(cache_name); - return cache.addAll([ - '/index.css', - '/prism.css', - '/index.js', - '/sw.js', - '/favicon.svg', - '/offline.html', - '/' - ]) + const ver = await get_cache_info() + const cache = await self.caches.open(ver.store); + return cache.addAll(ver.default) } event.waitUntil(precache()) -} - -const activate_sw = async event => { - const cachepreserve = ['v3']; +}) +self.addEventListener('activate', async event => { const invalidatecache = async() => { + const ver = await get_cache_info() const keys = await self.caches.keys() Promise.all( - keys.map((key) => { - if (cachepreserve.indexOf(key) === -1) { + keys.map(key => { + if (key !== ver.store) { return self.caches.delete(key) } })) } event.waitUntil(invalidatecache()) -} +}) -const fetch_sw = async event => { +self.addEventListener('fetch', async event => { const cache_fetch = async() => { + const ver = await get_cache_info() if (event.request.method != 'GET') { return } @@ -42,22 +38,13 @@ const fetch_sw = async event => { } try { const response = await self.fetch(event.request) - const cache = await self.caches.open(cache_name) + const cache = await self.caches.open(ver.store) cache.put(event.request, response.clone()) return response } catch { - return self.caches.match('/offline.html') + return self.caches.match(ver.offline) } } event.respondWith(cache_fetch()) -} - -const main = async() => { - self.addEventListener('install', install_sw) - self.addEventListener('activate', activate_sw) - self.addEventListener('fetch', fetch_sw) - -} - -main() \ No newline at end of file +}) \ No newline at end of file diff --git a/src/assets/sw_cache.11tydata.js b/src/assets/sw_cache.11tydata.js new file mode 100644 index 0000000..377753f --- /dev/null +++ b/src/assets/sw_cache.11tydata.js @@ -0,0 +1,22 @@ +const crypto = require('crypto') + +module.exports = () => { + return { + sw_cache: { + offline: "/offline.html", + default: [ + "/index.css", + "/prism.css", + "/index.js", + "/favicon.svg", + "/offline.html", + "/" + ], + }, + eleventyComputed: { + sw_cache: { + store: data => `${data.env.CF_PAGES_BRANCH || "default"}-${data.env.CF_PAGES_COMMIT_SHA || crypto.randomUUID()}` + } + } + } +} \ No newline at end of file diff --git a/src/assets/sw_cache.njk b/src/assets/sw_cache.njk new file mode 100644 index 0000000..52a0e58 --- /dev/null +++ b/src/assets/sw_cache.njk @@ -0,0 +1,4 @@ +--- +permalink: /cache.json +--- +{{ sw_cache | tojson | safe }} diff --git a/src/data/env.js b/src/data/env.js index 8a3d3c1..91842b4 100644 --- a/src/data/env.js +++ b/src/data/env.js @@ -1,6 +1,3 @@ -const { env } = require("process") +const process = require("process") -module.exports = { - isdevel: env.NODE_ENV == "develoment", - env: env -} \ No newline at end of file +module.exports = () => process.env \ No newline at end of file diff --git a/src/data/err.js b/src/data/err.js new file mode 100644 index 0000000..0e3fe56 --- /dev/null +++ b/src/data/err.js @@ -0,0 +1,121 @@ +module.exports = [{ + code: "offline", + msg: "The Page is offline" + }, + { + code: 400, + msg: "Bad Request" + }, + { + code: 401, + msg: "Unauthorized" + }, + { + code: 402, + msg: "Payment Required" + }, + { + code: 403, + msg: "Forbidden" + }, + { + code: 404, + msg: "Not Found" + }, + { + code: 405, + msg: "Method Not Allowed" + }, + { + code: 406, + msg: "Not Acceptable" + }, + { + code: 407, + msg: "Proxy Authentication Required" + }, + { + code: 408, + msg: "Request Timeout" + }, + { + code: 409, + msg: "Conflict" + }, + { + code: 410, + msg: "Gone" + }, + { + code: 411, + msg: "Length Required" + }, + { + code: 412, + msg: "Precondition Failed" + }, + { + code: 413, + msg: "Payload Too Large" + }, + { + code: 414, + msg: "URI Too Long" + }, + { + code: 415, + msg: "Unsupported Media Type" + }, + { + code: 416, + msg: "Range Not Satisfiable" + }, + { + code: 417, + msg: "Expectation Failed" + }, + { + code: 418, + msg: "I\"m a teapot" + }, + { + code: 421, + msg: "Misdirected Request" + }, + { + code: 422, + msg: "Unprocessable Entity" + }, + { + code: 423, + msg: "Locked" + }, + { + code: 424, + msg: "Failed Dependency" + }, + { + code: 425, + msg: "Too Early" + }, + { + code: 426, + msg: "Upgrade Required" + }, + { + code: 428, + msg: "Precondition Required" + }, + { + code: 429, + msg: "Too Many Requests" + }, + { + code: 431, + msg: "Request Header Fields Too Large" + }, + { + code: 451, + msg: "Unavailable For Legal Reasons" + } +] \ No newline at end of file diff --git a/src/data/err.json b/src/data/err.json deleted file mode 100644 index 87e3603..0000000 --- a/src/data/err.json +++ /dev/null @@ -1,166 +0,0 @@ -[ - { - "code": "offline", - "msg": "The Page is offline" - }, - { - "code": 400, - "msg": "Bad Request" - }, - { - "code": 401, - "msg": "Unauthorized" - }, - { - "code": 402, - "msg": "Payment Required" - }, - { - "code": 403, - "msg": "Forbidden" - }, - { - "code": 404, - "msg": "Not Found" - }, - { - "code": 405, - "msg": "Method Not Allowed" - }, - { - "code": 406, - "msg": "Not Acceptable" - }, - { - "code": 407, - "msg": "Proxy Authentication Required" - }, - { - "code": 408, - "msg": "Request Timeout" - }, - { - "code": 409, - "msg": "Conflict" - }, - { - "code": 410, - "msg": "Gone" - }, - { - "code": 411, - "msg": "Length Required" - }, - { - "code": 412, - "msg": "Precondition Failed" - }, - { - "code": 413, - "msg": "Payload Too Large" - }, - { - "code": 414, - "msg": "URI Too Long" - }, - { - "code": 415, - "msg": "Unsupported Media Type" - }, - { - "code": 416, - "msg": "Range Not Satisfiable" - }, - { - "code": 417, - "msg": "Expectation Failed" - }, - { - "code": 418, - "msg": "I\"m a teapot" - }, - { - "code": 421, - "msg": "Misdirected Request" - }, - { - "code": 422, - "msg": "Unprocessable Entity" - }, - { - "code": 423, - "msg": "Locked" - }, - { - "code": 424, - "msg": "Failed Dependency" - }, - { - "code": 425, - "msg": "Too Early" - }, - { - "code": 426, - "msg": "Upgrade Required" - }, - { - "code": 428, - "msg": "Precondition Required" - }, - { - "code": 429, - "msg": "Too Many Requests" - }, - { - "code": 431, - "msg": "Request Header Fields Too Large" - }, - { - "code": 451, - "msg": "Unavailable For Legal Reasons" - }, - { - "code": 500, - "msg": "Internal Server Error" - }, - { - "code": 501, - "msg": "Not Implemented" - }, - { - "code": 502, - "msg": "Bad Gateway" - }, - { - "code": 503, - "msg": "Service Unavailable" - }, - { - "code": 504, - "msg": "Gateway Timeout" - }, - { - "code": 505, - "msg": "HTTP Version Not Supported" - }, - { - "code": 506, - "msg": "Variant Also Negotiates" - }, - { - "code": 507, - "msg": "Insufficient Storage" - }, - { - "code": 508, - "msg": "Loop Detected" - }, - { - "code": 510, - "msg": "Not Extended" - }, - { - "code": 511, - "msg": "Network Authentication Required" - } -] \ No newline at end of file diff --git a/src/data/metadata.js b/src/data/metadata.js new file mode 100644 index 0000000..c8403bb --- /dev/null +++ b/src/data/metadata.js @@ -0,0 +1,12 @@ +module.exports = { + title: "Sudomsg", + url: "https://sudomsg.xyz/", + language: "en-GB", + description: "Messages from root", + feed: "/feed.xml", + author: { + name: "Marc Pervaz Boocha", + email: "mboocha@sudomsg.xyz", + url: "https://sudomsg.xyz/about" + } +} \ No newline at end of file diff --git a/src/data/metadata.json b/src/data/metadata.json deleted file mode 100644 index e2d7d6c..0000000 --- a/src/data/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "title": "Sudomsg", - "url": "https://sudomsg.xyz/", - "language": "en-GB", - "description": "Messages from root", - "feed": "/feed.xml", - "author": { - "name": "Marc Pervaz Boocha", - "email": "mboocha@sudomsg.xyz", - "url": "https://sudomsg.xyz/about" - } -} diff --git a/src/data/navigator.js b/src/data/navigator.js new file mode 100644 index 0000000..2081e7d --- /dev/null +++ b/src/data/navigator.js @@ -0,0 +1,13 @@ +module.exports = [{ + url: "/", + title: "Home" + }, + { + url: "/blog/", + title: "Blog" + }, + { + url: "/about/", + title: "About" + } +] \ No newline at end of file diff --git a/src/data/navigator.json b/src/data/navigator.json deleted file mode 100644 index 5fb27a7..0000000 --- a/src/data/navigator.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "url": "/", - "title": "Home" - }, - { - "url": "/blog/", - "title": "Blog" - }, - { - "url": "/about/", - "title": "About" - } -] diff --git a/src/layouts/base.njk b/src/layouts/base.njk index 53560f4..98b9c37 100644 --- a/src/layouts/base.njk +++ b/src/layouts/base.njk @@ -25,10 +25,10 @@
-
-- cgit v1.2.3-70-g09d2 From 3f2ad6136f61691c0dd0dcac23e852eae257c0fc Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Sun, 9 Jan 2022 12:39:15 +0530 Subject: fixed feed aria and fixed cache issues Signed-off-by: Marc Pervaz Boocha --- src/assets/sw.mjs | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'src/assets/sw.mjs') diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs index e20102a..48ead74 100644 --- a/src/assets/sw.mjs +++ b/src/assets/sw.mjs @@ -1,24 +1,32 @@ -const get_cache_info = async() => { - const response = await fetch('/cache.json') - return response.json() +const sw_cache = { + offline: "/offline.html", + default: [ + "/index.css", + "/prism.css", + "/index.js", + "/favicon.svg", + "/offline.html", + "/" + ], + // eslint-disable-next-line no-undef + store: VERSION, } self.addEventListener('install', async event => { + self.skipWaiting() const precache = async() => { - const ver = await get_cache_info() - const cache = await self.caches.open(ver.store); - return cache.addAll(ver.default) + const cache = await self.caches.open(sw_cache.store); + return cache.addAll(sw_cache.default) } event.waitUntil(precache()) }) self.addEventListener('activate', async event => { const invalidatecache = async() => { - const ver = await get_cache_info() const keys = await self.caches.keys() Promise.all( keys.map(key => { - if (key !== ver.store) { + if (key !== sw_cache.store) { return self.caches.delete(key) } })) @@ -28,21 +36,25 @@ self.addEventListener('activate', async event => { self.addEventListener('fetch', async event => { const cache_fetch = async() => { - const ver = await get_cache_info() if (event.request.method != 'GET') { return } + + if (event.request.url.origin != self.location.origin) { + return + } + const cacheres = await self.caches.match(event.request) if (cacheres !== undefined) { return cacheres } try { const response = await self.fetch(event.request) - const cache = await self.caches.open(ver.store) + const cache = await self.caches.open(sw_cache.store) cache.put(event.request, response.clone()) return response } catch { - return self.caches.match(ver.offline) + return self.caches.match(sw_cache.offline) } } -- cgit v1.2.3-70-g09d2 From a7560c6c362acafd46113f4a9b8a47371b1cc825 Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Sun, 9 Jan 2022 14:20:43 +0530 Subject: fixed sw.js Signed-off-by: Marc Pervaz Boocha --- src/assets/sw.mjs | 62 ++++++++++++++++++++++++------------------------------- 1 file changed, 27 insertions(+), 35 deletions(-) (limited to 'src/assets/sw.mjs') diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs index 48ead74..97d44bf 100644 --- a/src/assets/sw.mjs +++ b/src/assets/sw.mjs @@ -14,49 +14,41 @@ const sw_cache = { self.addEventListener('install', async event => { self.skipWaiting() - const precache = async() => { - const cache = await self.caches.open(sw_cache.store); - return cache.addAll(sw_cache.default) - } - event.waitUntil(precache()) + const cache = await self.caches.open(sw_cache.store); + event.waitUntil(cache.addAll(sw_cache.default)) }) self.addEventListener('activate', async event => { - const invalidatecache = async() => { - const keys = await self.caches.keys() - Promise.all( - keys.map(key => { - if (key !== sw_cache.store) { - return self.caches.delete(key) - } - })) - } - event.waitUntil(invalidatecache()) + const keys = await self.caches.keys() + + event.waitUntil(Promise.all(keys.map(key => { + if (key !== sw_cache.store) { + return self.caches.delete(key) + } + }))) }) self.addEventListener('fetch', async event => { - const cache_fetch = async() => { - if (event.request.method != 'GET') { - return - } + if (event.request.method != 'GET') { + return + } - if (event.request.url.origin != self.location.origin) { - return - } + const a = new URL(event.request.url) + if (a.origin != self.location.origin) { + return + } - const cacheres = await self.caches.match(event.request) - if (cacheres !== undefined) { - return cacheres - } - try { - const response = await self.fetch(event.request) - const cache = await self.caches.open(sw_cache.store) - cache.put(event.request, response.clone()) - return response - } catch { - return self.caches.match(sw_cache.offline) - } + const cacheres = await self.caches.match(event.request) + if (cacheres !== undefined) { + event.respondWith(cacheres) + } + try { + const response = await self.fetch(event.request) + const cache = await self.caches.open(sw_cache.store) + cache.put(event.request, response.clone()) + event.respondWith(response) + } catch { + event.respondWith(self.caches.match(sw_cache.offline)) } - event.respondWith(cache_fetch()) }) \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 3d303f93b32499d445cf8987c2f20fd3079a18be Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Sun, 9 Jan 2022 15:09:04 +0530 Subject: fixed sw.js Signed-off-by: Marc Pervaz Boocha --- src/assets/sw.mjs | 57 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 26 deletions(-) (limited to 'src/assets/sw.mjs') diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs index 97d44bf..2359e0f 100644 --- a/src/assets/sw.mjs +++ b/src/assets/sw.mjs @@ -12,43 +12,48 @@ const sw_cache = { store: VERSION, } -self.addEventListener('install', async event => { +self.addEventListener('install', event => { self.skipWaiting() - const cache = await self.caches.open(sw_cache.store); - event.waitUntil(cache.addAll(sw_cache.default)) + event.waitUntil((async() => { + const cache = await self.caches.open(sw_cache.store) + cache.addAll(sw_cache.default) + })()) }) -self.addEventListener('activate', async event => { - const keys = await self.caches.keys() - - event.waitUntil(Promise.all(keys.map(key => { - if (key !== sw_cache.store) { - return self.caches.delete(key) - } - }))) +self.addEventListener('activate', event => { + event.waitUntil((async() => { + const keys = await self.caches.keys() + Promise.all(keys.map(key => { + if (key !== sw_cache.store) { + return self.caches.delete(key) + } + })) + })()) }) -self.addEventListener('fetch', async event => { +self.addEventListener('fetch', event => { if (event.request.method != 'GET') { return } - const a = new URL(event.request.url) - if (a.origin != self.location.origin) { + const req_url = new URL(event.request.url) + if (req_url.origin != self.location.origin) { return } - const cacheres = await self.caches.match(event.request) - if (cacheres !== undefined) { - event.respondWith(cacheres) - } - try { - const response = await self.fetch(event.request) - const cache = await self.caches.open(sw_cache.store) - cache.put(event.request, response.clone()) - event.respondWith(response) - } catch { - event.respondWith(self.caches.match(sw_cache.offline)) - } + event.respondWith((async() => { + const cacheres = await self.caches.match(event.request) + return cacheres || (async() => { + try { + const response = await self.fetch(event.request) + const cache = await self.caches.open(sw_cache.store) + cache.put(event.request, response.clone()) + return response + } catch { + return self.caches.match(sw_cache.offline) + } + })() + })()) + }) \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 75ff4316d4de538f931efe6e3a5aab51ac20cb0c Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Sun, 9 Jan 2022 16:41:11 +0530 Subject: fixed lighthouse errors Signed-off-by: Marc Pervaz Boocha --- .eleventy.js | 2 +- favicon.ico | Bin 302153 -> 305428 bytes favicon.svg | 14 ---- favicon/192.png | Bin 0 -> 3368 bytes favicon/512.png | Bin 0 -> 9903 bytes favicon/icon.svg | 1 + src/assets/index.css | 24 +++--- src/assets/manifest.njk | 19 +++-- src/assets/prism.css | 193 +++++++++++++++++++++++++++++------------------- src/assets/sw.mjs | 20 ++--- src/layouts/base.njk | 6 +- 11 files changed, 160 insertions(+), 119 deletions(-) delete mode 100644 favicon.svg create mode 100644 favicon/192.png create mode 100644 favicon/512.png create mode 100644 favicon/icon.svg (limited to 'src/assets/sw.mjs') diff --git a/.eleventy.js b/.eleventy.js index 70755b0..27b0c01 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -76,7 +76,7 @@ module.exports = eleventyConfig => { eleventyConfig.addPassthroughCopy('static/') eleventyConfig.addPassthroughCopy('_headers') eleventyConfig.addPassthroughCopy('_redirects') - eleventyConfig.addPassthroughCopy('favicon.svg') + eleventyConfig.addPassthroughCopy('favicon/') eleventyConfig.addPassthroughCopy('favicon.ico') return { diff --git a/favicon.ico b/favicon.ico index 2db73db..765a709 100644 Binary files a/favicon.ico and b/favicon.ico differ diff --git a/favicon.svg b/favicon.svg deleted file mode 100644 index d8d3254..0000000 --- a/favicon.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/favicon/192.png b/favicon/192.png new file mode 100644 index 0000000..b3bdcb4 Binary files /dev/null and b/favicon/192.png differ diff --git a/favicon/512.png b/favicon/512.png new file mode 100644 index 0000000..08f4b67 Binary files /dev/null and b/favicon/512.png differ diff --git a/favicon/icon.svg b/favicon/icon.svg new file mode 100644 index 0000000..ae95fe3 --- /dev/null +++ b/favicon/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/index.css b/src/assets/index.css index 3d04fb2..bd17057 100644 --- a/src/assets/index.css +++ b/src/assets/index.css @@ -14,19 +14,19 @@ main { flex-grow: 1; } - :any-link { + * :any-link { color: inherit; text-decoration: underline; } - :any-link:hover, - :any-link:active { + * :any-link:hover, + * :any-link:active { font-style: italic; } .topnav { - background: darkred; + background: rgb(139, 0, 0); text-decoration: none; font-weight: bold; - color: white; + color: rgb(255, 255, 255); padding: 1rem; font-size: 1rem; } @@ -36,9 +36,7 @@ padding-left: 0rem; padding-right: 0rem; } - .topnav :any-link { - text-decoration: none; - } + .topnav :any-link, .topnav :any-link:hover { text-decoration: none; } @@ -58,18 +56,18 @@ } } .err { - color: darkred; + color: rgb(139, 0, 0); } @media (prefers-color-scheme: dark) { :root { - background: black; - color: white; + background: rgb(0, 0, 0); + color: rgb(255, 255, 255); } #menu nav { - background: red; + background: rgb(255, 0, 0); } .err { - color: red; + color: rgb(255, 0, 0); } } } diff --git a/src/assets/manifest.njk b/src/assets/manifest.njk index 3942d06..350c7af 100644 --- a/src/assets/manifest.njk +++ b/src/assets/manifest.njk @@ -10,20 +10,29 @@ permalink: /app.webmanifest "id": "{{ '/' | url }}", "scope": "{{ '/' | url }}", "display": "minimal-ui", - "background_color": "red", - "theme_color": "red", + "background_color": "#8b0000", + "theme_color": "#8b0000", "description": "{{ metadata.description }}", "icons": [ { "src": "{{ '/favicon.ico' | url }}", - "sizes": "256x256", + "sizes": "any", "type": "image/vnd.microsoft.icon" }, { - "src": "{{ '/favicon.svg' | url }}", + "src": "{{ '/favicon/icon.svg' | url }}", "sizes": "any", "type": "image/svg+xml" + }, + { + "src": "{{ '/favicon/192.png' | url }}", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "{{ '/favicon/512.png' | url }}", + "type": "image/png", + "sizes": "512x512" } ] - } diff --git a/src/assets/prism.css b/src/assets/prism.css index 431fe8a..0dd88c2 100644 --- a/src/assets/prism.css +++ b/src/assets/prism.css @@ -1,130 +1,175 @@ -code[class*="language-"],pre[class*="language-"] { - color: #f8f8f2; - background: none; - text-shadow: 0 1px rgba(0, 0, 0, 0.3); - font-family: monospace; - font-size: 1em; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - tab-size: 4; - hyphens: none; +code[class*="language-"], +pre[class*="language-"] { + color: rgb(248, 248, 242); + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; } + /* Code blocks */ + pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; - border-radius: 0.3em; + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; } -:not(pre) > code[class*="language-"],pre[class*="language-"] { - background: #272822; +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: rgb(39, 40, 34); } + /* Inline code */ -:not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; + +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; } -.token.comment,.token.prolog,.token.doctype,.token.cdata { - color: #8292a2; +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: rgb(130, 146, 162); } .token.punctuation { - color: #f8f8f2; + color: rgb(248, 248, 242); } .token.namespace { - opacity: .7; + opacity: .7; } -.token.property,.token.tag,.token.constant,.token.symbol,.token.deleted { - color: #f92672; +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: rgb(249, 38, 114); } -.token.boolean,.token.number { - color: #ae81ff; +.token.boolean, +.token.number { + color: rgb(174, 129, 255); } -.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted { - color: #a6e22e; +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: rgb(166, 226, 46); } -.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable { - color: #f8f8f2; +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: rgb(248, 248, 242); } -.token.atrule,.token.attr-value,.token.function,.token.class-name { - color: #e6db74; +.token.atrule, +.token.attr-value, +.token.function, +.token.class-name { + color: rgb(230, 219, 116); } .token.keyword { - color: #66d9ef; + color: rgb(102, 217, 239); } -.token.regex,.token.important { - color: #fd971f; +.token.regex, +.token.important { + color: rgb(253, 151, 31); } .token.important, .token.bold { - font-weight: bold; + font-weight: bold; } + .token.italic { - font-style: italic; + font-style: italic; } .token.entity { cursor: help; } -@media screen and (prefers-color-scheme: dark){ - code[class*="language-"],pre[class*="language-"] { - color: black; - text-shadow: 0 1px white; +@media screen and (prefers-color-scheme: dark) { + code[class*="language-"], + pre[class*="language-"] { + color: #000000; + text-shadow: 0 1px #ffffff; } - - :not(pre) > code[class*="language-"], pre[class*="language-"] { - background: #f5f2f0; + :not(pre)>code[class*="language-"], + pre[class*="language-"] { + background: rgb(245, 242, 240); } - - .token.comment,.token.prolog,.token.doctype,.token.cdata { - color: slategray; + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: rgb(112, 128, 144); } - .token.punctuation { - color: #999; + color: rgb(153, 153, 153); } - - .token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted { - color: #905; + .token.property, + .token.tag, + .token.boolean, + .token.number, + .token.constant, + .token.symbol, + .token.deleted { + color: rgb(153, 0, 85); } - - .token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted { - color: #690; + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: rgb(102, 153, 0); } - - .token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string { - color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string { + color: rgb(154, 110, 58); + background: rgba(255, 255, 255, 0.5); } - - .token.atrule,.token.attr-value,.token.keyword { - color: #07a; + .token.atrule, + .token.attr-value, + .token.keyword { + color: rgb(0, 118, 168); } - - .token.function,.token.class-name { - color: #DD4A68; + .token.function, + .token.class-name { + color: rgb(221, 75, 104); } - - .token.regex,.token.important,.token.variable { - color: #e90; + .token.regex, + .token.important, + .token.variable { + color: rgb(238, 153, 0); } } \ No newline at end of file diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs index 2359e0f..78d659a 100644 --- a/src/assets/sw.mjs +++ b/src/assets/sw.mjs @@ -4,7 +4,7 @@ const sw_cache = { "/index.css", "/prism.css", "/index.js", - "/favicon.svg", + "/favicon/icon.svg", "/offline.html", "/" ], @@ -16,7 +16,7 @@ self.addEventListener('install', event => { self.skipWaiting() event.waitUntil((async() => { const cache = await self.caches.open(sw_cache.store) - cache.addAll(sw_cache.default) + return cache.addAll(sw_cache.default) })()) }) @@ -32,16 +32,16 @@ self.addEventListener('activate', event => { }) self.addEventListener('fetch', event => { - if (event.request.method != 'GET') { - return - } + event.respondWith((async() => { + if (event.request.method != 'GET') { + return fetch(event.request) + } - const req_url = new URL(event.request.url) - if (req_url.origin != self.location.origin) { - return - } + const req_url = new URL(event.request.url) + if (req_url.origin != self.location.origin) { + return fetch(event.request) + } - event.respondWith((async() => { const cacheres = await self.caches.match(event.request) return cacheres || (async() => { try { diff --git a/src/layouts/base.njk b/src/layouts/base.njk index 98b9c37..66492a3 100644 --- a/src/layouts/base.njk +++ b/src/layouts/base.njk @@ -15,10 +15,12 @@ - + + + - + {% if syntaxhighlight %}{% endif %} -- cgit v1.2.3-70-g09d2