LibWeb: Move get_elements_by_name implementation to ParentNode

Previously, we had two implementations of the same function in
`Document` and `Element`, which had inadvertantly diverged.
This commit is contained in:
Tim Ledbetter 2024-07-22 20:38:36 +01:00 committed by Andreas Kling
commit faf64bfb41
Notes: github-actions[bot] 2024-07-23 06:59:24 +00:00
6 changed files with 18 additions and 33 deletions

View file

@ -14,6 +14,7 @@
#include <LibWeb/DOM/ParentNode.h>
#include <LibWeb/DOM/StaticNodeList.h>
#include <LibWeb/Dump.h>
#include <LibWeb/Infra/CharacterTypes.h>
#include <LibWeb/Infra/Strings.h>
#include <LibWeb/Namespace.h>
@ -225,4 +226,19 @@ WebIDL::ExceptionOr<void> ParentNode::replace_children(Vector<Variant<JS::Handle
return {};
}
JS::NonnullGCPtr<HTMLCollection> ParentNode::get_elements_by_class_name(StringView class_names)
{
Vector<FlyString> list_of_class_names;
for (auto& name : class_names.split_view_if(Infra::is_ascii_whitespace)) {
list_of_class_names.append(FlyString::from_utf8(name).release_value_but_fixme_should_propagate_errors());
}
return HTMLCollection::create(*this, HTMLCollection::Scope::Descendants, [list_of_class_names = move(list_of_class_names), quirks_mode = document().in_quirks_mode()](Element const& element) {
for (auto& name : list_of_class_names) {
if (!element.has_class(name, quirks_mode ? CaseSensitivity::CaseInsensitive : CaseSensitivity::CaseSensitive))
return false;
}
return true;
});
}
}