mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
selectors: Remove custom attribute-affecting logic and sibling-affecting logic from rust-selectors.
MozReview-Commit-ID: BjZY6TjJbcb Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
This commit is contained in:
parent
63988b9103
commit
1748150497
4 changed files with 154 additions and 120 deletions
|
@ -3,7 +3,7 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
use bloom::BloomFilter;
|
||||
use parser::{CaseSensitivity, Combinator, ComplexSelector, LocalName};
|
||||
use parser::{SimpleSelector, Selector, SelectorImpl};
|
||||
use parser::{SimpleSelector, Selector};
|
||||
use precomputed_hash::PrecomputedHash;
|
||||
use std::borrow::Borrow;
|
||||
use tree::Element;
|
||||
|
@ -35,9 +35,8 @@ bitflags! {
|
|||
/// Whether this element is affected by an ID selector.
|
||||
const AFFECTED_BY_ID_SELECTOR = 1 << 3,
|
||||
|
||||
/// Whether this element is affected by a non-common style-affecting
|
||||
/// attribute.
|
||||
const AFFECTED_BY_NON_COMMON_STYLE_AFFECTING_ATTRIBUTE_SELECTOR = 1 << 4,
|
||||
/// Whether this element matches attribute selectors.
|
||||
const AFFECTED_BY_ATTRIBUTE_SELECTOR = 1 << 4,
|
||||
|
||||
/// Whether this element matches the :empty pseudo class.
|
||||
const AFFECTED_BY_EMPTY = 1 << 5,
|
||||
|
@ -364,48 +363,38 @@ fn matches_simple_selector<E, F>(
|
|||
AFFECTED_BY_ID_SELECTOR)
|
||||
}
|
||||
SimpleSelector::Class(ref class) => {
|
||||
element.has_class(class)
|
||||
relation_if!(element.has_class(class),
|
||||
AFFECTED_BY_ATTRIBUTE_SELECTOR)
|
||||
}
|
||||
SimpleSelector::AttrExists(ref attr) => {
|
||||
let matches = element.match_attr_has(attr);
|
||||
|
||||
if matches && !E::Impl::attr_exists_selector_is_shareable(attr) {
|
||||
*relations |= AFFECTED_BY_NON_COMMON_STYLE_AFFECTING_ATTRIBUTE_SELECTOR;
|
||||
}
|
||||
|
||||
matches
|
||||
relation_if!(element.match_attr_has(attr),
|
||||
AFFECTED_BY_ATTRIBUTE_SELECTOR)
|
||||
}
|
||||
SimpleSelector::AttrEqual(ref attr, ref value, case_sensitivity) => {
|
||||
let matches = match case_sensitivity {
|
||||
relation_if!(match case_sensitivity {
|
||||
CaseSensitivity::CaseSensitive => element.match_attr_equals(attr, value),
|
||||
CaseSensitivity::CaseInsensitive => element.match_attr_equals_ignore_ascii_case(attr, value),
|
||||
};
|
||||
|
||||
if matches && !E::Impl::attr_equals_selector_is_shareable(attr, value) {
|
||||
*relations |= AFFECTED_BY_NON_COMMON_STYLE_AFFECTING_ATTRIBUTE_SELECTOR;
|
||||
}
|
||||
|
||||
matches
|
||||
}, AFFECTED_BY_ATTRIBUTE_SELECTOR)
|
||||
}
|
||||
SimpleSelector::AttrIncludes(ref attr, ref value) => {
|
||||
relation_if!(element.match_attr_includes(attr, value),
|
||||
AFFECTED_BY_NON_COMMON_STYLE_AFFECTING_ATTRIBUTE_SELECTOR)
|
||||
AFFECTED_BY_ATTRIBUTE_SELECTOR)
|
||||
}
|
||||
SimpleSelector::AttrDashMatch(ref attr, ref value) => {
|
||||
relation_if!(element.match_attr_dash(attr, value),
|
||||
AFFECTED_BY_NON_COMMON_STYLE_AFFECTING_ATTRIBUTE_SELECTOR)
|
||||
AFFECTED_BY_ATTRIBUTE_SELECTOR)
|
||||
}
|
||||
SimpleSelector::AttrPrefixMatch(ref attr, ref value) => {
|
||||
relation_if!(element.match_attr_prefix(attr, value),
|
||||
AFFECTED_BY_NON_COMMON_STYLE_AFFECTING_ATTRIBUTE_SELECTOR)
|
||||
AFFECTED_BY_ATTRIBUTE_SELECTOR)
|
||||
}
|
||||
SimpleSelector::AttrSubstringMatch(ref attr, ref value) => {
|
||||
relation_if!(element.match_attr_substring(attr, value),
|
||||
AFFECTED_BY_NON_COMMON_STYLE_AFFECTING_ATTRIBUTE_SELECTOR)
|
||||
AFFECTED_BY_ATTRIBUTE_SELECTOR)
|
||||
}
|
||||
SimpleSelector::AttrSuffixMatch(ref attr, ref value) => {
|
||||
relation_if!(element.match_attr_suffix(attr, value),
|
||||
AFFECTED_BY_NON_COMMON_STYLE_AFFECTING_ATTRIBUTE_SELECTOR)
|
||||
AFFECTED_BY_ATTRIBUTE_SELECTOR)
|
||||
}
|
||||
SimpleSelector::AttrIncludesNeverMatch(..) |
|
||||
SimpleSelector::AttrPrefixNeverMatch(..) |
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue