diff options
-rw-r--r-- | src/components/script/dom/htmltableelement.rs | 41 | ||||
-rw-r--r-- | src/components/script/dom/webidls/HTMLTableElement.webidl | 2 | ||||
-rw-r--r-- | src/test/content/test_caption.html | 23 |
3 files changed, 63 insertions, 3 deletions
diff --git a/src/components/script/dom/htmltableelement.rs b/src/components/script/dom/htmltableelement.rs index 5c67618a66f..f33b03fb778 100644 --- a/src/components/script/dom/htmltableelement.rs +++ b/src/components/script/dom/htmltableelement.rs @@ -3,14 +3,18 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::Bindings::HTMLTableElementBinding; -use dom::bindings::codegen::InheritTypes::HTMLTableElementDerived; +use dom::bindings::codegen::Bindings::HTMLTableElementBinding::HTMLTableElementMethods; +use dom::bindings::codegen::InheritTypes::{HTMLTableElementDerived, NodeCast, HTMLTableCaptionElementCast}; +use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::document::Document; +use dom::element::HTMLTableCaptionElementTypeId; use dom::element::HTMLTableElementTypeId; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; -use dom::node::{Node, ElementNodeTypeId}; +use dom::htmltablecaptionelement::HTMLTableCaptionElement; +use dom::node::{Node, NodeHelpers, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -42,3 +46,36 @@ impl Reflectable for HTMLTableElement { self.htmlelement.reflector() } } + +impl<'a> HTMLTableElementMethods for JSRef<'a, HTMLTableElement> { + + // http://www.whatwg.org/html/#dom-table-caption + fn GetCaption(&self) -> Option<Temporary<HTMLTableCaptionElement>> { + let node: &JSRef<Node> = NodeCast::from_ref(self); + node.children().find(|child| { + child.type_id() == ElementNodeTypeId(HTMLTableCaptionElementTypeId) + }).map(|node| { + Temporary::from_rooted(HTMLTableCaptionElementCast::to_ref(&node).unwrap()) + }) + } + + // http://www.whatwg.org/html/#dom-table-caption + fn SetCaption(&self, new_caption: Option<JSRef<HTMLTableCaptionElement>>) { + let node: &JSRef<Node> = NodeCast::from_ref(self); + let old_caption = self.GetCaption(); + + match old_caption { + Some(htmlelem) => { + let htmlelem_jsref = &*htmlelem.root(); + let old_caption_node: &JSRef<Node> = NodeCast::from_ref(htmlelem_jsref); + assert!(node.RemoveChild(old_caption_node).is_ok()); + } + None => () + } + + new_caption.map(|caption| { + let new_caption_node: &JSRef<Node> = NodeCast::from_ref(&caption); + assert!(node.AppendChild(new_caption_node).is_ok()); + }); + } +} diff --git a/src/components/script/dom/webidls/HTMLTableElement.webidl b/src/components/script/dom/webidls/HTMLTableElement.webidl index ec0568fd969..d71a38c12a5 100644 --- a/src/components/script/dom/webidls/HTMLTableElement.webidl +++ b/src/components/script/dom/webidls/HTMLTableElement.webidl @@ -5,7 +5,7 @@ // http://www.whatwg.org/html/#htmltableelement interface HTMLTableElement : HTMLElement { - // attribute HTMLTableCaptionElement? caption; + attribute HTMLTableCaptionElement? caption; //HTMLElement createCaption(); //void deleteCaption(); // attribute HTMLTableSectionElement? tHead; diff --git a/src/test/content/test_caption.html b/src/test/content/test_caption.html new file mode 100644 index 00000000000..be4288bcc13 --- /dev/null +++ b/src/test/content/test_caption.html @@ -0,0 +1,23 @@ +<html> +<head> +<script src="harness.js"></script> +</head> +<table id="t"> +<caption id="tcaption">old caption</caption> +</table> +<script> + var t = document.getElementById("t"); + var tcaption = document.getElementById("tcaption"); + is(t.caption, tcaption); + is(t.caption.innerHTML, "old caption"); + + var newCaption = document.createElement("caption"); + newCaption.innerHTML = "new caption"; + + t.caption = newCaption; + is(newCaption.parentNode, t); + is(t.caption, newCaption); + + finish(); +</script> +</html> |