mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 12:08:14 +00:00
LibWeb: Implement the :defined
pseudo class
This selects an element if it is either a built-in element, or an upgraded custom element.
This commit is contained in:
parent
6ebdb9f824
commit
a744ae79ff
5 changed files with 11 additions and 0 deletions
|
@ -494,6 +494,8 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
|||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Checked);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("indeterminate"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Indeterminate);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("defined"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Defined);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("disabled"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Disabled);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("empty"sv))
|
||||
|
|
|
@ -228,6 +228,7 @@ ErrorOr<String> Selector::SimpleSelector::serialize() const
|
|||
case Selector::SimpleSelector::PseudoClass::Type::Checked:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Active:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Scope:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Defined:
|
||||
// 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)));
|
||||
|
|
|
@ -112,6 +112,7 @@ public:
|
|||
Active,
|
||||
Lang,
|
||||
Scope,
|
||||
Defined,
|
||||
};
|
||||
Type type;
|
||||
|
||||
|
@ -295,6 +296,8 @@ constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Ty
|
|||
return "lang"sv;
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Scope:
|
||||
return "scope"sv;
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Defined:
|
||||
return "defined"sv;
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
|
|
@ -268,6 +268,8 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla
|
|||
return matches_checked_pseudo_class(element);
|
||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Indeterminate:
|
||||
return matches_indeterminate_pseudo_class(element);
|
||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Defined:
|
||||
return element.is_defined();
|
||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Is:
|
||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Where:
|
||||
for (auto& selector : pseudo_class.argument_selector_list) {
|
||||
|
|
|
@ -459,6 +459,9 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector)
|
|||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Scope:
|
||||
pseudo_class_description = "Scope";
|
||||
break;
|
||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Defined:
|
||||
pseudo_class_description = "Defined";
|
||||
break;
|
||||
}
|
||||
|
||||
builder.appendff(" pseudo_class={}", pseudo_class_description);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue