Bug 1505489 - Implement GeckoElement::each_part. r=heycam

This should make all the pieces come together.

Note that we don't need to look at the snapshot for ::part() for now (other than
when selector-matching normally) because I decided to just restyle the element
for now when the part attribute changes.

::part() can't affect descendants anyway (as long as we don't do the forwarding
stuff), and eager pseudo-elements are handled during the normal element restyle,
so it seems to me that adding all the complexity that we have for classes to
part may not be worth it at least yet.

Depends on D32647

Differential Revision: https://phabricator.services.mozilla.com/D32648

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Emilio Cobos Álvarez 2019-06-11 17:42:49 +00:00
Родитель 3685cf25a7
Коммит 72a9fa3730
3 изменённых файлов: 16 добавлений и 4 удалений

Просмотреть файл

@ -211,7 +211,7 @@ impl ElementSnapshot for GeckoElementSnapshot {
return;
}
snapshot_helpers::each_class(&self.mClass, callback)
snapshot_helpers::each_class_or_part(&self.mClass, callback)
}
#[inline]

Просмотреть файл

@ -107,9 +107,9 @@ pub fn has_class_or_part(
}
/// Given an item, a callback, and a getter, execute `callback` for each class
/// this `item` has.
/// or part name this `item` has.
#[inline(always)]
pub fn each_class<F>(attr: &structs::nsAttrValue, mut callback: F)
pub fn each_class_or_part<F>(attr: &structs::nsAttrValue, mut callback: F)
where
F: FnMut(&Atom),
{

Просмотреть файл

@ -1372,7 +1372,19 @@ impl<'le> TElement for GeckoElement<'le> {
None => return,
};
snapshot_helpers::each_class(attr, callback)
snapshot_helpers::each_class_or_part(attr, callback)
}
fn each_part<F>(&self, callback: F)
where
F: FnMut(&Atom),
{
let attr = match self.get_part_attr() {
Some(c) => c,
None => return,
};
snapshot_helpers::each_class_or_part(attr, callback)
}
#[inline]