From c5f1f36119c4dfd7f1df681a347e8f19e8716f51 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Thu, 17 Apr 2025 13:40:05 +0100 Subject: [PATCH] LibWeb: Allow multiple values for `transition-timing-function` property --- .../LibWeb/CSS/Parser/PropertyParsing.cpp | 4 ++ .../transition-timing-function-valid.txt | 28 +++++++++++++ .../transition-timing-function-valid.html | 42 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 Tests/LibWeb/Text/expected/wpt-import/css/css-transitions/parsing/transition-timing-function-valid.txt create mode 100644 Tests/LibWeb/Text/input/wpt-import/css/css-transitions/parsing/transition-timing-function-valid.html diff --git a/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp b/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp index 657bcbc0f41..fc5cf49f778 100644 --- a/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp +++ b/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp @@ -674,6 +674,10 @@ Parser::ParseErrorOr> Parser::parse_css_value if (auto parsed_value = parse_transition_property_value(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError::SyntaxError; + case PropertyID::TransitionTimingFunction: + if (auto parsed_value = parse_comma_separated_value_list(tokens, [this](auto& tokens) { return parse_easing_value(tokens); })) + return parsed_value.release_nonnull(); + return ParseError::SyntaxError; case PropertyID::Translate: if (auto parsed_value = parse_translate_value(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-transitions/parsing/transition-timing-function-valid.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-transitions/parsing/transition-timing-function-valid.txt new file mode 100644 index 00000000000..952a8458826 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-transitions/parsing/transition-timing-function-valid.txt @@ -0,0 +1,28 @@ +Harness status: OK + +Found 22 tests + +21 Pass +1 Fail +Pass e.style['transition-timing-function'] = "linear" should set the property value +Pass e.style['transition-timing-function'] = "linear(0 0%, 0.5 50%, 1 100%)" should set the property value +Pass e.style['transition-timing-function'] = "linear(0 0%, 10 10%, 10 50%, 25.4 75%, 100 100%)" should set the property value +Pass e.style['transition-timing-function'] = "linear(0 0%, 1 100%)" should set the property value +Pass e.style['transition-timing-function'] = "ease" should set the property value +Pass e.style['transition-timing-function'] = "ease-in" should set the property value +Pass e.style['transition-timing-function'] = "ease-out" should set the property value +Pass e.style['transition-timing-function'] = "ease-in-out" should set the property value +Pass e.style['transition-timing-function'] = "cubic-bezier(0.1, 0.2, 0.8, 0.9)" should set the property value +Pass e.style['transition-timing-function'] = "cubic-bezier(0, -2, 1, 3)" should set the property value +Pass e.style['transition-timing-function'] = "cubic-bezier(0, 0.7, 1, 1.3)" should set the property value +Pass e.style['transition-timing-function'] = "step-start" should set the property value +Pass e.style['transition-timing-function'] = "step-end" should set the property value +Pass e.style['transition-timing-function'] = "steps(4)" should set the property value +Pass e.style['transition-timing-function'] = "steps(4, start)" should set the property value +Pass e.style['transition-timing-function'] = "steps(2, end)" should set the property value +Pass e.style['transition-timing-function'] = "steps(2, jump-start)" should set the property value +Pass e.style['transition-timing-function'] = "steps(2, jump-end)" should set the property value +Pass e.style['transition-timing-function'] = "steps(2, jump-both)" should set the property value +Pass e.style['transition-timing-function'] = "steps(2, jump-none)" should set the property value +Fail e.style['transition-timing-function'] = "steps(sibling-index(), jump-none)" should set the property value +Pass e.style['transition-timing-function'] = "linear, ease, linear" should set the property value \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/css/css-transitions/parsing/transition-timing-function-valid.html b/Tests/LibWeb/Text/input/wpt-import/css/css-transitions/parsing/transition-timing-function-valid.html new file mode 100644 index 00000000000..bcc6973496d --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/css/css-transitions/parsing/transition-timing-function-valid.html @@ -0,0 +1,42 @@ + + + + +CSS Transitions: parsing transition-timing-function with valid values + + + + + + + + + + +