1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 07:38:10 +00:00

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
This commit is contained in:
Adam Hodgen 2021-05-02 18:17:08 +01:00 committed by Andreas Kling
parent d2e3e98b6b
commit 37685b0181
3 changed files with 38 additions and 0 deletions

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Adam Hodgen <ant1441@gmail.com>
* *
* SPDX-License-Identifier: BSD-2-Clause * 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() NonnullRefPtr<DOM::HTMLCollection> HTMLTableElement::rows()
{ {
HTMLTableElement* table_node = this; HTMLTableElement* table_node = this;

View file

@ -36,6 +36,9 @@ public:
NonnullRefPtr<HTMLTableSectionElement> create_t_foot(); NonnullRefPtr<HTMLTableSectionElement> create_t_foot();
void delete_t_foot(); void delete_t_foot();
NonnullRefPtr<DOM::HTMLCollection> t_bodies();
NonnullRefPtr<HTMLTableSectionElement> create_t_body();
NonnullRefPtr<DOM::HTMLCollection> rows(); NonnullRefPtr<DOM::HTMLCollection> rows();
DOM::ExceptionOr<NonnullRefPtr<HTMLTableRowElement>> insert_row(long index); DOM::ExceptionOr<NonnullRefPtr<HTMLTableRowElement>> insert_row(long index);
DOM::ExceptionOr<void> delete_row(long index); DOM::ExceptionOr<void> delete_row(long index);

View file

@ -12,6 +12,9 @@ interface HTMLTableElement : HTMLElement {
HTMLTableSectionElement createTFoot(); HTMLTableSectionElement createTFoot();
undefined deleteTFoot(); undefined deleteTFoot();
readonly attribute HTMLCollection tBodies;
HTMLTableSectionElement createTBody();
readonly attribute HTMLCollection rows; readonly attribute HTMLCollection rows;
HTMLTableRowElement insertRow(optional long index = -1); HTMLTableRowElement insertRow(optional long index = -1);
undefined deleteRow(long index); undefined deleteRow(long index);