aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/node.rs
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-02-25 16:04:25 +0100
committerMs2ger <ms2ger@gmail.com>2014-02-26 14:50:57 +0100
commit33792db657e0053c415c26b761cbdc2cf5ae2060 (patch)
treef75a1d7788db37de241ad1ce78f8a5237a5bd5de /src/components/script/dom/node.rs
parent7ff35c0abedf6a339b9a0117aad85e06dc86555f (diff)
downloadservo-33792db657e0053c415c26b761cbdc2cf5ae2060.tar.gz
servo-33792db657e0053c415c26b761cbdc2cf5ae2060.zip
Move ID management on binding to and unbinding from tree into Element.
Diffstat (limited to 'src/components/script/dom/node.rs')
-rw-r--r--src/components/script/dom/node.rs22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index a0357c92ab4..419b02c844a 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -14,7 +14,7 @@ use dom::bindings::utils;
use dom::characterdata::CharacterData;
use dom::document::Document;
use dom::documenttype::DocumentType;
-use dom::element::{Element, ElementTypeId, HTMLAnchorElementTypeId};
+use dom::element::{Element, ElementTypeId, HTMLAnchorElementTypeId, IElement};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::nodelist::{NodeList};
use dom::text::Text;
@@ -396,11 +396,13 @@ impl NodeHelpers for JS<Node> {
// http://dom.spec.whatwg.org/#node-is-inserted
fn node_inserted(&self) {
assert!(self.parent_node().is_some());
- let mut document = self.get().owner_doc();
+ let document = self.get().owner_doc();
- // Register elements having "id" attribute to the owner doc.
- if self.is_element() {
- document.get_mut().register_nodes_with_id(&ElementCast::to(self));
+ for node in self.traverse_preorder() {
+ if node.is_element() {
+ let element: JS<Element> = ElementCast::to(&node);
+ element.bind_to_tree_impl();
+ }
}
document.get().content_changed();
@@ -409,11 +411,13 @@ impl NodeHelpers for JS<Node> {
// http://dom.spec.whatwg.org/#node-is-removed
fn node_removed(&self) {
assert!(self.parent_node().is_none());
- let mut document = self.get().owner_doc();
+ let document = self.get().owner_doc();
- // Unregister elements having "id".
- if self.is_element() {
- document.get_mut().unregister_nodes_with_id(&ElementCast::to(self));
+ for node in self.traverse_preorder() {
+ if node.is_element() {
+ let element: JS<Element> = ElementCast::to(&node);
+ element.unbind_from_tree_impl();
+ }
}
document.get().content_changed();