HtmlTemplateElement
sealed class HtmlTemplateElement : HtmlElement, IHtmlTemplateElement, IHtmlElement, IElement, INode, IEventTarget, IMarkupFormattable, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle, IGlobalEventHandlers
Represents the template element.
using AngleSharp.Dom.Css;
using AngleSharp.Dom.Events;
using AngleSharp.Html;
using System.IO;
namespace AngleSharp.Dom.Html
{
internal sealed class HtmlTemplateElement : HtmlElement, IHtmlTemplateElement, IHtmlElement, IElement, INode, IEventTarget, IMarkupFormattable, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle, IGlobalEventHandlers
{
private readonly DocumentFragment _content;
public IDocumentFragment Content => _content;
public HtmlTemplateElement(Document owner, string prefix = null)
: base(owner, TagNames.Template, prefix, NodeFlags.Special | NodeFlags.Scoped | NodeFlags.HtmlTableSectionScoped | NodeFlags.HtmlTableScoped)
{
_content = new DocumentFragment(owner);
}
public void PopulateFragment()
{
while (base.HasChildNodes) {
Node node = base.ChildNodes[0];
RemoveNode(0, node);
_content.AddNode(node);
}
}
public override INode Clone(bool deep = true)
{
HtmlTemplateElement htmlTemplateElement = new HtmlTemplateElement(base.Owner, null);
CloneElement(htmlTemplateElement, deep);
for (int i = 0; i < _content.ChildNodes.Length; i++) {
Node node = _content.ChildNodes[i].Clone(deep) as Node;
if (node != null)
htmlTemplateElement._content.AddNode(node);
}
return htmlTemplateElement;
}
public override void ToHtml(TextWriter writer, IMarkupFormatter formatter)
{
writer.Write(formatter.OpenTag(this, false));
_content.ChildNodes.ToHtml(writer, formatter);
writer.Write(formatter.CloseTag(this, false));
}
internal override void NodeIsAdopted(Document oldDocument)
{
_content.Owner = oldDocument;
}
}
}