Explorar el Código

LibWeb: Add HTMLTableSectionElement.rows and HTMLTableRowElement.cells

1% progression on ACID3. :^)
Andreas Kling hace 3 años
padre
commit
79ea30bc96

+ 16 - 1
Userland/Libraries/LibWeb/HTML/HTMLTableRowElement.cpp

@@ -1,9 +1,11 @@
 /*
- * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2020-2022, Andreas Kling <kling@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <LibWeb/DOM/HTMLCollection.h>
+#include <LibWeb/HTML/HTMLTableCellElement.h>
 #include <LibWeb/HTML/HTMLTableRowElement.h>
 
 namespace Web::HTML {
@@ -17,4 +19,17 @@ HTMLTableRowElement::~HTMLTableRowElement()
 {
 }
 
+// https://html.spec.whatwg.org/multipage/tables.html#dom-tr-cells
+NonnullRefPtr<DOM::HTMLCollection> HTMLTableRowElement::cells() const
+{
+    // The cells attribute must return an HTMLCollection rooted at this tr element,
+    // whose filter matches only td and th elements that are children of the tr element.
+    // FIXME: This should return the same HTMLCollection object every time,
+    //        but that would cause a reference cycle since HTMLCollection refs the root.
+    return DOM::HTMLCollection::create(const_cast<HTMLTableRowElement&>(*this), [this](Element const& element) {
+        return element.parent() == this
+            && is<HTMLTableCellElement>(element);
+    });
+}
+
 }

+ 2 - 0
Userland/Libraries/LibWeb/HTML/HTMLTableRowElement.h

@@ -16,6 +16,8 @@ public:
 
     HTMLTableRowElement(DOM::Document&, DOM::QualifiedName);
     virtual ~HTMLTableRowElement() override;
+
+    NonnullRefPtr<DOM::HTMLCollection> cells() const;
 };
 
 }

+ 3 - 0
Userland/Libraries/LibWeb/HTML/HTMLTableRowElement.idl

@@ -1,3 +1,4 @@
+#import <DOM/HTMLCollection.idl>
 #import <HTML/HTMLElement.idl>
 
 interface HTMLTableRowElement : HTMLElement {
@@ -9,4 +10,6 @@ interface HTMLTableRowElement : HTMLElement {
 
     [LegacyNullToEmptyString, Reflect=bgcolor] attribute DOMString bgColor;
 
+    [SameObject] readonly attribute HTMLCollection cells;
+
 };

+ 16 - 0
Userland/Libraries/LibWeb/HTML/HTMLTableSectionElement.cpp

@@ -1,9 +1,12 @@
 /*
  * Copyright (c) 2020, the SerenityOS developers.
+ * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <LibWeb/DOM/HTMLCollection.h>
+#include <LibWeb/HTML/HTMLTableRowElement.h>
 #include <LibWeb/HTML/HTMLTableSectionElement.h>
 
 namespace Web::HTML {
@@ -17,4 +20,17 @@ HTMLTableSectionElement::~HTMLTableSectionElement()
 {
 }
 
+// https://html.spec.whatwg.org/multipage/tables.html#dom-tbody-rows
+NonnullRefPtr<DOM::HTMLCollection> HTMLTableSectionElement::rows() const
+{
+    // The rows attribute must return an HTMLCollection rooted at this element,
+    // whose filter matches only tr elements that are children of this element.
+    // FIXME: This should return the same HTMLCollection object every time,
+    //        but that would cause a reference cycle since HTMLCollection refs the root.
+    return DOM::HTMLCollection::create(const_cast<HTMLTableSectionElement&>(*this), [this](Element const& element) {
+        return element.parent() == this
+            && is<HTMLTableRowElement>(element);
+    });
+}
+
 }

+ 3 - 0
Userland/Libraries/LibWeb/HTML/HTMLTableSectionElement.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2020, the SerenityOS developers.
+ * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
@@ -16,6 +17,8 @@ public:
 
     HTMLTableSectionElement(DOM::Document&, DOM::QualifiedName);
     virtual ~HTMLTableSectionElement() override;
+
+    NonnullRefPtr<DOM::HTMLCollection> rows() const;
 };
 
 }

+ 3 - 0
Userland/Libraries/LibWeb/HTML/HTMLTableSectionElement.idl

@@ -1,3 +1,4 @@
+#import <DOM/HTMLCollection.idl>
 #import <HTML/HTMLElement.idl>
 
 interface HTMLTableSectionElement : HTMLElement {
@@ -7,4 +8,6 @@ interface HTMLTableSectionElement : HTMLElement {
     [Reflect=charoff] attribute DOMString chOff;
     [Reflect=valign] attribute DOMString vAlign;
 
+    [SameObject] readonly attribute HTMLCollection rows;
+
 };