diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-02-25 16:18:13 +0100 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-02-26 14:50:57 +0100 |
commit | 58b317837b315884014fc189e16a0a00aef99a60 (patch) | |
tree | a8d04e75b3a4e76fc3d1854b449a7bb7987431a0 /src | |
parent | 33792db657e0053c415c26b761cbdc2cf5ae2060 (diff) | |
download | servo-58b317837b315884014fc189e16a0a00aef99a60.tar.gz servo-58b317837b315884014fc189e16a0a00aef99a60.zip |
Cleanup Element::set_attribute.
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/attr.rs | 7 | ||||
-rw-r--r-- | src/components/script/dom/element.rs | 31 |
2 files changed, 18 insertions, 20 deletions
diff --git a/src/components/script/dom/attr.rs b/src/components/script/dom/attr.rs index 3cf978d69c4..906e1b7f02c 100644 --- a/src/components/script/dom/attr.rs +++ b/src/components/script/dom/attr.rs @@ -9,8 +9,6 @@ use dom::window::Window; use servo_util::namespace::{Namespace, Null}; use servo_util::str::DOMString; -use std::util; - #[deriving(Encodable)] pub struct Attr { reflector_: Reflector, @@ -63,9 +61,8 @@ impl Attr { reflect_dom_object(~attr, window, AttrBinding::Wrap) } - pub fn set_value(&mut self, mut value: DOMString) -> DOMString { - util::swap(&mut self.value, &mut value); - value + pub fn set_value(&mut self, value: DOMString) { + self.value = value; } pub fn value_ref<'a>(&'a self) -> &'a str { diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index eed0bc9b237..cda20ef84a5 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -204,22 +204,23 @@ impl Element { self.node.wait_until_safe_to_modify_dom(); // FIXME: reduce the time of `value.clone()`. - let mut old_raw_value: Option<DOMString> = None; - for attr in self.attrs.mut_iter() { - let attr = attr.get_mut(); - if attr.local_name == local_name { - old_raw_value = Some(attr.set_value(value.clone())); - break; - } - } + let idx = self.attrs.iter().position(|attr| { + attr.get().local_name == local_name + }); + let old_raw_value = idx.map(|idx| self.attrs[idx].get().Value()); - if old_raw_value.is_none() { - let doc = self.node.owner_doc(); - let doc = doc.get(); - let new_attr = Attr::new_ns(doc.window.get(), local_name.clone(), value.clone(), - name.clone(), namespace.clone(), - prefix); - self.attrs.push(new_attr); + match idx { + Some(idx) => { + self.attrs[idx].get_mut().set_value(value.clone()); + } + None => { + let doc = self.node.owner_doc(); + let doc = doc.get(); + let new_attr = Attr::new_ns(doc.window.get(), local_name.clone(), value.clone(), + name.clone(), namespace.clone(), + prefix); + self.attrs.push(new_attr); + } } if namespace == namespace::Null { |