ladybird/Libraries/LibWeb/CSS
Callum Law 3421cd76fa LibWeb: Store CSSStyleProperties properties in "specified order"
The spec requires us to store properties in their shorthand-expanded
form and in the "specified" order, removing duplicates prefering based
on "cascading order". We already enforced this in `set_property` but
not at creation time (e.g. in stylesheets) or in `set_css_text` (e.g.
updating style attribute).

This commit enforces the spec requirements at all the relevant points.

We no longer include logical properties in the return value of
`getComputedStyle` as they are mapped to their physical equivalents in
`StyleComputer::for_each_property_expanding_shorthands`, but resolving
that requires a relatively large rework of how we handle logical
properties, (namely moving when we map them to their physical
equivalents from parse time to style computation time).

This also exposes two false positive tests in
wpt-import/css/cssom/border-shorthand-serialization.html related to us
not yet supporting the border-image css property.
2025-06-09 10:43:50 +01:00
..
Parser LibWeb/CSS: Limit string values for font format() to the spec's set 2025-06-05 12:10:29 +01:00
StyleValues LibWeb: Omit initial values from background CSS property serialization 2025-06-09 10:43:50 +01:00
SyntaxHighlighter
Angle.cpp LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
Angle.h LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
AnimationEvent.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
AnimationEvent.h
AnimationEvent.idl
BooleanExpression.cpp LibWeb: Implement generic boolean logic for media/supports queries 2025-03-17 10:00:19 +00:00
BooleanExpression.h LibWeb/CSS: Make media type and feature evaluation combination explicit 2025-05-23 10:17:58 +01:00
CalculatedOr.cpp LibWeb: Make storage of CSS::StyleValues const-correct 2025-04-16 10:41:44 -06:00
CalculatedOr.h LibWeb/CSS: Extract SerializationMode into its own header 2025-05-17 07:53:24 +01:00
CascadedProperties.cpp LibWeb: Support shorthand properties as presentational hints 2025-05-29 12:04:28 +02:00
CascadedProperties.h LibWeb/CSS: Move and rename PseudoElement types to prep for code gen 2025-03-24 09:49:50 +00:00
CascadeOrigin.h LibWeb: Split StyleComputer work into two phases with separate outputs 2024-12-22 10:12:49 +01:00
CharacterTypes.h Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
Clip.cpp
Clip.h
ColumnCount.h Everywhere: Run clang-format 2024-12-28 05:39:32 -08:00
ComputedProperties.cpp LibWeb/CSS: Implement the scrollbar-color property 2025-06-02 00:17:51 +02:00
ComputedProperties.h LibWeb/CSS: Implement the scrollbar-color property 2025-06-02 00:17:51 +02:00
ComputedValues.h LibWeb/CSS: Implement the scrollbar-color property 2025-06-02 00:17:51 +02:00
CountersSet.cpp AK+Everywhere: Rename verify_cast to as 2025-01-21 11:34:06 -05:00
CountersSet.h
CSS.cpp LibWeb/CSS: Integrate ParsingContext into the Parser 2025-02-06 16:47:25 +00:00
CSS.h
CSS.idl
CSSAnimation.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSAnimation.h
CSSAnimation.idl
CSSConditionRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSConditionRule.h
CSSConditionRule.idl
CSSDescriptors.cpp LibWeb: Prefer using equals_ignoring_ascii_case 2025-05-21 13:45:02 +01:00
CSSDescriptors.h LibWeb/CSS: Allow descriptors to be shorthands 2025-05-15 09:53:29 +01:00
CSSFontFaceDescriptors.cpp LibWeb/CSS: Extract a CSSDescriptors base class 2025-05-08 16:21:32 +01:00
CSSFontFaceDescriptors.h LibWeb/CSS: Extract a CSSDescriptors base class 2025-05-08 16:21:32 +01:00
CSSFontFaceDescriptors.idl LibWeb/CSS: Add CSSFontFaceDescriptors type 2025-04-04 10:40:32 +01:00
CSSFontFaceRule.cpp LibWeb/CSS: Extract SerializationMode into its own header 2025-05-17 07:53:24 +01:00
CSSFontFaceRule.h LibWeb: Dump CSSDescriptors in a generic way 2025-05-08 16:21:32 +01:00
CSSFontFaceRule.idl
CSSGroupingRule.cpp LibWeb/CSS: Use CSSRule's context to parse new child rules 2025-04-23 10:55:45 +01:00
CSSGroupingRule.h
CSSGroupingRule.idl
CSSImportRule.cpp LibWeb/CSS: Remove URL parameter to the CSS Parser 2025-05-03 12:01:43 +01:00
CSSImportRule.h LibWeb/CSS: Don't resolve @import URLs until they are used 2025-04-09 18:45:57 +01:00
CSSImportRule.idl LibWeb/CSS: Mark CSSImportRule.media as nullable 2025-04-09 18:45:57 +01:00
CSSKeyframeRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSKeyframeRule.h LibWeb/CSS: Merge style declaration subclasses into CSSStyleProperties 2025-03-19 13:53:00 +00:00
CSSKeyframeRule.idl LibWeb/CSS: Merge style declaration subclasses into CSSStyleProperties 2025-03-19 13:53:00 +00:00
CSSKeyframesRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSKeyframesRule.h
CSSKeyframesRule.idl
CSSLayerBlockRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSLayerBlockRule.h
CSSLayerBlockRule.idl
CSSLayerStatementRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSLayerStatementRule.h
CSSLayerStatementRule.idl LibWeb: Convert trivial attributes to FrozenArray 2025-04-25 16:43:43 +02:00
CSSMarginRule.cpp LibWeb/CSS: Add basic implementation of CSSMarginRule 2025-05-16 11:01:39 +01:00
CSSMarginRule.h LibWeb/CSS: Add basic implementation of CSSMarginRule 2025-05-16 11:01:39 +01:00
CSSMarginRule.idl LibWeb/CSS: Add basic implementation of CSSMarginRule 2025-05-16 11:01:39 +01:00
CSSMediaRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSMediaRule.h
CSSMediaRule.idl
CSSNamespaceRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSNamespaceRule.h
CSSNamespaceRule.idl
CSSNestedDeclarations.cpp LibWeb: Return correct type from CSSNestedDeclarations::style 2025-04-25 08:48:29 +02:00
CSSNestedDeclarations.h LibWeb: Return correct type from CSSNestedDeclarations::style 2025-04-25 08:48:29 +02:00
CSSNestedDeclarations.idl LibWeb: Return correct type from CSSNestedDeclarations::style 2025-04-25 08:48:29 +02:00
CSSNumericType.cpp LibWeb: Parse CSS fit-content(<length-percentage>) values 2025-02-27 00:44:14 +01:00
CSSNumericType.h LibWeb/CSS: Use CalcSV's context to determine what percentages are 2025-01-13 10:59:16 +00:00
CSSPageDescriptors.cpp LibWeb: Add basic implementation of @page 2025-05-15 09:53:29 +01:00
CSSPageDescriptors.h LibWeb: Add basic implementation of @page 2025-05-15 09:53:29 +01:00
CSSPageDescriptors.idl LibWeb: Add basic implementation of @page 2025-05-15 09:53:29 +01:00
CSSPageRule.cpp LibWeb/CSS: Implement CSSPageRule.setSelectorText() 2025-05-16 16:42:10 +01:00
CSSPageRule.h LibWeb/CSS: Move PageSelector into its own files 2025-05-16 16:42:10 +01:00
CSSPageRule.idl LibWeb: Add basic implementation of @page 2025-05-15 09:53:29 +01:00
CSSPropertyRule.cpp LibWeb/CSS: Extract SerializationMode into its own header 2025-05-17 07:53:24 +01:00
CSSPropertyRule.h LibWeb: Make storage of CSS::StyleValues const-correct 2025-04-16 10:41:44 -06:00
CSSPropertyRule.idl
CSSRule.cpp LibWeb/CSS: Add basic implementation of CSSMarginRule 2025-05-16 11:01:39 +01:00
CSSRule.h LibWeb/CSS: Add basic implementation of CSSMarginRule 2025-05-16 11:01:39 +01:00
CSSRule.idl
CSSRuleList.cpp LibWeb/CSS: Add basic implementation of CSSMarginRule 2025-05-16 11:01:39 +01:00
CSSRuleList.h LibWeb/CSS: Use CSSRule's context to parse new child rules 2025-04-23 10:55:45 +01:00
CSSRuleList.idl
CSSStyleDeclaration.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSStyleDeclaration.h LibWeb/CSS: Move property code from CSSStyleDeclaration to *Properties 2025-03-19 13:53:00 +00:00
CSSStyleDeclaration.idl LibWeb/CSS: Move property code from CSSStyleDeclaration to *Properties 2025-03-19 13:53:00 +00:00
CSSStyleProperties.cpp LibWeb: Store CSSStyleProperties properties in "specified order" 2025-06-09 10:43:50 +01:00
CSSStyleProperties.h LibWeb: Store CSSStyleProperties properties in "specified order" 2025-06-09 10:43:50 +01:00
CSSStyleProperties.idl LibWeb/CSS: Move property code from CSSStyleDeclaration to *Properties 2025-03-19 13:53:00 +00:00
CSSStyleRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSStyleRule.h LibWeb/CSS: Let CSSStyleValue know its CSSStyleSheet 2025-04-15 09:54:35 +01:00
CSSStyleRule.idl LibWeb/CSS: Merge style declaration subclasses into CSSStyleProperties 2025-03-19 13:53:00 +00:00
CSSStyleSheet.cpp LibWeb: Invalidate owner sheet on add/remove in CSSStyleProperties 2025-04-24 18:26:54 +02:00
CSSStyleSheet.h LibWeb/CSS: Expose owning document of CSSStyleSheet 2025-04-15 09:54:35 +01:00
CSSStyleSheet.idl
CSSStyleValue.cpp LibWeb/CSS: Implement the scrollbar-color property 2025-06-02 00:17:51 +02:00
CSSStyleValue.h LibWeb/CSS: Implement the scrollbar-color property 2025-06-02 00:17:51 +02:00
CSSSupportsRule.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CSSSupportsRule.h
CSSSupportsRule.idl
CSSTransition.cpp LibWeb: Implement CSS transitions support for pseudo elements 2025-05-30 15:48:16 +02:00
CSSTransition.h LibWeb: Implement CSS transitions support for pseudo elements 2025-05-30 15:48:16 +02:00
CSSTransition.idl
Default.css LibWeb: Avoid changing button border color on disable/hover 2025-04-30 20:13:14 +01:00
Descriptor.cpp LibWeb: Parse descriptors as style values, using the JSON data 2025-04-04 10:40:32 +01:00
Descriptor.h LibWeb: Parse descriptors as style values, using the JSON data 2025-04-04 10:40:32 +01:00
Descriptors.json LibWeb/CSS: Parse @page bleed, marks, page-orientation descriptors 2025-05-15 09:53:29 +01:00
Display.cpp
Display.h LibWeb: Implement CSS 'contain' property 2025-01-28 11:24:40 +00:00
EasingFunctions.json
EdgeRect.cpp
EdgeRect.h
ElementCSSInlineStyle.idl LibWeb/CSS: Merge style declaration subclasses into CSSStyleProperties 2025-03-19 13:53:00 +00:00
Enums.json LibWeb/CSS: Parse and use tech() in @font-face { src } 2025-06-05 12:10:29 +01:00
Fetch.cpp LibWeb: Set the initiator type for script-initiated CSS requests 2025-05-06 17:37:34 +01:00
Fetch.h LibWeb/CSS: Parse and use CSS URL request modifiers 2025-05-03 23:22:40 +01:00
Filter.h Everywhere: Run clang-format 2024-12-28 05:39:32 -08:00
Flex.cpp LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
Flex.h LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
FontFace.cpp LibGfx+LibWeb: Update definitions of supported font formats and features 2025-06-05 12:10:29 +01:00
FontFace.h LibWeb/CSS: Parse and use tech() in @font-face { src } 2025-06-05 12:10:29 +01:00
FontFace.idl
FontFaceSet.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
FontFaceSet.h
FontFaceSet.idl
Frequency.cpp LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
Frequency.h LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
GridTrackPlacement.cpp LibWeb: Avoid repetition when serializing grid track placement values 2025-03-19 02:08:05 +01:00
GridTrackPlacement.h Everywhere: Run clang-format 2024-12-28 05:39:32 -08:00
GridTrackSize.cpp LibWeb/CSS: Make empty GridTrackSize value serialize to "none" 2025-03-22 17:33:37 +01:00
GridTrackSize.h
Interpolation.cpp LibWeb: Don't crash when interpolating single-value repeatable lists 2025-06-02 11:33:01 +01:00
Interpolation.h LibWeb: Ensure discrete interpolated properties are non-transitionable 2025-05-27 13:33:29 +02:00
InvalidationSet.cpp LibWeb: Allow to early break from InvalidationSet::for_each_property() 2025-01-29 09:30:18 +01:00
InvalidationSet.h LibWeb: Allow to early break from InvalidationSet::for_each_property() 2025-01-29 09:30:18 +01:00
Keywords.json LibWeb/CSS: Parse and use tech() in @font-face { src } 2025-06-05 12:10:29 +01:00
Length.cpp LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
Length.h LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
LengthBox.cpp
LengthBox.h LibWeb: Make storage of CSS::StyleValues const-correct 2025-04-16 10:41:44 -06:00
LinkStyle.idl
MathFunctions.json LibWeb/CSS: Add some FIXME comments for missing math-function features 2025-01-30 19:31:54 +01:00
MediaFeatures.json LibWeb/CSS: Correct how we evaluate boolean media-features 2025-05-23 10:17:58 +01:00
MediaList.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
MediaList.h LibWeb: Invalidate style (and rule cache) on MediaList changes 2025-03-04 19:07:40 +01:00
MediaList.idl
MediaQuery.cpp LibWeb/CSS: Correct how we evaluate boolean media-features 2025-05-23 10:17:58 +01:00
MediaQuery.h LibWeb/CSS: Maintain original form of media-feature ranges 2025-05-23 10:17:58 +01:00
MediaQueryList.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
MediaQueryList.h LibWeb: Don't lose change events on MediaQueryList internal state change 2025-02-13 20:52:31 +01:00
MediaQueryList.idl
MediaQueryListEvent.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
MediaQueryListEvent.h Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
MediaQueryListEvent.idl
Number.cpp LibWeb: Only serialize CSS numbers with up to 5 decimals 2025-05-18 17:23:34 +02:00
Number.h Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
PageSelector.cpp LibWeb/CSS: Move PageSelector into its own files 2025-05-16 16:42:10 +01:00
PageSelector.h LibWeb/CSS: Move PageSelector into its own files 2025-05-16 16:42:10 +01:00
ParsedFontFace.cpp LibWeb/CSS: Parse and use tech() in @font-face { src } 2025-06-05 12:10:29 +01:00
ParsedFontFace.h LibWeb/CSS: Parse and use tech() in @font-face { src } 2025-06-05 12:10:29 +01:00
Percentage.h
PercentageOr.h LibWeb/CSS: Extract SerializationMode into its own header 2025-05-17 07:53:24 +01:00
PreferredColorScheme.cpp
PreferredColorScheme.h
PreferredContrast.cpp
PreferredContrast.h
PreferredMotion.cpp
PreferredMotion.h
Properties.json LibWeb: Implement text-wrap CSS property 2025-06-04 12:48:36 +01:00
PropertyName.h
PseudoClassBitmap.h LibWeb: Make :hover invalidation logic reusable for all pseudo classes 2025-04-17 19:45:55 +02:00
PseudoClasses.json LibWeb: Implement the :default pseudo-class 2025-05-24 10:31:34 +01:00
PseudoElements.json LibWeb: Add support for trees of pseudo-elements 2025-05-13 12:38:42 +01:00
QuirksMode.css LibWeb/CSS: Update quirks-mode styling for form elements 2025-03-26 09:47:45 +00:00
Ratio.cpp
Ratio.h
Resolution.cpp LibWeb/CSS: Treat x resolution unit separately from dppx 2025-05-17 07:53:24 +01:00
Resolution.h LibWeb/CSS: Treat x resolution unit separately from dppx 2025-05-17 07:53:24 +01:00
Screen.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
Screen.h
Screen.idl LibWeb: Update Screen IDL definition to not inherit from EventTarget 2024-11-26 18:44:26 +01:00
ScreenOrientation.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
ScreenOrientation.h
ScreenOrientation.idl
Selector.cpp LibWeb/CSS: Use case insensitive tag and attribute name in ancestor hash 2025-05-21 08:54:40 -04:00
Selector.h LibWeb/CSS: Parse an ident in :dir(), not a keyword 2025-05-17 00:30:44 +02:00
SelectorEngine.cpp LibWeb: Implement the :default pseudo-class 2025-05-24 10:31:34 +01:00
SelectorEngine.h LibWeb: Make :hover invalidation logic reusable for all pseudo classes 2025-04-17 19:45:55 +02:00
SerializationMode.h LibWeb/CSS: Extract SerializationMode into its own header 2025-05-17 07:53:24 +01:00
Serialize.cpp LibWeb/CSS: Stub out a function for serializing ComponentValue sequences 2025-05-23 10:17:58 +01:00
Serialize.h LibWeb/CSS: Stub out a function for serializing ComponentValue sequences 2025-05-23 10:17:58 +01:00
Size.cpp LibWeb: Make storage of CSS::StyleValues const-correct 2025-04-16 10:41:44 -06:00
Size.h LibWeb: Make storage of CSS::StyleValues const-correct 2025-04-16 10:41:44 -06:00
Sizing.cpp
Sizing.h
StyleComputer.cpp LibWeb: Cancel previous animation if new animation-name is "none" 2025-06-01 05:02:12 +02:00
StyleComputer.h LibWeb/CSS: Remove now-unused AllowUnresolved enum 2025-05-14 11:46:47 +01:00
StyleInvalidation.cpp LibWeb/CSS: Invalidate layout tree for changes to counter definitions 2025-06-03 03:51:42 +02:00
StyleInvalidation.h LibGC+LibWeb+LibJS: Remove workaround for Swift boolean bitfield issue 2025-04-04 13:06:53 -06:00
StyleInvalidationData.cpp LibWeb: Implement the :default pseudo-class 2025-05-24 10:31:34 +01:00
StyleInvalidationData.h LibWeb: Fix underinvalidation of :nth-child using invalidation sets 2025-01-25 10:16:21 +01:00
StyleProperty.cpp
StyleProperty.h LibWeb/CSS: Set enum sizes for PropertyID and Keyword 2025-05-20 10:14:21 +12:00
StyleSheet.cpp LibWeb/CSS: Store CSSStyleSheet location as a URL 2025-04-09 18:45:57 +01:00
StyleSheet.h LibWeb/CSS: Make it clear that StyleSheet::media() is never null 2025-04-09 18:45:57 +01:00
StyleSheet.idl
StyleSheetIdentifier.cpp LibWeb+WebContent: Include rule count in listed CSS style sheets 2025-03-13 16:56:28 -04:00
StyleSheetIdentifier.h Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
StyleSheetList.cpp LibWeb/CSS: Remove document-URL hack from create_a_style_sheet() 2025-05-03 12:01:43 +01:00
StyleSheetList.h LibWeb/CSS: Return GC::Ref from style sheet parsing methods 2025-04-15 09:40:38 +01:00
StyleSheetList.idl
Supports.cpp LibWeb: Implement CSSImportRule.supportsText 2025-03-19 16:42:51 +01:00
Supports.h LibWeb/CSS: Implement @supports font-format() and font-tech() 2025-03-17 10:00:19 +00:00
SystemColor.cpp LibWeb/CSS: Implement the color-scheme CSS property 2025-01-08 11:18:13 +00:00
SystemColor.h Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
Time.cpp LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
Time.h LibWeb/CSS: Make dimension types serialize in resolved form 2025-05-17 07:53:24 +01:00
Transformation.cpp LibWeb: Allow transform calculated length properties 2025-05-02 11:10:02 +01:00
Transformation.h
TransformFunctions.json LibWeb: Implement interpolation for CSS scale values 2025-04-25 14:08:12 +02:00
TransitionEvent.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
TransitionEvent.h Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
TransitionEvent.idl LibWeb/CSS: Add the TransitionEvent type 2024-12-25 17:14:08 +01:00
URL.cpp LibWeb/CSS: Parse and use CSS URL request modifiers 2025-05-03 23:22:40 +01:00
URL.h LibWeb: Add missing FlyString include to CSS/URL.h 2025-06-03 19:30:43 -04:00
VisualViewport.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
VisualViewport.h
VisualViewport.idl