in apps-rendering/src/newsletter.ts [30:61]
function categoriseElement(element: BodyElement): ElementCategory {
switch (element.kind) {
case ElementKind.HeadingThree:
case ElementKind.HeadingTwo:
return ElementCategory.Heading;
case ElementKind.Text: {
const { doc } = element;
if (doc.textContent?.trim().length === 0) {
return ElementCategory.WhiteSpace;
}
if (doc.nodeName === 'P') {
if (doc.nodeType === 1) {
const element = doc as Element;
// for paragraphs containing only single <strong> child ("bold text"),
// the sign up block can be put before them, but not after them.
if (
element.children.length === 1 &&
element.firstElementChild?.tagName === 'STRONG'
) {
return ElementCategory.BoldParagraphText;
}
}
return ElementCategory.ParagraphText;
} else {
return ElementCategory.NonParagraphText;
}
}
default:
return ElementCategory.NonText;
}
}