#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
#[allow(missing_docs)]
pub enum PseudoElement
{
after,
backdrop(Option<VendorPrefix>),
before,
cue,
first_letter,
first_line,
marker,
grammar_error,
placeholder(Option<VendorPrefix>),
selection(Option<VendorPrefix>),
spelling_error,
progress_bar(Option<VendorPrefix>),
range_progress(Option<VendorPrefix>),
range_thumb(Option<VendorPrefix>),
range_track(Option<VendorPrefix>),
anonymous_block(Option<VendorPrefix>),
details_summary(Option<VendorPrefix>),
details_content(Option<VendorPrefix>),
text(Option<VendorPrefix>),
input_text(Option<VendorPrefix>),
table_wrapper(Option<VendorPrefix>),
anonymous_table_wrapper(Option<VendorPrefix>),
anonymous_table(Option<VendorPrefix>),
anonymous_table_row(Option<VendorPrefix>),
anonymous_table_cell(Option<VendorPrefix>),
inline_block_wrapper(Option<VendorPrefix>),
inline_absolute(Option<VendorPrefix>),
browse(Option<VendorPrefix>),
check(Option<VendorPrefix>),
clear(Option<VendorPrefix>),
expand(Option<VendorPrefix>),
fill_lower(Option<VendorPrefix>),
reveal(Option<VendorPrefix>),
value(Option<VendorPrefix>),
anonymous_positioned_block(Option<VendorPrefix>),
canvas(Option<VendorPrefix>),
cell_content(Option<VendorPrefix>),
focus_inner(Option<VendorPrefix>),
focus_outer(Option<VendorPrefix>),
inline_table(Option<VendorPrefix>),
page(Option<VendorPrefix>),
page_sequence(Option<VendorPrefix>),
pagebreak(Option<VendorPrefix>),
pagecontent(Option<VendorPrefix>),
scrolled_canvas(Option<VendorPrefix>),
scrolled_content(Option<VendorPrefix>),
scrolled_page_sequence(Option<VendorPrefix>),
svg_foreign_content(Option<VendorPrefix>),
table(Option<VendorPrefix>),
table_cell(Option<VendorPrefix>),
table_column(Option<VendorPrefix>),
table_column_group(Option<VendorPrefix>),
table_outer(Option<VendorPrefix>),
table_row(Option<VendorPrefix>),
table_row_group(Option<VendorPrefix>),
viewport(Option<VendorPrefix>),
viewport_scroll(Option<VendorPrefix>),
xul_anonymous_block(Option<VendorPrefix>),
tree_cell_text(Option<VendorPrefix>),
tree_row(Option<VendorPrefix>),
file_upload_button(Option<VendorPrefix>),
inner_spin_button(Option<VendorPrefix>),
meter_bar(Option<VendorPrefix>),
meter_even_less_good_value(Option<VendorPrefix>),
meter_inner_element(Option<VendorPrefix>),
meter_optimum_value(Option<VendorPrefix>),
meter_suboptimum_value(Option<VendorPrefix>),
outer_spin_button(Option<VendorPrefix>),
progress_inner_element(Option<VendorPrefix>),
progress_value(Option<VendorPrefix>),
search_cancel_button(Option<VendorPrefix>),
search_results_button(Option<VendorPrefix>),
search_decoration(Option<VendorPrefix>),
}
impl ToCss for PseudoElement
{
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result
{
#[inline(always)]
fn write<W: fmt::Write>(dest: &mut W, classWithColonColon: &str) -> fmt::Result
{
dest.write_str(classWithColonColon)
}
#[inline(always)]
fn write_with_vendor_prefix<W: fmt::Write>(dest: &mut W, vendorPrefix: &Option<VendorPrefix>, classWithoutColonColon: &str) -> fmt::Result
{
dest.write_str("::")?;
if let &Some(ref vendorPrefix) = vendorPrefix
{
vendorPrefix.to_css(dest)?;
}
dest.write_str(classWithoutColonColon)
}
use self::PseudoElement::*;
use self::VendorPrefix::*;
match *self
{
after => write(dest, "::after"),
backdrop(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "backdrop"),
before => write(dest, "::before"),
cue => write(dest, "::cue"),
first_letter => write(dest, "::first-letter"),
first_line => write(dest, "::first-line"),
grammar_error => write(dest, "::grammar-error"),
marker => write(dest, "::marker"),
placeholder(ref vendorPrefix) => match *vendorPrefix
{
Some(webkit) => write(dest, "::-webkit-input-placeholder"),
Some(ms) => write(dest, "::-ms-input-placeholder"),
_ => write_with_vendor_prefix(dest, vendorPrefix, "placeholder"),
},
selection(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "selection"),
spelling_error => write(dest, "::spelling-error"),
progress_bar(ref vendorPrefix) => match *vendorPrefix
{
Some(moz) => write(dest, "::-moz-progress-bar"),
Some(webkit) => write(dest, "::-webkit-progress-bar"),
Some(ms) => write(dest, "::-ms-fill"),
_ => write_with_vendor_prefix(dest, vendorPrefix, "progress-bar"), },
range_progress(ref vendorPrefix) => match *vendorPrefix
{
Some(moz) => write(dest, "::-moz-range-progress"),
Some(ms) => write(dest, "::-ms-fill-upper"),
_ => write_with_vendor_prefix(dest, vendorPrefix, "range-progress"), },
range_thumb(ref vendorPrefix) => match *vendorPrefix
{
Some(moz) => write(dest, "::-moz-range-thumb"),
Some(webkit) => write(dest, "::-webkit-slider-thumb"),
Some(ms) => write(dest, "::-ms-thumb"),
_ => write_with_vendor_prefix(dest, vendorPrefix, "range-thumb"), },
range_track(ref vendorPrefix) => match *vendorPrefix
{
Some(moz) => write(dest, "::-moz-range-track"),
Some(webkit) => write(dest, "::-webkit-slider-runnable-track"),
Some(ms) => write(dest, "::-ms-track"),
_ => write_with_vendor_prefix(dest, vendorPrefix, "range-track"), },
details_summary(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "details-summary"),
details_content(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "details-content"),
text(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "text"),
input_text(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "input-text"),
table_wrapper(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "table-wrapper"),
anonymous_table_wrapper(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "anonymous-table-wrapper"),
anonymous_table(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "anonymous-table"),
anonymous_table_row(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "anonymous-table-row"),
anonymous_table_cell(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "anonymous-table-cell"),
anonymous_block(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "anonymous-block"),
inline_block_wrapper(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "inline-block-wrapper"),
inline_absolute(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "inline-absolute"),
browse(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "browse"),
check(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "check"),
clear(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "clear"),
expand(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "expand"),
fill_lower(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "fill-lower"),
reveal(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "reveal"),
value(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "value"),
anonymous_positioned_block(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "anonymous-positioned-block"),
canvas(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "canvas"),
cell_content(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "cell-content"),
focus_inner(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "focus-inner"),
focus_outer(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "focus-outer"),
inline_table(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "inline-table"),
page(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "page"),
page_sequence(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "page-sequence"),
pagebreak(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "pagebreak"),
pagecontent(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "pagecontent"),
scrolled_canvas(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "scrolled-canvas"),
scrolled_content(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "scrolled-content"),
scrolled_page_sequence(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "scrolled-page-sequence"),
svg_foreign_content(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "svg-foreign-content"),
table(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "table"),
table_cell(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "table-cell"),
table_column(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "table-column"),
table_column_group(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "table-column-group"),
table_outer(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "table-outer"),
table_row(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "table-row"),
table_row_group(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "table-row-group"),
viewport(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "viewport"),
viewport_scroll(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "viewport-scroll"),
xul_anonymous_block(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "xul-anonymous-block"),
tree_cell_text(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "tree-cell-text"),
tree_row(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "tree-row"),
file_upload_button(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "file-upload-button"),
inner_spin_button(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "inner-spin-button"),
meter_bar(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "meter-bar"),
meter_even_less_good_value(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "meter-even-less-good-value"),
meter_inner_element(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "meter-inner-element"),
meter_optimum_value(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "meter-optimum-value"),
meter_suboptimum_value(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "meter-suboptimum-value"),
outer_spin_button(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "outer-spin-button"),
progress_inner_element(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "progress-inner-element"),
progress_value(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "progress-value"),
search_cancel_button(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "search-cancel-button"),
search_results_button(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "search-results-button"),
search_decoration(ref vendorPrefix) => write_with_vendor_prefix(dest, vendorPrefix, "search-decoration"),
}
}
}
impl ::selectors::parser::PseudoElement for PseudoElement
{
type Impl = OurSelectorImpl;
fn supports_pseudo_class(&self, pseudo_class: &<Self::Impl as SelectorImpl>::NonTSPseudoClass) -> bool
{
if !self.supports_user_action_state()
{
return false;
}
pseudo_class.is_safe_user_action_state()
}
}
impl PseudoElement
{
pub fn supports_user_action_state(&self) -> bool
{
use self::PseudoElement::*;
match *self
{
after => false,
before => false,
backdrop(..) => false,
cue => false,
first_letter => false,
first_line => false,
progress_bar(..) => true,
range_track(..) => true,
range_progress(..) => true,
range_thumb(..) => true,
placeholder(..) => true,
_ => false,
}
}
#[inline(always)]
fn applyVendorPrefix(pseudoElementName: VendorPrefixablePseudoElementName, applyVendorPrefixToPseudoElements: &HashMap<VendorPrefixablePseudoElementName, VendorPrefix>) -> Option<VendorPrefix>
{
applyVendorPrefixToPseudoElements.get(&pseudoElementName).map(|vendorPrefix| vendorPrefix.clone())
}
#[inline(always)]
pub(crate) fn parse_without_arguments<'i>(applyVendorPrefixToPseudoElements: &HashMap<VendorPrefixablePseudoElementName, VendorPrefix>, name: CowRcStr<'i>) -> Result<Self, ParseError<'i, SelectorParseError<'i, CustomParseError<'i>>>>
{
use self::PseudoElement::*;
use self::VendorPrefix::*;
match_ignore_ascii_case!
{
&name,
"after" => Ok(after),
"backdrop" => Ok(backdrop(Self::applyVendorPrefix(VendorPrefixablePseudoElementName::backdrop, applyVendorPrefixToPseudoElements))),
"-ms-backdrop" => Ok(backdrop(Some(ms))),
"-webkit-backdrop" => Ok(backdrop(Some(webkit))),
"before" => Ok(before),
"cue" => Ok(cue),
"first-letter" => Ok(first_letter),
"first-line" => Ok(first_line),
"grammar-error" => Ok(grammar_error),
"marker" => Ok(marker),
"placeholder" => Ok(placeholder(Self::applyVendorPrefix(VendorPrefixablePseudoElementName::placeholder, applyVendorPrefixToPseudoElements))),
"-ms-placeholder" => Ok(placeholder(Some(ms))),
"-webkit-input-placeholder" => Ok(placeholder(Some(ms))),
"selection" => Ok(selection(Self::applyVendorPrefix(VendorPrefixablePseudoElementName::selection, applyVendorPrefixToPseudoElements))),
"-moz-selection" => Ok(selection(Some(moz))),
"spelling-error" => Ok(spelling_error),
"progress-bar" => Ok(progress_bar(Self::applyVendorPrefix(VendorPrefixablePseudoElementName::progress_bar, applyVendorPrefixToPseudoElements))),
"-moz-progress-bar" => Ok(progress_bar(Some(moz))),
"-webkit-progress-bar" => Ok(progress_bar(Some(webkit))),
"-ms-fill" => Ok(progress_bar(Some(ms))),
"range-progress" => Ok(range_progress(Self::applyVendorPrefix(VendorPrefixablePseudoElementName::range_progress, applyVendorPrefixToPseudoElements))),
"-moz-range-progress" => Ok(range_progress(Some(moz))),
"-ms-fill-upper" => Ok(range_progress(Some(ms))),
"range-thumb" => Ok(range_thumb(Self::applyVendorPrefix(VendorPrefixablePseudoElementName::range_thumb, applyVendorPrefixToPseudoElements))),
"-moz-range-thumb" => Ok(range_thumb(Some(moz))),
"-webkit-slider-thumb" => Ok(range_thumb(Some(webkit))),
"-ms-thumb" => Ok(range_thumb(Some(ms))),
"range-track" => Ok(range_track(Self::applyVendorPrefix(VendorPrefixablePseudoElementName::range_track, applyVendorPrefixToPseudoElements))),
"-moz-range-track" => Ok(range_track(Some(moz))),
"-webkit-slider-runnable-track" => Ok(range_track(Some(webkit))),
"-ms-track" => Ok(range_track(Some(ms))),
"-servo-anonymous-block" => Ok(anonymous_block(Some(servo))),
"-moz-anonymous-block" => Ok(anonymous_block(Some(moz))),
"-servo-details-summary" => Ok(details_summary(Some(servo))),
"-servo-details-content" => Ok(details_content(Some(servo))),
"-servo-text" => Ok(text(Some(servo))),
"-servo-input-text" => Ok(input_text(Some(servo))),
"-servo-table-wrapper" => Ok(table_wrapper(Some(servo))),
"-servo-anonymous-table-wrapper" => Ok(anonymous_table_wrapper(Some(servo))),
"-servo-anonymous-table" => Ok(anonymous_table(Some(servo))),
"-servo-anonymous-table-row" => Ok(anonymous_table_row(Some(servo))),
"-servo-anonymous-table-cell" => Ok(anonymous_table_cell(Some(servo))),
"-servo-inline-block-wrapper" => Ok(inline_block_wrapper(Some(servo))),
"-servo-inline-absolute" => Ok(inline_absolute(Some(servo))),
"-ms-browse" => Ok(browse(Some(ms))),
"-ms-check" => Ok(check(Some(ms))),
"-ms-clear" => Ok(clear(Some(ms))),
"-ms-expand" => Ok(expand(Some(ms))),
"-ms-fill-lower" => Ok(fill_lower(Some(ms))),
"-ms-reveal" => Ok(reveal(Some(ms))),
"-ms-value" => Ok(value(Some(ms))),
"-moz-anonymous-positioned-block" => Ok(anonymous_positioned_block(Some(moz))),
"-moz-canvas" => Ok(canvas(Some(moz))),
"-moz-cell-content" => Ok(cell_content(Some(moz))),
"-moz-focus-inner" => Ok(focus_inner(Some(moz))),
"-moz-focus-outer" => Ok(focus_outer(Some(moz))),
"-moz-inline-table" => Ok(inline_table(Some(moz))),
"-moz-page" => Ok(page(Some(moz))),
"-moz-page-sequence" => Ok(page_sequence(Some(moz))),
"-moz-pagebreak" => Ok(pagebreak(Some(moz))),
"-moz-pagecontent" => Ok(pagecontent(Some(moz))),
"-moz-scrolled-canvas" => Ok(scrolled_canvas(Some(moz))),
"-moz-scrolled-content" => Ok(scrolled_content(Some(moz))),
"-moz-scrolled-page-sequence" => Ok(scrolled_page_sequence(Some(moz))),
"-moz-svg-foreign-content" => Ok(svg_foreign_content(Some(moz))),
"-moz-table" => Ok(table(Some(moz))),
"-moz-table-cell" => Ok(table_cell(Some(moz))),
"-moz-table-column" => Ok(table_column(Some(moz))),
"-moz-table-column-group" => Ok(table_column_group(Some(moz))),
"-moz-table-outer" => Ok(table_outer(Some(moz))),
"-moz-table-row" => Ok(table_row(Some(moz))),
"-moz-table-row-group" => Ok(table_row_group(Some(moz))),
"-moz-viewport" => Ok(viewport(Some(moz))),
"-moz-viewport-scroll" => Ok(viewport_scroll(Some(moz))),
"-moz-xul-anonymous-block" => Ok(xul_anonymous_block(Some(moz))),
"-moz-tree-cell-text" => Ok(tree_cell_text(Some(moz))),
"-moz-tree-row" => Ok(tree_row(Some(moz))),
"-webkit-file-upload-button" => Ok(file_upload_button(Some(webkit))),
"-webkit-inner-spin-button" => Ok(inner_spin_button(Some(webkit))),
"-webkit-meter-bar" => Ok(meter_bar(Some(webkit))),
"-webkit-meter-even-less-good-value" => Ok(meter_even_less_good_value(Some(webkit))),
"-webkit-meter-inner-element" => Ok(meter_inner_element(Some(webkit))),
"-webkit-meter-optimum-value" => Ok(meter_optimum_value(Some(webkit))),
"-webkit-meter-suboptimum-value" => Ok(meter_suboptimum_value(Some(webkit))),
"-webkit-outer-spin-button" => Ok(outer_spin_button(Some(webkit))),
"-webkit-progress-inner-element" => Ok(progress_inner_element(Some(webkit))),
"-webkit-progress-value" => Ok(progress_value(Some(webkit))),
"-webkit-search-cancel-button" => Ok(search_cancel_button(Some(webkit))),
"-webkit-search-results-button" => Ok(search_results_button(Some(webkit))),
"-webkit-search-decoration" => Ok(search_decoration(Some(webkit))),
_ => Err(ParseError::Custom(SelectorParseError::UnsupportedPseudoClassOrElement(name.clone()))),
}
}
#[inline(always)]
pub(crate) fn parse_with_arguments<'i, 't>(_applyVendorPrefixToPseudoElements: &HashMap<VendorPrefixablePseudoElementName, VendorPrefix>, name: CowRcStr<'i>, _arguments: &mut Parser<'i, 't>, _ourSelectorParser: &OurSelectorParser) -> Result<Self, ParseError<'i, SelectorParseError<'i, CustomParseError<'i>>>>
{
Err(ParseError::Custom(SelectorParseError::UnsupportedPseudoClassOrElement(name)))
}
}