mirror of
https://github.com/RGBCube/serenity
synced 2025-07-23 12:37:40 +00:00
LibWeb: Parse @media
rules into CSSMediaRule objects
This is not yet actually useful, since we only have a stub for parsing the query part, but now I have a nice way to test that things are working. :^)
This commit is contained in:
parent
b4833bf2a3
commit
c7cd489689
1 changed files with 16 additions and 0 deletions
|
@ -11,6 +11,7 @@
|
||||||
#include <AK/Debug.h>
|
#include <AK/Debug.h>
|
||||||
#include <AK/NonnullRefPtrVector.h>
|
#include <AK/NonnullRefPtrVector.h>
|
||||||
#include <AK/SourceLocation.h>
|
#include <AK/SourceLocation.h>
|
||||||
|
#include <LibWeb/CSS/CSSMediaRule.h>
|
||||||
#include <LibWeb/CSS/CSSStyleDeclaration.h>
|
#include <LibWeb/CSS/CSSStyleDeclaration.h>
|
||||||
#include <LibWeb/CSS/CSSStyleRule.h>
|
#include <LibWeb/CSS/CSSStyleRule.h>
|
||||||
#include <LibWeb/CSS/CSSStyleSheet.h>
|
#include <LibWeb/CSS/CSSStyleSheet.h>
|
||||||
|
@ -1242,6 +1243,21 @@ RefPtr<CSSRule> Parser::convert_to_rule(NonnullRefPtr<StyleRule> rule)
|
||||||
if (rule->m_type == StyleRule::Type::At) {
|
if (rule->m_type == StyleRule::Type::At) {
|
||||||
if (has_ignored_vendor_prefix(rule->m_name)) {
|
if (has_ignored_vendor_prefix(rule->m_name)) {
|
||||||
return {};
|
return {};
|
||||||
|
} else if (rule->m_name.equals_ignoring_case("media"sv)) {
|
||||||
|
|
||||||
|
auto media_query_tokens = TokenStream { rule->prelude() };
|
||||||
|
auto media_query_list = parse_a_media_query_list(media_query_tokens);
|
||||||
|
|
||||||
|
auto child_tokens = TokenStream { rule->block().values() };
|
||||||
|
auto parser_rules = consume_a_list_of_rules(child_tokens, false);
|
||||||
|
NonnullRefPtrVector<CSSRule> child_rules;
|
||||||
|
for (auto& raw_rule : parser_rules) {
|
||||||
|
if (auto child_rule = convert_to_rule(raw_rule))
|
||||||
|
child_rules.append(*child_rule);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CSSMediaRule::create(MediaList::create(move(media_query_list)), move(child_rules));
|
||||||
|
|
||||||
} else if (rule->m_name.equals_ignoring_case("import"sv) && !rule->prelude().is_empty()) {
|
} else if (rule->m_name.equals_ignoring_case("import"sv) && !rule->prelude().is_empty()) {
|
||||||
|
|
||||||
Optional<AK::URL> url;
|
Optional<AK::URL> url;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue