Procházet zdrojové kódy

LibWeb: Implement HTMLTableRowElement.deleteCell

Luke Wilde před 2 roky
rodič
revize
009f04fa46

+ 24 - 0
Userland/Libraries/LibWeb/HTML/HTMLTableRowElement.cpp

@@ -112,4 +112,28 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<HTMLTableCellElement>> HTMLTableRowElement:
     return JS::NonnullGCPtr(table_cell);
     return JS::NonnullGCPtr(table_cell);
 }
 }
 
 
+// https://html.spec.whatwg.org/multipage/tables.html#dom-tr-deletecell
+WebIDL::ExceptionOr<void> HTMLTableRowElement::delete_cell(i32 index)
+{
+    auto cells_collection = cells();
+    auto cells_collection_size = static_cast<i32>(cells_collection->length());
+
+    // 1. If index is less than −1 or greater than or equal to the number of elements in the cells collection, then throw an "IndexSizeError" DOMException.
+    if (index < -1 || index >= cells_collection_size)
+        return WebIDL::IndexSizeError::create(realm(), "Index is negative or greater than or equal to the number of cells");
+
+    // 2. If index is −1, then remove the last element in the cells collection from its parent, or do nothing if the cells collection is empty.
+    if (index == -1) {
+        if (cells_collection_size > 0)
+            cells_collection->item(cells_collection_size - 1)->remove();
+    }
+
+    // 3. Otherwise, remove the indexth element in the cells collection from its parent.
+    else {
+        cells_collection->item(index)->remove();
+    }
+
+    return {};
+}
+
 }
 }

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

@@ -20,6 +20,8 @@ public:
 
 
     int row_index() const;
     int row_index() const;
     int section_row_index() const;
     int section_row_index() const;
+    WebIDL::ExceptionOr<JS::NonnullGCPtr<HTMLTableCellElement>> insert_cell(i32 index);
+    WebIDL::ExceptionOr<void> delete_cell(i32 index);
 
 
 private:
 private:
     HTMLTableRowElement(DOM::Document&, DOM::QualifiedName);
     HTMLTableRowElement(DOM::Document&, DOM::QualifiedName);

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

@@ -18,4 +18,5 @@ interface HTMLTableRowElement : HTMLElement {
 
 
     [SameObject] readonly attribute HTMLCollection cells;
     [SameObject] readonly attribute HTMLCollection cells;
     HTMLTableCellElement insertCell(optional long index = -1);
     HTMLTableCellElement insertCell(optional long index = -1);
+    [CEReactions] undefined deleteCell(long index);
 };
 };