Arbeit der parallelen Session in git gesichert (war nur auf dem Server)

Diese Änderungen liefen bereits live auf dem Server, lagen dort aber
ausschließlich als nicht eingecheckte Arbeitskopie — bei jedem Deploy
(stash/pull/pop) und bei jedem Serverproblem wären sie verloren gewesen.
Deshalb hier unverändert in git übernommen, bevor darauf aufgebaut wird.

Enthalten (nicht von mir gebaut, nur gesichert):
- Supporter: eigener fester Zugangscode statt Einmalcode-Login
  (Migration 0009, lib/crypto.js scrypt-Hash, routes/supporter.js,
  abonnieren.html, supporter.html, i18n-abonnieren/-supporter)
- Stimmen: Profilbilder (Migration 0010, routes/testimonials.js)
- Event-Bild-Upload: voller Pfad statt relativem (routes/events.js)
- Neue/überarbeitete Hintergrundbilder für viele Seiten
- Teilen-Funktion (streamplan.js, i18n-index/-streamplan, main.css)

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-21 17:35:14 +02:00
co-authored by Claude Opus 5
parent 4b294f6c6b
commit 5d0ea11570
65 changed files with 992 additions and 139 deletions
+21
View File
@@ -156,7 +156,9 @@
const seCountdown = document.getElementById("se-radar-countdown");
const seTitel = document.getElementById("se-radar-titel");
const seLink = document.getElementById("se-radar-link");
const seTeilenBtn = document.getElementById("se-radar-teilen");
let zielDatum = null;
let aktuellesEvent = null; // für dogiTeilen() beim Klick (21.08.2026)
let countdownIntervalId = null;
let zeigerIntervalId = null;
@@ -201,6 +203,7 @@
return;
}
zielDatum = new Date(event.zieldatum);
aktuellesEvent = event;
seWrap.hidden = false;
seRadar.classList.remove("ist-live");
seTitel.textContent = window.dogiFeld ? window.dogiFeld(event.titel) : event.titel?.de || "";
@@ -226,5 +229,23 @@
document.addEventListener("dogi-sprache-geaendert", () => {
if (zielDatum) specialEventLaden();
});
// Teilen (21.08.2026, Nutzer-Wunsch: "... speziellen live events soll man
// auch teilen können") -- teilt die Streamplan-Seite selbst (dort steht
// ja bereits automatisch das aktuell aktive Event), zusammen mit Titel
// im Text, damit klar ist, worum es geht. Nur EIN spezielles Event kann
// je aktiv sein, deshalb reicht ein einziger Knopf ohne Slot-Bezug.
seTeilenBtn?.addEventListener("click", () => {
if (!aktuellesEvent) return;
const titel = window.dogiFeld ? window.dogiFeld(aktuellesEvent.titel) : aktuellesEvent.titel?.de || "";
window.dogiTeilen?.(
{
title: titel,
text: `🔴 ${titel} — spezielles Live-Event bei DogFather!`,
url: `${location.origin}/streamplan.html`,
},
seTeilenBtn
);
});
}
})();