diff options
author | Corey Farwell <coreyf@rwell.org> | 2015-10-11 23:37:01 -0400 |
---|---|---|
committer | Corey Farwell <coreyf@rwell.org> | 2015-10-17 00:07:22 -0400 |
commit | 1f581692631cad6d2ba1673d7d482632d3f5905d (patch) | |
tree | 36a08f041dfde6350392ad92fde5bdde70e1046a /components/script/dom/htmltablesectionelement.rs | |
parent | e31ad011033ae076efecf61888daa1f6a5900589 (diff) | |
download | servo-1f581692631cad6d2ba1673d7d482632d3f5905d.tar.gz servo-1f581692631cad6d2ba1673d7d482632d3f5905d.zip |
Implement HTMLTableRowElement insertCell and deleteCell
Diffstat (limited to 'components/script/dom/htmltablesectionelement.rs')
-rw-r--r-- | components/script/dom/htmltablesectionelement.rs | 61 |
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()) } } |