summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorAdam Hodgen <ant1441@gmail.com>2021-05-02 18:17:08 +0100
committerAndreas Kling <kling@serenityos.org>2021-05-09 18:38:34 +0200
commit37685b0181d2bcc6ce461b30d409b0bf1fb11c3f (patch)
tree18f0c0cdac33ab256ad2af84b701f45361c6fefc /Userland/Libraries
parentd2e3e98b6b64a3af23e886c51dd0c317fe70e701 (diff)
downloadserenity-37685b0181d2bcc6ce461b30d409b0bf1fb11c3f.zip
LibWeb: Implement HTMLTableElement tbody attributes
* tBodies - returns a HTMLCollection of all tbody elements * createTBody - If necessary, creates a new tbody element and add it to the table after the last tbody element
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp32
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLTableElement.h3
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLTableElement.idl3
3 files changed, 38 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp
index 5df28dbc7b..ab63c2bd43 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Adam Hodgen <ant1441@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -210,6 +211,37 @@ void HTMLTableElement::delete_t_foot()
}
}
+NonnullRefPtr<DOM::HTMLCollection> HTMLTableElement::t_bodies()
+{
+ return DOM::HTMLCollection::create(*this, [](DOM::Element const& element) {
+ return element.tag_name() == TagNames::tbody;
+ });
+}
+
+NonnullRefPtr<HTMLTableSectionElement> HTMLTableElement::create_t_body()
+{
+ auto tbody = DOM::create_element(document(), TagNames::tbody, Namespace::HTML);
+
+ // We insert the new tbody after the last <tbody> element
+ DOM::Node* child_to_append_after = nullptr;
+ for (auto* child = last_child(); child; child = child->previous_sibling()) {
+ if (!is<HTMLElement>(*child))
+ continue;
+ if (is<HTMLTableSectionElement>(*child)) {
+ auto table_section_element = &downcast<HTMLTableSectionElement>(*child);
+ if (table_section_element->tag_name() == TagNames::tbody) {
+ // We have found an element which is a <tbody> we'll insert after this
+ child_to_append_after = child->next_sibling();
+ break;
+ }
+ }
+ }
+
+ pre_insert(tbody, child_to_append_after);
+
+ return tbody;
+}
+
NonnullRefPtr<DOM::HTMLCollection> HTMLTableElement::rows()
{
HTMLTableElement* table_node = this;
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.h b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.h
index 6827f30d81..6565017d2d 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.h
@@ -36,6 +36,9 @@ public:
NonnullRefPtr<HTMLTableSectionElement> create_t_foot();
void delete_t_foot();
+ NonnullRefPtr<DOM::HTMLCollection> t_bodies();
+ NonnullRefPtr<HTMLTableSectionElement> create_t_body();
+
NonnullRefPtr<DOM::HTMLCollection> rows();
DOM::ExceptionOr<NonnullRefPtr<HTMLTableRowElement>> insert_row(long index);
DOM::ExceptionOr<void> delete_row(long index);
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.idl
index eb5084eed8..b0813555f4 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.idl
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.idl
@@ -12,6 +12,9 @@ interface HTMLTableElement : HTMLElement {
HTMLTableSectionElement createTFoot();
undefined deleteTFoot();
+ readonly attribute HTMLCollection tBodies;
+ HTMLTableSectionElement createTBody();
+
readonly attribute HTMLCollection rows;
HTMLTableRowElement insertRow(optional long index = -1);
undefined deleteRow(long index);