HTMLTemplateElement
sealed class HTMLTemplateElement : HTMLElement, IHtmlTemplateElement, IHtmlElement, IElement, INode, IEventTarget, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle
Represents the template element.
using AngleSharp.DOM.Css;
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()
: base(Tags.Template, NodeFlags.Special | NodeFlags.Scoped | NodeFlags.HtmlTableSectionScoped | NodeFlags.HtmlTableScoped)
{
_content = new DocumentFragment {
Owner = base.Owner
};
}
public override INode Clone(bool deep = true)
{
HTMLTemplateElement hTMLTemplateElement = new HTMLTemplateElement();
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;
}
internal override void Close()
{
base.Close();
while (base.HasChilds) {
Node node = base.ChildNodes[0];
RemoveNode(0, node);
_content.AddNode(node);
}
}
public override string ToHtml()
{
StringBuilder stringBuilder = Pool.NewStringBuilder();
stringBuilder.Append('<').Append(base.NodeName);
foreach (IAttr attribute in base.Attributes) {
stringBuilder.Append(' ').Append(attribute.ToString());
}
stringBuilder.Append('>');
foreach (INode childNode in Content.ChildNodes) {
stringBuilder.Append(childNode.ToHtml());
}
stringBuilder.Append('<').Append('/').Append(base.NodeName);
return stringBuilder.Append('>').ToPool();
}
}
}