aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/attr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/attr.rs')
-rw-r--r--src/components/script/dom/attr.rs40
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()
}
}