// Rechtsseiten: Impressum + Datenschutzerklärung. // Seit 04.09.2026 sprachgesteuert: Die Texte stehen je Sprache in sprache-.js unter // recht.impressumSeite und recht.datenschutzSeite. Diese Datei rendert sie nur noch. // Maßgeblich ist die deutsche Fassung (recht.hinweis wird in EN/ES/EL eingeblendet). // // Textformat in den Sprachdateien (bewusst einfach, damit Übersetzungen ohne JSX auskommen): // **fett** → hervorgehoben // Zeilenumbruch \n →
// E-Mail-Adressen, https://… und www.… werden automatisch verlinkt. // Ein Abschnitt: { titel, absaetze: [String], liste: [String], nachListe: [String] } // (alle Felder optional; ohne titel entsteht ein Absatzblock ohne Überschrift). function rechtVerlinke(text, schluessel) { const muster = /([\w.+-]+@[\w-]+\.[\w.-]+|https?:\/\/[^\s)]+|www\.[^\s)]+)/g; const teile = []; let letzte = 0, treffer, i = 0; while ((treffer = muster.exec(text))) { let wort = treffer[0]; let rest = ''; while (/[.,;:]$/.test(wort)) { rest = wort.slice(-1) + rest; wort = wort.slice(0, -1); } if (treffer.index > letzte) teile.push(text.slice(letzte, treffer.index)); const istMail = wort.indexOf('@') >= 0; const ziel = istMail ? 'mailto:' + wort : (wort.indexOf('http') === 0 ? wort : 'https://' + wort); teile.push(istMail ? {wort} : {wort}); if (rest) teile.push(rest); letzte = treffer.index + treffer[0].length; } if (letzte < text.length) teile.push(text.slice(letzte)); return teile; } function rechtInline(s) { if (typeof s !== 'string') return s; const knoten = []; s.split('\n').forEach((zeile, zi) => { if (zi > 0) knoten.push(
); zeile.split('**').forEach((teil, ti) => { const inhalt = rechtVerlinke(teil, `${zi}-${ti}`); if (ti % 2) knoten.push({inhalt}); else inhalt.forEach((k, ki) => knoten.push(typeof k === 'string' ? {k} : k)); }); }); return knoten; } function RechtRahmen({ titel, untertitel, onGoto, children }) { const { t, lang } = React.useContext(window.SpracheCtx); return

{ e.preventDefault(); onGoto('home'); }}>{t.recht.zurueck}

{titel}

{untertitel &&

{untertitel}

} {lang !== 'de' && t.recht.hinweis &&

{t.recht.hinweis}

}
{children}
; } function RA({ titel, children }) { return
{titel &&

{titel}

}
{children}
; } const RP = ({ children, style }) =>

{children}

; const RL = ({ items }) => ; function RechtAbschnitte({ abschnitte }) { return (abschnitte || []).map((a, i) => {(a.absaetze || []).map((p, j) => {rechtInline(p)})} {a.liste && a.liste.length > 0 && } {(a.nachListe || []).map((p, j) => {rechtInline(p)})} ); } function RechtSeite({ onGoto, art }) { const { t } = React.useContext(window.SpracheCtx); const seite = t.recht[art]; if (!seite) return ; return {seite.stand && {rechtInline(seite.stand)}} ; } function ImpressumSeite({ onGoto }) { return ; } function DatenschutzSeite({ onGoto }) { return ; } Object.assign(window, { ImpressumSeite, DatenschutzSeite });