ladybird/Userland/Libraries/LibWeb/CSS
Sam Atkins c8c2a8df56 LibWeb: Make '0' always be both a number and a length in CSS
A '0' token can be interpreted both as a Number, and as a Length. This
is problematic as in our CSS parser, we often call parse_css_value()
first, to figure out what something is, and then assign it. So we do not
know in advance whether we want a Length or not. Previously, it always
got parsed as a Length, and then every place that expected a
NumericStyleValue had to also check for a Length(0), which is easy to
forget to do.

In particular, this was causing issues with the `flex` property parsing.

To solve this, we now always parse 0 as a NumericStyleValue, and NSVs of
0 pretend to be a Length(0px) when asked. In two places, we were casting
to a LengthStyleValue* based on is_length(), which no longer works, so
those have been adjusted to use `StyleValue::to_length()` instead. They
also now check for `is_numeric()` first, to avoid the extra conversion
to a Length and back.

Possibly this opens up new issues elsewhere. In my testing it seems
fine, but until we can get CSS test suites running, it's hard to know
for certain.
2021-08-14 12:45:01 +02:00
..
Parser LibWeb: Make '0' always be both a number and a length in CSS 2021-08-14 12:45:01 +02:00
.gitignore Libraries: Move to Userland/Libraries/ 2021-01-12 12:17:46 +01:00
ComputedValues.h LibWeb: Add auto as a recognized argument of flex-basis 2021-08-07 15:21:34 +02:00
CSSImportRule.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
CSSImportRule.h AK: Rename adopt() to adopt_ref() 2021-04-23 16:46:57 +02:00
CSSRule.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
CSSRule.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
CSSStyleDeclaration.cpp LibWeb: Store custom properties in CSSStyleDeclaration 2021-05-28 10:45:38 +01:00
CSSStyleDeclaration.h LibWeb: Store custom properties in CSSStyleDeclaration 2021-05-28 10:45:38 +01:00
CSSStyleDeclaration.idl LibWeb: Add a CustomHasProperty trait to WrapperGenerator 2021-07-26 15:56:15 +01:00
CSSStyleRule.cpp LibWeb: Make CSS::Selector reference counted 2021-07-14 13:31:00 +02:00
CSSStyleRule.h LibWeb: Make CSS::Selector reference counted 2021-07-14 13:31:00 +02:00
CSSStyleSheet.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
CSSStyleSheet.h AK: Rename downcast<T> => verify_cast<T> 2021-06-24 19:57:01 +02:00
CSSStyleSheet.idl LibWeb: Start exposing CSS style sheets to JavaScript :^) 2021-03-08 11:50:36 +01:00
Default.css LibWeb: Use -libweb-palette-base-text for text color in default CSS 2021-05-19 23:23:48 +01:00
Identifiers.json LibWeb: Resolve CSS text-decoration from value list 2021-07-22 23:09:01 +02:00
Length.cpp Everywhere: Use tobyase@serenityos.org for my copyright headers 2021-08-09 21:43:05 +02:00
Length.h LibWeb: Add calc() resolution to CSS::Length 2021-07-24 03:02:07 +04:30
LengthBox.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Properties.json LibWeb: Add box-shadow as a known ValueID 2021-07-24 22:16:48 +02:00
QuirksMode.css Libraries: Move to Userland/Libraries/ 2021-01-12 12:17:46 +01:00
Screen.cpp Everywhere: Use linusg@serenityos.org for my copyright headers 2021-04-22 22:51:19 +02:00
Screen.h AK: Rename adopt() to adopt_ref() 2021-04-23 16:46:57 +02:00
Screen.idl LibWeb: Implement the Screen interface 2021-04-04 00:37:54 +02:00
Selector.cpp LibWeb: Remove unused header includes 2021-08-01 08:10:16 +02:00
Selector.h LibWeb: Make CSS 'An+B' parsing spec-compliant 2021-07-31 00:18:11 +02:00
SelectorEngine.cpp LibWeb: Switch to new CSS Parser :^) 2021-08-02 19:01:25 +04:30
SelectorEngine.h LibWeb: Convert CSS Dump, Selector, & SelectorEngine to east const 2021-07-14 13:31:00 +02:00
StyleInvalidator.cpp Everywhere: Use linusg@serenityos.org for my copyright headers 2021-04-22 22:51:19 +02:00
StyleInvalidator.h Everywhere: Use linusg@serenityos.org for my copyright headers 2021-04-22 22:51:19 +02:00
StyleProperties.cpp LibWeb: Make '0' always be both a number and a length in CSS 2021-08-14 12:45:01 +02:00
StyleProperties.h LibWeb: Make box-shadow known throughout the CSS subsystem 2021-07-24 22:16:48 +02:00
StyleResolver.cpp LibWeb: Remove pointless type casts 2021-08-12 21:10:44 +02:00
StyleResolver.h LibWeb: Convert StyleResolver.{h,cpp} to east const 2021-07-22 23:09:01 +02:00
StyleSheet.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
StyleSheet.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
StyleSheet.idl LibWeb: Implement StyleSheet.type 2021-03-08 16:16:28 +01:00
StyleSheetList.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
StyleSheetList.h AK: Rename adopt() to adopt_ref() 2021-04-23 16:46:57 +02:00
StyleSheetList.idl LibWeb: Start exposing CSS style sheets to JavaScript :^) 2021-03-08 11:50:36 +01:00
StyleValue.cpp LibWeb: Add CSS ValueListStyleValue 2021-07-22 23:09:01 +02:00
StyleValue.h LibWeb: Make '0' always be both a number and a length in CSS 2021-08-14 12:45:01 +02:00