// Legal pages (privacy + cookies) and the site-wide cookie banner.
// Light kit for a site that collects no personal data server-side.
// RO is primary; a small in-page toggle mirrors to EN. Persisted via blogLang.
// Resolve {operator}/{regcom}/{cui}/{address}/{privacyEmail} placeholders in copy.
function fillLegal(str, op) {
return (str || "")
.replace(/\{operator\}/g, op.name)
.replace(/\{regcom\}/g, op.regcom)
.replace(/\{cui\}/g, op.cui)
.replace(/\{address\}/g, op.address)
.replace(/\{privacyEmail\}/g, op.privacyEmail);
}
function LegalLangToggle({ lang, onPick }) {
return (
{["ro", "en"].map((l) => (
onPick(l)}
aria-pressed={lang === l}>
{l.toUpperCase()}
))}
);
}
function LegalSection({ s, op }) {
return (
{s.h}
{(s.p || []).map((para, i) => (
{fillLegal(para, op)}
))}
{s.list && (
{s.list.map((li, i) => {fillLegal(li, op)} )}
)}
);
}
// which: "privacy" | "cookies"
function LegalPage({ which }) {
const L = window.LEGAL || {};
const op = L.operator || {};
const [lang, setLang] = React.useState(() => {
try { return localStorage.getItem("blogLang") === "en" ? "en" : "ro"; }
catch (e) { return "ro"; }
});
const pick = (l) => { setLang(l); try { localStorage.setItem("blogLang", l); } catch (e) {} };
const t = L[lang] || L.ro || {};
const doc = (which === "cookies" ? t.cookies : t.privacy) || {};
const otherHref = which === "cookies" ? "/privacy" : "/cookies";
const otherLabel = which === "cookies"
? (lang === "ro" ? "Politică de confidențialitate" : "Privacy notice")
: (lang === "ro" ? "Politică de cookies" : "Cookie notice");
return (
{doc.eyebrow}
{doc.title}
{doc.lead}
{t.updated}
{(doc.sections || []).map((s, i) => )}
);
}
// Site-wide cookie notice banner. Honest, dismissible, not a tracking wall.
function CookieBanner() {
const L = window.LEGAL || {};
const [acked, setAcked] = React.useState(() => {
try { return localStorage.getItem("cookieNoticeAck") === "1"; }
catch (e) { return true; } // if storage is blocked, don't nag
});
// Banner language follows the same blogLang preference; default RO.
const lang = (() => {
try { return localStorage.getItem("blogLang") === "en" ? "en" : "ro"; }
catch (e) { return "ro"; }
})();
const b = ((L[lang] || L.ro || {}).banner) || {};
const dismiss = () => {
try { localStorage.setItem("cookieNoticeAck", "1"); } catch (e) {}
setAcked(true);
};
if (acked || !b.text) return null;
return (
);
}
Object.assign(window, { LegalPage, CookieBanner });