CssKeyframesRule
Represents an @keyframes rule.
using AngleSharp.Parser.Css;
using System;
using System.Linq;
namespace AngleSharp.Dom.Css
{
internal sealed class CssKeyframesRule : CssRule, ICssKeyframesRule, ICssRule, IStyleFormattable
{
private readonly CssRuleList _rules;
private string _name;
public string Name {
get {
return _name;
}
set {
_name = value;
}
}
public CssRuleList Rules => _rules;
ICssRuleList ICssKeyframesRule.Rules {
get {
return _rules;
}
}
internal CssKeyframesRule(CssParser parser)
: base(CssRuleType.Keyframes, parser)
{
_rules = new CssRuleList();
}
public void Add(string rule)
{
CssKeyframeRule value = base.Parser.ParseKeyframeRule(rule);
_rules.Insert(value, _rules.Length, base.Owner, this);
}
public void Remove(string key)
{
ICssKeyframeRule cssKeyframeRule = Find(key);
if (cssKeyframeRule != null) {
int num = 0;
while (true) {
if (num >= _rules.Length)
return;
if (cssKeyframeRule == _rules[num])
break;
num++;
}
_rules.RemoveAt(num);
}
}
public ICssKeyframeRule Find(string key)
{
return _rules.OfType<ICssKeyframeRule>().FirstOrDefault((ICssKeyframeRule m) => m.KeyText.Equals(key, StringComparison.OrdinalIgnoreCase));
}
internal void AddRule(CssKeyframeRule rule)
{
_rules.Add(rule, base.Owner, this);
}
protected override void ReplaceWith(ICssRule rule)
{
CssKeyframesRule cssKeyframesRule = rule as CssKeyframesRule;
_name = cssKeyframesRule._name;
_rules.Clear();
_rules.Import(cssKeyframesRule._rules, base.Owner, base.Parent);
}
public override string ToCss(IStyleFormatter formatter)
{
string rules = formatter.Block(Rules);
return formatter.Rule("@keyframes", _name, rules);
}
}
}