mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-16 15:21:56 +00:00
LibHTML: Implement immediate-child selectors (#foo > #bar)
This commit is contained in:
parent
156b35742a
commit
cad326f323
Notes:
sideshowbarker
2024-07-19 11:46:43 +09:00
Author: https://github.com/awesomekling
Commit: cad326f323
2 changed files with 25 additions and 2 deletions
|
@ -34,9 +34,10 @@ static bool matches(const Selector& selector, int component_index, const Element
|
|||
auto& component = selector.components()[component_index];
|
||||
if (!matches(component, element))
|
||||
return false;
|
||||
if (component.relation == Selector::Component::Relation::None)
|
||||
switch (component.relation) {
|
||||
case Selector::Component::Relation::None:
|
||||
return true;
|
||||
if (component.relation == Selector::Component::Relation::Descendant) {
|
||||
case Selector::Component::Relation::Descendant:
|
||||
ASSERT(component_index != 0);
|
||||
for (auto* ancestor = element.parent(); ancestor; ancestor = ancestor->parent()) {
|
||||
if (!ancestor->is_element())
|
||||
|
@ -45,6 +46,11 @@ static bool matches(const Selector& selector, int component_index, const Element
|
|||
return true;
|
||||
}
|
||||
return false;
|
||||
case Selector::Component::Relation::ImmediateChild:
|
||||
ASSERT(component_index != 0);
|
||||
if (!element.parent() || !element.parent()->is_element())
|
||||
return false;
|
||||
return matches(selector, component_index - 1, static_cast<const Element&>(*element.parent()));
|
||||
}
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue