mirror of
https://github.com/servo/servo.git
synced 2025-06-25 01:24:37 +01:00
Only register the new ID from after_set_attr, and remove update_idmap.
This commit is contained in:
parent
86899b6aaf
commit
25ee5270d1
2 changed files with 8 additions and 36 deletions
|
@ -504,35 +504,4 @@ impl Document {
|
||||||
*old_element = new_element.clone();
|
*old_element = new_element.clone();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_idmap(&mut self,
|
|
||||||
abstract_self: &JS<Element>,
|
|
||||||
new_id: Option<DOMString>,
|
|
||||||
old_id: Option<DOMString>) {
|
|
||||||
// remove old ids:
|
|
||||||
// * if the old ones are not same as the new one,
|
|
||||||
// * OR if the new one is none.
|
|
||||||
match old_id {
|
|
||||||
Some(ref old_id) if new_id.is_none() ||
|
|
||||||
(*new_id.get_ref() != *old_id) => {
|
|
||||||
self.idmap.remove(old_id);
|
|
||||||
}
|
|
||||||
_ => ()
|
|
||||||
}
|
|
||||||
|
|
||||||
match new_id {
|
|
||||||
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.clone(),
|
|
||||||
|_, new_node: JS<Element>| -> JS<Element> {
|
|
||||||
new_node
|
|
||||||
},
|
|
||||||
|_, old_node: &mut JS<Element>, new_node: JS<Element>| {
|
|
||||||
*old_node = new_node;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
None => ()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -207,10 +207,14 @@ impl Element {
|
||||||
let idx = self.attrs.iter().position(|attr| {
|
let idx = self.attrs.iter().position(|attr| {
|
||||||
attr.get().local_name == local_name
|
attr.get().local_name == local_name
|
||||||
});
|
});
|
||||||
let old_raw_value = idx.map(|idx| self.attrs[idx].get().Value());
|
|
||||||
|
|
||||||
match idx {
|
match idx {
|
||||||
Some(idx) => {
|
Some(idx) => {
|
||||||
|
if namespace == namespace::Null {
|
||||||
|
let old_value = self.attrs[idx].get().Value();
|
||||||
|
self.before_remove_attr(abstract_self, local_name.clone(),
|
||||||
|
old_value);
|
||||||
|
}
|
||||||
self.attrs[idx].get_mut().set_value(value.clone());
|
self.attrs[idx].get_mut().set_value(value.clone());
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
|
@ -224,7 +228,7 @@ impl Element {
|
||||||
}
|
}
|
||||||
|
|
||||||
if namespace == namespace::Null {
|
if namespace == namespace::Null {
|
||||||
self.after_set_attr(abstract_self, local_name, value, old_raw_value);
|
self.after_set_attr(abstract_self, local_name, value);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -232,8 +236,7 @@ impl Element {
|
||||||
fn after_set_attr(&mut self,
|
fn after_set_attr(&mut self,
|
||||||
abstract_self: &JS<Element>,
|
abstract_self: &JS<Element>,
|
||||||
local_name: DOMString,
|
local_name: DOMString,
|
||||||
value: DOMString,
|
value: DOMString) {
|
||||||
old_value: Option<DOMString>) {
|
|
||||||
|
|
||||||
match local_name.as_slice() {
|
match local_name.as_slice() {
|
||||||
"style" => {
|
"style" => {
|
||||||
|
@ -248,7 +251,7 @@ impl Element {
|
||||||
// "borrowed value does not live long enough"
|
// "borrowed value does not live long enough"
|
||||||
let mut doc = self.node.owner_doc();
|
let mut doc = self.node.owner_doc();
|
||||||
let doc = doc.get_mut();
|
let doc = doc.get_mut();
|
||||||
doc.update_idmap(abstract_self, Some(value.clone()), old_value);
|
doc.register_named_element(abstract_self, value.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => ()
|
_ => ()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue