CssTransitionProperty
sealed class CssTransitionProperty : CssShorthandProperty, ICssTransitionProperty, ICssProperty, ICssTransitionDelayProperty, ICssTransitionDurationProperty, ICssTransitionPropertyProperty, ICssTransitionTimingFunctionProperty
More information available at:
https://developer.mozilla.org/en-US/docs/CSS/transition
using AngleSharp.Css;
using AngleSharp.Css.Values;
using AngleSharp.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
namespace AngleSharp.Dom.Css
{
internal sealed class CssTransitionProperty : CssShorthandProperty, ICssTransitionProperty, ICssProperty, ICssTransitionDelayProperty, ICssTransitionDurationProperty, ICssTransitionPropertyProperty, ICssTransitionTimingFunctionProperty
{
internal static readonly IValueConverter<Tuple<string, Time, ITimingFunction, Time>[]> Converter = Converters.WithAny(CssTransitionPropertyProperty.SingleConverter.Option(CssTransitionPropertyProperty.Default), CssTransitionDurationProperty.SingleConverter.Option(CssTransitionDurationProperty.Default), CssTransitionTimingFunctionProperty.SingleConverter.Option(CssTransitionTimingFunctionProperty.Default), CssTransitionDelayProperty.SingleConverter.Option(CssTransitionDelayProperty.Default)).FromList();
private readonly CssTransitionDelayProperty _delay;
private readonly CssTransitionDurationProperty _duration;
private readonly CssTransitionTimingFunctionProperty _timingFunction;
private readonly CssTransitionPropertyProperty _property;
public IEnumerable<Time> Durations => _duration.Durations;
public IEnumerable<Time> Delays => _delay.Delays;
public IEnumerable<ITimingFunction> TimingFunctions => _timingFunction.TimingFunctions;
IEnumerable<string> ICssTransitionPropertyProperty.Properties {
get {
return _property.Properties;
}
}
internal CssTransitionProperty(CssStyleDeclaration rule)
: base(PropertyNames.Transition, rule, PropertyFlags.None)
{
_delay = Get<CssTransitionDelayProperty>();
_duration = Get<CssTransitionDurationProperty>();
_timingFunction = Get<CssTransitionTimingFunctionProperty>();
_property = Get<CssTransitionPropertyProperty>();
}
protected override bool IsValid(ICssValue value)
{
return Converter.TryConvert(value, delegate(Tuple<string, Time, ITimingFunction, Time>[] t) {
_property.SetProperties(from m in t
select m.Item1);
_duration.SetDurations(from m in t
select m.Item2);
_timingFunction.SetTimingFunctions(from m in t
select m.Item3);
_delay.SetDelays(from m in t
select m.Item4);
});
}
internal override string SerializeValue(IEnumerable<CssProperty> properties)
{
if (!properties.Contains(_property) || !properties.Contains(_duration))
return string.Empty;
List<string> list = new List<string>();
list.Add(_property.SerializeValue());
list.Add(_duration.SerializeValue());
if (_timingFunction.HasValue && properties.Contains(_timingFunction))
list.Add(_timingFunction.SerializeValue());
if (_delay.HasValue && properties.Contains(_delay))
list.Add(_delay.SerializeValue());
return string.Join(" ", list);
}
}
}