aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/node.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/node.rs')
-rw-r--r--src/components/script/dom/node.rs24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index 000a19be847..9d01ad9d8db 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -1552,8 +1552,28 @@ impl Node {
}
// http://dom.spec.whatwg.org/#dom-node-normalize
- pub fn Normalize(&mut self) {
- // FIXME (#1823) implement.
+ pub fn Normalize(&mut self, abstract_self: &mut JS<Node>) {
+ 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