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(item.label)}${item.text ? `${esc(item.text)}` : ''}`)
.join('');
return items ? `` : '';
}
function renderFacts(facts = []) {
const items = facts
.filter(item => item?.label && item?.value)
.slice(0, 12)
.map(item => `${esc(item.label)}${esc(item.value)}`)
.join('');
return items ? `` : '';
}
export function renderStaticFallback({ eyebrow, title, description, bodyHtml, facts, links, sections } = {}) {
const renderedSections = (sections ?? [])
.filter(section => section?.title || section?.text)
.slice(0, 8)
.map(section => `
${section.title ? `${esc(section.title)}
` : ''}
${section.text ? `${esc(section.text)}
` : ''}
${renderLinks(section.links)}
`)
.join('');
return `
${eyebrow ? `${esc(eyebrow)}
` : ''}
${title ? `${esc(title)}
` : ''}
${description ? `${esc(description)}
` : ''}
${renderFacts(facts)}
${renderLinks(links)}
${bodyHtml ? `${bodyHtml}` : ''}
${renderedSections}
`;
}
export function replaceStaticFallback(html, fallbackHtml) {
const fallbackPattern = /\s*(?=<\/div>)/;
if (fallbackPattern.test(html)) {
return html.replace(fallbackPattern, `${fallbackHtml}\n\n `);
}
return html.replace('
', `${fallbackHtml}\n\n
`);
}