mirror of
https://github.com/servo/servo.git
synced 2025-08-04 05:00:08 +01:00
Auto merge of #19955 - emilio:number-pseudos-chrome, r=jwatt
style: Make input[type=number] pseudo-elements accessible to chrome. Bug: 1433389 Reviewed-by: jwatt MozReview-Commit-ID: 2ycajPYd3CV <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/19955) <!-- Reviewable:end -->
This commit is contained in:
commit
3a3a7cdc22
5 changed files with 509 additions and 840 deletions
|
@ -614,89 +614,89 @@ impl PseudoElement {
|
||||||
PseudoElement::MozColorSwatch =>
|
PseudoElement::MozColorSwatch =>
|
||||||
structs::SERVO_CSS_PSEUDO_ELEMENT_FLAGS_mozColorSwatch,
|
structs::SERVO_CSS_PSEUDO_ELEMENT_FLAGS_mozColorSwatch,
|
||||||
PseudoElement::MozText =>
|
PseudoElement::MozText =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::OofPlaceholder =>
|
PseudoElement::OofPlaceholder =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::FirstLetterContinuation =>
|
PseudoElement::FirstLetterContinuation =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozBlockInsideInlineWrapper =>
|
PseudoElement::MozBlockInsideInlineWrapper =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozMathMLAnonymousBlock =>
|
PseudoElement::MozMathMLAnonymousBlock =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozXULAnonymousBlock =>
|
PseudoElement::MozXULAnonymousBlock =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::HorizontalFramesetBorder =>
|
PseudoElement::HorizontalFramesetBorder =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::VerticalFramesetBorder =>
|
PseudoElement::VerticalFramesetBorder =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozLineFrame =>
|
PseudoElement::MozLineFrame =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::ButtonContent =>
|
PseudoElement::ButtonContent =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::CellContent =>
|
PseudoElement::CellContent =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::DropDownList =>
|
PseudoElement::DropDownList =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::FieldsetContent =>
|
PseudoElement::FieldsetContent =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::FramesetBlank =>
|
PseudoElement::FramesetBlank =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozDisplayComboboxControlFrame =>
|
PseudoElement::MozDisplayComboboxControlFrame =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::HtmlCanvasContent =>
|
PseudoElement::HtmlCanvasContent =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::InlineTable =>
|
PseudoElement::InlineTable =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::Table =>
|
PseudoElement::Table =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::TableCell =>
|
PseudoElement::TableCell =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::TableColGroup =>
|
PseudoElement::TableColGroup =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::TableCol =>
|
PseudoElement::TableCol =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::TableWrapper =>
|
PseudoElement::TableWrapper =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::TableRowGroup =>
|
PseudoElement::TableRowGroup =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::TableRow =>
|
PseudoElement::TableRow =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::Canvas =>
|
PseudoElement::Canvas =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::PageBreak =>
|
PseudoElement::PageBreak =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::Page =>
|
PseudoElement::Page =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::PageContent =>
|
PseudoElement::PageContent =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::PageSequence =>
|
PseudoElement::PageSequence =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::ScrolledContent =>
|
PseudoElement::ScrolledContent =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::ScrolledCanvas =>
|
PseudoElement::ScrolledCanvas =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::ScrolledPageSequence =>
|
PseudoElement::ScrolledPageSequence =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::ColumnContent =>
|
PseudoElement::ColumnContent =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::Viewport =>
|
PseudoElement::Viewport =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::ViewportScroll =>
|
PseudoElement::ViewportScroll =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::AnonymousFlexItem =>
|
PseudoElement::AnonymousFlexItem =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::AnonymousGridItem =>
|
PseudoElement::AnonymousGridItem =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::Ruby =>
|
PseudoElement::Ruby =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::RubyBase =>
|
PseudoElement::RubyBase =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::RubyBaseContainer =>
|
PseudoElement::RubyBaseContainer =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::RubyText =>
|
PseudoElement::RubyText =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::RubyTextContainer =>
|
PseudoElement::RubyTextContainer =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozTreeColumn(..) =>
|
PseudoElement::MozTreeColumn(..) =>
|
||||||
0,
|
0,
|
||||||
PseudoElement::MozTreeRow(..) =>
|
PseudoElement::MozTreeRow(..) =>
|
||||||
|
@ -720,13 +720,13 @@ impl PseudoElement {
|
||||||
PseudoElement::MozTreeDropFeedback(..) =>
|
PseudoElement::MozTreeDropFeedback(..) =>
|
||||||
0,
|
0,
|
||||||
PseudoElement::MozSVGMarkerAnonChild =>
|
PseudoElement::MozSVGMarkerAnonChild =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozSVGOuterSVGAnonChild =>
|
PseudoElement::MozSVGOuterSVGAnonChild =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozSVGForeignContent =>
|
PseudoElement::MozSVGForeignContent =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
PseudoElement::MozSVGText =>
|
PseudoElement::MozSVGText =>
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1360,367 +1360,232 @@ impl PseudoElement {
|
||||||
///
|
///
|
||||||
/// Returns `None` if the pseudo-element is not recognised.
|
/// Returns `None` if the pseudo-element is not recognised.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_slice(s: &str, in_ua_stylesheet: bool) -> Option<Self> {
|
pub fn from_slice(name: &str) -> Option<Self> {
|
||||||
#[allow(unused_imports)] use std::ascii::AsciiExt;
|
|
||||||
|
|
||||||
// We don't need to support tree pseudos because functional
|
// We don't need to support tree pseudos because functional
|
||||||
// pseudo-elements needs arguments, and thus should be created
|
// pseudo-elements needs arguments, and thus should be created
|
||||||
// via other methods.
|
// via other methods.
|
||||||
if in_ua_stylesheet || PseudoElement::After.exposed_in_non_ua_sheets() {
|
match_ignore_ascii_case! { name,
|
||||||
if s.eq_ignore_ascii_case("after") {
|
"after" => {
|
||||||
return Some(PseudoElement::After);
|
return Some(PseudoElement::After)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Before.exposed_in_non_ua_sheets() {
|
"before" => {
|
||||||
if s.eq_ignore_ascii_case("before") {
|
return Some(PseudoElement::Before)
|
||||||
return Some(PseudoElement::Before);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Backdrop.exposed_in_non_ua_sheets() {
|
"backdrop" => {
|
||||||
if s.eq_ignore_ascii_case("backdrop") {
|
return Some(PseudoElement::Backdrop)
|
||||||
return Some(PseudoElement::Backdrop);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Cue.exposed_in_non_ua_sheets() {
|
"cue" => {
|
||||||
if s.eq_ignore_ascii_case("cue") {
|
return Some(PseudoElement::Cue)
|
||||||
return Some(PseudoElement::Cue);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::FirstLetter.exposed_in_non_ua_sheets() {
|
"first-letter" => {
|
||||||
if s.eq_ignore_ascii_case("first-letter") {
|
return Some(PseudoElement::FirstLetter)
|
||||||
return Some(PseudoElement::FirstLetter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::FirstLine.exposed_in_non_ua_sheets() {
|
"first-line" => {
|
||||||
if s.eq_ignore_ascii_case("first-line") {
|
return Some(PseudoElement::FirstLine)
|
||||||
return Some(PseudoElement::FirstLine);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozSelection.exposed_in_non_ua_sheets() {
|
"-moz-selection" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-selection") {
|
return Some(PseudoElement::MozSelection)
|
||||||
return Some(PseudoElement::MozSelection);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozFocusInner.exposed_in_non_ua_sheets() {
|
"-moz-focus-inner" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-focus-inner") {
|
return Some(PseudoElement::MozFocusInner)
|
||||||
return Some(PseudoElement::MozFocusInner);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozFocusOuter.exposed_in_non_ua_sheets() {
|
"-moz-focus-outer" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-focus-outer") {
|
return Some(PseudoElement::MozFocusOuter)
|
||||||
return Some(PseudoElement::MozFocusOuter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozListBullet.exposed_in_non_ua_sheets() {
|
"-moz-list-bullet" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-list-bullet") {
|
return Some(PseudoElement::MozListBullet)
|
||||||
return Some(PseudoElement::MozListBullet);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozListNumber.exposed_in_non_ua_sheets() {
|
"-moz-list-number" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-list-number") {
|
return Some(PseudoElement::MozListNumber)
|
||||||
return Some(PseudoElement::MozListNumber);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozMathAnonymous.exposed_in_non_ua_sheets() {
|
"-moz-math-anonymous" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-math-anonymous") {
|
return Some(PseudoElement::MozMathAnonymous)
|
||||||
return Some(PseudoElement::MozMathAnonymous);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozNumberWrapper.exposed_in_non_ua_sheets() {
|
"-moz-number-wrapper" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-number-wrapper") {
|
return Some(PseudoElement::MozNumberWrapper)
|
||||||
return Some(PseudoElement::MozNumberWrapper);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozNumberText.exposed_in_non_ua_sheets() {
|
"-moz-number-text" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-number-text") {
|
return Some(PseudoElement::MozNumberText)
|
||||||
return Some(PseudoElement::MozNumberText);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozNumberSpinBox.exposed_in_non_ua_sheets() {
|
"-moz-number-spin-box" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-number-spin-box") {
|
return Some(PseudoElement::MozNumberSpinBox)
|
||||||
return Some(PseudoElement::MozNumberSpinBox);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozNumberSpinUp.exposed_in_non_ua_sheets() {
|
"-moz-number-spin-up" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-number-spin-up") {
|
return Some(PseudoElement::MozNumberSpinUp)
|
||||||
return Some(PseudoElement::MozNumberSpinUp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozNumberSpinDown.exposed_in_non_ua_sheets() {
|
"-moz-number-spin-down" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-number-spin-down") {
|
return Some(PseudoElement::MozNumberSpinDown)
|
||||||
return Some(PseudoElement::MozNumberSpinDown);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozProgressBar.exposed_in_non_ua_sheets() {
|
"-moz-progress-bar" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-progress-bar") {
|
return Some(PseudoElement::MozProgressBar)
|
||||||
return Some(PseudoElement::MozProgressBar);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozRangeTrack.exposed_in_non_ua_sheets() {
|
"-moz-range-track" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-range-track") {
|
return Some(PseudoElement::MozRangeTrack)
|
||||||
return Some(PseudoElement::MozRangeTrack);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozRangeProgress.exposed_in_non_ua_sheets() {
|
"-moz-range-progress" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-range-progress") {
|
return Some(PseudoElement::MozRangeProgress)
|
||||||
return Some(PseudoElement::MozRangeProgress);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozRangeThumb.exposed_in_non_ua_sheets() {
|
"-moz-range-thumb" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-range-thumb") {
|
return Some(PseudoElement::MozRangeThumb)
|
||||||
return Some(PseudoElement::MozRangeThumb);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozMeterBar.exposed_in_non_ua_sheets() {
|
"-moz-meter-bar" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-meter-bar") {
|
return Some(PseudoElement::MozMeterBar)
|
||||||
return Some(PseudoElement::MozMeterBar);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozPlaceholder.exposed_in_non_ua_sheets() {
|
"-moz-placeholder" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-placeholder") {
|
return Some(PseudoElement::MozPlaceholder)
|
||||||
return Some(PseudoElement::MozPlaceholder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Placeholder.exposed_in_non_ua_sheets() {
|
"placeholder" => {
|
||||||
if s.eq_ignore_ascii_case("placeholder") {
|
return Some(PseudoElement::Placeholder)
|
||||||
return Some(PseudoElement::Placeholder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozColorSwatch.exposed_in_non_ua_sheets() {
|
"-moz-color-swatch" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-color-swatch") {
|
return Some(PseudoElement::MozColorSwatch)
|
||||||
return Some(PseudoElement::MozColorSwatch);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozText.exposed_in_non_ua_sheets() {
|
"-moz-text" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-text") {
|
return Some(PseudoElement::MozText)
|
||||||
return Some(PseudoElement::MozText);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::OofPlaceholder.exposed_in_non_ua_sheets() {
|
"-moz-oof-placeholder" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-oof-placeholder") {
|
return Some(PseudoElement::OofPlaceholder)
|
||||||
return Some(PseudoElement::OofPlaceholder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::FirstLetterContinuation.exposed_in_non_ua_sheets() {
|
"-moz-first-letter-continuation" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-first-letter-continuation") {
|
return Some(PseudoElement::FirstLetterContinuation)
|
||||||
return Some(PseudoElement::FirstLetterContinuation);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozBlockInsideInlineWrapper.exposed_in_non_ua_sheets() {
|
"-moz-block-inside-inline-wrapper" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-block-inside-inline-wrapper") {
|
return Some(PseudoElement::MozBlockInsideInlineWrapper)
|
||||||
return Some(PseudoElement::MozBlockInsideInlineWrapper);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozMathMLAnonymousBlock.exposed_in_non_ua_sheets() {
|
"-moz-mathml-anonymous-block" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-mathml-anonymous-block") {
|
return Some(PseudoElement::MozMathMLAnonymousBlock)
|
||||||
return Some(PseudoElement::MozMathMLAnonymousBlock);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozXULAnonymousBlock.exposed_in_non_ua_sheets() {
|
"-moz-xul-anonymous-block" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-xul-anonymous-block") {
|
return Some(PseudoElement::MozXULAnonymousBlock)
|
||||||
return Some(PseudoElement::MozXULAnonymousBlock);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::HorizontalFramesetBorder.exposed_in_non_ua_sheets() {
|
"-moz-hframeset-border" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-hframeset-border") {
|
return Some(PseudoElement::HorizontalFramesetBorder)
|
||||||
return Some(PseudoElement::HorizontalFramesetBorder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::VerticalFramesetBorder.exposed_in_non_ua_sheets() {
|
"-moz-vframeset-border" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-vframeset-border") {
|
return Some(PseudoElement::VerticalFramesetBorder)
|
||||||
return Some(PseudoElement::VerticalFramesetBorder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozLineFrame.exposed_in_non_ua_sheets() {
|
"-moz-line-frame" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-line-frame") {
|
return Some(PseudoElement::MozLineFrame)
|
||||||
return Some(PseudoElement::MozLineFrame);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::ButtonContent.exposed_in_non_ua_sheets() {
|
"-moz-button-content" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-button-content") {
|
return Some(PseudoElement::ButtonContent)
|
||||||
return Some(PseudoElement::ButtonContent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::CellContent.exposed_in_non_ua_sheets() {
|
"-moz-cell-content" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-cell-content") {
|
return Some(PseudoElement::CellContent)
|
||||||
return Some(PseudoElement::CellContent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::DropDownList.exposed_in_non_ua_sheets() {
|
"-moz-dropdown-list" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-dropdown-list") {
|
return Some(PseudoElement::DropDownList)
|
||||||
return Some(PseudoElement::DropDownList);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::FieldsetContent.exposed_in_non_ua_sheets() {
|
"-moz-fieldset-content" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-fieldset-content") {
|
return Some(PseudoElement::FieldsetContent)
|
||||||
return Some(PseudoElement::FieldsetContent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::FramesetBlank.exposed_in_non_ua_sheets() {
|
"-moz-frameset-blank" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-frameset-blank") {
|
return Some(PseudoElement::FramesetBlank)
|
||||||
return Some(PseudoElement::FramesetBlank);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozDisplayComboboxControlFrame.exposed_in_non_ua_sheets() {
|
"-moz-display-comboboxcontrol-frame" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-display-comboboxcontrol-frame") {
|
return Some(PseudoElement::MozDisplayComboboxControlFrame)
|
||||||
return Some(PseudoElement::MozDisplayComboboxControlFrame);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::HtmlCanvasContent.exposed_in_non_ua_sheets() {
|
"-moz-html-canvas-content" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-html-canvas-content") {
|
return Some(PseudoElement::HtmlCanvasContent)
|
||||||
return Some(PseudoElement::HtmlCanvasContent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::InlineTable.exposed_in_non_ua_sheets() {
|
"-moz-inline-table" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-inline-table") {
|
return Some(PseudoElement::InlineTable)
|
||||||
return Some(PseudoElement::InlineTable);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Table.exposed_in_non_ua_sheets() {
|
"-moz-table" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-table") {
|
return Some(PseudoElement::Table)
|
||||||
return Some(PseudoElement::Table);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::TableCell.exposed_in_non_ua_sheets() {
|
"-moz-table-cell" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-table-cell") {
|
return Some(PseudoElement::TableCell)
|
||||||
return Some(PseudoElement::TableCell);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::TableColGroup.exposed_in_non_ua_sheets() {
|
"-moz-table-column-group" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-table-column-group") {
|
return Some(PseudoElement::TableColGroup)
|
||||||
return Some(PseudoElement::TableColGroup);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::TableCol.exposed_in_non_ua_sheets() {
|
"-moz-table-column" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-table-column") {
|
return Some(PseudoElement::TableCol)
|
||||||
return Some(PseudoElement::TableCol);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::TableWrapper.exposed_in_non_ua_sheets() {
|
"-moz-table-wrapper" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-table-wrapper") {
|
return Some(PseudoElement::TableWrapper)
|
||||||
return Some(PseudoElement::TableWrapper);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::TableRowGroup.exposed_in_non_ua_sheets() {
|
"-moz-table-row-group" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-table-row-group") {
|
return Some(PseudoElement::TableRowGroup)
|
||||||
return Some(PseudoElement::TableRowGroup);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::TableRow.exposed_in_non_ua_sheets() {
|
"-moz-table-row" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-table-row") {
|
return Some(PseudoElement::TableRow)
|
||||||
return Some(PseudoElement::TableRow);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Canvas.exposed_in_non_ua_sheets() {
|
"-moz-canvas" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-canvas") {
|
return Some(PseudoElement::Canvas)
|
||||||
return Some(PseudoElement::Canvas);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::PageBreak.exposed_in_non_ua_sheets() {
|
"-moz-pagebreak" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-pagebreak") {
|
return Some(PseudoElement::PageBreak)
|
||||||
return Some(PseudoElement::PageBreak);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Page.exposed_in_non_ua_sheets() {
|
"-moz-page" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-page") {
|
return Some(PseudoElement::Page)
|
||||||
return Some(PseudoElement::Page);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::PageContent.exposed_in_non_ua_sheets() {
|
"-moz-pagecontent" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-pagecontent") {
|
return Some(PseudoElement::PageContent)
|
||||||
return Some(PseudoElement::PageContent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::PageSequence.exposed_in_non_ua_sheets() {
|
"-moz-page-sequence" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-page-sequence") {
|
return Some(PseudoElement::PageSequence)
|
||||||
return Some(PseudoElement::PageSequence);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::ScrolledContent.exposed_in_non_ua_sheets() {
|
"-moz-scrolled-content" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-scrolled-content") {
|
return Some(PseudoElement::ScrolledContent)
|
||||||
return Some(PseudoElement::ScrolledContent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::ScrolledCanvas.exposed_in_non_ua_sheets() {
|
"-moz-scrolled-canvas" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-scrolled-canvas") {
|
return Some(PseudoElement::ScrolledCanvas)
|
||||||
return Some(PseudoElement::ScrolledCanvas);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::ScrolledPageSequence.exposed_in_non_ua_sheets() {
|
"-moz-scrolled-page-sequence" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-scrolled-page-sequence") {
|
return Some(PseudoElement::ScrolledPageSequence)
|
||||||
return Some(PseudoElement::ScrolledPageSequence);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::ColumnContent.exposed_in_non_ua_sheets() {
|
"-moz-column-content" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-column-content") {
|
return Some(PseudoElement::ColumnContent)
|
||||||
return Some(PseudoElement::ColumnContent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Viewport.exposed_in_non_ua_sheets() {
|
"-moz-viewport" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-viewport") {
|
return Some(PseudoElement::Viewport)
|
||||||
return Some(PseudoElement::Viewport);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::ViewportScroll.exposed_in_non_ua_sheets() {
|
"-moz-viewport-scroll" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-viewport-scroll") {
|
return Some(PseudoElement::ViewportScroll)
|
||||||
return Some(PseudoElement::ViewportScroll);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::AnonymousFlexItem.exposed_in_non_ua_sheets() {
|
"-moz-anonymous-flex-item" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-anonymous-flex-item") {
|
return Some(PseudoElement::AnonymousFlexItem)
|
||||||
return Some(PseudoElement::AnonymousFlexItem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::AnonymousGridItem.exposed_in_non_ua_sheets() {
|
"-moz-anonymous-grid-item" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-anonymous-grid-item") {
|
return Some(PseudoElement::AnonymousGridItem)
|
||||||
return Some(PseudoElement::AnonymousGridItem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::Ruby.exposed_in_non_ua_sheets() {
|
"-moz-ruby" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-ruby") {
|
return Some(PseudoElement::Ruby)
|
||||||
return Some(PseudoElement::Ruby);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::RubyBase.exposed_in_non_ua_sheets() {
|
"-moz-ruby-base" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-ruby-base") {
|
return Some(PseudoElement::RubyBase)
|
||||||
return Some(PseudoElement::RubyBase);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::RubyBaseContainer.exposed_in_non_ua_sheets() {
|
"-moz-ruby-base-container" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-ruby-base-container") {
|
return Some(PseudoElement::RubyBaseContainer)
|
||||||
return Some(PseudoElement::RubyBaseContainer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::RubyText.exposed_in_non_ua_sheets() {
|
"-moz-ruby-text" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-ruby-text") {
|
return Some(PseudoElement::RubyText)
|
||||||
return Some(PseudoElement::RubyText);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::RubyTextContainer.exposed_in_non_ua_sheets() {
|
"-moz-ruby-text-container" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-ruby-text-container") {
|
return Some(PseudoElement::RubyTextContainer)
|
||||||
return Some(PseudoElement::RubyTextContainer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozSVGMarkerAnonChild.exposed_in_non_ua_sheets() {
|
"-moz-svg-marker-anon-child" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-svg-marker-anon-child") {
|
return Some(PseudoElement::MozSVGMarkerAnonChild)
|
||||||
return Some(PseudoElement::MozSVGMarkerAnonChild);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozSVGOuterSVGAnonChild.exposed_in_non_ua_sheets() {
|
"-moz-svg-outer-svg-anon-child" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-svg-outer-svg-anon-child") {
|
return Some(PseudoElement::MozSVGOuterSVGAnonChild)
|
||||||
return Some(PseudoElement::MozSVGOuterSVGAnonChild);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozSVGForeignContent.exposed_in_non_ua_sheets() {
|
"-moz-svg-foreign-content" => {
|
||||||
if s.eq_ignore_ascii_case("-moz-svg-foreign-content") {
|
return Some(PseudoElement::MozSVGForeignContent)
|
||||||
return Some(PseudoElement::MozSVGForeignContent);
|
}
|
||||||
}
|
"-moz-svg-text" => {
|
||||||
|
return Some(PseudoElement::MozSVGText)
|
||||||
}
|
}
|
||||||
if in_ua_stylesheet || PseudoElement::MozSVGText.exposed_in_non_ua_sheets() {
|
_ => {
|
||||||
if s.eq_ignore_ascii_case("-moz-svg-text") {
|
// FIXME: -moz-tree check should probably be
|
||||||
return Some(PseudoElement::MozSVGText);
|
// ascii-case-insensitive.
|
||||||
|
if name.starts_with("-moz-tree-") {
|
||||||
|
return PseudoElement::tree_pseudo_element(name, Box::new([]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -124,16 +124,26 @@ impl PseudoElement {
|
||||||
!self.is_eager() && !self.is_precomputed()
|
!self.is_eager() && !self.is_precomputed()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Whether this pseudo-element is web-exposed.
|
|
||||||
pub fn exposed_in_non_ua_sheets(&self) -> bool {
|
|
||||||
(self.flags() & structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY) == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Whether this pseudo-element supports user action selectors.
|
/// Whether this pseudo-element supports user action selectors.
|
||||||
pub fn supports_user_action_state(&self) -> bool {
|
pub fn supports_user_action_state(&self) -> bool {
|
||||||
(self.flags() & structs::CSS_PSEUDO_ELEMENT_SUPPORTS_USER_ACTION_STATE) != 0
|
(self.flags() & structs::CSS_PSEUDO_ELEMENT_SUPPORTS_USER_ACTION_STATE) != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Whether this pseudo-element is enabled for all content.
|
||||||
|
pub fn enabled_in_content(&self) -> bool {
|
||||||
|
(self.flags() & structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS_AND_CHROME) == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Whether this pseudo is enabled explicitly in UA sheets.
|
||||||
|
pub fn enabled_in_ua_sheets(&self) -> bool {
|
||||||
|
(self.flags() & structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS) != 0
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Whether this pseudo is enabled explicitly in chrome sheets.
|
||||||
|
pub fn enabled_in_chrome(&self) -> bool {
|
||||||
|
(self.flags() & structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_CHROME) != 0
|
||||||
|
}
|
||||||
|
|
||||||
/// Whether this pseudo-element skips flex/grid container display-based
|
/// Whether this pseudo-element skips flex/grid container display-based
|
||||||
/// fixup.
|
/// fixup.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -114,7 +114,7 @@ impl PseudoElement {
|
||||||
% if pseudo.is_tree_pseudo_element():
|
% if pseudo.is_tree_pseudo_element():
|
||||||
0,
|
0,
|
||||||
% elif pseudo.is_anon_box():
|
% elif pseudo.is_anon_box():
|
||||||
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
|
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
|
||||||
% else:
|
% else:
|
||||||
structs::SERVO_CSS_PSEUDO_ELEMENT_FLAGS_${pseudo.original_ident},
|
structs::SERVO_CSS_PSEUDO_ELEMENT_FLAGS_${pseudo.original_ident},
|
||||||
% endif
|
% endif
|
||||||
|
@ -224,19 +224,24 @@ impl PseudoElement {
|
||||||
///
|
///
|
||||||
/// Returns `None` if the pseudo-element is not recognised.
|
/// Returns `None` if the pseudo-element is not recognised.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_slice(s: &str, in_ua_stylesheet: bool) -> Option<Self> {
|
pub fn from_slice(name: &str) -> Option<Self> {
|
||||||
#[allow(unused_imports)] use std::ascii::AsciiExt;
|
|
||||||
|
|
||||||
// We don't need to support tree pseudos because functional
|
// We don't need to support tree pseudos because functional
|
||||||
// pseudo-elements needs arguments, and thus should be created
|
// pseudo-elements needs arguments, and thus should be created
|
||||||
// via other methods.
|
// via other methods.
|
||||||
% for pseudo in SIMPLE_PSEUDOS:
|
match_ignore_ascii_case! { name,
|
||||||
if in_ua_stylesheet || ${pseudo_element_variant(pseudo)}.exposed_in_non_ua_sheets() {
|
% for pseudo in SIMPLE_PSEUDOS:
|
||||||
if s.eq_ignore_ascii_case("${pseudo.value[1:]}") {
|
"${pseudo.value[1:]}" => {
|
||||||
return Some(${pseudo_element_variant(pseudo)});
|
return Some(${pseudo_element_variant(pseudo)})
|
||||||
|
}
|
||||||
|
% endfor
|
||||||
|
_ => {
|
||||||
|
// FIXME: -moz-tree check should probably be
|
||||||
|
// ascii-case-insensitive.
|
||||||
|
if name.starts_with("-moz-tree-") {
|
||||||
|
return PseudoElement::tree_pseudo_element(name, Box::new([]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
% endfor
|
}
|
||||||
|
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,10 +159,10 @@ impl NonTSPseudoClass {
|
||||||
/// Returns whether the pseudo-class is enabled in content sheets.
|
/// Returns whether the pseudo-class is enabled in content sheets.
|
||||||
fn is_enabled_in_content(&self) -> bool {
|
fn is_enabled_in_content(&self) -> bool {
|
||||||
use gecko_bindings::structs::mozilla;
|
use gecko_bindings::structs::mozilla;
|
||||||
match self {
|
match *self {
|
||||||
// For pseudo-classes with pref, the availability in content
|
// For pseudo-classes with pref, the availability in content
|
||||||
// depends on the pref.
|
// depends on the pref.
|
||||||
&NonTSPseudoClass::Fullscreen =>
|
NonTSPseudoClass::Fullscreen =>
|
||||||
unsafe { mozilla::StylePrefs_sUnprefixedFullscreenApiEnabled },
|
unsafe { mozilla::StylePrefs_sUnprefixedFullscreenApiEnabled },
|
||||||
// Otherwise, a pseudo-class is enabled in content when it
|
// Otherwise, a pseudo-class is enabled in content when it
|
||||||
// doesn't have any enabled flag.
|
// doesn't have any enabled flag.
|
||||||
|
@ -322,6 +322,25 @@ impl<'a> SelectorParser<'a> {
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_pseudo_element_enabled(
|
||||||
|
&self,
|
||||||
|
pseudo_element: &PseudoElement,
|
||||||
|
) -> bool {
|
||||||
|
if pseudo_element.enabled_in_content() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.in_user_agent_stylesheet() && pseudo_element.enabled_in_ua_sheets() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.chrome_rules_enabled() && pseudo_element.enabled_in_chrome() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'i> ::selectors::Parser<'i> for SelectorParser<'a> {
|
impl<'a, 'i> ::selectors::Parser<'i> for SelectorParser<'a> {
|
||||||
|
@ -418,17 +437,15 @@ impl<'a, 'i> ::selectors::Parser<'i> for SelectorParser<'a> {
|
||||||
location: SourceLocation,
|
location: SourceLocation,
|
||||||
name: CowRcStr<'i>,
|
name: CowRcStr<'i>,
|
||||||
) -> Result<PseudoElement, ParseError<'i>> {
|
) -> Result<PseudoElement, ParseError<'i>> {
|
||||||
PseudoElement::from_slice(&name, self.in_user_agent_stylesheet())
|
if let Some(pseudo) = PseudoElement::from_slice(&name) {
|
||||||
.or_else(|| {
|
if self.is_pseudo_element_enabled(&pseudo) {
|
||||||
// FIXME: -moz-tree check should probably be
|
return Ok(pseudo);
|
||||||
// ascii-case-insensitive.
|
}
|
||||||
if name.starts_with("-moz-tree-") {
|
}
|
||||||
PseudoElement::tree_pseudo_element(&name, Box::new([]))
|
|
||||||
} else {
|
Err(location.new_custom_error(
|
||||||
None
|
SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name)
|
||||||
}
|
))
|
||||||
})
|
|
||||||
.ok_or(location.new_custom_error(SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name.clone())))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_functional_pseudo_element<'t>(
|
fn parse_functional_pseudo_element<'t>(
|
||||||
|
@ -456,7 +473,9 @@ impl<'a, 'i> ::selectors::Parser<'i> for SelectorParser<'a> {
|
||||||
return Ok(pseudo);
|
return Ok(pseudo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(parser.new_custom_error(SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name.clone())))
|
Err(parser.new_custom_error(
|
||||||
|
SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name)
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_namespace(&self) -> Option<Namespace> {
|
fn default_namespace(&self) -> Option<Namespace> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue