mirror of
https://github.com/servo/servo.git
synced 2025-06-19 22:59:03 +01:00
implemented Node.normalize()
This commit is contained in:
parent
af616dba58
commit
574fba310f
3 changed files with 58 additions and 2 deletions
|
@ -87,6 +87,7 @@ DOMInterfaces = {
|
||||||
'isEqualNode',
|
'isEqualNode',
|
||||||
'nodeName',
|
'nodeName',
|
||||||
'nodeValue',
|
'nodeValue',
|
||||||
|
'normalize',
|
||||||
'removeChild',
|
'removeChild',
|
||||||
'replaceChild',
|
'replaceChild',
|
||||||
'textContent',
|
'textContent',
|
||||||
|
|
|
@ -1422,8 +1422,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
|
||||||
|
|
35
src/test/content/test_node_normalize.html
Normal file
35
src/test/content/test_node_normalize.html
Normal 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>
|
Loading…
Add table
Add a link
Reference in a new issue