This commit is contained in:
Til Schmitter 2026-06-21 10:39:49 +02:00
parent 3788b9b132
commit 5a33c4cd8a
3 changed files with 91 additions and 87 deletions

View file

@ -33,7 +33,8 @@ function jsldp(a, b) {
} }
loadScript('baguettebox', "J_BBX"); loadScript('baguettebox', "J_BBX");
loadScript('up2k', "J_U2K"); loadScript('up2k', "J_U2K");
loadScript('sw'); if (navigator.serviceWorker)
loadScript('sw');
// disables emojis // disables emojis

View file

@ -1,55 +1,53 @@
// service worker. required for PWAs // service worker. required for PWAs
// https://www.digitalapplied.com/blog/progressive-web-apps-2026-pwa-performance-guide // https://www.digitalapplied.com/blog/progressive-web-apps-2026-pwa-performance-guide
// Register service worker on page load // Register service worker on page load
console.log('sw.js') // modern syntax allowed here, only supported browsers load this file
if ('serviceWorker' in navigator) { console.log('sw load')
console.log('sw load') self.addEventListener("fetch", (event) => {
self.addEventListener("fetch", (event) => { // Regular requests not related to Web Share Target.
// Regular requests not related to Web Share Target. if (event.request.method !== "POST" || !event.request.action.has("share-target")) {
if (event.request.method !== "POST" || !event.request.action.has("share-target")) { console.log('normal response')
console.log('normal response') event.respondWith(fetch(event.request));
event.respondWith(fetch(event.request)); return;
return; }
}
// Requests related to Web Share Target. // Requests related to Web Share Target.
event.respondWith( event.respondWith(
(async () => { (async () => {
const formData = await event.request.formData(); const formData = await event.request.formData();
const files = formData.get("files") || ""; const files = formData.get("files") || "";
console.log('sw share:') console.log('sw share:')
console.log(files) console.log(files)
await addResourcesToCache(files) await addResourcesToCache(files)
// const responseUrl = '/'; // (ToDo: remember last upload dir) // const responseUrl = '/'; // (ToDo: remember last upload dir)
// ToDo: keep file references in clipboard // ToDo: keep file references in clipboard
// (maybe read from cache on page load somehow) // (maybe read from cache on page load somehow)
// -> upload on paste // -> upload on paste
// Copy existing headers // Copy existing headers
const headers = new Headers(event.request.headers); const headers = new Headers(event.request.headers);
// Set a new header // Set a new header
var pw = await CookieStore.get('cppwd'); var pw = await CookieStore.get('cppwd');
headers.set('pw', pw); headers.set('pw', pw);
headers.delete('origin'); // 99% sure this doesn't work, but hey headers.delete('origin'); // 99% sure this doesn't work, but hey
const newRequest = new Request(event.request, { const newRequest = new Request(event.request, {
mode: 'cors', mode: 'cors',
credentials: 'omit', credentials: 'omit',
headers: headers headers: headers
}) })
return fetch(newRequest) return fetch(newRequest)
})(), })(),
); );
}); });
self.addEventListener('install', (event) => { self.addEventListener('install', (event) => {
console.log('sw wait skip') console.log('sw wait skip')
self.skipWaiting(); // insta replace old service workers (helpful for dev) self.skipWaiting(); // insta replace old service workers (helpful for dev)
}); });
const addResourcesToCache = async (resources) => { const addResourcesToCache = async (resources) => {
const cache = await caches.open("files"); const cache = await caches.open("files");
await cache.addAll(resources); await cache.addAll(resources);
}; };
}

View file

@ -2362,16 +2362,19 @@ function setColor (color) {
pbar.drawpos(); pbar.drawpos();
vbar.draw(); vbar.draw();
} }
var accent = sread('accent');
var accent = "";
if(sread != undefined)
accent = sread('accent');
var tcolor = QS('meta[name=theme-color]'); var tcolor = QS('meta[name=theme-color]');
if(tcolor) if(tcolor)
tcolor = tcolor.content; tcolor = tcolor.content;
if((!accent || accent.length <= 3) && tcolor != "#333333") if((!accent || accent.length <= 3) && tcolor != "#333333")
accent = tcolor; accent = tcolor;
var thing = QS('meta[name=theme-color]'); var thing = QS('meta[name=theme-color]');
if(accent && accent.length > 3){ if(accent && accent.length > 3){
console.log('read accent color from settings: ' + accent); console.log('read accent color from settings: ' + accent);
document.documentElement.style.setProperty('--a', parseColor(accent)); document.documentElement.style.setProperty('--a', parseColor(accent));
} }
function bchrome() { function bchrome() {
@ -2448,42 +2451,44 @@ function xhrchk(xhr, prefix, e404, lvl, tag) {
return fun(0, prefix + xhr.status + ": " + errtxt, tag); return fun(0, prefix + xhr.status + ": " + errtxt, tag);
} }
// register service worker if (navigator.serviceWorker){
// ToDo: set http header: Service-Worker-Allowed: / // register service worker
// otherwise it will fail to register // ToDo: set http header: Service-Worker-Allowed: /
// https://stackoverflow.com/questions/49084718/how-exactly-add-service-worker-allowed-to-register-service-worker-scope-in-upp // otherwise it will fail to register
window.addEventListener('load', async () => { // https://stackoverflow.com/questions/49084718/how-exactly-add-service-worker-allowed-to-register-service-worker-scope-in-upp
try { window.addEventListener('load', function() {
const registration = await navigator.serviceWorker.register("/.cpr/w/sw.js", { try {
scope: "/", var registration = navigator.serviceWorker.register("/.cpr/w/sw.js", {
}); scope: "/",
if (registration.installing) { });
console.log("Service worker installing"); if (registration.installing) {
} else if (registration.waiting) { console.log("Service worker installing");
console.log("Service worker installed"); } else if (registration.waiting) {
} else if (registration.active) { console.log("Service worker installed");
console.log("Service worker active"); } else if (registration.active) {
} console.log("Service worker active");
} catch (error) { }
console.error(`Registration failed with ${error}`); } catch (error) {
} console.error("Registration failed with " + error);
}); }
});
if(ebi('inst')){
var installPrompt = null; if(ebi('inst')){
window.addEventListener("beforeinstallprompt", function(e) { var installPrompt = null;
e.preventDefault(); window.addEventListener("beforeinstallprompt", function(e) {
installPrompt = e; e.preventDefault();
ebi('inst').removeAttribute("hidden"); installPrompt = e;
}); ebi('inst').removeAttribute("hidden");
ebi('inst').onclick = async function(){ });
if (!installPrompt) { ebi('inst').onclick = function(){
return; if (!installPrompt) {
return;
}
var result = installPrompt.prompt();
console.log("Install prompt was: " + result.outcome);
installPrompt = null;
ebi('inst').setAttribute("hidden", "");
} }
const result = await installPrompt.prompt();
console.log(`Install prompt was: ${result.outcome}`);
installPrompt = null;
ebi('inst').setAttribute("hidden", "");
} }
} }