Implement child reparenting and node removal during parsing.

This commit is contained in:
nithin murali 2015-04-21 14:34:40 -04:00 committed by Josh Matthews
parent 69a2c45b34
commit c5e101b6e5
3 changed files with 35 additions and 5 deletions

View file

@ -166,8 +166,11 @@ impl<'a> TreeSink for servohtmlparser::Sink {
} }
} }
fn remove_from_parent(&mut self, _target: JS<Node>) { fn remove_from_parent(&mut self, target: JS<Node>) {
error!("remove_from_parent not implemented!"); let node = target.root();
if let Some(ref parent) = node.r().GetParentNode().root() {
parent.r().RemoveChild(node.r()).unwrap();
}
} }
fn mark_script_already_started(&mut self, node: JS<Node>) { fn mark_script_already_started(&mut self, node: JS<Node>) {
@ -182,8 +185,15 @@ impl<'a> TreeSink for servohtmlparser::Sink {
script.map(|script| script.prepare()); script.map(|script| script.prepare());
} }
fn reparent_children(&mut self, _node: JS<Node>, _new_parent: JS<Node>) { fn reparent_children(&mut self, node: JS<Node>, new_parent: JS<Node>) {
panic!("unimplemented") let new_parent = new_parent.root();
let new_parent = new_parent.r();
let old_parent = node.root();
let old_parent = old_parent.r();
while let Some(ref child) = old_parent.GetFirstChild().root() {
new_parent.AppendChild(child.r()).unwrap();
}
} }
} }

View file

@ -71,6 +71,12 @@
"url": "/_mozilla/mozilla/characterdata.html" "url": "/_mozilla/mozilla/characterdata.html"
} }
], ],
"mozilla/child_reparenting.html": [
{
"path": "mozilla/child_reparenting.html",
"url": "/_mozilla/mozilla/child_reparenting.html"
}
],
"mozilla/collections.html": [ "mozilla/collections.html": [
{ {
"path": "mozilla/collections.html", "path": "mozilla/collections.html",

View file

@ -0,0 +1,14 @@
<html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body><font><p></font>
<script>
test(function() {
assert_equals(document.body.firstChild.tagName, "FONT");
assert_equals(document.body.firstChild.nextSibling.tagName, "P");
});
</script>
</body>
</html>