diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 7403c2256e1..2380a0eaeed 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -90,6 +90,7 @@ DOMInterfaces = { 'isEqualNode', 'nodeName', 'nodeValue', + 'normalize', 'removeChild', 'replaceChild', 'textContent', 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) { + let mut prev_text = None; + for mut child in self.children() { + if child.is_text() { + let characterdata: JS = 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 = 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 diff --git a/src/test/content/test_node_normalize.html b/src/test/content/test_node_normalize.html new file mode 100644 index 00000000000..b2e9a367128 --- /dev/null +++ b/src/test/content/test_node_normalize.html @@ -0,0 +1,35 @@ + + + + + + + + +