1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-30 10:22:13 +00:00

LibWeb: Make MediaFeature a top-level class and add factory methods

Web::CSS::MediaQuery::MediaFeature::Type was getting a bit ridiculous!
Also, this moves the detection of "min-" and "max-" media-features into
the MediaFeature itself, since this is an implementation detail, not
part of the spec.
This commit is contained in:
Sam Atkins 2021-12-29 21:17:44 +00:00 committed by Andreas Kling
parent d470e7e817
commit ae4f0000c8
4 changed files with 74 additions and 71 deletions

View file

@ -860,11 +860,11 @@ OwnPtr<MediaQuery::MediaCondition> Parser::consume_media_condition(TokenStream<S
return {};
}
Optional<MediaQuery::MediaFeature> Parser::consume_media_feature(TokenStream<StyleComponentValueRule>& outer_tokens)
Optional<MediaFeature> Parser::consume_media_feature(TokenStream<StyleComponentValueRule>& outer_tokens)
{
outer_tokens.skip_whitespace();
auto invalid_feature = [&]() -> Optional<MediaQuery::MediaFeature> {
auto invalid_feature = [&]() -> Optional<MediaFeature> {
outer_tokens.reconsume_current_input_token();
return {};
};
@ -884,12 +884,8 @@ Optional<MediaQuery::MediaFeature> Parser::consume_media_feature(TokenStream<Sty
auto feature_name = name_token.token().ident();
tokens.skip_whitespace();
if (!tokens.has_next_token()) {
return MediaQuery::MediaFeature {
.type = MediaQuery::MediaFeature::Type::IsTrue,
.name = feature_name,
};
}
if (!tokens.has_next_token())
return MediaFeature::boolean(feature_name);
if (!tokens.next_token().is(Token::Type::Colon))
return invalid_feature();
@ -902,25 +898,7 @@ Optional<MediaQuery::MediaFeature> Parser::consume_media_feature(TokenStream<Sty
if (tokens.has_next_token())
return invalid_feature();
if (feature_name.starts_with("min-", CaseSensitivity::CaseInsensitive)) {
return MediaQuery::MediaFeature {
.type = MediaQuery::MediaFeature::Type::MinValue,
.name = feature_name.substring_view(4),
.value = value.release_value(),
};
} else if (feature_name.starts_with("max-", CaseSensitivity::CaseInsensitive)) {
return MediaQuery::MediaFeature {
.type = MediaQuery::MediaFeature::Type::MaxValue,
.name = feature_name.substring_view(4),
.value = value.release_value(),
};
}
return MediaQuery::MediaFeature {
.type = MediaQuery::MediaFeature::Type::ExactValue,
.name = feature_name,
.value = value.release_value(),
};
return MediaFeature::plain(feature_name, value.release_value());
}
return invalid_feature();