mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 19:38:12 +00:00
LibWeb: Hack the CSS parser to handle integer values (like z-index)
We were rejecting perfectly valid z-index values like '1000' since we were passing all CSS values through the length parser and unit-less lengths are not valid in this context. It's yet another hack for the ad-hoc CSS parser (its days are numbered) but this makes the top header links on google.com actually work. :^)
This commit is contained in:
parent
62bd1adb06
commit
194d7d3471
2 changed files with 15 additions and 3 deletions
|
@ -338,9 +338,21 @@ static CSS::Length parse_length(const CSS::ParsingContext& context, const String
|
|||
return CSS::Length(value.value(), type);
|
||||
}
|
||||
|
||||
RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, const StringView& string)
|
||||
static bool takes_integer_value(CSS::PropertyID property_id)
|
||||
{
|
||||
return property_id == CSS::PropertyID::ZIndex;
|
||||
}
|
||||
|
||||
RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, const StringView& string, CSS::PropertyID property_id)
|
||||
{
|
||||
bool is_bad_length = false;
|
||||
|
||||
if (takes_integer_value(property_id)) {
|
||||
auto integer = string.to_int();
|
||||
if (integer.has_value())
|
||||
return CSS::LengthStyleValue::create(CSS::Length::make_px(integer.value()));
|
||||
}
|
||||
|
||||
auto length = parse_length(context, string, is_bad_length);
|
||||
if (is_bad_length)
|
||||
return nullptr;
|
||||
|
@ -856,7 +868,7 @@ public:
|
|||
if (property_id == CSS::PropertyID::Invalid) {
|
||||
dbg() << "CSSParser: Unrecognized property '" << property_name << "'";
|
||||
}
|
||||
auto value = parse_css_value(m_context, property_value);
|
||||
auto value = parse_css_value(m_context, property_value, property_id);
|
||||
if (!value)
|
||||
return {};
|
||||
return CSS::StyleProperty { property_id, value.release_nonnull(), important };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue