CssKeyframesRule
Represents an @keyframes rule.
using AngleSharp.Extensions;
using AngleSharp.Parser.Css;
using System;
using System.Linq;
namespace AngleSharp.Dom.Css
{
internal sealed class CssKeyframesRule : CssRule, ICssKeyframesRule, ICssRule
{
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()
: base(CssRuleType.Keyframes)
{
_rules = new CssRuleList();
}
public void Add(string rule)
{
CssKeyframeRule value = CssParser.ParseKeyframeRule(rule, null);
_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));
}
protected override void ReplaceWith(ICssRule rule)
{
CssKeyframesRule cssKeyframesRule = rule as CssKeyframesRule;
_name = cssKeyframesRule._name;
_rules.Clear();
_rules.Import(cssKeyframesRule._rules, base.Owner, base.Parent);
}
protected override string ToCss()
{
return "@keyframes " + _name + " " + _rules.ToCssBlock();
}
}
}