mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:57:45 +00:00
LibWeb: Parse the -webkit-progress-bar/value pseudo elements
These will be needed for styling progress bars, sadly this can only be done with these non-standard selectors. These are, hovever, in use on real sites such as https://rpcs3.net/compatibility.
This commit is contained in:
parent
218e6d2f5e
commit
b5febe538c
4 changed files with 21 additions and 3 deletions
|
@ -458,10 +458,12 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pseudo_name = name_token.token().ident();
|
auto pseudo_name = name_token.token().ident();
|
||||||
if (has_ignored_vendor_prefix(pseudo_name))
|
auto pseudo_element = pseudo_element_from_string(pseudo_name);
|
||||||
|
|
||||||
|
// Note: We allow the "ignored" -webkit prefix here for -webkit-progress-bar/-webkit-progress-bar
|
||||||
|
if (!pseudo_element.has_value() && has_ignored_vendor_prefix(pseudo_name))
|
||||||
return ParseError::IncludesIgnoredVendorPrefix;
|
return ParseError::IncludesIgnoredVendorPrefix;
|
||||||
|
|
||||||
auto pseudo_element = pseudo_element_from_string(pseudo_name);
|
|
||||||
if (!pseudo_element.has_value()) {
|
if (!pseudo_element.has_value()) {
|
||||||
dbgln_if(CSS_PARSER_DEBUG, "Unrecognized pseudo-element: '::{}'", pseudo_name);
|
dbgln_if(CSS_PARSER_DEBUG, "Unrecognized pseudo-element: '::{}'", pseudo_name);
|
||||||
return ParseError::SyntaxError;
|
return ParseError::SyntaxError;
|
||||||
|
|
|
@ -352,6 +352,10 @@ Optional<Selector::PseudoElement> pseudo_element_from_string(StringView name)
|
||||||
return Selector::PseudoElement::FirstLine;
|
return Selector::PseudoElement::FirstLine;
|
||||||
} else if (name.equals_ignoring_case("marker"sv)) {
|
} else if (name.equals_ignoring_case("marker"sv)) {
|
||||||
return Selector::PseudoElement::Marker;
|
return Selector::PseudoElement::Marker;
|
||||||
|
} else if (name.equals_ignoring_case("-webkit-progress-bar"sv)) {
|
||||||
|
return Selector::PseudoElement::ProgressBar;
|
||||||
|
} else if (name.equals_ignoring_case("-webkit-progress-value"sv)) {
|
||||||
|
return Selector::PseudoElement::ProgressValue;
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,10 @@ public:
|
||||||
FirstLine,
|
FirstLine,
|
||||||
FirstLetter,
|
FirstLetter,
|
||||||
Marker,
|
Marker,
|
||||||
|
ProgressValue,
|
||||||
|
ProgressBar
|
||||||
};
|
};
|
||||||
static auto constexpr PseudoElementCount = to_underlying(PseudoElement::Marker) + 1;
|
static auto constexpr PseudoElementCount = to_underlying(PseudoElement::ProgressBar) + 1;
|
||||||
|
|
||||||
struct SimpleSelector {
|
struct SimpleSelector {
|
||||||
enum class Type {
|
enum class Type {
|
||||||
|
@ -204,6 +206,10 @@ constexpr StringView pseudo_element_name(Selector::PseudoElement pseudo_element)
|
||||||
return "first-letter"sv;
|
return "first-letter"sv;
|
||||||
case Selector::PseudoElement::Marker:
|
case Selector::PseudoElement::Marker:
|
||||||
return "marker"sv;
|
return "marker"sv;
|
||||||
|
case Selector::PseudoElement::ProgressBar:
|
||||||
|
return "-webkit-progress-bar"sv;
|
||||||
|
case Selector::PseudoElement::ProgressValue:
|
||||||
|
return "-webkit-progress-value"sv;
|
||||||
}
|
}
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
|
@ -492,6 +492,12 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector)
|
||||||
case CSS::Selector::PseudoElement::Marker:
|
case CSS::Selector::PseudoElement::Marker:
|
||||||
pseudo_element_description = "marker";
|
pseudo_element_description = "marker";
|
||||||
break;
|
break;
|
||||||
|
case CSS::Selector::PseudoElement::ProgressBar:
|
||||||
|
pseudo_element_description = "-webkit-progress-bar";
|
||||||
|
break;
|
||||||
|
case CSS::Selector::PseudoElement::ProgressValue:
|
||||||
|
pseudo_element_description = "-webkit-progress-value";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.appendff(" pseudo_element={}", pseudo_element_description);
|
builder.appendff(" pseudo_element={}", pseudo_element_description);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue