Classes/IDs case-sensitivity: get quirks mode from matching context.

This commit is contained in:
Simon Sapin 2017-06-10 23:22:34 +02:00
parent 5bccf98aa4
commit c5c1c1b350
7 changed files with 16 additions and 55 deletions

View file

@ -113,6 +113,17 @@ pub enum QuirksMode {
NoQuirks,
}
impl QuirksMode {
#[inline]
pub fn classes_and_ids_case_sensitivity(self) -> CaseSensitivity {
match self {
QuirksMode::NoQuirks |
QuirksMode::LimitedQuirks => CaseSensitivity::CaseSensitive,
QuirksMode::Quirks => CaseSensitivity::AsciiCaseInsensitive,
}
}
}
/// Data associated with the matching process for a element. This context is
/// used across many selectors for an element, so it's not appropriate for
/// transient data that applies to only a single selector.
@ -667,20 +678,10 @@ fn matches_simple_selector<E, F>(
element.get_namespace() == ns.borrow()
}
Component::ID(ref id) => {
let case_sensitivity = if element.in_quirks_mode_document() {
CaseSensitivity::AsciiCaseInsensitive
} else {
CaseSensitivity::CaseSensitive
};
element.has_id(id, case_sensitivity)
element.has_id(id, context.shared.quirks_mode.classes_and_ids_case_sensitivity())
}
Component::Class(ref class) => {
let case_sensitivity = if element.in_quirks_mode_document() {
CaseSensitivity::AsciiCaseInsensitive
} else {
CaseSensitivity::CaseSensitive
};
element.has_class(class, case_sensitivity)
element.has_class(class, context.shared.quirks_mode.classes_and_ids_case_sensitivity())
}
Component::AttributeInNoNamespaceExists { ref local_name, ref local_name_lower } => {
let is_html = element.is_html_element_in_html_document();

View file

@ -63,11 +63,6 @@ pub trait Element: Sized + Debug {
/// Whether this element is a `link`.
fn is_link(&self) -> bool;
/// Whether this element is in a document that is in quirks mode.
///
/// https://dom.spec.whatwg.org/#concept-document-quirks
fn in_quirks_mode_document(&self) -> bool;
fn has_id(&self,
id: &<Self::Impl as SelectorImpl>::Identifier,
case_sensitivity: CaseSensitivity)