ShadowRoot
sealed class ShadowRoot : Node, IShadowRoot, IDocumentFragment, INode, IEventTarget, IMarkupFormattable, IParentNode, INonElementParentNode
Represents a shadow root.
using AngleSharp.Dom.Collections;
using AngleSharp.Extensions;
using AngleSharp.Html;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace AngleSharp.Dom
{
[DebuggerStepThrough]
internal sealed class ShadowRoot : Node, IShadowRoot, IDocumentFragment, INode, IEventTarget, IMarkupFormattable, IParentNode, INonElementParentNode
{
private readonly Element _host;
private readonly IStyleSheetList _styleSheets;
private readonly ShadowRootMode _mode;
private HtmlElementCollection _elements;
public IElement ActiveElement => (from m in this.GetDescendants().OfType<Element>()
where m.IsFocused
select m).FirstOrDefault();
public IElement Host => _host;
public string InnerHtml {
get {
return base.ChildNodes.ToHtml(HtmlMarkupFormatter.Instance);
}
set {
ReplaceAll(new DocumentFragment(_host, value), false);
}
}
public IStyleSheetList StyleSheets => _styleSheets;
public int ChildElementCount => base.ChildNodes.OfType<Element>().Count();
public IHtmlCollection<IElement> Children => _elements ?? (_elements = new HtmlElementCollection(this, false, null));
public IElement FirstElementChild {
get {
NodeList childNodes = base.ChildNodes;
int length = childNodes.Length;
for (int i = 0; i < length; i++) {
IElement element = childNodes[i] as IElement;
if (element != null)
return element;
}
return null;
}
}
public IElement LastElementChild {
get {
NodeList childNodes = base.ChildNodes;
for (int num = childNodes.Length - 1; num >= 0; num--) {
IElement element = childNodes[num] as IElement;
if (element != null)
return element;
}
return null;
}
}
public override string TextContent {
get {
StringBuilder stringBuilder = Pool.NewStringBuilder();
foreach (IText item in this.GetDescendants().OfType<IText>()) {
stringBuilder.Append(item.Data);
}
return stringBuilder.ToPool();
}
set {
TextNode node = (!string.IsNullOrEmpty(value)) ? new TextNode(base.Owner, value) : null;
ReplaceAll(node, false);
}
}
internal ShadowRoot(Element host, ShadowRootMode mode)
: base(host.Owner, "#shadow-root", NodeType.DocumentFragment, NodeFlags.None)
{
_host = host;
_styleSheets = this.CreateStyleSheets();
_mode = mode;
}
public override INode Clone(bool deep = true)
{
ShadowRoot shadowRoot = new ShadowRoot(_host, _mode);
CloneNode(shadowRoot, deep);
return shadowRoot;
}
public void Prepend(params INode[] nodes)
{
this.PrependNodes(nodes);
}
public void Append(params INode[] nodes)
{
this.AppendNodes(nodes);
}
public IElement QuerySelector(string selectors)
{
return base.ChildNodes.QuerySelector(selectors);
}
public IHtmlCollection<IElement> QuerySelectorAll(string selectors)
{
return base.ChildNodes.QuerySelectorAll(selectors);
}
public IHtmlCollection<IElement> GetElementsByClassName(string classNames)
{
return base.ChildNodes.GetElementsByClassName(classNames);
}
public IHtmlCollection<IElement> GetElementsByTagName(string tagName)
{
return base.ChildNodes.GetElementsByTagName(tagName);
}
public IHtmlCollection<IElement> GetElementsByTagNameNS(string namespaceURI, string tagName)
{
return base.ChildNodes.GetElementsByTagName(namespaceURI, tagName);
}
public IElement GetElementById(string elementId)
{
return base.ChildNodes.GetElementById(elementId);
}
public override void ToHtml(TextWriter writer, IMarkupFormatter formatter)
{
base.ChildNodes.ToHtml(writer, formatter);
}
}
}