mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
style: Implement complex :not().
This fixes the failures in bug 1671573 and just works thanks to the invalidation improvements I did for :is / :where. Added a couple tests for invalidation which is the tricky bit. 001 is a very straight-forward test, 002 is the :is test but with :is() replaced by double-:not(). This also fixes default namespaces inside :is() / :where(), which are supposed to get ignored, but aren't. Added tests for that and for the pre-existing :not() behavior which Chrome doesn't quite get right. Differential Revision: https://phabricator.services.mozilla.com/D94142
This commit is contained in:
parent
7e6d70f314
commit
191d5226a3
6 changed files with 107 additions and 168 deletions
|
@ -853,14 +853,13 @@ where
|
|||
}
|
||||
false
|
||||
}),
|
||||
Component::Negation(ref negated) => context.shared.nest_for_negation(|context| {
|
||||
let mut local_context = LocalMatchingContext {
|
||||
matches_hover_and_active_quirk: MatchesHoverAndActiveQuirk::No,
|
||||
shared: context,
|
||||
};
|
||||
!negated
|
||||
.iter()
|
||||
.all(|ss| matches_simple_selector(ss, element, &mut local_context, flags_setter))
|
||||
Component::Negation(ref list) => context.shared.nest_for_negation(|context| {
|
||||
for selector in &**list {
|
||||
if matches_complex_selector(selector.iter(), element, context, flags_setter) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
true
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue