aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Watson <gw@intuitionlibrary.com>2014-07-24 11:33:59 +1000
committerGlenn Watson <gw@intuitionlibrary.com>2014-07-24 11:33:59 +1000
commit036bd29eadd56fc65271f835978d81ece129da94 (patch)
tree17cda6039c662b0523686f6dce56ae1fe738ebe8
parent5808cb302d5b1ea1f7f4de81fc9e278a644ec1fd (diff)
downloadservo-036bd29eadd56fc65271f835978d81ece129da94.tar.gz
servo-036bd29eadd56fc65271f835978d81ece129da94.zip
Port attribute name to use atom.
-rw-r--r--src/components/script/dom/attr.rs11
-rw-r--r--src/components/script/dom/element.rs19
2 files changed, 16 insertions, 14 deletions
diff --git a/src/components/script/dom/attr.rs b/src/components/script/dom/attr.rs
index 3ff369bbba8..6499ce6d4a7 100644
--- a/src/components/script/dom/attr.rs
+++ b/src/components/script/dom/attr.rs
@@ -12,6 +12,7 @@ use dom::element::{Element, AttributeHandlers};
use dom::node::Node;
use dom::window::Window;
use dom::virtualmethods::vtable_for;
+use servo_util::atom::Atom;
use servo_util::namespace;
use servo_util::namespace::Namespace;
use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS};
@@ -62,7 +63,7 @@ pub struct Attr {
reflector_: Reflector,
pub local_name: DOMString,
value: Traceable<RefCell<AttrValue>>,
- pub name: DOMString,
+ pub name: Atom,
pub namespace: Namespace,
pub prefix: Option<DOMString>,
@@ -78,13 +79,13 @@ impl Reflectable for Attr {
impl Attr {
fn new_inherited(local_name: DOMString, value: AttrValue,
- name: DOMString, namespace: Namespace,
+ name: Atom, namespace: Namespace,
prefix: Option<DOMString>, owner: &JSRef<Element>) -> Attr {
Attr {
reflector_: Reflector::new(),
local_name: local_name,
value: Traceable::new(RefCell::new(value)),
- name: name, //TODO: Intern attribute names
+ name: name,
namespace: namespace,
prefix: prefix,
owner: Cell::new(JS::from_rooted(owner)),
@@ -92,7 +93,7 @@ impl Attr {
}
pub fn new(window: &JSRef<Window>, local_name: DOMString, value: AttrValue,
- name: DOMString, namespace: Namespace,
+ name: Atom, namespace: Namespace,
prefix: Option<DOMString>, owner: &JSRef<Element>) -> Temporary<Attr> {
let attr = Attr::new_inherited(local_name, value, name, namespace, prefix, owner);
reflect_dom_object(box attr, &Window(*window), AttrBinding::Wrap)
@@ -150,7 +151,7 @@ impl<'a> AttrMethods for JSRef<'a, Attr> {
}
fn Name(&self) -> DOMString {
- self.name.clone()
+ self.name.as_slice().to_string()
}
fn GetNamespaceURI(&self) -> Option<DOMString> {
diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs
index 48ba1346587..51930e48338 100644
--- a/src/components/script/dom/element.rs
+++ b/src/components/script/dom/element.rs
@@ -31,10 +31,10 @@ use layout_interface::ContentChangedDocumentDamage;
use layout_interface::MatchSelectorsDocumentDamage;
use style::{matches_compound_selector, NamespaceMap, parse_selector_list};
use style;
+use servo_util::atom::Atom;
use servo_util::namespace;
use servo_util::namespace::{Namespace, Null};
use servo_util::str::{DOMString, null_str_as_empty_ref, split_html_space_chars};
-use servo_util::atom::Atom;
use std::ascii::StrAsciiExt;
use std::cell::{Cell, RefCell};
@@ -228,7 +228,7 @@ pub trait AttributeHandlers {
prefix: Option<DOMString>);
fn set_attribute(&self, name: &str, value: AttrValue);
fn do_set_attribute(&self, local_name: DOMString, value: AttrValue,
- name: DOMString, namespace: Namespace,
+ name: Atom, namespace: Namespace,
prefix: Option<DOMString>, cb: |&JSRef<Attr>| -> bool);
fn parse_attribute(&self, namespace: &Namespace, local_name: &str,
value: DOMString) -> AttrValue;
@@ -267,8 +267,8 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
value: DOMString, namespace: Namespace,
prefix: Option<DOMString>) {
let name = match prefix {
- None => local_name.clone(),
- Some(ref prefix) => format!("{:s}:{:s}", *prefix, local_name),
+ None => Atom::from_slice(local_name.as_slice()),
+ Some(ref prefix) => Atom::from_slice(format!("{:s}:{:s}", *prefix, local_name).as_slice()),
};
let value = self.parse_attribute(&namespace, local_name.as_slice(), value);
self.do_set_attribute(local_name, value, name, namespace, prefix, |_| false)
@@ -281,13 +281,13 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
let node: &JSRef<Node> = NodeCast::from_ref(self);
node.wait_until_safe_to_modify_dom();
- self.do_set_attribute(name.to_string(), value, name.to_string(),
+ self.do_set_attribute(name.to_string(), value, Atom::from_slice(name),
namespace::Null, None,
|attr| attr.deref().local_name.as_slice() == name);
}
fn do_set_attribute(&self, local_name: DOMString, value: AttrValue,
- name: DOMString, namespace: Namespace,
+ name: Atom, namespace: Namespace,
prefix: Option<DOMString>, cb: |&JSRef<Attr>| -> bool) {
let idx = self.deref().attrs.borrow().iter()
.map(|attr| attr.root())
@@ -576,8 +576,9 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
// Step 3-5.
let value = self.parse_attribute(&namespace::Null, name.as_slice(), value);
- self.do_set_attribute(name.clone(), value, name.clone(), namespace::Null, None, |attr| {
- attr.deref().name == name
+ let name_atom = Atom::from_slice(name.as_slice());
+ self.do_set_attribute(name.clone(), value, name_atom.clone(), namespace::Null, None, |attr| {
+ attr.deref().name == name_atom
});
Ok(())
}
@@ -638,7 +639,7 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
// Step 9.
let value = self.parse_attribute(&namespace, local_name.as_slice(), value);
- self.do_set_attribute(local_name.to_string(), value, name.to_string(),
+ self.do_set_attribute(local_name.to_string(), value, Atom::from_slice(name.as_slice()),
namespace.clone(), prefix.map(|s| s.to_string()),
|attr| {
attr.deref().local_name.as_slice() == local_name &&