diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2015-12-14 00:13:56 +0100 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2015-12-14 00:13:56 +0100 |
commit | 748dfdf5753eb6d35fd10e5ee78f36f35a98a5df (patch) | |
tree | d9107ca5b9858c56c4fd0cf36d747c71abd61d6c /components/script/dom/node.rs | |
parent | 8bab1cd7a4634618d18985d273c6997984919ecc (diff) | |
download | servo-748dfdf5753eb6d35fd10e5ee78f36f35a98a5df.tar.gz servo-748dfdf5753eb6d35fd10e5ee78f36f35a98a5df.zip |
Fix Node::replace_with
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r-- | components/script/dom/node.rs | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 30aa8e78eea..3ef0c9ca5a4 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -666,19 +666,25 @@ impl Node { // https://dom.spec.whatwg.org/#dom-childnode-replacewith pub fn replace_with(&self, nodes: Vec<NodeOrString>) -> ErrorResult { - match self.parent_node.get() { - None => { - // Step 1. - Ok(()) - }, - Some(ref parent_node) => { - // Step 2. - let doc = self.owner_doc(); - let node = try!(doc.node_from_nodes_and_strings(nodes)); - // Step 3. - parent_node.ReplaceChild(node.r(), self).map(|_| ()) - }, + // Step 1. + let parent = if let Some(parent) = self.GetParentNode() { + parent + } else { + // Step 2. + return Ok(()); + }; + // Step 3. + let viable_next_sibling = first_node_not_in(self.following_siblings(), &nodes); + // Step 4. + let node = try!(self.owner_doc().node_from_nodes_and_strings(nodes)); + if self.parent_node == Some(&*parent) { + // Step 5. + try!(parent.ReplaceChild(&node, self)); + } else { + // Step 6. + try!(Node::pre_insert(&node, &parent, viable_next_sibling.r())); } + Ok(()) } // https://dom.spec.whatwg.org/#dom-parentnode-prepend |