change mailbox behaviour to use reception confirmations

This commit is contained in:
marlon-erler
2026-03-31 22:02:13 +00:00
parent 959dc4d288
commit ec020e6358
21 changed files with 2772 additions and 2476 deletions
+27 -27
View File
@@ -1,34 +1,34 @@
<html lang="en">
<head>
<title>UDN Server</title>
<head>
<title>UDN Server</title>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no"
/>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no"
/>
<meta
name="theme-color"
content="hsla(0, 0%, 100%, 100%)"
media="(prefers-color-scheme: light)"
/>
<meta
name="theme-color"
content="black"
media="(prefers-color-scheme: dark)"
/>
<meta
name="theme-color"
content="hsla(0, 0%, 100%, 100%)"
media="(prefers-color-scheme: light)"
/>
<meta
name="theme-color"
content="black"
media="(prefers-color-scheme: dark)"
/>
<link rel="stylesheet" href="/styles.css" />
<link rel="stylesheet" href="/index.css" />
<link rel="manifest" href="/manifest.json" />
<link rel="icon" href="/icon.png" />
<script src="/support.js" defer></script>
<link rel="stylesheet" href="/styles.css" />
<link rel="stylesheet" href="/index.css" />
<link rel="manifest" href="/manifest.json" />
<link rel="icon" href="/icon.png" />
<script src="/support.js" defer></script>
<script src="/index.js" defer></script>
</head>
<script src="/index.js" defer></script>
</head>
<body>
<main></main>
</body>
<body>
<main></main>
</body>
</html>
+797 -547
View File
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -1,10 +1,10 @@
{
"name": "UDN Server",
"display": "standalone",
"icons": [
{
"src": "icon.png",
"sizes": "any"
}
]
"name": "UDN Server",
"display": "standalone",
"icons": [
{
"src": "icon.png",
"sizes": "any"
}
]
}
+401 -396
View File
File diff suppressed because it is too large Load Diff
+22 -19
View File
@@ -1,31 +1,34 @@
// TABS
document.querySelector("main").addEventListener("scroll", () => {
const links = document.querySelectorAll(".tab-link");
links.forEach((element) => element.removeAttribute("active"));
const links = document.querySelectorAll(".tab-link");
links.forEach((element) => element.removeAttribute("active"));
const pageWidth = document.querySelector("main > article").offsetWidth;
const scroll = document.querySelector("main").scrollLeft;
const currentPage = Math.round(scroll / pageWidth);
const pageWidth = document.querySelector("main > article").offsetWidth;
const scroll = document.querySelector("main").scrollLeft;
const currentPage = Math.round(scroll / pageWidth);
if (links[currentPage]) links[currentPage].setAttribute("active", "");
if (links[currentPage]) links[currentPage].setAttribute("active", "");
});
// SERVICE WORKER
async function registerServiceWorker() {
if ("serviceWorker" in navigator) {
try {
const registration = await navigator.serviceWorker.register("/sw.js", {
scope: "/",
});
if (registration.installing) {
setTimeout(() => window.location.reload(), 500);
} else if (registration.active) {
console.log("Service worker active");
}
} catch (error) {
console.error(`Could not install service worker: ${error}`);
if ("serviceWorker" in navigator) {
try {
const registration = await navigator.serviceWorker.register(
"/sw.js",
{
scope: "/",
},
);
if (registration.installing) {
setTimeout(() => window.location.reload(), 500);
} else if (registration.active) {
console.log("Service worker active");
}
} catch (error) {
console.error(`Could not install service worker: ${error}`);
}
}
}
}
registerServiceWorker();
+18 -18
View File
@@ -1,38 +1,38 @@
const CACHE_VERSION = "v1";
async function handleRequest(event) {
const responsePromise = getResponse(event);
event.respondWith(responsePromise);
const responsePromise = getResponse(event);
event.respondWith(responsePromise);
}
async function getResponse(event) {
try {
return await fetchAndCache(event);
} catch {
return await getFromCache(event);
}
try {
return await fetchAndCache(event);
} catch {
return await getFromCache(event);
}
}
async function fetchAndCache(event) {
const request = event.request;
const request = event.request;
const response = await fetch(request);
const response = await fetch(request);
const cache = await caches.open(CACHE_VERSION);
await cache.put(request, response.clone());
const cache = await caches.open(CACHE_VERSION);
await cache.put(request, response.clone());
return response;
return response;
}
async function getFromCache(event) {
const request = event.request;
const request = event.request;
const cache = await caches.open(CACHE_VERSION);
const response = await cache.match(request);
const cache = await caches.open(CACHE_VERSION);
const response = await cache.match(request);
return response;
return response;
}
self.addEventListener("fetch", (event) => {
handleRequest(event);
});
handleRequest(event);
});