Explorar o código

LibWeb: Implement Range.commonAncestorContainer

Andreas Kling %!s(int64=3) %!d(string=hai) anos
pai
achega
c25d653c31

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

@@ -68,4 +68,20 @@ NonnullRefPtr<Range> Range::normalized() const
     return inverted();
 }
 
+// https://dom.spec.whatwg.org/#dom-range-commonancestorcontainer
+NonnullRefPtr<Node> Range::common_ancestor_container() const
+{
+    // 1. Let container be start node.
+    auto container = m_start_container;
+
+    // 2. While container is not an inclusive ancestor of end node, let container be container’s parent.
+    while (!container->is_inclusive_ancestor_of(m_end_container)) {
+        VERIFY(container->parent());
+        container = *container->parent();
+    }
+
+    // 3. Return container.
+    return container;
+}
+
 }

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

@@ -55,6 +55,8 @@ public:
     NonnullRefPtr<Range> normalized() const;
     NonnullRefPtr<Range> clone_range() const;
 
+    NonnullRefPtr<Node> common_ancestor_container() const;
+
 private:
     explicit Range(Document&);
 

+ 2 - 0
Userland/Libraries/LibWeb/DOM/Range.idl

@@ -6,6 +6,8 @@ interface Range {
 
     readonly attribute boolean collapsed;
 
+    readonly attribute Node commonAncestorContainer;
+
     readonly attribute Node startContainer;
     readonly attribute unsigned long startOffset;
     readonly attribute Node endContainer;