Explorar o código

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.
Tim Ledbetter hai 1 ano
pai
achega
faf64bfb41

+ 0 - 15
Userland/Libraries/LibWeb/DOM/Document.cpp

@@ -1401,21 +1401,6 @@ JS::NonnullGCPtr<HTMLCollection> Document::get_elements_by_name(FlyString const&
     });
 }
 
-JS::NonnullGCPtr<HTMLCollection> Document::get_elements_by_class_name(StringView class_names)
-{
-    Vector<FlyString> list_of_class_names;
-    for (auto& name : class_names.split_view(' ')) {
-        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;
-    });
-}
-
 // https://html.spec.whatwg.org/multipage/obsolete.html#dom-document-applets
 JS::NonnullGCPtr<HTMLCollection> Document::applets()
 {

+ 0 - 1
Userland/Libraries/LibWeb/DOM/Document.h

@@ -249,7 +249,6 @@ public:
     void schedule_layout_update();
 
     JS::NonnullGCPtr<HTMLCollection> get_elements_by_name(FlyString const&);
-    JS::NonnullGCPtr<HTMLCollection> get_elements_by_class_name(StringView);
 
     JS::NonnullGCPtr<HTMLCollection> applets();
     JS::NonnullGCPtr<HTMLCollection> anchors();

+ 0 - 15
Userland/Libraries/LibWeb/DOM/Element.cpp

@@ -814,21 +814,6 @@ bool Element::is_document_element() const
     return parent() == &document();
 }
 
-JS::NonnullGCPtr<HTMLCollection> Element::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;
-    });
-}
-
 // https://dom.spec.whatwg.org/#element-shadow-host
 bool Element::is_shadow_host() const
 {

+ 0 - 2
Userland/Libraries/LibWeb/DOM/Element.h

@@ -212,8 +212,6 @@ public:
     bool is_target() const;
     bool is_document_element() const;
 
-    JS::NonnullGCPtr<HTMLCollection> get_elements_by_class_name(StringView);
-
     bool is_shadow_host() const;
     JS::GCPtr<ShadowRoot> shadow_root() { return m_shadow_root; }
     JS::GCPtr<ShadowRoot const> shadow_root() const { return m_shadow_root; }

+ 16 - 0
Userland/Libraries/LibWeb/DOM/ParentNode.cpp

@@ -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;
+    });
+}
+
 }

+ 2 - 0
Userland/Libraries/LibWeb/DOM/ParentNode.h

@@ -36,6 +36,8 @@ public:
     WebIDL::ExceptionOr<void> append(Vector<Variant<JS::Handle<Node>, String>> const& nodes);
     WebIDL::ExceptionOr<void> replace_children(Vector<Variant<JS::Handle<Node>, String>> const& nodes);
 
+    JS::NonnullGCPtr<HTMLCollection> get_elements_by_class_name(StringView);
+
 protected:
     ParentNode(JS::Realm& realm, Document& document, NodeType type)
         : Node(realm, document, type)