${esc(eyebrow)}
` : ''} + ${title ? `${esc(title)}
` : ''} + ${description ? `${esc(description)}
` : ''} + ${renderFacts(facts)} + ${renderLinks(links)} + ${bodyHtml ? `diff --git a/app/scripts/static-fallback.mjs b/app/scripts/static-fallback.mjs new file mode 100644 index 0000000..936062e --- /dev/null +++ b/app/scripts/static-fallback.mjs @@ -0,0 +1,62 @@ +export function esc(value) { + return String(value ?? '') + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(//g, '>'); +} + +export function cleanText(value) { + return String(value ?? '').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim(); +} + +function renderLinks(links = []) { + const items = links + .filter(item => item?.href && item?.label) + .slice(0, 24) + .map(item => `
${esc(section.text)}
` : ''} + ${renderLinks(section.links)} +${esc(eyebrow)}
` : ''} + ${title ? `${esc(description)}
` : ''} + ${renderFacts(facts)} + ${renderLinks(links)} + ${bodyHtml ? `