CssTransitionProperty
More information available at:
https://developer.mozilla.org/en-US/docs/CSS/transition
using AngleSharp.Css;
using AngleSharp.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
namespace AngleSharp.Dom.Css
{
internal sealed class CssTransitionProperty : CssShorthandProperty
{
internal static readonly IValueConverter<Tuple<ICssValue, ICssValue, ICssValue, ICssValue>[]> Converter = Converters.WithAny(Converters.AnimatableConverter.Val().Option(), Converters.TimeConverter.Val().Option(), Converters.TransitionConverter.Val().Option(), Converters.TimeConverter.Val().Option()).FromList();
internal CssTransitionProperty(CssStyleDeclaration rule)
: base(PropertyNames.Transition, rule, PropertyFlags.None)
{
}
protected override bool IsValid(ICssValue value)
{
return Converter.TryConvert(value, delegate(Tuple<ICssValue, ICssValue, ICssValue, ICssValue>[] t) {
Get<CssTransitionPropertyProperty>().TrySetValue(Transform(from m in t
select m.Item1));
Get<CssTransitionDurationProperty>().TrySetValue(Transform(from m in t
select m.Item2));
Get<CssTransitionTimingFunctionProperty>().TrySetValue(Transform(from m in t
select m.Item3));
Get<CssTransitionDelayProperty>().TrySetValue(Transform(from m in t
select m.Item4));
});
}
private ICssValue Transform(IEnumerable<ICssValue> values)
{
if (values.Count() > 1)
return new CssValueList(values.ToList());
return values.FirstOrDefault();
}
internal override string SerializeValue(IEnumerable<CssProperty> properties)
{
CssTransitionPropertyProperty cssTransitionPropertyProperty = properties.OfType<CssTransitionPropertyProperty>().FirstOrDefault();
CssTransitionDurationProperty cssTransitionDurationProperty = properties.OfType<CssTransitionDurationProperty>().FirstOrDefault();
CssTransitionTimingFunctionProperty cssTransitionTimingFunctionProperty = properties.OfType<CssTransitionTimingFunctionProperty>().FirstOrDefault();
CssTransitionDelayProperty cssTransitionDelayProperty = properties.OfType<CssTransitionDelayProperty>().FirstOrDefault();
if (cssTransitionPropertyProperty == null || cssTransitionDurationProperty == null)
return string.Empty;
List<string> list = new List<string>();
list.Add(cssTransitionPropertyProperty.SerializeValue());
list.Add(cssTransitionDurationProperty.SerializeValue());
if (cssTransitionTimingFunctionProperty != null && cssTransitionTimingFunctionProperty.HasValue)
list.Add(cssTransitionTimingFunctionProperty.SerializeValue());
if (cssTransitionDelayProperty != null && cssTransitionDelayProperty.HasValue)
list.Add(cssTransitionDelayProperty.SerializeValue());
return string.Join(" ", list);
}
}
}