1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 07:28:11 +00:00

LibWeb: Use Selectors instead of a String for :not() selectors

Rather than parsing the selector every time we want to check it, we
now parse it once at the beginning.

A bonus effect of this is that we now support a selector list in
:not(), instead of just a single selector, though only when using
the new parser.
This commit is contained in:
Sam Atkins 2021-07-12 17:58:47 +01:00 committed by Andreas Kling
parent 776b1f4548
commit ffc81cbfad
8 changed files with 40 additions and 19 deletions

View file

@ -393,7 +393,10 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector)
builder.appendff(" pseudo_class={}", pseudo_class_description);
if (pseudo_class.type == CSS::Selector::SimpleSelector::PseudoClass::Type::Not) {
builder.appendff("({})", pseudo_class.not_selector);
builder.append("(");
for (auto& selector : pseudo_class.not_selector)
dump_selector(builder, selector);
builder.append(")");
} else if ((pseudo_class.type == CSS::Selector::SimpleSelector::PseudoClass::Type::NthChild)
|| (pseudo_class.type == CSS::Selector::SimpleSelector::PseudoClass::Type::NthLastChild)) {
builder.appendff("(step={}, offset={})", pseudo_class.nth_child_pattern.step_size, pseudo_class.nth_child_pattern.offset);