StyleCollection
Represents a list of CSS stylesheets.
using AngleSharp.Css;
using AngleSharp.Dom.Css;
using System.Collections;
using System.Collections.Generic;
namespace AngleSharp.Dom.Collections
{
internal sealed class StyleCollection : IEnumerable<CssStyleRule>, IEnumerable
{
private readonly IEnumerable<CssStyleSheet> _sheets;
private readonly RenderDevice _device;
public RenderDevice Device => _device;
public StyleCollection(IEnumerable<CssStyleSheet> sheets, RenderDevice device)
{
_sheets = sheets;
_device = device;
}
public IEnumerator<CssStyleRule> GetEnumerator()
{
foreach (CssStyleSheet sheet in _sheets) {
if (!sheet.IsDisabled && sheet.Media.Validate(_device)) {
IEnumerable<CssStyleRule> rules = GetRules(sheet.Rules);
foreach (CssStyleRule item in rules) {
yield return item;
}
}
}
}
private IEnumerable<CssStyleRule> GetRules(CssRuleList rules)
{
foreach (ICssRule rule in rules) {
if (rule.Type == CssRuleType.Media) {
CssMediaRule cssMediaRule = (CssMediaRule)rule;
if (cssMediaRule.IsValid(_device)) {
IEnumerable<CssStyleRule> rules2 = GetRules(cssMediaRule.Rules);
foreach (CssStyleRule item in rules2) {
yield return item;
}
}
} else if (rule.Type == CssRuleType.Supports) {
CssSupportsRule cssSupportsRule = (CssSupportsRule)rule;
if (cssSupportsRule.IsValid(_device)) {
IEnumerable<CssStyleRule> rules3 = GetRules(cssSupportsRule.Rules);
foreach (CssStyleRule item2 in rules3) {
yield return item2;
}
}
} else if (rule.Type == CssRuleType.Style) {
yield return (CssStyleRule)rule;
}
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}