mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 04:09:13 +00:00
LibWeb/CSS: Maintain original form of media-feature ranges
Previously, for `foo < 30px` ranges, we'd flip them and store them as `30px > foo` instead. That worked fine, but means the serialization is wrong. So instead, keep them in their original form. I experimented with giving Range two optional sub-structs instead of 4 optional members, thinking it would be smaller - but it's actually larger, because the two Optional<Comparison>s fit snugly together. So, the slightly-goofy all-Optionals remains. This gets us 2 WPT passes that I'm aware of.
This commit is contained in:
parent
9b8dc6b8d0
commit
9fe8445946
Notes:
github-actions[bot]
2025-05-23 09:19:11 +00:00
Author: https://github.com/AtkinsSJ
Commit: 9fe8445946
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4817
5 changed files with 28 additions and 32 deletions
|
@ -82,10 +82,14 @@ String MediaFeature::to_string() const
|
|||
return MUST(String::formatted("max-{}: {}", string_from_media_feature_id(m_id), value().to_string()));
|
||||
case Type::Range: {
|
||||
auto& range = this->range();
|
||||
if (!range.right_comparison.has_value())
|
||||
return MUST(String::formatted("{} {} {}", range.left_value.to_string(), comparison_string(range.left_comparison), string_from_media_feature_id(m_id)));
|
||||
StringBuilder builder;
|
||||
if (range.left_comparison.has_value())
|
||||
builder.appendff("{} {} ", range.left_value->to_string(), comparison_string(*range.left_comparison));
|
||||
builder.append(string_from_media_feature_id(m_id));
|
||||
if (range.right_comparison.has_value())
|
||||
builder.appendff(" {} {}", comparison_string(*range.right_comparison), range.right_value->to_string());
|
||||
|
||||
return MUST(String::formatted("{} {} {} {} {}", range.left_value.to_string(), comparison_string(range.left_comparison), string_from_media_feature_id(m_id), comparison_string(*range.right_comparison), range.right_value->to_string()));
|
||||
return builder.to_string_without_validation();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,12 +141,15 @@ MatchResult MediaFeature::evaluate(HTML::Window const* window) const
|
|||
|
||||
case Type::Range: {
|
||||
auto const& range = this->range();
|
||||
if (auto const left_result = compare(*window, range.left_value, range.left_comparison, queried_value); left_result != MatchResult::True)
|
||||
return left_result;
|
||||
if (range.left_comparison.has_value()) {
|
||||
if (auto const left_result = compare(*window, *range.left_value, *range.left_comparison, queried_value); left_result != MatchResult::True)
|
||||
return left_result;
|
||||
}
|
||||
|
||||
if (range.right_comparison.has_value())
|
||||
if (range.right_comparison.has_value()) {
|
||||
if (auto const right_result = compare(*window, queried_value, *range.right_comparison, *range.right_value); right_result != MatchResult::True)
|
||||
return right_result;
|
||||
}
|
||||
|
||||
return MatchResult::True;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue