mirror of
https://github.com/servo/servo.git
synced 2025-08-12 00:45:33 +01:00
Auto merge of #18962 - upsuper:tree-pseudos, r=emilio
Support matching for ::-moz-tree-* pseudo-elements This is the Servo side change of [bug 1397644](https://bugzilla.mozilla.org/show_bug.cgi?id=1397644). <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18962) <!-- Reviewable:end -->
This commit is contained in:
commit
b1e6f05ae4
13 changed files with 489 additions and 257 deletions
|
@ -819,13 +819,21 @@ impl Stylist {
|
|||
rule_inclusion: RuleInclusion,
|
||||
parent_style: &ComputedValues,
|
||||
is_probe: bool,
|
||||
font_metrics: &FontMetricsProvider
|
||||
font_metrics: &FontMetricsProvider,
|
||||
matching_fn: Option<&Fn(&PseudoElement) -> bool>,
|
||||
) -> Option<Arc<ComputedValues>>
|
||||
where
|
||||
E: TElement,
|
||||
{
|
||||
let cascade_inputs =
|
||||
self.lazy_pseudo_rules(guards, element, pseudo, is_probe, rule_inclusion);
|
||||
self.lazy_pseudo_rules(
|
||||
guards,
|
||||
element,
|
||||
pseudo,
|
||||
is_probe,
|
||||
rule_inclusion,
|
||||
matching_fn
|
||||
);
|
||||
self.compute_pseudo_element_style_with_inputs(
|
||||
&cascade_inputs,
|
||||
pseudo,
|
||||
|
@ -979,7 +987,8 @@ impl Stylist {
|
|||
element: &E,
|
||||
pseudo: &PseudoElement,
|
||||
is_probe: bool,
|
||||
rule_inclusion: RuleInclusion
|
||||
rule_inclusion: RuleInclusion,
|
||||
matching_fn: Option<&Fn(&PseudoElement) -> bool>,
|
||||
) -> CascadeInputs
|
||||
where
|
||||
E: TElement
|
||||
|
@ -1026,6 +1035,7 @@ impl Stylist {
|
|||
None,
|
||||
self.quirks_mode,
|
||||
);
|
||||
matching_context.pseudo_element_matching_fn = matching_fn;
|
||||
|
||||
self.push_applicable_declarations(
|
||||
element,
|
||||
|
@ -1062,6 +1072,7 @@ impl Stylist {
|
|||
VisitedHandlingMode::RelevantLinkVisited,
|
||||
self.quirks_mode,
|
||||
);
|
||||
matching_context.pseudo_element_matching_fn = matching_fn;
|
||||
|
||||
self.push_applicable_declarations(
|
||||
element,
|
||||
|
@ -1289,6 +1300,7 @@ impl Stylist {
|
|||
context.nth_index_cache.as_mut().map(|s| &mut **s),
|
||||
stylist.quirks_mode,
|
||||
);
|
||||
matching_context.pseudo_element_matching_fn = context.pseudo_element_matching_fn;
|
||||
|
||||
map.get_all_matching_rules(
|
||||
element,
|
||||
|
@ -1994,19 +2006,13 @@ impl CascadeData {
|
|||
|
||||
let map = match selector.pseudo_element() {
|
||||
Some(pseudo) if pseudo.is_precomputed() => {
|
||||
if !selector.is_universal() ||
|
||||
!matches!(origin, Origin::UserAgent) {
|
||||
// ::-moz-tree selectors may appear in
|
||||
// non-UA sheets (even though they never
|
||||
// match).
|
||||
continue;
|
||||
}
|
||||
debug_assert!(selector.is_universal());
|
||||
debug_assert!(matches!(origin, Origin::UserAgent));
|
||||
|
||||
precomputed_pseudo_element_decls
|
||||
.as_mut()
|
||||
.expect("Expected precomputed declarations for the UA level")
|
||||
.get_or_insert_with(&pseudo.canonical(), Vec::new)
|
||||
.expect("Unexpected tree pseudo-element?")
|
||||
.push(ApplicableDeclarationBlock::new(
|
||||
StyleSource::Style(locked.clone()),
|
||||
self.rules_source_order,
|
||||
|
@ -2023,7 +2029,7 @@ impl CascadeData {
|
|||
let mut map = Box::new(SelectorMap::new());
|
||||
map.begin_mutation();
|
||||
map
|
||||
}).expect("Unexpected tree pseudo-element?")
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue