parseNodes method
Implementation
List<TagflowNode> parseNodes(dom.NodeList nodes) {
const excludeTags = ['table'];
bool isNodeValid(dom.Node node) {
if (node is dom.Text) {
return node.text.isNotEmpty ||
excludeTags.contains(node.parent?.localName);
}
if (node is dom.Element) {
if (excludeTags.contains(node.localName)) {
return true;
}
return node.hasChildNodes() || node.nodes.every(isNodeValid);
}
return false;
}
final parsedNodes = <TagflowNode>[];
for (final node in nodes) {
final state = _renderBoundaryState;
if (state != null && _handleRenderBoundary(node, state)) break;
if (state?.isRendering == false && node is! dom.Element) continue;
if (!isNodeValid(node)) continue;
final wasRendering = state?.isRendering ?? true;
final parsedNode = parseNode(node);
final canAddNode =
wasRendering ||
(state?.isRendering ?? false) ||
(state?.isStopped ?? false);
if (canAddNode && parsedNode != null && isValidNode(parsedNode)) {
parsedNodes.add(parsedNode);
}
if (state?.isStopped ?? false) break;
}
return parsedNodes;
}