CssAnimationProperty
More information available at:
https://developer.mozilla.org/en-US/docs/CSS/animation
using AngleSharp.Css;
using AngleSharp.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
namespace AngleSharp.Dom.Css
{
internal sealed class CssAnimationProperty : CssShorthandProperty
{
internal static readonly IValueConverter<Tuple<CssValue, CssValue, CssValue, CssValue, CssValue, CssValue, CssValue, Tuple<CssValue>>[]> Converter = Converters.WithAny(Converters.TimeConverter.Val().Option(), Converters.TransitionConverter.Val().Option(), Converters.TimeConverter.Val().Option(), Converters.PositiveOrInfiniteNumberConverter.Val().Option(), Converters.AnimationDirectionConverter.Val().Option(), Converters.AnimationFillStyleConverter.Val().Option(), Converters.PlayStateConverter.Val().Option(), Converters.IdentifierConverter.Val().Option()).FromList();
internal CssAnimationProperty(CssStyleDeclaration rule)
: base(PropertyNames.Animation, rule, PropertyFlags.None)
{
}
protected override bool IsValid(CssValue value)
{
return Converter.TryConvert(value, delegate(Tuple<CssValue, CssValue, CssValue, CssValue, CssValue, CssValue, CssValue, Tuple<CssValue>>[] t) {
Get<CssAnimationDurationProperty>().TrySetValue(Transform(from m in t
select m.Item1));
Get<CssAnimationTimingFunctionProperty>().TrySetValue(Transform(from m in t
select m.Item2));
Get<CssAnimationDelayProperty>().TrySetValue(Transform(from m in t
select m.Item3));
Get<CssAnimationIterationCountProperty>().TrySetValue(Transform(from m in t
select m.Item4));
Get<CssAnimationDirectionProperty>().TrySetValue(Transform(from m in t
select m.Item5));
Get<CssAnimationFillModeProperty>().TrySetValue(Transform(from m in t
select m.Item6));
Get<CssAnimationPlayStateProperty>().TrySetValue(Transform(from m in t
select m.Item7));
Get<CssAnimationNameProperty>().TrySetValue(Transform(from m in t
select m.Rest.Item1));
});
}
private CssValue Transform(IEnumerable<CssValue> values)
{
return values.FirstOrDefault();
}
internal override string SerializeValue(IEnumerable<CssProperty> properties)
{
CssAnimationNameProperty cssAnimationNameProperty = properties.OfType<CssAnimationNameProperty>().FirstOrDefault();
CssAnimationDurationProperty cssAnimationDurationProperty = properties.OfType<CssAnimationDurationProperty>().FirstOrDefault();
CssAnimationTimingFunctionProperty cssAnimationTimingFunctionProperty = properties.OfType<CssAnimationTimingFunctionProperty>().FirstOrDefault();
CssAnimationDelayProperty cssAnimationDelayProperty = properties.OfType<CssAnimationDelayProperty>().FirstOrDefault();
CssAnimationIterationCountProperty cssAnimationIterationCountProperty = properties.OfType<CssAnimationIterationCountProperty>().FirstOrDefault();
CssAnimationDirectionProperty cssAnimationDirectionProperty = properties.OfType<CssAnimationDirectionProperty>().FirstOrDefault();
CssAnimationFillModeProperty cssAnimationFillModeProperty = properties.OfType<CssAnimationFillModeProperty>().FirstOrDefault();
CssAnimationPlayStateProperty cssAnimationPlayStateProperty = properties.OfType<CssAnimationPlayStateProperty>().FirstOrDefault();
if (cssAnimationNameProperty == null || cssAnimationDurationProperty == null)
return string.Empty;
List<string> list = new List<string>();
list.Add(cssAnimationNameProperty.SerializeValue());
list.Add(cssAnimationDurationProperty.SerializeValue());
if (cssAnimationTimingFunctionProperty != null && cssAnimationTimingFunctionProperty.HasValue)
list.Add(cssAnimationTimingFunctionProperty.SerializeValue());
if (cssAnimationDelayProperty != null && cssAnimationDelayProperty.HasValue)
list.Add(cssAnimationDelayProperty.SerializeValue());
if (cssAnimationIterationCountProperty != null && cssAnimationIterationCountProperty.HasValue)
list.Add(cssAnimationIterationCountProperty.SerializeValue());
if (cssAnimationDirectionProperty != null && cssAnimationDirectionProperty.HasValue)
list.Add(cssAnimationDirectionProperty.SerializeValue());
if (cssAnimationFillModeProperty != null && cssAnimationFillModeProperty.HasValue)
list.Add(cssAnimationFillModeProperty.SerializeValue());
if (cssAnimationPlayStateProperty != null && cssAnimationPlayStateProperty.HasValue)
list.Add(cssAnimationPlayStateProperty.SerializeValue());
return string.Join(" ", list);
}
}
}