зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #5741 - Use get_attr_for_layout more (from Ms2ger:attr-for-layout); r=jdm
Source-Repo: https://github.com/servo/servo Source-Revision: e5ec55f0d8d4ec17aab3682e6d3048c88c6f458e
This commit is contained in:
Родитель
d5299d7feb
Коммит
90efd7cb82
|
@ -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()
|
||||
})
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче