ソースを参照

LibWeb: Implement "document-tree child navigables"

Andreas Kling 2 年 前
コミット
234a73e43e

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

@@ -2594,6 +2594,31 @@ Vector<JS::Handle<HTML::Navigable>> Document::inclusive_ancestor_navigables()
     return navigables;
 }
 
+// https://html.spec.whatwg.org/multipage/document-sequences.html#document-tree-child-navigables
+Vector<JS::Handle<HTML::Navigable>> Document::document_tree_child_navigables()
+{
+    // 1. If document's node navigable is null, then return the empty list.
+    if (!navigable())
+        return {};
+
+    // 2. Let navigables be new list.
+    Vector<JS::Handle<HTML::Navigable>> navigables;
+
+    // 3. Let navigableContainers be a list of all descendants of document that are navigable containers, in tree order.
+    // 4. For each navigableContainer of navigableContainers:
+    for_each_in_subtree_of_type<HTML::NavigableContainer>([&](HTML::NavigableContainer& navigable_container) {
+        // 1. If navigableContainer's content navigable is null, then continue.
+        if (!navigable_container.content_navigable())
+            return IterationDecision::Continue;
+        // 2. Append navigableContainer's content navigable to navigables.
+        navigables.append(*navigable_container.content_navigable());
+        return IterationDecision::Continue;
+    });
+
+    // 5. Return navigables.
+    return navigables;
+}
+
 // https://html.spec.whatwg.org/multipage/browsers.html#list-of-the-descendant-browsing-contexts
 Vector<JS::Handle<HTML::BrowsingContext>> Document::list_of_descendant_browsing_contexts() const
 {

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

@@ -465,6 +465,7 @@ public:
     Vector<JS::Handle<HTML::Navigable>> inclusive_descendant_navigables();
     Vector<JS::Handle<HTML::Navigable>> ancestor_navigables();
     Vector<JS::Handle<HTML::Navigable>> inclusive_ancestor_navigables();
+    Vector<JS::Handle<HTML::Navigable>> document_tree_child_navigables();
 
     void destroy();