mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-04 01:05:58 +03: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: https://github.com/SerenityOS/serenity/commit/cad326f3230
@ -11,6 +11,10 @@
|
||||
border-width: 1;
|
||||
border-color: #00ff00;
|
||||
}
|
||||
div > .boo > .bee {
|
||||
background-color: #000000;
|
||||
color: #ff00ff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@ -28,5 +32,18 @@
|
||||
<div>hello</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="boo">
|
||||
<div class="bee">Spooky!</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="boo">
|
||||
<div>
|
||||
<div class="bee">
|
||||
Not spooky!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -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…
Reference in New Issue
Block a user