mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 16:37:35 +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);
|
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Checked);
|
||||||
if (pseudo_name.equals_ignoring_ascii_case("indeterminate"sv))
|
if (pseudo_name.equals_ignoring_ascii_case("indeterminate"sv))
|
||||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Indeterminate);
|
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))
|
if (pseudo_name.equals_ignoring_ascii_case("disabled"sv))
|
||||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Disabled);
|
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Disabled);
|
||||||
if (pseudo_name.equals_ignoring_ascii_case("empty"sv))
|
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::Checked:
|
||||||
case Selector::SimpleSelector::PseudoClass::Type::Active:
|
case Selector::SimpleSelector::PseudoClass::Type::Active:
|
||||||
case Selector::SimpleSelector::PseudoClass::Type::Scope:
|
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.
|
// 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(':'));
|
||||||
TRY(s.try_append(pseudo_class_name(pseudo_class.type)));
|
TRY(s.try_append(pseudo_class_name(pseudo_class.type)));
|
||||||
|
|
|
@ -112,6 +112,7 @@ public:
|
||||||
Active,
|
Active,
|
||||||
Lang,
|
Lang,
|
||||||
Scope,
|
Scope,
|
||||||
|
Defined,
|
||||||
};
|
};
|
||||||
Type type;
|
Type type;
|
||||||
|
|
||||||
|
@ -295,6 +296,8 @@ constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Ty
|
||||||
return "lang"sv;
|
return "lang"sv;
|
||||||
case Selector::SimpleSelector::PseudoClass::Type::Scope:
|
case Selector::SimpleSelector::PseudoClass::Type::Scope:
|
||||||
return "scope"sv;
|
return "scope"sv;
|
||||||
|
case Selector::SimpleSelector::PseudoClass::Type::Defined:
|
||||||
|
return "defined"sv;
|
||||||
}
|
}
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
|
@ -268,6 +268,8 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla
|
||||||
return matches_checked_pseudo_class(element);
|
return matches_checked_pseudo_class(element);
|
||||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Indeterminate:
|
case CSS::Selector::SimpleSelector::PseudoClass::Type::Indeterminate:
|
||||||
return matches_indeterminate_pseudo_class(element);
|
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::Is:
|
||||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Where:
|
case CSS::Selector::SimpleSelector::PseudoClass::Type::Where:
|
||||||
for (auto& selector : pseudo_class.argument_selector_list) {
|
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:
|
case CSS::Selector::SimpleSelector::PseudoClass::Type::Scope:
|
||||||
pseudo_class_description = "Scope";
|
pseudo_class_description = "Scope";
|
||||||
break;
|
break;
|
||||||
|
case CSS::Selector::SimpleSelector::PseudoClass::Type::Defined:
|
||||||
|
pseudo_class_description = "Defined";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.appendff(" pseudo_class={}", pseudo_class_description);
|
builder.appendff(" pseudo_class={}", pseudo_class_description);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue