aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/element.rs39
1 files changed, 10 insertions, 29 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 24eda14cab5..88366f591d2 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -171,14 +171,14 @@ pub trait RawLayoutElementHelpers {
#[inline]
#[allow(unsafe_code)]
-unsafe fn get_attr_for_layout<'a>(elem: &'a Element, namespace: &Namespace, name: &Atom) -> Option<&'a JS<Attr>> {
+unsafe fn get_attr_for_layout(elem: &Element, namespace: &Namespace, name: &Atom) -> Option<LayoutJS<Attr>> {
// cast to point to T in RefCell<T> directly
let attrs = elem.attrs.borrow_for_layout();
attrs.iter().find(|attr: & &JS<Attr>| {
let attr = attr.to_layout().unsafe_get();
*name == (*attr).local_name_atom_forever() &&
(*attr).namespace() == namespace
- })
+ }).map(|attr| attr.to_layout())
}
#[allow(unsafe_code)]
@@ -187,8 +187,7 @@ impl RawLayoutElementHelpers for Element {
unsafe fn get_attr_val_for_layout<'a>(&'a self, namespace: &Namespace, name: &Atom)
-> Option<&'a str> {
get_attr_for_layout(self, namespace, name).map(|attr| {
- let attr = attr.to_layout().unsafe_get();
- (*attr).value_ref_forever()
+ (*attr.unsafe_get()).value_ref_forever()
})
}
@@ -208,40 +207,22 @@ impl RawLayoutElementHelpers for Element {
#[inline]
unsafe fn get_attr_atom_for_layout(&self, namespace: &Namespace, name: &Atom)
-> Option<Atom> {
- let attrs = self.attrs.borrow_for_layout();
- (*attrs).iter().find(|attr: & &JS<Attr>| {
- let attr = attr.to_layout().unsafe_get();
- *name == (*attr).local_name_atom_forever() &&
- (*attr).namespace() == namespace
- }).and_then(|attr| {
- let attr = attr.to_layout().unsafe_get();
- (*attr).value_atom_forever()
+ get_attr_for_layout(self, namespace, name).and_then(|attr| {
+ (*attr.unsafe_get()).value_atom_forever()
})
}
#[inline]
unsafe fn has_class_for_layout(&self, name: &Atom) -> bool {
- let attrs = self.attrs.borrow_for_layout();
- (*attrs).iter().find(|attr: & &JS<Attr>| {
- let attr = attr.to_layout().unsafe_get();
- (*attr).local_name_atom_forever() == atom!("class")
- }).map_or(false, |attr| {
- let attr = attr.to_layout().unsafe_get();
- (*attr).value_tokens_forever().map(|tokens| {
- tokens.iter().any(|atom| atom == name)
- })
- }.take().unwrap())
+ get_attr_for_layout(self, &ns!(""), &atom!("class")).map_or(false, |attr| {
+ (*attr.unsafe_get()).value_tokens_forever().unwrap().iter().any(|atom| atom == name)
+ })
}
#[inline]
unsafe fn get_classes_for_layout(&self) -> Option<&'static [Atom]> {
- let attrs = self.attrs.borrow_for_layout();
- (*attrs).iter().find(|attr: & &JS<Attr>| {
- let attr = attr.to_layout().unsafe_get();
- (*attr).local_name_atom_forever() == atom!("class")
- }).and_then(|attr| {
- let attr = attr.to_layout().unsafe_get();
- (*attr).value_tokens_forever()
+ get_attr_for_layout(self, &ns!(""), &atom!("class")).map(|attr| {
+ (*attr.unsafe_get()).value_tokens_forever().unwrap()
})
}