mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:27:35 +00:00
LibWeb: Use generated PseudoClass data
Everything should behave the same as before.
This commit is contained in:
parent
f76c614a84
commit
b314a115ca
5 changed files with 179 additions and 466 deletions
|
@ -72,15 +72,15 @@ u32 Selector::specificity() const
|
|||
case SimpleSelector::Type::PseudoClass: {
|
||||
auto& pseudo_class = simple_selector.pseudo_class();
|
||||
switch (pseudo_class.type) {
|
||||
case SimpleSelector::PseudoClass::Type::Is:
|
||||
case SimpleSelector::PseudoClass::Type::Not: {
|
||||
case PseudoClass::Is:
|
||||
case PseudoClass::Not: {
|
||||
// The specificity of an :is(), :not(), or :has() pseudo-class is replaced by the
|
||||
// specificity of the most specific complex selector in its selector list argument.
|
||||
count_specificity_of_most_complex_selector(pseudo_class.argument_selector_list);
|
||||
break;
|
||||
}
|
||||
case SimpleSelector::PseudoClass::Type::NthChild:
|
||||
case SimpleSelector::PseudoClass::Type::NthLastChild: {
|
||||
case PseudoClass::NthChild:
|
||||
case PseudoClass::NthLastChild: {
|
||||
// Analogously, the specificity of an :nth-child() or :nth-last-child() selector
|
||||
// is the specificity of the pseudo class itself (counting as one pseudo-class selector)
|
||||
// plus the specificity of the most specific complex selector in its selector list argument (if any).
|
||||
|
@ -88,7 +88,7 @@ u32 Selector::specificity() const
|
|||
count_specificity_of_most_complex_selector(pseudo_class.argument_selector_list);
|
||||
break;
|
||||
}
|
||||
case SimpleSelector::PseudoClass::Type::Where:
|
||||
case PseudoClass::Where:
|
||||
// The specificity of a :where() pseudo-class is replaced by zero.
|
||||
break;
|
||||
default:
|
||||
|
@ -229,66 +229,66 @@ ErrorOr<String> Selector::SimpleSelector::serialize() const
|
|||
auto& pseudo_class = this->pseudo_class();
|
||||
|
||||
switch (pseudo_class.type) {
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Link:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Visited:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Hover:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Focus:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::FocusVisible:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::FocusWithin:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::FirstChild:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::LastChild:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::OnlyChild:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Empty:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Root:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Host:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::FirstOfType:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::LastOfType:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::OnlyOfType:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Disabled:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Enabled:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Checked:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Indeterminate:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Active:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Scope:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Defined:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Playing:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Paused:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Seeking:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Muted:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::VolumeLocked:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Buffering:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Stalled:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Target:
|
||||
case PseudoClass::Link:
|
||||
case PseudoClass::Visited:
|
||||
case PseudoClass::Hover:
|
||||
case PseudoClass::Focus:
|
||||
case PseudoClass::FocusVisible:
|
||||
case PseudoClass::FocusWithin:
|
||||
case PseudoClass::FirstChild:
|
||||
case PseudoClass::LastChild:
|
||||
case PseudoClass::OnlyChild:
|
||||
case PseudoClass::Empty:
|
||||
case PseudoClass::Root:
|
||||
case PseudoClass::Host:
|
||||
case PseudoClass::FirstOfType:
|
||||
case PseudoClass::LastOfType:
|
||||
case PseudoClass::OnlyOfType:
|
||||
case PseudoClass::Disabled:
|
||||
case PseudoClass::Enabled:
|
||||
case PseudoClass::Checked:
|
||||
case PseudoClass::Indeterminate:
|
||||
case PseudoClass::Active:
|
||||
case PseudoClass::Scope:
|
||||
case PseudoClass::Defined:
|
||||
case PseudoClass::Playing:
|
||||
case PseudoClass::Paused:
|
||||
case PseudoClass::Seeking:
|
||||
case PseudoClass::Muted:
|
||||
case PseudoClass::VolumeLocked:
|
||||
case PseudoClass::Buffering:
|
||||
case PseudoClass::Stalled:
|
||||
case PseudoClass::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)));
|
||||
break;
|
||||
case Selector::SimpleSelector::PseudoClass::Type::NthChild:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::NthLastChild:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::NthOfType:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::NthLastOfType:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Not:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Is:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Where:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Lang:
|
||||
case PseudoClass::NthChild:
|
||||
case PseudoClass::NthLastChild:
|
||||
case PseudoClass::NthOfType:
|
||||
case PseudoClass::NthLastOfType:
|
||||
case PseudoClass::Not:
|
||||
case PseudoClass::Is:
|
||||
case PseudoClass::Where:
|
||||
case PseudoClass::Lang:
|
||||
// Otherwise, append ":" (U+003A), followed by the name of the pseudo-class, followed by "(" (U+0028),
|
||||
// followed by the value of the pseudo-class argument(s) determined as per below, followed by ")" (U+0029), to s.
|
||||
TRY(s.try_append(':'));
|
||||
TRY(s.try_append(pseudo_class_name(pseudo_class.type)));
|
||||
TRY(s.try_append('('));
|
||||
if (pseudo_class.type == Selector::SimpleSelector::PseudoClass::Type::NthChild
|
||||
|| pseudo_class.type == Selector::SimpleSelector::PseudoClass::Type::NthLastChild
|
||||
|| pseudo_class.type == Selector::SimpleSelector::PseudoClass::Type::NthOfType
|
||||
|| pseudo_class.type == Selector::SimpleSelector::PseudoClass::Type::NthLastOfType) {
|
||||
if (pseudo_class.type == PseudoClass::NthChild
|
||||
|| pseudo_class.type == PseudoClass::NthLastChild
|
||||
|| pseudo_class.type == PseudoClass::NthOfType
|
||||
|| pseudo_class.type == PseudoClass::NthLastOfType) {
|
||||
// The result of serializing the value using the rules to serialize an <an+b> value.
|
||||
TRY(s.try_append(TRY(pseudo_class.nth_child_pattern.serialize())));
|
||||
} else if (pseudo_class.type == Selector::SimpleSelector::PseudoClass::Type::Not
|
||||
|| pseudo_class.type == Selector::SimpleSelector::PseudoClass::Type::Is
|
||||
|| pseudo_class.type == Selector::SimpleSelector::PseudoClass::Type::Where) {
|
||||
} else if (pseudo_class.type == PseudoClass::Not
|
||||
|| pseudo_class.type == PseudoClass::Is
|
||||
|| pseudo_class.type == PseudoClass::Where) {
|
||||
// The result of serializing the value using the rules for serializing a group of selectors.
|
||||
// NOTE: `:is()` and `:where()` aren't in the spec for this yet, but it should be!
|
||||
TRY(s.try_append(TRY(serialize_a_group_of_selectors(pseudo_class.argument_selector_list))));
|
||||
} else if (pseudo_class.type == Selector::SimpleSelector::PseudoClass::Type::Lang) {
|
||||
} else if (pseudo_class.type == PseudoClass::Lang) {
|
||||
// The serialization of a comma-separated list of each argument’s serialization as a string, preserving relative order.
|
||||
s.join(", "sv, pseudo_class.languages);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue