HtmlTemplateElement
sealed class HtmlTemplateElement : HtmlElement, IHtmlTemplateElement, IHtmlElement, IElement, INode, IEventTarget, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle
Represents the template element.
using AngleSharp.Dom.Css;
using AngleSharp.Html;
using System.Text;
namespace AngleSharp.Dom.Html
{
internal sealed class HtmlTemplateElement : HtmlElement, IHtmlTemplateElement, IHtmlElement, IElement, INode, IEventTarget, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle
{
private readonly DocumentFragment _content;
public IDocumentFragment Content => _content;
public HtmlTemplateElement(Document owner)
: base(owner, Tags.Template, 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);
Node.CopyProperties(this, htmlTemplateElement, deep);
Element.CopyAttributes(this, htmlTemplateElement);
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;
}
internal override void NodeIsAdopted(Document oldDocument)
{
_content.Owner = oldDocument;
}
public override string ToHtml()
{
StringBuilder stringBuilder = Pool.NewStringBuilder().Append('<').Append(base.NodeName);
foreach (IAttr attribute in base.Attributes) {
stringBuilder.Append(' ').Append(attribute.ToString());
}
stringBuilder.Append('>');
stringBuilder.Append(_content.ChildNodes.ToHtml());
stringBuilder.Append('<').Append('/').Append(base.NodeName);
return stringBuilder.Append('>').ToPool();
}
}
}