mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
style: Add infrastructure to match :host.
This commit is contained in:
parent
1654f297ca
commit
9fa2618197
9 changed files with 159 additions and 41 deletions
|
@ -36,6 +36,18 @@ pub trait PseudoElement : Sized + ToCss {
|
|||
}
|
||||
}
|
||||
|
||||
/// A trait that represents a pseudo-class.
|
||||
pub trait NonTSPseudoClass : Sized + ToCss {
|
||||
/// The `SelectorImpl` this pseudo-element is used for.
|
||||
type Impl: SelectorImpl;
|
||||
|
||||
/// Whether this pseudo-class is :active or :hover.
|
||||
fn is_active_or_hover(&self) -> bool;
|
||||
|
||||
/// Whether this pseudo-class is :host.
|
||||
fn is_host(&self) -> bool;
|
||||
}
|
||||
|
||||
fn to_ascii_lowercase(s: &str) -> Cow<str> {
|
||||
if let Some(first_uppercase) = s.bytes().position(|byte| byte >= b'A' && byte <= b'Z') {
|
||||
let mut string = s.to_owned();
|
||||
|
@ -96,14 +108,10 @@ macro_rules! with_all_bounds {
|
|||
|
||||
/// non tree-structural pseudo-classes
|
||||
/// (see: https://drafts.csswg.org/selectors/#structural-pseudos)
|
||||
type NonTSPseudoClass: $($CommonBounds)* + Sized + ToCss;
|
||||
type NonTSPseudoClass: $($CommonBounds)* + NonTSPseudoClass<Impl = Self>;
|
||||
|
||||
/// pseudo-elements
|
||||
type PseudoElement: $($CommonBounds)* + PseudoElement<Impl = Self>;
|
||||
|
||||
/// Returns whether the given pseudo class is :active or :hover.
|
||||
#[inline]
|
||||
fn is_active_or_hover(pseudo_class: &Self::NonTSPseudoClass) -> bool;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1984,6 +1992,20 @@ pub mod tests {
|
|||
}
|
||||
}
|
||||
|
||||
impl parser::NonTSPseudoClass for PseudoClass {
|
||||
type Impl = DummySelectorImpl;
|
||||
|
||||
#[inline]
|
||||
fn is_active_or_hover(&self) -> bool {
|
||||
matches!(*self, PseudoClass::Active | PseudoClass::Hover)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn is_host(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
impl ToCss for PseudoClass {
|
||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
||||
match *self {
|
||||
|
@ -2048,12 +2070,6 @@ pub mod tests {
|
|||
type BorrowedNamespaceUrl = DummyAtom;
|
||||
type NonTSPseudoClass = PseudoClass;
|
||||
type PseudoElement = PseudoElement;
|
||||
|
||||
#[inline]
|
||||
fn is_active_or_hover(pseudo_class: &Self::NonTSPseudoClass) -> bool {
|
||||
matches!(*pseudo_class, PseudoClass::Active |
|
||||
PseudoClass::Hover)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, Eq, Hash, PartialEq)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue