mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-02 01:08:48 +00:00
LibWeb/HTML: Iterate over select options in tree order
This also saves us from iterating twice over the children, and instead do it in a single pass.
This commit is contained in:
parent
4f80c7a5f3
commit
802529bafc
Notes:
github-actions[bot]
2025-01-27 00:11:13 +00:00
Author: https://github.com/shannonbooth
Commit: 802529bafc
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3368
Reviewed-by: https://github.com/awesomekling
Reviewed-by: https://github.com/tcl3 ✅
3 changed files with 29 additions and 11 deletions
|
@ -203,18 +203,19 @@ Vector<GC::Root<HTMLOptionElement>> HTMLSelectElement::list_of_options() const
|
|||
// and all the option element children of all the optgroup element children of the select element, in tree order.
|
||||
Vector<GC::Root<HTMLOptionElement>> list;
|
||||
|
||||
for_each_child_of_type<HTMLOptionElement>([&](HTMLOptionElement& option_element) {
|
||||
list.append(GC::make_root(option_element));
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
for (auto* node = first_child(); node; node = node->next_sibling()) {
|
||||
if (auto* maybe_option = as_if<HTMLOptionElement>(*node)) {
|
||||
list.append(GC::make_root(const_cast<HTMLOptionElement&>(*maybe_option)));
|
||||
continue;
|
||||
}
|
||||
|
||||
for_each_child_of_type<HTMLOptGroupElement>([&](HTMLOptGroupElement const& optgroup_element) {
|
||||
optgroup_element.for_each_child_of_type<HTMLOptionElement>([&](HTMLOptionElement& option_element) {
|
||||
list.append(GC::make_root(option_element));
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
if (auto* maybe_opt_group = as_if<HTMLOptGroupElement>(node)) {
|
||||
maybe_opt_group->for_each_child_of_type<HTMLOptionElement>([&](HTMLOptionElement& option_element) {
|
||||
list.append(GC::make_root(option_element));
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue