diff --git a/404.html b/404.html index 3b32397..3d41027 100644 --- a/404.html +++ b/404.html @@ -4,6 +4,8 @@ + + diff --git a/aktion-detail.html b/aktion-detail.html index 017a246..a65412c 100644 --- a/aktion-detail.html +++ b/aktion-detail.html @@ -6,6 +6,8 @@ Aktion — DOGFATHER UNIVERSE + + diff --git a/assets/img/icon-192.png b/assets/img/icon-192.png new file mode 100644 index 0000000..9746d7c Binary files /dev/null and b/assets/img/icon-192.png differ diff --git a/assets/img/icon-512.png b/assets/img/icon-512.png new file mode 100644 index 0000000..5d9ce4b Binary files /dev/null and b/assets/img/icon-512.png differ diff --git a/assets/js/main.js b/assets/js/main.js index a01891a..f129596 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -869,4 +869,21 @@ const sprache = getSprache(); return feld[sprache] || feld.de || ""; }; + + /* =================================================================== + PWA: Service-Worker-Registrierung + Voraussetzung dafür, dass Chrome/Edge auf dem Desktop "App + installieren" anbietet (Icon landet dann auf dem Desktop/Startmenü). + Bewusst defensiv: registriert NUR über http(s), niemals bei file:// + (dort schlägt die Registrierung ohnehin fehl, die Seite muss aber + laut Projektregel auch per Doppelklick funktionieren — deshalb kein + ungefangener Fehler in der Konsole). ===================================================================== */ + if ("serviceWorker" in navigator && /^https?:$/.test(location.protocol)) { + window.addEventListener("load", () => { + navigator.serviceWorker.register("/sw.js").catch(() => { + /* Stiller Fallback — Seite funktioniert auch ohne Service Worker, + nur ohne Installierbarkeit/Offline-Cache. */ + }); + }); + } })(); diff --git a/bewerben-creator.html b/bewerben-creator.html index ea9091a..3cce77a 100644 --- a/bewerben-creator.html +++ b/bewerben-creator.html @@ -6,6 +6,8 @@ Streamer gesucht — DOGFATHER UNIVERSE + + diff --git a/bewerben-kooperation.html b/bewerben-kooperation.html index d73bc78..756e374 100644 --- a/bewerben-kooperation.html +++ b/bewerben-kooperation.html @@ -6,6 +6,8 @@ Kooperation anfragen — DOGFATHER UNIVERSE + + diff --git a/bewerben-modi.html b/bewerben-modi.html index 2647b59..04d297c 100644 --- a/bewerben-modi.html +++ b/bewerben-modi.html @@ -6,6 +6,8 @@ Modi werden — DOGFATHER UNIVERSE + + diff --git a/bewerben-scout.html b/bewerben-scout.html index 4fe75f1..77d8d29 100644 --- a/bewerben-scout.html +++ b/bewerben-scout.html @@ -6,6 +6,8 @@ Scout werden — DOGFATHER UNIVERSE + + diff --git a/bewerben.html b/bewerben.html index 1333fa2..39b4567 100644 --- a/bewerben.html +++ b/bewerben.html @@ -6,6 +6,8 @@ Bewerben — DOGFATHER UNIVERSE + + diff --git a/casper.html b/casper.html index 42f20d1..1d6db87 100644 --- a/casper.html +++ b/casper.html @@ -6,6 +6,8 @@ Casper — DOGFATHER UNIVERSE + + diff --git a/community.html b/community.html index 462a97b..ac2e1a4 100644 --- a/community.html +++ b/community.html @@ -6,6 +6,8 @@ Die Community — DOGFATHER UNIVERSE + + diff --git a/creator.html b/creator.html index b41a279..546666a 100644 --- a/creator.html +++ b/creator.html @@ -6,6 +6,8 @@ Creator im Team — DOGFATHER UNIVERSE + + diff --git a/dogfather.html b/dogfather.html index d6d64cc..f5675a6 100644 --- a/dogfather.html +++ b/dogfather.html @@ -6,6 +6,8 @@ Die Person, die DogFather erschuf — DOGFATHER UNIVERSE + + diff --git a/hasidog.html b/hasidog.html index ed87f19..58e8303 100644 --- a/hasidog.html +++ b/hasidog.html @@ -6,6 +6,8 @@ HasiDog-Welt — DOGFATHER UNIVERSE + + diff --git a/index.html b/index.html index 7e80b54..9202251 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,8 @@ DOGFATHER UNIVERSE — Streamer. Community. HasiDog. Manager. + + diff --git a/kontakt.html b/kontakt.html index 6bafb82..dd66c97 100644 --- a/kontakt.html +++ b/kontakt.html @@ -6,6 +6,8 @@ Kontakt & Rechtliches — DOGFATHER UNIVERSE + + diff --git a/links.html b/links.html index 7a4313f..c9b6b75 100644 --- a/links.html +++ b/links.html @@ -6,6 +6,8 @@ Alle Links — DOGFATHER UNIVERSE + + diff --git a/manager.html b/manager.html index a3784f9..ded547e 100644 --- a/manager.html +++ b/manager.html @@ -6,6 +6,8 @@ Manager DogFather — Spicy Media — DOGFATHER UNIVERSE + + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..9f016b0 --- /dev/null +++ b/manifest.json @@ -0,0 +1,28 @@ +{ + "name": "DOGFATHER UNIVERSE", + "short_name": "DogFather", + "description": "Streamer. Community. HasiDog. Manager. Gemeinsam stark.", + "start_url": "/index.html", + "id": "/index.html", + "scope": "/", + "display": "standalone", + "orientation": "any", + "background_color": "#0b0d10", + "theme_color": "#0b0d10", + "lang": "de", + "dir": "ltr", + "icons": [ + { + "src": "/assets/img/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/assets/img/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + } + ] +} diff --git a/medien-casper.html b/medien-casper.html index 57c17fb..f44609d 100644 --- a/medien-casper.html +++ b/medien-casper.html @@ -6,6 +6,8 @@ Medien — Casper — DOGFATHER UNIVERSE + + diff --git a/medien-dogfather.html b/medien-dogfather.html index 8914eaa..25969b2 100644 --- a/medien-dogfather.html +++ b/medien-dogfather.html @@ -6,6 +6,8 @@ Medien — DogFather — DOGFATHER UNIVERSE + + diff --git a/medien-hasidog.html b/medien-hasidog.html index 2a08332..a3a8642 100644 --- a/medien-hasidog.html +++ b/medien-hasidog.html @@ -6,6 +6,8 @@ Medien — HasiDog — DOGFATHER UNIVERSE + + diff --git a/profil.html b/profil.html index efc6cd9..cc7bf64 100644 --- a/profil.html +++ b/profil.html @@ -6,6 +6,8 @@ Profil — DOGFATHER UNIVERSE + + diff --git a/stimmen.html b/stimmen.html index 666438e..7b34a79 100644 --- a/stimmen.html +++ b/stimmen.html @@ -6,6 +6,8 @@ Stimmen über DogFather — DOGFATHER UNIVERSE + + diff --git a/streamer.html b/streamer.html index 649392e..0412964 100644 --- a/streamer.html +++ b/streamer.html @@ -6,6 +6,8 @@ Wer ist DogFather? — DOGFATHER UNIVERSE + + diff --git a/streamplan.html b/streamplan.html index af9202b..2cc3b27 100644 --- a/streamplan.html +++ b/streamplan.html @@ -6,6 +6,8 @@ Streamplan & Livebereich — DOGFATHER UNIVERSE + + diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..c67af4c --- /dev/null +++ b/sw.js @@ -0,0 +1,71 @@ +/* ===================================================================== + sw.js — minimaler Service Worker für DOGFATHER UNIVERSE + Zweck: NICHT primär Offline-Funktionalität, sondern die technische + Voraussetzung, damit Chrome/Edge auf dem Desktop den "App installieren"- + Prompt zuverlässig anzeigt (Chrome verlangt dafür einen registrierten + Service Worker mit fetch()-Handler, siehe developer.chrome.com/blog/ + update-install-criteria, Stand 2026). Nebenbei cached er die wichtigsten + Shell-Dateien, damit die Seite bei Verbindungsabbruch nicht komplett + leer bleibt — bewusst simpel gehalten (kein Offline-Vollausbau). + ===================================================================== */ + +const CACHE_NAME = "dogfather-universe-shell-v1"; +const SHELL_ASSETS = [ + "/", + "/index.html", + "/assets/css/main.css", + "/assets/css/theme-dogfather.css", + "/assets/css/theme-hasidog.css", + "/assets/css/theme-spicymedia.css", + "/assets/js/main.js", + "/assets/img/favicon.png", + "/assets/img/icon-192.png", + "/assets/img/icon-512.png", +]; + +self.addEventListener("install", (event) => { + event.waitUntil( + caches + .open(CACHE_NAME) + .then((cache) => cache.addAll(SHELL_ASSETS)) + .catch(() => { + /* Einzelne Assets könnten fehlen (z.B. beim allerersten Deploy) — + soll die Installation des Service Workers nicht blockieren. */ + }) + ); + self.skipWaiting(); +}); + +self.addEventListener("activate", (event) => { + event.waitUntil( + caches + .keys() + .then((keys) => + Promise.all( + keys + .filter((key) => key !== CACHE_NAME) + .map((key) => caches.delete(key)) + ) + ) + .then(() => self.clients.claim()) + ); +}); + +/* Network-first mit Cache-Fallback: liefert immer die aktuellste Version, + greift nur bei echtem Verbindungsausfall auf den Cache zurück — damit + Änderungen an der Seite nicht durch veraltete Caches verdeckt werden. */ +self.addEventListener("fetch", (event) => { + if (event.request.method !== "GET") return; + const url = new URL(event.request.url); + if (url.origin !== self.location.origin) return; + + event.respondWith( + fetch(event.request) + .then((response) => { + const copy = response.clone(); + caches.open(CACHE_NAME).then((cache) => cache.put(event.request, copy)); + return response; + }) + .catch(() => caches.match(event.request)) + ); +}); diff --git a/team-modis.html b/team-modis.html index a21ce52..9dd5a4d 100644 --- a/team-modis.html +++ b/team-modis.html @@ -6,6 +6,8 @@ Modi-Team — DOGFATHER UNIVERSE + + diff --git a/team-scouts.html b/team-scouts.html index e8e1db2..1a025cd 100644 --- a/team-scouts.html +++ b/team-scouts.html @@ -6,6 +6,8 @@ Scout-Team — DOGFATHER UNIVERSE + + diff --git a/vanvan.html b/vanvan.html index 8614252..1db469e 100644 --- a/vanvan.html +++ b/vanvan.html @@ -6,6 +6,8 @@ VanVan — die rechte Hand von Dogi — DOGFATHER UNIVERSE + + diff --git a/werte.html b/werte.html index 0c1a6ab..ec179a9 100644 --- a/werte.html +++ b/werte.html @@ -6,6 +6,8 @@ Werte als Manager — DOGFATHER UNIVERSE + + diff --git a/zeitreise.html b/zeitreise.html index 188bf77..8da43ef 100644 --- a/zeitreise.html +++ b/zeitreise.html @@ -6,6 +6,8 @@ Zeitreise — DOGFATHER UNIVERSE + +