CssAnimationProperty
sealed class CssAnimationProperty : CssShorthandProperty, ICssAnimationProperty, ICssProperty, ICssAnimationDelayProperty, ICssAnimationDirectionProperty, ICssAnimationDurationProperty, ICssAnimationFillModeProperty, ICssAnimationIterationCountProperty, ICssAnimationNameProperty, ICssAnimationTimingFunctionProperty, ICssAnimationPlayStateProperty
More information available at:
https://developer.mozilla.org/en-US/docs/CSS/animation
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 CssAnimationProperty : CssShorthandProperty, ICssAnimationProperty, ICssProperty, ICssAnimationDelayProperty, ICssAnimationDirectionProperty, ICssAnimationDurationProperty, ICssAnimationFillModeProperty, ICssAnimationIterationCountProperty, ICssAnimationNameProperty, ICssAnimationTimingFunctionProperty, ICssAnimationPlayStateProperty
{
internal static readonly IValueConverter<Tuple<Time, ITimingFunction, Time, float, AnimationDirection, AnimationFillStyle, PlayState, Tuple<string>>[]> Converter = Converters.WithAny(CssAnimationDurationProperty.SingleConverter.Option(CssAnimationDurationProperty.Default), CssAnimationTimingFunctionProperty.SingleConverter.Option(CssAnimationTimingFunctionProperty.Default), CssAnimationDelayProperty.SingleConverter.Option(CssAnimationDelayProperty.Default), CssAnimationIterationCountProperty.SingleConverter.Option(CssAnimationIterationCountProperty.Default), CssAnimationDirectionProperty.SingleConverter.Option(CssAnimationDirectionProperty.Default), CssAnimationFillModeProperty.SingleConverter.Option(CssAnimationFillModeProperty.Default), CssAnimationPlayStateProperty.SingleConverter.Option(CssAnimationPlayStateProperty.Default), CssAnimationNameProperty.SingleConverter.Option(CssAnimationNameProperty.Default)).FromList();
private readonly CssAnimationDelayProperty _delay;
private readonly CssAnimationDirectionProperty _direction;
private readonly CssAnimationDurationProperty _duration;
private readonly CssAnimationFillModeProperty _fillMode;
private readonly CssAnimationIterationCountProperty _iterationCount;
private readonly CssAnimationNameProperty _name;
private readonly CssAnimationTimingFunctionProperty _timingFunction;
private readonly CssAnimationPlayStateProperty _playState;
public IEnumerable<Time> Durations => _duration.Durations;
public IEnumerable<Time> Delays => _delay.Delays;
public IEnumerable<ITimingFunction> TimingFunctions => _timingFunction.TimingFunctions;
public IEnumerable<string> Names => _name.Names;
public IEnumerable<AnimationFillStyle> FillModes => _fillMode.FillModes;
public IEnumerable<AnimationDirection> Directions => _direction.Directions;
public IEnumerable<float> Iterations => _iterationCount.Iterations;
public IEnumerable<PlayState> States => _playState.States;
internal CssAnimationProperty(CssStyleDeclaration rule)
: base(PropertyNames.Animation, rule, PropertyFlags.None)
{
_delay = Get<CssAnimationDelayProperty>();
_direction = Get<CssAnimationDirectionProperty>();
_duration = Get<CssAnimationDurationProperty>();
_fillMode = Get<CssAnimationFillModeProperty>();
_iterationCount = Get<CssAnimationIterationCountProperty>();
_name = Get<CssAnimationNameProperty>();
_timingFunction = Get<CssAnimationTimingFunctionProperty>();
_playState = Get<CssAnimationPlayStateProperty>();
}
protected override bool IsValid(ICssValue value)
{
return Converter.TryConvert(value, delegate(Tuple<Time, ITimingFunction, Time, float, AnimationDirection, AnimationFillStyle, PlayState, Tuple<string>>[] t) {
_duration.SetDurations(from m in t
select m.Item1);
_timingFunction.SetTimingFunctions(from m in t
select m.Item2);
_delay.SetDelays(from m in t
select m.Item3);
_iterationCount.SetIterations(from m in t
select m.Item4);
_direction.SetDirections(from m in t
select m.Item5);
_fillMode.SetFillModes(from m in t
select m.Item6);
_playState.SetStates(from m in t
select m.Item7);
_name.SetNames(from m in t
select m.Rest.Item1);
});
}
internal override string SerializeValue(IEnumerable<CssProperty> properties)
{
if (!properties.Contains(_name) || !properties.Contains(_duration))
return string.Empty;
List<string> list = new List<string>();
list.Add(_name.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());
if (_iterationCount.HasValue && properties.Contains(_iterationCount))
list.Add(_iterationCount.SerializeValue());
if (_direction.HasValue && properties.Contains(_direction))
list.Add(_direction.SerializeValue());
if (_fillMode.HasValue && properties.Contains(_fillMode))
list.Add(_fillMode.SerializeValue());
if (_playState.HasValue && properties.Contains(_playState))
list.Add(_playState.SerializeValue());
return string.Join(" ", list);
}
}
}