aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/element.rs')
-rw-r--r--src/components/script/dom/element.rs26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs
index c4196b9fab4..309204ee7a9 100644
--- a/src/components/script/dom/element.rs
+++ b/src/components/script/dom/element.rs
@@ -23,8 +23,10 @@ use layout_interface::{ContentBoxesResponse, ContentChangedDocumentDamage};
use layout_interface::{MatchSelectorsDocumentDamage};
use style;
-use std::str::eq;
use std::ascii::StrAsciiExt;
+use std::cast;
+use std::str::eq;
+use std::unstable::raw::Box;
pub struct Element {
node: Node,
@@ -155,9 +157,19 @@ impl Element {
}).map(|&x| x)
}
- // FIXME(pcwalton): This is kind of confusingly named relative to the above...
- pub fn get_attr(&self, namespace: Namespace, name: &str) -> Option<~str> {
- self.get_attribute(namespace, name).map(|attr| attr.value.clone())
+ pub unsafe fn get_attr_val_for_layout(&self, namespace: Namespace, name: &str)
+ -> Option<&'static str> {
+ // FIXME: only case-insensitive in the HTML namespace (as opposed to SVG, etc.)
+ let name = name.to_ascii_lower();
+ self.attrs.iter().find(|attr: & &@mut Attr| {
+ // unsafely avoid a borrow because this is accessed by many tasks
+ // during parallel layout
+ let attr: ***Box<Attr> = cast::transmute(attr);
+ name == (***attr).data.local_name && (***attr).data.namespace == namespace
+ }).map(|attr| {
+ let attr: **Box<Attr> = cast::transmute(attr);
+ cast::transmute((**attr).data.value.as_slice())
+ })
}
pub fn set_attr(&mut self, abstract_self: AbstractNode, name: DOMString, value: DOMString)
@@ -352,8 +364,8 @@ impl Element {
}
pub fn get_string_attribute(&self, name: &str) -> DOMString {
- match self.get_attr(Null, name) {
- Some(x) => x,
+ match self.get_attribute(Null, name) {
+ Some(x) => x.Value(),
None => ~""
}
}
@@ -390,7 +402,7 @@ impl Element {
}
pub fn GetAttribute(&self, name: DOMString) -> Option<DOMString> {
- self.get_attr(Null, name).map(|s| s.to_owned())
+ self.get_attribute(Null, name).map(|s| s.Value())
}
pub fn GetAttributeNS(&self, namespace: Option<DOMString>, local_name: DOMString) -> Option<DOMString> {