AngleSharp by Florian Rappl

<PackageReference Include="AngleSharp" Version="0.8.1" />

.NET API 1,172,480 bytes

 CssAnimationProperty

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); } } }