LibWeb: Allow multiple values for transition-timing-function property

This commit is contained in:
Tim Ledbetter 2025-04-17 13:40:05 +01:00 committed by Sam Atkins
parent 7a391f419a
commit c5f1f36119
Notes: github-actions[bot] 2025-04-23 20:04:15 +00:00
3 changed files with 74 additions and 0 deletions

View file

@ -674,6 +674,10 @@ Parser::ParseErrorOr<NonnullRefPtr<CSSStyleValue const>> 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();

View file

@ -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

View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Transitions: parsing transition-timing-function with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-transitions/#propdef-transition-timing-function">
<link rel="help" href="https://drafts.csswg.org/css-easing-1/#typedef-timing-function">
<meta name="assert" content="transition-timing-function supports the full grammar '<timing-function> #'.">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("transition-timing-function", "linear");
test_valid_value("transition-timing-function", "linear(0 0%, 0.5 50%, 1 100%)");
test_valid_value("transition-timing-function", "linear(0 0%, 10 10%, 10 50%, 25.4 75%, 100 100%)");
test_valid_value("transition-timing-function", "linear(0 0%, 1 100%)");
test_valid_value("transition-timing-function", "ease");
test_valid_value("transition-timing-function", "ease-in");
test_valid_value("transition-timing-function", "ease-out");
test_valid_value("transition-timing-function", "ease-in-out");
test_valid_value("transition-timing-function", "cubic-bezier(0.1, 0.2, 0.8, 0.9)");
test_valid_value("transition-timing-function", "cubic-bezier(0, -2, 1, 3)");
test_valid_value("transition-timing-function", "cubic-bezier(0, 0.7, 1, 1.3)");
test_valid_value("transition-timing-function", "step-start", "steps(1, start)");
test_valid_value("transition-timing-function", "step-end", "steps(1)");
test_valid_value("transition-timing-function", "steps(4)");
test_valid_value("transition-timing-function", "steps(4, start)");
test_valid_value("transition-timing-function", "steps(2, end)", "steps(2)");
test_valid_value("transition-timing-function", "steps(2, jump-start)");
test_valid_value("transition-timing-function", "steps(2, jump-end)", "steps(2)");
test_valid_value("transition-timing-function", "steps(2, jump-both)");
test_valid_value("transition-timing-function", "steps(2, jump-none)");
test_valid_value("transition-timing-function", "steps(sibling-index(), jump-none)");
test_valid_value("transition-timing-function", "linear, ease, linear");
</script>
</body>
</html>