From 8853d8885c895b755e1f58b1a5878bfb6bde4f2b Mon Sep 17 00:00:00 2001 From: Boris Chiou Date: Tue, 24 Jan 2023 22:21:20 +0000 Subject: [PATCH] style: Accept auto for {scroll|view}-timeline-name Per https://github.com/w3c/csswg-drafts/issues/7431, both timeline name should accept `auto`. Differential Revision: https://phabricator.services.mozilla.com/D166476 --- components/style/values/mod.rs | 8 +--- components/style/values/specified/box.rs | 59 +++--------------------- 2 files changed, 7 insertions(+), 60 deletions(-) diff --git a/components/style/values/mod.rs b/components/style/values/mod.rs index c0ddeddd7ee8b..adff582974ca5 100644 --- a/components/style/values/mod.rs +++ b/components/style/values/mod.rs @@ -614,13 +614,6 @@ impl TimelineOrKeyframesName { impl Eq for TimelineOrKeyframesName {} -/// A trait that returns whether a given type is the `auto` value or not. So far -/// only needed for background-size serialization, which special-cases `auto`. -pub trait IsAuto { - /// Returns whether the value is the `auto` value. - fn is_auto(&self) -> bool; -} - /// The typedef of . #[repr(transparent)] #[derive( @@ -673,6 +666,7 @@ impl ToCss for TimelineName { } /// The typedef of . +#[repr(transparent)] #[derive( Clone, Debug, diff --git a/components/style/values/specified/box.rs b/components/style/values/specified/box.rs index 1babf27d89316..c72517ffaec44 100644 --- a/components/style/values/specified/box.rs +++ b/components/style/values/specified/box.rs @@ -663,6 +663,7 @@ impl AnimationIterationCount { ToShmem, )] #[value_info(other_values = "none")] +#[repr(C)] pub struct AnimationName(pub KeyframesName); impl AnimationName { @@ -796,8 +797,9 @@ fn is_default(value: &T) -> bool { pub enum AnimationTimeline { /// Use default timeline. The animation’s timeline is a DocumentTimeline. Auto, - /// The scroll-timeline name. + /// The scroll-timeline name or view-timeline-name. /// https://drafts.csswg.org/scroll-animations-1/#scroll-timelines-named + /// https://drafts.csswg.org/scroll-animations-1/#view-timeline-name Timeline(TimelineName), /// The scroll() notation. /// https://drafts.csswg.org/scroll-animations-1/#scroll-notation @@ -825,15 +827,6 @@ impl Parse for AnimationTimeline { context: &ParserContext, input: &mut Parser<'i, 't>, ) -> Result> { - // We are using the same parser for TimelineName and KeyframesName, but animation-timeline - // accepts "auto", so need to manually parse this. (We can not derive - // Parse because TimelineName excludes only the "none" keyword). - // - // FIXME: Bug 1733260: we may drop None based on the spec issue: - // https://github.com/w3c/csswg-drafts/issues/6674 - // - // If `none` is removed, then we could potentially shrink this the same - // way we deal with animation-name. if input.try_parse(|i| i.expect_ident_matching("auto")).is_ok() { return Ok(Self::Auto); } @@ -842,7 +835,7 @@ impl Parse for AnimationTimeline { return Ok(AnimationTimeline::Timeline(TimelineName::none())); } - // https://drafts.csswg.org/scroll-animations-1/rewrite#scroll-notation + // https://drafts.csswg.org/scroll-animations-1/#scroll-notation if input .try_parse(|i| i.expect_function_matching("scroll")) .is_ok() @@ -859,48 +852,8 @@ impl Parse for AnimationTimeline { } } -/// A value for the scroll-timeline-name. -/// -/// Note: The spec doesn't mention `auto` for scroll-timeline-name. However, `auto` is a keyword in -/// animation-timeline, so we reject `auto` for scroll-timeline-name now. -/// -/// https://drafts.csswg.org/scroll-animations-1/#scroll-timeline-name -#[derive( - Clone, - Debug, - Eq, - Hash, - MallocSizeOf, - PartialEq, - SpecifiedValueInfo, - ToComputedValue, - ToCss, - ToResolvedValue, - ToShmem, -)] -#[repr(C)] -pub struct ScrollTimelineName(pub TimelineName); - -impl ScrollTimelineName { - /// Returns the `none` value. - pub fn none() -> Self { - Self(TimelineName::none()) - } -} - -impl Parse for ScrollTimelineName { - fn parse<'i, 't>( - context: &ParserContext, - input: &mut Parser<'i, 't>, - ) -> Result> { - if let Ok(name) = input.try_parse(|input| TimelineName::parse(context, input)) { - return Ok(Self(name)); - } - - input.expect_ident_matching("none")?; - Ok(Self(TimelineName::none())) - } -} +/// A value for the scroll-timeline-name or view-timeline-name. +pub type ScrollTimelineName = AnimationName; /// https://drafts.csswg.org/css-scroll-snap-1/#snap-axis #[allow(missing_docs)]