aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/node.rs
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2014-03-15 06:14:14 -0400
committerbors-servo <release+servo@mozilla.com>2014-03-15 06:14:14 -0400
commit2d2fae5fc5053d5c0cea70768d6a43f006e436a8 (patch)
tree1cc50ba7698a9690fcbba089a98e0b0c61b44eca /src/components/script/dom/node.rs
parent508fe57f8dc4cedf9f4035b4e6311bf97d674adb (diff)
parent574fba310fc040ee3ca016093ed6b329decf1af7 (diff)
downloadservo-2d2fae5fc5053d5c0cea70768d6a43f006e436a8.tar.gz
servo-2d2fae5fc5053d5c0cea70768d6a43f006e436a8.zip
auto merge of #1894 : khodzha/servo/node_normalize, r=Ms2ger
To resolve issue #1823 (without DOM Range updates)
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