1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 16:17:34 +00:00

LibWeb: Parse CSS :host selector

Let's at least parse it, even if we don't implement matching for it yet.
This commit is contained in:
Andreas Kling 2023-07-05 11:43:57 +02:00
parent 6acce60393
commit 088cc4ea73
5 changed files with 12 additions and 0 deletions

View file

@ -534,6 +534,8 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::OnlyOfType); return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::OnlyOfType);
if (pseudo_name.equals_ignoring_ascii_case("root"sv)) if (pseudo_name.equals_ignoring_ascii_case("root"sv))
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Root); return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Root);
if (pseudo_name.equals_ignoring_ascii_case("host"sv))
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Host);
if (pseudo_name.equals_ignoring_ascii_case("visited"sv)) if (pseudo_name.equals_ignoring_ascii_case("visited"sv))
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Visited); return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Visited);
if (pseudo_name.equals_ignoring_ascii_case("scope"sv)) if (pseudo_name.equals_ignoring_ascii_case("scope"sv))

View file

@ -220,6 +220,7 @@ ErrorOr<String> Selector::SimpleSelector::serialize() const
case Selector::SimpleSelector::PseudoClass::Type::OnlyChild: case Selector::SimpleSelector::PseudoClass::Type::OnlyChild:
case Selector::SimpleSelector::PseudoClass::Type::Empty: case Selector::SimpleSelector::PseudoClass::Type::Empty:
case Selector::SimpleSelector::PseudoClass::Type::Root: case Selector::SimpleSelector::PseudoClass::Type::Root:
case Selector::SimpleSelector::PseudoClass::Type::Host:
case Selector::SimpleSelector::PseudoClass::Type::FirstOfType: case Selector::SimpleSelector::PseudoClass::Type::FirstOfType:
case Selector::SimpleSelector::PseudoClass::Type::LastOfType: case Selector::SimpleSelector::PseudoClass::Type::LastOfType:
case Selector::SimpleSelector::PseudoClass::Type::OnlyOfType: case Selector::SimpleSelector::PseudoClass::Type::OnlyOfType:

View file

@ -98,6 +98,7 @@ public:
NthLastChild, NthLastChild,
Empty, Empty,
Root, Root,
Host,
FirstOfType, FirstOfType,
LastOfType, LastOfType,
OnlyOfType, OnlyOfType,
@ -265,6 +266,8 @@ constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Ty
return "empty"sv; return "empty"sv;
case Selector::SimpleSelector::PseudoClass::Type::Root: case Selector::SimpleSelector::PseudoClass::Type::Root:
return "root"sv; return "root"sv;
case Selector::SimpleSelector::PseudoClass::Type::Host:
return "host"sv;
case Selector::SimpleSelector::PseudoClass::Type::FirstOfType: case Selector::SimpleSelector::PseudoClass::Type::FirstOfType:
return "first-of-type"sv; return "first-of-type"sv;
case Selector::SimpleSelector::PseudoClass::Type::LastOfType: case Selector::SimpleSelector::PseudoClass::Type::LastOfType:

View file

@ -245,6 +245,9 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla
} }
case CSS::Selector::SimpleSelector::PseudoClass::Type::Root: case CSS::Selector::SimpleSelector::PseudoClass::Type::Root:
return is<HTML::HTMLHtmlElement>(element); return is<HTML::HTMLHtmlElement>(element);
case CSS::Selector::SimpleSelector::PseudoClass::Type::Host:
// FIXME: Implement :host selector.
return false;
case CSS::Selector::SimpleSelector::PseudoClass::Type::Scope: case CSS::Selector::SimpleSelector::PseudoClass::Type::Scope:
return scope ? &element == scope : is<HTML::HTMLHtmlElement>(element); return scope ? &element == scope : is<HTML::HTMLHtmlElement>(element);
case CSS::Selector::SimpleSelector::PseudoClass::Type::FirstOfType: case CSS::Selector::SimpleSelector::PseudoClass::Type::FirstOfType:

View file

@ -467,6 +467,9 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector)
case CSS::Selector::SimpleSelector::PseudoClass::Type::Root: case CSS::Selector::SimpleSelector::PseudoClass::Type::Root:
pseudo_class_description = "Root"; pseudo_class_description = "Root";
break; break;
case CSS::Selector::SimpleSelector::PseudoClass::Type::Host:
pseudo_class_description = "Host";
break;
case CSS::Selector::SimpleSelector::PseudoClass::Type::FirstOfType: case CSS::Selector::SimpleSelector::PseudoClass::Type::FirstOfType:
pseudo_class_description = "FirstOfType"; pseudo_class_description = "FirstOfType";
break; break;