applyBoundary method
Implementation
@override
void applyBoundary(ChildListRange range) {
var curr = range.start.prev!;
range.remove();
final document = parse(template);
final target = document.querySelector((element.component as TemplateDocument).attachTo)!;
final MarkupRenderObject parent = element.parentRenderObjectElement!.renderObject as MarkupRenderObject;
MarkupRenderObject? createTree(dom.Node node) {
MarkupRenderObject n;
if (node is dom.Text) {
if (node.text.trim().isEmpty) {
return null;
}
n = parent.createChildRenderText(node.text.trim(), true);
} else if (node is dom.Comment) {
n = parent.createChildRenderText('<!--${node.data}-->', true);
} else if (node is dom.Element) {
n = parent.createChildRenderElement(node.localName!)..update(null, null, null, node.attributes.cast(), null);
} else if (node is dom.DocumentType) {
n = parent.createChildRenderText(node.toString(), true);
} else {
throw UnsupportedError('Unsupported node type ${node.nodeType}');
}
if (node == target) {
n.children.insertNodeAfter(range);
} else {
for (final c in node.nodes) {
final o = createTree(c);
if (o != null) {
n.children.insertBefore(o);
}
}
}
return n;
}
for (final n in document.nodes) {
final o = createTree(n);
if (o != null) {
final next = ChildNodeData(o);
curr.insertNext(next);
curr = next;
}
}
}