mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
This reverts commit 8e15389cae
.
This commit is contained in:
parent
8e15389cae
commit
d6ae8dc112
152 changed files with 4622 additions and 5862 deletions
|
@ -10,11 +10,11 @@ use crate::context::QuirksMode;
|
|||
use crate::dom::TElement;
|
||||
use crate::rule_tree::CascadeLevel;
|
||||
use crate::selector_parser::SelectorImpl;
|
||||
use crate::stylist::{Stylist, CascadeData, Rule, ContainerConditionId};
|
||||
use crate::stylist::{CascadeData, Rule};
|
||||
use crate::AllocErr;
|
||||
use crate::{Atom, LocalName, Namespace, ShrinkIfNeeded, WeakAtom};
|
||||
use precomputed_hash::PrecomputedHash;
|
||||
use selectors::matching::{matches_selector, MatchingContext};
|
||||
use selectors::matching::{matches_selector, ElementSelectorFlags, MatchingContext};
|
||||
use selectors::parser::{Combinator, Component, SelectorIter};
|
||||
use smallvec::SmallVec;
|
||||
use std::collections::hash_map;
|
||||
|
@ -186,33 +186,34 @@ impl SelectorMap<Rule> {
|
|||
///
|
||||
/// Extract matching rules as per element's ID, classes, tag name, etc..
|
||||
/// Sort the Rules at the end to maintain cascading order.
|
||||
pub fn get_all_matching_rules<E>(
|
||||
pub fn get_all_matching_rules<E, F>(
|
||||
&self,
|
||||
element: E,
|
||||
rule_hash_target: E,
|
||||
matching_rules_list: &mut ApplicableDeclarationList,
|
||||
matching_context: &mut MatchingContext<E::Impl>,
|
||||
context: &mut MatchingContext<E::Impl>,
|
||||
flags_setter: &mut F,
|
||||
cascade_level: CascadeLevel,
|
||||
cascade_data: &CascadeData,
|
||||
stylist: &Stylist,
|
||||
) where
|
||||
E: TElement,
|
||||
F: FnMut(&E, ElementSelectorFlags),
|
||||
{
|
||||
if self.is_empty() {
|
||||
return;
|
||||
}
|
||||
|
||||
let quirks_mode = matching_context.quirks_mode();
|
||||
let quirks_mode = context.quirks_mode();
|
||||
|
||||
if rule_hash_target.is_root() {
|
||||
SelectorMap::get_matching_rules(
|
||||
element,
|
||||
&self.root,
|
||||
matching_rules_list,
|
||||
matching_context,
|
||||
context,
|
||||
flags_setter,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -222,10 +223,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
matching_context,
|
||||
context,
|
||||
flags_setter,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -236,10 +237,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
matching_context,
|
||||
context,
|
||||
flags_setter,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
});
|
||||
|
@ -251,10 +252,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
matching_context,
|
||||
context,
|
||||
flags_setter,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
});
|
||||
|
@ -265,10 +266,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
matching_context,
|
||||
context,
|
||||
flags_setter,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -277,10 +278,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
matching_context,
|
||||
context,
|
||||
flags_setter,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -288,44 +289,38 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
&self.other,
|
||||
matching_rules_list,
|
||||
matching_context,
|
||||
context,
|
||||
flags_setter,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
);
|
||||
}
|
||||
|
||||
/// Adds rules in `rules` that match `element` to the `matching_rules` list.
|
||||
pub(crate) fn get_matching_rules<E>(
|
||||
pub(crate) fn get_matching_rules<E, F>(
|
||||
element: E,
|
||||
rules: &[Rule],
|
||||
matching_rules: &mut ApplicableDeclarationList,
|
||||
matching_context: &mut MatchingContext<E::Impl>,
|
||||
context: &mut MatchingContext<E::Impl>,
|
||||
flags_setter: &mut F,
|
||||
cascade_level: CascadeLevel,
|
||||
cascade_data: &CascadeData,
|
||||
stylist: &Stylist,
|
||||
) where
|
||||
E: TElement,
|
||||
F: FnMut(&E, ElementSelectorFlags),
|
||||
{
|
||||
for rule in rules {
|
||||
if !matches_selector(
|
||||
if matches_selector(
|
||||
&rule.selector,
|
||||
0,
|
||||
Some(&rule.hashes),
|
||||
&element,
|
||||
matching_context,
|
||||
context,
|
||||
flags_setter,
|
||||
) {
|
||||
continue;
|
||||
matching_rules
|
||||
.push(rule.to_applicable_declaration_block(cascade_level, cascade_data));
|
||||
}
|
||||
|
||||
if rule.container_condition_id != ContainerConditionId::none() {
|
||||
if !cascade_data.container_condition_matches(rule.container_condition_id, stylist, element) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
matching_rules
|
||||
.push(rule.to_applicable_declaration_block(cascade_level, cascade_data));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue