aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmltablesectionelement.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-10-16 23:54:52 -0600
committerbors-servo <metajack+bors@gmail.com>2015-10-16 23:54:52 -0600
commitef8119511c440e50220417289a8adf5c7c1a93c3 (patch)
tree7518db9548965e46e952febbf9f786ef2ff90872 /components/script/dom/htmltablesectionelement.rs
parent45ed1e7bc186883767095d35732ea66a3a79c42d (diff)
parent1f581692631cad6d2ba1673d7d482632d3f5905d (diff)
downloadservo-ef8119511c440e50220417289a8adf5c7c1a93c3.tar.gz
servo-ef8119511c440e50220417289a8adf5c7c1a93c3.zip
Auto merge of #7977 - frewsxcv:htmltablerowelement-insertcell-deletecell, r=eefriedman
Implement HTMLTableRowElement insertCell and deleteCell <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7977) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/htmltablesectionelement.rs')
-rw-r--r--components/script/dom/htmltablesectionelement.rs61
1 files changed, 10 insertions, 51 deletions
diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs
index a384afcaae7..dfc2ceb5900 100644
--- a/components/script/dom/htmltablesectionelement.rs
+++ b/components/script/dom/htmltablesectionelement.rs
@@ -4,12 +4,9 @@
use cssparser::RGBA;
use dom::attr::Attr;
-use dom::bindings::codegen::Bindings::HTMLCollectionBinding::HTMLCollectionMethods;
use dom::bindings::codegen::Bindings::HTMLTableSectionElementBinding::{self, HTMLTableSectionElementMethods};
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
-use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast};
-use dom::bindings::codegen::InheritTypes::{HTMLTableRowElementDerived, NodeCast};
-use dom::bindings::error::Error;
+use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLTableRowElementDerived, NodeCast};
use dom::bindings::error::{ErrorResult, Fallible};
use dom::bindings::js::{Root, RootedReference};
use dom::document::Document;
@@ -20,7 +17,6 @@ use dom::htmltablerowelement::HTMLTableRowElement;
use dom::node::{Node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use std::cell::Cell;
-use std::iter;
use util::str::{self, DOMString};
#[dom_struct]
@@ -67,57 +63,20 @@ impl HTMLTableSectionElementMethods for HTMLTableSectionElement {
// https://html.spec.whatwg.org/multipage/#dom-tbody-insertrow
fn InsertRow(&self, index: i32) -> Fallible<Root<HTMLElement>> {
- if index < -1 {
- return Err(Error::IndexSize);
- }
-
let node = NodeCast::from_ref(self);
- let tr = HTMLTableRowElement::new("tr".to_owned(), None, node.owner_doc().r());
-
- let after_node = if index == -1 {
- None
- } else {
- match self.Rows()
- .elements_iter()
- .map(NodeCast::from_root)
- .map(Some)
- .chain(iter::once(None))
- .nth(index as usize) {
- None => return Err(Error::IndexSize),
- Some(node) => node,
- }
- };
-
- {
- let tr_node = NodeCast::from_ref(tr.r());
- try!(node.InsertBefore(tr_node, after_node.r()));
- }
-
- Ok(HTMLElementCast::from_root(tr))
+ node.insert_cell_or_row(
+ index,
+ || self.Rows(),
+ || HTMLTableRowElement::new("tr".to_owned(), None, node.owner_doc().r()))
}
// https://html.spec.whatwg.org/multipage/#dom-tbody-deleterow
fn DeleteRow(&self, index: i32) -> ErrorResult {
- let element = match index {
- index if index < -1 => return Err(Error::IndexSize),
- -1 => {
- let last_child = NodeCast::from_ref(self).GetLastChild();
- match last_child.and_then(|node| node.inclusively_preceding_siblings()
- .filter_map(ElementCast::to_root)
- .filter(|n| n.is_htmltablerowelement())
- .next()) {
- Some(element) => element,
- None => return Ok(()),
- }
- },
- index => match self.Rows().Item(index as u32) {
- Some(element) => element,
- None => return Err(Error::IndexSize),
- },
- };
-
- NodeCast::from_ref(element.r()).remove_self();
- Ok(())
+ let node = NodeCast::from_ref(self);
+ node.delete_cell_or_row(
+ index,
+ || self.Rows(),
+ |n| n.is_htmltablerowelement())
}
}