function categoriseElement()

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;
	}
}