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:
+58
-7
@@ -518,16 +518,24 @@
|
||||
}
|
||||
|
||||
const token = localStorage.getItem("supporterToken");
|
||||
const status = localStorage.getItem("supporterSubStatus");
|
||||
if (!token) {
|
||||
return `<a class="nav-cta nav-cta-abo" href="abonnieren.html"><span>${t("nav_cta_abo_anonym")}</span>${soonBadge()}</a>`;
|
||||
}
|
||||
const hatBereich = ["active", "pending", "suspended", "cancelled"].includes(status);
|
||||
if (hatBereich) {
|
||||
const name = localStorage.getItem("supporterDisplayName");
|
||||
return `<a class="nav-cta nav-cta-abo" href="supporter.html"><span>${bereichLabel(name)}</span></a>`;
|
||||
}
|
||||
return `<a class="nav-cta nav-cta-abo" href="abonnieren.html"><span>${t("nav_cta_abo_aktivieren")}</span>${soonBadge()}</a>`;
|
||||
/* Nutzer-Wunsch 21.08.2026: "meine seite ändert sich nicht und es gibt
|
||||
keinen button für registrierte sich normal anzumelden und abzumelden.
|
||||
wo sie die speziellen sachen sehen als supporter und dass sie auch
|
||||
schon den abo sehen aber gesperrt ist." Vorher landeten Leute mit
|
||||
Konto, aber ohne bezahltes Abo (status "none"), im Nav-Knopf wieder
|
||||
nur bei abonnieren.html -- man merkte dem Knopf also nie an, dass man
|
||||
überhaupt eingeloggt ist. supporter.html zeigt für genau diesen Fall
|
||||
schon lange den Bereich "Mein Abo" -> #supp-keine-abo ("Du hast noch
|
||||
kein aktives Abo" + Knopf) UND den Ausloggen-Knopf (siehe dort,
|
||||
#btn-logout) -- das musste also nur noch verlinkt werden. Ab jetzt:
|
||||
JEDER mit gültigem Token (egal ob "none", "active", "pending", ...)
|
||||
geht auf supporter.html und sieht dort automatisch den passenden
|
||||
Zustand samt Logout. */
|
||||
const name = localStorage.getItem("supporterDisplayName");
|
||||
return `<a class="nav-cta nav-cta-abo" href="supporter.html"><span>${bereichLabel(name)}</span></a>`;
|
||||
}
|
||||
|
||||
function renderHeader() {
|
||||
@@ -1172,6 +1180,49 @@
|
||||
return feld[sprache] || feld.de || "";
|
||||
};
|
||||
|
||||
/* =====================================================================
|
||||
dogiTeilen() — 21.08.2026, Nutzer-Wunsch: "die events des jahres und
|
||||
speziellen live events soll man auch teilen können." Wiederverwendbare
|
||||
Teilen-Funktion für einzelne Inhalte (aktuell: Event des Jahres auf
|
||||
index.html, spezielles Live-Event auf streamplan.html — künftig bei
|
||||
Bedarf für weitere Stellen nutzbar, ohne den Mechanismus neu zu bauen).
|
||||
|
||||
Nutzt zuerst die native Teilen-Funktion des Geräts (Web-Share-API) —
|
||||
auf dem Handy öffnet das den echten Teilen-Dialog (WhatsApp, TikTok,
|
||||
Mail, ...). Die meisten Desktop-Browser kennen diese API nicht/zeigen
|
||||
dort ohnehin kein sinnvolles Menü -- dort stattdessen Fallback: Link in
|
||||
die Zwischenablage kopieren, der klickende Knopf bekommt kurz ein
|
||||
"✓ Link kopiert"-Feedback (eigener Text + eigene Klasse, gleiches
|
||||
Timing wie .vw-copy-btn in der Verwaltung). */
|
||||
window.dogiTeilen = async function (daten, knopf) {
|
||||
const payload = { title: daten.title || "", text: daten.text || "", url: daten.url || location.href };
|
||||
if (navigator.share) {
|
||||
try {
|
||||
await navigator.share(payload);
|
||||
return;
|
||||
} catch (err) {
|
||||
if (err && err.name === "AbortError") return; // Dialog selbst abgebrochen -- kein Fallback nötig
|
||||
// sonst: weiter zum Zwischenablage-Fallback unten
|
||||
}
|
||||
}
|
||||
if (!navigator.clipboard) return;
|
||||
try {
|
||||
await navigator.clipboard.writeText(payload.url);
|
||||
if (knopf) {
|
||||
const alterText = knopf.textContent;
|
||||
knopf.textContent = "✓ Link kopiert";
|
||||
knopf.classList.add("dogi-teilen-kopiert");
|
||||
setTimeout(() => {
|
||||
knopf.textContent = alterText;
|
||||
knopf.classList.remove("dogi-teilen-kopiert");
|
||||
}, 1600);
|
||||
}
|
||||
} catch {
|
||||
/* Zwischenablage nicht erreichbar (z.B. kein HTTPS-Kontext) -- kein
|
||||
Blocker, der Link bleibt über die normale Adressleiste erreichbar. */
|
||||
}
|
||||
};
|
||||
|
||||
/* =====================================================================
|
||||
dogiTeamLaden() — 21.08.2026, Nutzer-Wunsch: "überall wo Modis sind
|
||||
oder Scouts oder Manager, oder Creator, will ich dass ich die easy
|
||||
|
||||
Reference in New Issue
Block a user