Ver código fonte

LibWeb: Add ObservableArray::for_each()

Aliaksandr Kalenik 1 ano atrás
pai
commit
f19c92d78e

+ 3 - 7
Userland/Libraries/LibWeb/DOM/Document.cpp

@@ -4628,13 +4628,9 @@ void Document::for_each_css_style_sheet(Function<void(CSS::CSSStyleSheet&)>&& ca
         callback(*style_sheet);
 
     if (m_adopted_style_sheets) {
-        for (auto& entry : m_adopted_style_sheets->indexed_properties()) {
-            auto value_and_attributes = m_adopted_style_sheets->indexed_properties().storage()->get(entry.index());
-            if (value_and_attributes.has_value()) {
-                auto& style_sheet = verify_cast<CSS::CSSStyleSheet>(value_and_attributes->value.as_object());
-                callback(style_sheet);
-            }
-        }
+        m_adopted_style_sheets->for_each<CSS::CSSStyleSheet>([&](auto& style_sheet) {
+            callback(style_sheet);
+        });
     }
 }
 

+ 12 - 0
Userland/Libraries/LibWeb/WebIDL/ObservableArray.h

@@ -28,6 +28,18 @@ public:
     JS::ThrowCompletionOr<void> append(JS::Value value);
     void clear();
 
+    template<typename T, typename Callback>
+    void for_each(Callback callback)
+    {
+        for (auto& entry : indexed_properties()) {
+            auto value_and_attributes = indexed_properties().storage()->get(entry.index());
+            if (value_and_attributes.has_value()) {
+                auto& style_sheet = verify_cast<T>(value_and_attributes->value.as_object());
+                callback(style_sheet);
+            }
+        }
+    }
+
     explicit ObservableArray(Object& prototype);
 
     virtual void visit_edges(JS::Cell::Visitor&) override;