Browse Source

LibWeb: Extract the ParentNode IDL mixin

Sam Atkins 2 years ago
parent
commit
d4c40e3aad

+ 2 - 16
Userland/Libraries/LibWeb/DOM/Document.idl

@@ -11,6 +11,7 @@
 #import <DOM/NodeFilter.idl>
 #import <DOM/NodeIterator.idl>
 #import <DOM/NodeList.idl>
+#import <DOM/ParentNode.idl>
 #import <DOM/Range.idl>
 #import <DOM/Text.idl>
 #import <DOM/TreeWalker.idl>
@@ -18,8 +19,8 @@
 #import <HTML/HTMLHeadElement.idl>
 #import <HTML/HTMLScriptElement.idl>
 
+// https://dom.spec.whatwg.org/#document
 interface Document : Node {
-
     constructor();
 
     boolean hasFocus();
@@ -92,26 +93,11 @@ interface Document : Node {
 
     attribute DOMString title;
 
-    // FIXME: These should all come from a ParentNode mixin
-    readonly attribute Element? firstElementChild;
-    readonly attribute Element? lastElementChild;
-    readonly attribute unsigned long childElementCount;
-
-    [CEReactions, Unscopable] undefined prepend((Node or DOMString)... nodes);
-    [CEReactions, Unscopable] undefined append((Node or DOMString)... nodes);
-    [CEReactions, Unscopable] undefined replaceChildren((Node or DOMString)... nodes);
-
-    Element? querySelector(DOMString selectors);
-    [NewObject] NodeList querySelectorAll(DOMString selectors);
-
-    [SameObject] readonly attribute HTMLCollection children;
-
     readonly boolean hidden;
     readonly DOMString visibilityState;
 
     [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
     [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
-
 };
 
 Document includes GlobalEventHandlers;

+ 2 - 16
Userland/Libraries/LibWeb/DOM/DocumentFragment.idl

@@ -2,25 +2,11 @@
 #import <DOM/HTMLCollection.idl>
 #import <DOM/Node.idl>
 #import <DOM/NodeList.idl>
+#import <DOM/ParentNode.idl>
 
+// https://dom.spec.whatwg.org/#documentfragment
 interface DocumentFragment : Node {
-
     constructor();
 
     Element? getElementById(DOMString id);
-
-    // FIXME: These should all come from a ParentNode mixin
-    readonly attribute Element? firstElementChild;
-    readonly attribute Element? lastElementChild;
-    readonly attribute unsigned long childElementCount;
-
-    [CEReactions, Unscopable] undefined prepend((Node or DOMString)... nodes);
-    [CEReactions, Unscopable] undefined append((Node or DOMString)... nodes);
-    [CEReactions, Unscopable] undefined replaceChildren((Node or DOMString)... nodes);
-
-    Element? querySelector(DOMString selectors);
-    [NewObject] NodeList querySelectorAll(DOMString selectors);
-
-    [SameObject] readonly attribute HTMLCollection children;
-
 };

+ 1 - 14
Userland/Libraries/LibWeb/DOM/Element.idl

@@ -4,6 +4,7 @@
 #import <DOM/NamedNodeMap.idl>
 #import <DOM/Node.idl>
 #import <DOM/NodeList.idl>
+#import <DOM/ParentNode.idl>
 #import <Geometry/DOMRect.idl>
 #import <Geometry/DOMRectList.idl>
 
@@ -46,20 +47,6 @@ interface Element : Node {
 
     [ImplementedAs=style_for_bindings] readonly attribute CSSStyleDeclaration style;
 
-    // FIXME: These should all come from a ParentNode mixin (up to and including children)
-    readonly attribute Element? firstElementChild;
-    readonly attribute Element? lastElementChild;
-    readonly attribute unsigned long childElementCount;
-
-    [CEReactions, Unscopable] undefined prepend((Node or DOMString)... nodes);
-    [CEReactions, Unscopable] undefined append((Node or DOMString)... nodes);
-    [CEReactions, Unscopable] undefined replaceChildren((Node or DOMString)... nodes);
-
-    Element? querySelector(DOMString selectors);
-    [NewObject] NodeList querySelectorAll(DOMString selectors);
-
-    [SameObject] readonly attribute HTMLCollection children;
-
     DOMRect getBoundingClientRect();
     DOMRectList getClientRects();
 

+ 22 - 0
Userland/Libraries/LibWeb/DOM/ParentNode.idl

@@ -0,0 +1,22 @@
+#import <DOM/Element.idl>
+#import <DOM/HTMLCollection.idl>
+#import <DOM/Node.idl>
+
+// https://dom.spec.whatwg.org/#parentnode
+interface mixin ParentNode {
+    [SameObject] readonly attribute HTMLCollection children;
+    readonly attribute Element? firstElementChild;
+    readonly attribute Element? lastElementChild;
+    readonly attribute unsigned long childElementCount;
+
+    [CEReactions, Unscopable] undefined prepend((Node or DOMString)... nodes);
+    [CEReactions, Unscopable] undefined append((Node or DOMString)... nodes);
+    [CEReactions, Unscopable] undefined replaceChildren((Node or DOMString)... nodes);
+
+    Element? querySelector(DOMString selectors);
+    [NewObject] NodeList querySelectorAll(DOMString selectors);
+};
+
+Document includes ParentNode;
+DocumentFragment includes ParentNode;
+Element includes ParentNode;