aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom')
-rw-r--r--src/components/script/dom/bindings/codegen/Bindings.conf1
-rw-r--r--src/components/script/dom/node.rs24
2 files changed, 23 insertions, 2 deletions
diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf
index 369d08bfdf0..68c2f8975f2 100644
--- a/src/components/script/dom/bindings/codegen/Bindings.conf
+++ b/src/components/script/dom/bindings/codegen/Bindings.conf
@@ -87,6 +87,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 9999503a758..f1bf5d98d17 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -1422,8 +1422,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