diff options
author | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-03-17 00:55:57 -0400 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-03-26 09:49:07 -0400 |
commit | 8a457a2caa6df536f888ebd5cd12fae129e87d5b (patch) | |
tree | 0395b3e3a2bc04616f0f505cff813993b7fc15d4 | |
parent | f34a64049a8b6dede424d35345db63bc60b5e423 (diff) | |
download | servo-8a457a2caa6df536f888ebd5cd12fae129e87d5b.tar.gz servo-8a457a2caa6df536f888ebd5cd12fae129e87d5b.zip |
Implemented Document.importNode
Spec:
http://dom.spec.whatwg.org/#dom-document-importnode
-rw-r--r-- | src/components/script/dom/bindings/codegen/Bindings.conf | 1 | ||||
-rw-r--r-- | src/components/script/dom/document.rs | 17 | ||||
-rw-r--r-- | src/components/script/dom/node.rs | 6 | ||||
-rw-r--r-- | src/components/script/dom/webidls/Document.webidl | 3 |
4 files changed, 24 insertions, 3 deletions
diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index afcf4319ba3..3024190100b 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -40,6 +40,7 @@ DOMInterfaces = { 'getElementsByTagName', 'getElementsByTagNameNS', 'images', + 'importNode', 'links', 'plugins', 'scripts', diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 622263458d8..8ece312e907 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -28,6 +28,7 @@ use dom::htmlhtmlelement::HTMLHtmlElement; use dom::htmltitleelement::HTMLTitleElement; use dom::mouseevent::MouseEvent; use dom::node::{Node, ElementNodeTypeId, DocumentNodeTypeId, NodeHelpers, INode}; +use dom::node::{CloneChildren, DoNotCloneChildren}; use dom::text::Text; use dom::processinginstruction::ProcessingInstruction; use dom::uievent::UIEvent; @@ -294,6 +295,22 @@ impl Document { Ok(ProcessingInstruction::new(target, data, abstract_self)) } + // http://dom.spec.whatwg.org/#dom-document-importnode + pub fn ImportNode(&self, abstract_self: &JS<Document>, node: &JS<Node>, deep: bool) -> Fallible<JS<Node>> { + // Step 1. + if node.is_document() { + return Err(NotSupported); + } + + // Step 2. + let clone_children = match deep { + true => CloneChildren, + false => DoNotCloneChildren + }; + + Ok(Node::clone(node, Some(abstract_self), clone_children)) + } + // http://dom.spec.whatwg.org/#dom-document-createevent pub fn CreateEvent(&self, interface: DOMString) -> Fallible<JS<Event>> { match interface.as_slice() { diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index 8bece8fdff9..1905b77e516 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -728,7 +728,7 @@ fn gather_abstract_nodes(cur: &JS<Node>, refs: &mut ~[JS<Node>], postorder: bool } /// Specifies whether children must be recursively cloned or not. -enum CloneChildrenFlag { +pub enum CloneChildrenFlag { CloneChildren, DoNotCloneChildren } @@ -1287,8 +1287,8 @@ impl Node { } // http://dom.spec.whatwg.org/#concept-node-clone - fn clone(node: &JS<Node>, maybe_doc: Option<&JS<Document>>, clone_children: CloneChildrenFlag) - -> JS<Node> { + pub fn clone(node: &JS<Node>, maybe_doc: Option<&JS<Document>>, + clone_children: CloneChildrenFlag) -> JS<Node> { fn clone_recursively(node: &JS<Node>, copy: &mut JS<Node>, doc: &JS<Document>) { for ref child in node.get().children() { let mut cloned = Node::clone(child, Some(doc), DoNotCloneChildren); diff --git a/src/components/script/dom/webidls/Document.webidl b/src/components/script/dom/webidls/Document.webidl index 41d20631bde..b12c5525e92 100644 --- a/src/components/script/dom/webidls/Document.webidl +++ b/src/components/script/dom/webidls/Document.webidl @@ -36,6 +36,9 @@ interface Document : Node { [Creator, Throws] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data); + [Throws] + Node importNode(Node node, optional boolean deep = false); + [Creator, Throws] Event createEvent(DOMString interface_); }; |