1use crate::{CompoundSelector, CssAtomSet, CssDiagnostic};
2use css_parse::{Cursor, Diagnostic, Parse, Parser, Result as ParserResult, T, pseudo_class, pseudo_element};
3use csskit_derives::{SemanticEq, ToCursors, ToSpan};
4
5pseudo_element!(
6 #[derive(ToCursors, ToSpan, SemanticEq, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
8 #[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
9 #[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
10 pub enum WebkitPseudoElement {
11 CalendarDatePickerIndicator: CssAtomSet::_WebkitCalendarPickerIndicator,
12 CapsLockIndicator: CssAtomSet::_WebkitCapsLockIndicator,
13 ColorSwatch: CssAtomSet::_WebkitColorSwatch,
14 ColorSwatchWrapper: CssAtomSet::_WebkitColorSwatchWrapper,
15 ContactsAutoFillButton: CssAtomSet::_WebkitContactsAutoFillButton,
16 CredentialsAutoFillButton: CssAtomSet::_WebkitCredentialsAutoFillButton,
17 CreditCardAutoFillButton: CssAtomSet::_WebkitCreditCardAutoFillButton,
18 DateAndTimeValue: CssAtomSet::_WebkitDateAndTimeValue,
19 DatetimeEdit: CssAtomSet::_WebkitDatetimeEdit,
20 DatetimeEditDayField: CssAtomSet::_WebkitDatetimeEditDayField,
21 DatetimeEditFieldsWrapper: CssAtomSet::_WebkitDatetimeEditFieldsWrapper,
22 DatetimeEditHourField: CssAtomSet::_WebkitDatetimeEditHourField,
23 DatetimeEditMeridiemField: CssAtomSet::_WebkitDatetimeEditMeridiemField,
24 DatetimeEditMillisecondField: CssAtomSet::_WebkitDatetimeEditMillisecondField,
25 DatetimeEditMinute: CssAtomSet::_WebkitDatetimeEditMinute,
26 DatetimeEditMinuteField: CssAtomSet::_WebkitDatetimeEditMinuteField,
27 DatetimeEditMonthField: CssAtomSet::_WebkitDatetimeEditMonthField,
28 DatetimeEditSecondField: CssAtomSet::_WebkitDatetimeEditSecondField,
29 DatetimeEditText: CssAtomSet::_WebkitDatetimeEditText,
30 DatetimeEditYearField: CssAtomSet::_WebkitDatetimeEditYearField,
31 DetailsMarker: CssAtomSet::_WebkitDetailsMarker,
32 FileUploadButton: CssAtomSet::_WebkitFileUploadButton, GenericCueRoot: CssAtomSet::_WebkitGenericCueRoot,
34 InputPlaceholder: CssAtomSet::_WebkitInputPlaceholder, InnerSpinButton: CssAtomSet::_WebkitInnerSpinButton,
36 ListButton: CssAtomSet::_WebkitListButton,
37 MediaTextTrackContainer: CssAtomSet::_WebkitMediaTextTrackContainer,
38 MediaTextTrackDisplay: CssAtomSet::_WebkitMediaTextTrackDisplay,
39 MediaTextTrackDisplayBackdrop: CssAtomSet::_WebkitMediaTextTrackDisplayBackdrop,
40 MediaTextTrackRegion: CssAtomSet::_WebkitMediaTextTrackRegion,
41 MediaTextTrackRegionContainer: CssAtomSet::_WebkitMediaTextTrackRegionContainer,
42 MeterBar: CssAtomSet::_WebkitMeterBar,
43 MeterEvenLessGoodValue: CssAtomSet::_WebkitMeterEvenLessGoodValue,
44 MeterInnerElement: CssAtomSet::_WebkitMeterInnerElement,
45 MeterOptimumValue: CssAtomSet::_WebkitMeterOptimumValue,
46 MeterSuboptimumValue: CssAtomSet::_WebkitMeterSuboptimumValue,
47 OuterSpinButton: CssAtomSet::_WebkitOuterSpinButton, ProgressBar: CssAtomSet::_WebkitProgressBar,
49 ProgressInnerElement: CssAtomSet::_WebkitProgressInnerElement,
50 ProgressValue: CssAtomSet::_WebkitProgressValue,
51 Resizer: CssAtomSet::_WebkitResizer,
52 Scrollbar: CssAtomSet::_WebkitScrollbar,
53 ScrollbarButton: CssAtomSet::_WebkitScrollbarButton,
54 ScrollbarCorner: CssAtomSet::_WebkitScrollbarCorner,
55 ScrollbarThumb: CssAtomSet::_WebkitScrollbarThumb,
56 ScrollbarTrack: CssAtomSet::_WebkitScrollbarTrack,
57 ScrollbarTrackPiece: CssAtomSet::_WebkitScrollbarTrackPiece,
58 SearchCancelButton: CssAtomSet::_WebkitSearchCancelButton,
59 SearchDecoration: CssAtomSet::_WebkitSearchDecoration,
60 SearchResultsButton: CssAtomSet::_WebkitSearchResultsButton,
61 SliderContainer: CssAtomSet::_WebkitSliderContainer,
62 SliderRunnableTrack: CssAtomSet::_WebkitSliderRunnableTrack,
63 SliderThumb: CssAtomSet::_WebkitSliderThumb,
64 PasswordAutoFillButton: CssAtomSet::_WebkitPasswordAutoFillButton,
65 TextfieldDecorationContainer: CssAtomSet::_WebkitTextfieldDecorationContainer,
66 ValidationBubble: CssAtomSet::_WebkitValidationBubble,
67 ValidationBubbleArrow: CssAtomSet::_WebkitValidationBubbleArrow,
68 ValidationBubbleArrowClipper: CssAtomSet::_WebkitValidationBubbleArrowClipper,
69 ValidationBubbleBody: CssAtomSet::_WebkitValidationBubbleBody,
70 ValidationBubbleHeading: CssAtomSet::_WebkitValidationBubbleHeading,
71 ValidationBubbleIcon: CssAtomSet::_WebkitValidationBubbleIcon,
72 ValidationBubbleMessage: CssAtomSet::_WebkitValidationBubbleMessage,
73 ValidationBubbleTextBlock: CssAtomSet::_WebkitValidationBubbleTextBlock,
74 }
75);
76
77#[derive(ToCursors, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
78#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
79#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit)]
80pub enum WebkitFunctionalPseudoElement<'a> {
81 Distributed(WebkitDistrubutedFunctionalPseudoElement<'a>),
82}
83
84impl<'a> Parse<'a> for WebkitFunctionalPseudoElement<'a> {
85 fn parse<I>(p: &mut Parser<'a, I>) -> ParserResult<Self>
86 where
87 I: Iterator<Item = Cursor> + Clone,
88 {
89 let colons = p.parse::<T![::]>()?;
90 let function = p.parse::<T![Function]>()?;
91 let c: Cursor = function.into();
92 if p.equals_atom(c, &CssAtomSet::_WebkitDistributed) {
93 let value = p.parse::<CompoundSelector>()?;
94 let close = p.parse_if_peek::<T![')']>()?;
95 Ok(Self::Distributed(WebkitDistrubutedFunctionalPseudoElement { colons, function, value, close }))
96 } else {
97 Err(Diagnostic::new(c, Diagnostic::unexpected_function))?
98 }
99 }
100}
101
102#[derive(ToCursors, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
103#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
104#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit)]
105pub struct WebkitDistrubutedFunctionalPseudoElement<'a> {
106 #[cfg_attr(feature = "visitable", visit(skip))]
107 pub colons: T![::],
108 #[cfg_attr(feature = "visitable", visit(skip))]
109 pub function: T![Function],
110 pub value: CompoundSelector<'a>,
111 #[cfg_attr(feature = "visitable", visit(skip))]
112 pub close: Option<T![')']>,
113}
114
115#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable))]
116#[derive(ToCursors, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
117#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
118pub enum WebkitFunctionalPseudoClass<'a> {
119 Any(WebkitAnyFunctionalPseudoClass<'a>),
120}
121
122impl<'a> Parse<'a> for WebkitFunctionalPseudoClass<'a> {
123 fn parse<I>(p: &mut Parser<'a, I>) -> ParserResult<Self>
124 where
125 I: Iterator<Item = Cursor> + Clone,
126 {
127 let colon = p.parse::<T![:]>()?;
128 let function = p.parse::<T![Function]>()?;
129 let c: Cursor = function.into();
130 if p.equals_atom(c, &CssAtomSet::_WebkitAny) {
131 let value = p.parse::<CompoundSelector>()?;
132 let close = p.parse_if_peek::<T![')']>()?;
133 Ok(Self::Any(WebkitAnyFunctionalPseudoClass { colon, function, value, close }))
134 } else {
135 Err(Diagnostic::new(c, Diagnostic::unexpected_function))?
136 }
137 }
138}
139
140#[derive(ToCursors, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
141#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
142#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
143pub struct WebkitAnyFunctionalPseudoClass<'a> {
144 pub colon: T![:],
145 pub function: T![Function],
146 pub value: CompoundSelector<'a>,
147 pub close: Option<T![')']>,
148}
149
150pseudo_class!(
151 #[derive(ToCursors, ToSpan, SemanticEq, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
153 #[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
154 #[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
155 pub enum WebkitPseudoClass {
156 AnimatingFullScreenTransition: CssAtomSet::_WebkitAnimatingFullScreenTransition,
157 AnyLink: CssAtomSet::_WebkitAnyLink, Autofill: CssAtomSet::_WebkitAutofill, AutofillAndObscured: CssAtomSet::_WebkitAutofillAndObscured,
160 AutofillStrongPassword: CssAtomSet::_WebkitAutofillStrongPassword,
161 AutofillStrongPasswordViewable: CssAtomSet::_WebkitAutofillStrongPasswordViewable,
162 Drag: CssAtomSet::_WebkitDrag,
163 FullPageMedia: CssAtomSet::_WebkitFullPageMedia,
164 FullScreen: CssAtomSet::_WebkitFullScreen,
165 FullScreenAncestor: CssAtomSet::_WebkitFullScreenAncestor,
166 FullScreenControlsHidden: CssAtomSet::_WebkitFullScreenControlsHidden,
167 FullScreenDocument: CssAtomSet::_WebkitFullScreenDocument,
168 }
169);