diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 82288e3e57..7eaac1428b 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -587,6 +587,8 @@ Parser::ParseErrorOr Parser::parse_pseudo_simple_selec return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Seeking); if (pseudo_name.equals_ignoring_ascii_case("stalled"sv)) return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Stalled); + if (pseudo_name.equals_ignoring_ascii_case("target"sv)) + return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Target); 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)) diff --git a/Userland/Libraries/LibWeb/CSS/Selector.cpp b/Userland/Libraries/LibWeb/CSS/Selector.cpp index 2c471bc44c..55038445e2 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.cpp +++ b/Userland/Libraries/LibWeb/CSS/Selector.cpp @@ -258,6 +258,7 @@ ErrorOr Selector::SimpleSelector::serialize() const case Selector::SimpleSelector::PseudoClass::Type::VolumeLocked: case Selector::SimpleSelector::PseudoClass::Type::Buffering: case Selector::SimpleSelector::PseudoClass::Type::Stalled: + case Selector::SimpleSelector::PseudoClass::Type::Target: // If the pseudo-class does not accept arguments append ":" (U+003A), followed by the name of the pseudo-class, to s. TRY(s.try_append(':')); TRY(s.try_append(pseudo_class_name(pseudo_class.type))); diff --git a/Userland/Libraries/LibWeb/CSS/Selector.h b/Userland/Libraries/LibWeb/CSS/Selector.h index f760d01e24..df30219a04 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.h +++ b/Userland/Libraries/LibWeb/CSS/Selector.h @@ -123,6 +123,7 @@ public: VolumeLocked, Buffering, Stalled, + Target, }; Type type; @@ -344,6 +345,8 @@ constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Ty return "buffering"sv; case Selector::SimpleSelector::PseudoClass::Type::Stalled: return "stalled"sv; + case Selector::SimpleSelector::PseudoClass::Type::Target: + return "target"sv; } VERIFY_NOT_REACHED(); } diff --git a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp index f270d02252..7a61461a9a 100644 --- a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp +++ b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp @@ -425,6 +425,8 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla auto const& media_element = static_cast(element); return media_element.stalled(); } + case CSS::Selector::SimpleSelector::PseudoClass::Type::Target: + return element.is_target(); } return false; diff --git a/Userland/Libraries/LibWeb/Dump.cpp b/Userland/Libraries/LibWeb/Dump.cpp index 2d6ae7cdb5..67c3d7d605 100644 --- a/Userland/Libraries/LibWeb/Dump.cpp +++ b/Userland/Libraries/LibWeb/Dump.cpp @@ -590,6 +590,9 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector) case CSS::Selector::SimpleSelector::PseudoClass::Type::Stalled: pseudo_class_description = "Stalled"; break; + case CSS::Selector::SimpleSelector::PseudoClass::Type::Target: + pseudo_class_description = "Target"; + break; } builder.appendff(" pseudo_class={}", pseudo_class_description);