aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno.d@partner.samsung.com>2014-03-17 00:55:57 -0400
committerBruno de Oliveira Abinader <bruno.d@partner.samsung.com>2014-03-26 09:49:07 -0400
commit8a457a2caa6df536f888ebd5cd12fae129e87d5b (patch)
tree0395b3e3a2bc04616f0f505cff813993b7fc15d4
parentf34a64049a8b6dede424d35345db63bc60b5e423 (diff)
downloadservo-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.conf1
-rw-r--r--src/components/script/dom/document.rs17
-rw-r--r--src/components/script/dom/node.rs6
-rw-r--r--src/components/script/dom/webidls/Document.webidl3
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_);
};