CssRule
Represents a CSS rule.
using AngleSharp.Extensions;
using AngleSharp.Parser.Css;
namespace AngleSharp.Dom.Css
{
internal abstract class CssRule : CssNode, ICssRule, ICssNode, IStyleFormattable
{
private readonly CssRuleType _type;
private readonly CssParser _parser;
private ICssStyleSheet _ownerSheet;
private ICssRule _parentRule;
public string CssText {
get {
return this.ToCss();
}
set {
CssRule cssRule = _parser.ParseRule(value);
if (cssRule == null)
throw new DomException(DomError.Syntax);
if (cssRule.Type != _type)
throw new DomException(DomError.InvalidModification);
ReplaceWith(cssRule);
}
}
public ICssRule Parent {
get {
return _parentRule;
}
internal set {
_parentRule = value;
if (value != null)
_ownerSheet = _parentRule.Owner;
}
}
public ICssStyleSheet Owner {
get {
return _ownerSheet;
}
internal set {
_ownerSheet = value;
}
}
public CssRuleType Type => _type;
internal CssParser Parser => _parser;
internal CssRule(CssRuleType type, CssParser parser)
{
_type = type;
_parser = parser;
}
protected virtual void ReplaceWith(ICssRule rule)
{
ReplaceAll(rule);
}
protected void ReplaceSingle(ICssNode oldNode, ICssNode newNode)
{
if (oldNode != null) {
if (newNode != null)
ReplaceChild(oldNode, newNode);
else
RemoveChild(oldNode);
} else if (newNode != null) {
AppendChild(newNode);
}
}
}
}