diff options
Diffstat (limited to 'src/components/script/dom/attr.rs')
-rw-r--r-- | src/components/script/dom/attr.rs | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/components/script/dom/attr.rs b/src/components/script/dom/attr.rs index 0ca2fb2889e..4822de7eb07 100644 --- a/src/components/script/dom/attr.rs +++ b/src/components/script/dom/attr.rs @@ -4,7 +4,7 @@ use dom::bindings::codegen::BindingDeclarations::AttrBinding; use dom::bindings::codegen::InheritTypes::NodeCast; -use dom::bindings::js::JS; +use dom::bindings::js::{JS, JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::element::Element; use dom::node::Node; @@ -45,7 +45,7 @@ impl Reflectable for Attr { impl Attr { fn new_inherited(local_name: DOMString, value: DOMString, name: DOMString, namespace: Namespace, - prefix: Option<DOMString>, owner: JS<Element>) -> Attr { + prefix: Option<DOMString>, owner: &JSRef<Element>) -> Attr { Attr { reflector_: Reflector::new(), local_name: local_name, @@ -53,25 +53,26 @@ impl Attr { name: name, //TODO: Intern attribute names namespace: namespace, prefix: prefix, - owner: owner, + owner: owner.unrooted(), } } - pub fn new(window: &JS<Window>, local_name: DOMString, value: DOMString, + pub fn new(window: &JSRef<Window>, local_name: DOMString, value: DOMString, name: DOMString, namespace: Namespace, - prefix: Option<DOMString>, owner: JS<Element>) -> JS<Attr> { + prefix: Option<DOMString>, owner: &JSRef<Element>) -> Temporary<Attr> { let attr = Attr::new_inherited(local_name, value, name, namespace, prefix, owner); reflect_dom_object(~attr, window, AttrBinding::Wrap) } pub fn set_value(&mut self, set_type: AttrSettingType, value: DOMString) { - let node: JS<Node> = NodeCast::from(&self.owner); + let mut owner = self.owner.root(); + let node: &mut JSRef<Node> = NodeCast::from_mut_ref(&mut *owner); let namespace_is_null = self.namespace == namespace::Null; match set_type { ReplacedAttr => { if namespace_is_null { - vtable_for(&node).before_remove_attr(self.local_name.clone(), self.value.clone()); + vtable_for(node).before_remove_attr(self.local_name.clone(), self.value.clone()); } } FirstSetAttr => {} @@ -80,7 +81,7 @@ impl Attr { self.value = value; if namespace_is_null { - vtable_for(&node).after_set_attr(self.local_name.clone(), self.value.clone()); + vtable_for(node).after_set_attr(self.local_name.clone(), self.value.clone()); } } @@ -89,31 +90,40 @@ impl Attr { } } -impl Attr { - pub fn LocalName(&self) -> DOMString { +pub trait AttrMethods { + fn LocalName(&self) -> DOMString; + fn Value(&self) -> DOMString; + fn SetValue(&mut self, value: DOMString); + fn Name(&self) -> DOMString; + fn GetNamespaceURI(&self) -> Option<DOMString>; + fn GetPrefix(&self) -> Option<DOMString>; +} + +impl<'a> AttrMethods for JSRef<'a, Attr> { + fn LocalName(&self) -> DOMString { self.local_name.clone() } - pub fn Value(&self) -> DOMString { + fn Value(&self) -> DOMString { self.value.clone() } - pub fn SetValue(&mut self, value: DOMString) { + fn SetValue(&mut self, value: DOMString) { self.set_value(ReplacedAttr, value); } - pub fn Name(&self) -> DOMString { + fn Name(&self) -> DOMString { self.name.clone() } - pub fn GetNamespaceURI(&self) -> Option<DOMString> { + fn GetNamespaceURI(&self) -> Option<DOMString> { match self.namespace.to_str() { "" => None, url => Some(url.to_owned()), } } - pub fn GetPrefix(&self) -> Option<DOMString> { + fn GetPrefix(&self) -> Option<DOMString> { self.prefix.clone() } } |