mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
Enable only remove operation for Document::update_idmap().
This commit is contained in:
parent
8dc5fe0fe5
commit
fd0dadbddf
3 changed files with 26 additions and 11 deletions
|
@ -406,24 +406,34 @@ impl Document {
|
||||||
|
|
||||||
pub fn update_idmap(&mut self,
|
pub fn update_idmap(&mut self,
|
||||||
abstract_self: AbstractNode,
|
abstract_self: AbstractNode,
|
||||||
new_id: DOMString,
|
new_id: Option<DOMString>,
|
||||||
old_id: Option<DOMString>) {
|
old_id: Option<DOMString>) {
|
||||||
// remove old ids if the old ones are not same as the new one.
|
// remove old ids:
|
||||||
|
// * if the old ones are not same as the new one,
|
||||||
|
// * OR if the new one is none.
|
||||||
match old_id {
|
match old_id {
|
||||||
Some(ref old_id) if new_id != *old_id => {
|
Some(ref old_id) if new_id.is_none() ||
|
||||||
|
(*new_id.get_ref() != *old_id) => {
|
||||||
self.idmap.remove(old_id);
|
self.idmap.remove(old_id);
|
||||||
}
|
}
|
||||||
_ => ()
|
_ => ()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: support the case if multiple elements which haves same id are in the same document.
|
match new_id {
|
||||||
self.idmap.mangle(new_id, abstract_self, |_, new_node: AbstractNode| -> AbstractNode {
|
Some(new_id) => {
|
||||||
|
// TODO: support the case if multiple elements
|
||||||
|
// which haves same id are in the same document.
|
||||||
|
self.idmap.mangle(new_id, abstract_self,
|
||||||
|
|_, new_node: AbstractNode| -> AbstractNode {
|
||||||
new_node
|
new_node
|
||||||
},
|
},
|
||||||
|_, old_node: &mut AbstractNode, new_node: AbstractNode| {
|
|_, old_node: &mut AbstractNode, new_node: AbstractNode| {
|
||||||
*old_node = new_node;
|
*old_node = new_node;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
None => ()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
|
|
@ -221,7 +221,7 @@ impl Element {
|
||||||
"id" => {
|
"id" => {
|
||||||
let doc = self.node.owner_doc();
|
let doc = self.node.owner_doc();
|
||||||
let doc = doc.mut_document();
|
let doc = doc.mut_document();
|
||||||
doc.update_idmap(abstract_self, value.clone(), old_value);
|
doc.update_idmap(abstract_self, Some(value.clone()), old_value);
|
||||||
}
|
}
|
||||||
_ => ()
|
_ => ()
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,11 @@
|
||||||
|
|
||||||
let old = document.getElementById(TEST_ID);
|
let old = document.getElementById(TEST_ID);
|
||||||
is(old, null, "test3-1, the method shouldn't get the element by the old id.");
|
is(old, null, "test3-1, the method shouldn't get the element by the old id.");
|
||||||
|
|
||||||
|
// remove id.
|
||||||
|
test.removeAttribute("id");
|
||||||
|
let e2 = document.getElementById(UPDATED_ID);
|
||||||
|
is(e2, null, "test3-2, the method should return null when the passed id is none in document.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO:
|
// TODO:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue