auto merge of #1894 : khodzha/servo/node_normalize, r=Ms2ger

To resolve issue #1823 (without DOM Range updates)
This commit is contained in:
bors-servo 2014-03-15 06:14:14 -04:00
commit 2d2fae5fc5
3 changed files with 58 additions and 2 deletions

View file

@ -90,6 +90,7 @@ DOMInterfaces = {
'isEqualNode', 'isEqualNode',
'nodeName', 'nodeName',
'nodeValue', 'nodeValue',
'normalize',
'removeChild', 'removeChild',
'replaceChild', 'replaceChild',
'textContent', 'textContent',

View file

@ -1552,8 +1552,28 @@ impl Node {
} }
// http://dom.spec.whatwg.org/#dom-node-normalize // http://dom.spec.whatwg.org/#dom-node-normalize
pub fn Normalize(&mut self) { pub fn Normalize(&mut self, abstract_self: &mut JS<Node>) {
// FIXME (#1823) implement. let mut prev_text = None;
for mut child in self.children() {
if child.is_text() {
let characterdata: JS<CharacterData> = CharacterDataCast::to(&child);
if characterdata.get().Length() == 0 {
abstract_self.remove_child(&mut child);
} else {
match prev_text {
Some(ref text_node) => {
let mut prev_characterdata: JS<CharacterData> = CharacterDataCast::to(text_node);
prev_characterdata.get_mut().AppendData(characterdata.get().Data());
abstract_self.remove_child(&mut child);
},
None => prev_text = Some(child)
}
}
} else {
prev_text = None;
}
}
} }
// http://dom.spec.whatwg.org/#dom-node-clonenode // http://dom.spec.whatwg.org/#dom-node-clonenode

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<script src="harness.js"></script>
</head>
<body>
<script>
// test1: Node.normalize
var parent1 = document.createElement("div");
var child1 = document.createTextNode("aaa");
var child2 = document.createTextNode("");
var child3 = document.createTextNode("bb");
var parent2 = document.createElement("div");
parent1.appendChild(child1);
parent1.appendChild(child2);
parent1.appendChild(child3);
parent2.appendChild(document.createTextNode(""));
parent1.normalize();
parent2.normalize();
is(Array.prototype.map.call(parent1.childNodes, function(el) {return el.length}).indexOf(0), -1, "Node.normalize removes empty text nodes");
is(parent1.childNodes.length, 1, "Node.normalize merges text nodes in one");
is(parent1.childNodes[0].length, 5, "test 1-2, Node.normalize merges text nodes values");
is(parent2.childNodes.length, 0, "Node.normalize removes empty text nodes even if there is only one text node");
is(child2.textContent, "", "Node.normalize doesn't change removed children original content")
is(child3.textContent, "bb", "Node.normalize doesn't change removed children original content")
finish();
</script>
</body>
</html>