diff options
author | Adam Hodgen <ant1441@gmail.com> | 2021-05-02 18:17:08 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-05-09 18:38:34 +0200 |
commit | 37685b0181d2bcc6ce461b30d409b0bf1fb11c3f (patch) | |
tree | 18f0c0cdac33ab256ad2af84b701f45361c6fefc /Userland/Libraries | |
parent | d2e3e98b6b64a3af23e886c51dd0c317fe70e701 (diff) | |
download | serenity-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.cpp | 32 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/HTMLTableElement.h | 3 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/HTMLTableElement.idl | 3 |
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); |