LibWeb: Support parsing column-span

This commit is contained in:
Samuel Fry 2024-08-20 20:23:55 -04:00 committed by Sam Atkins
commit 23b4367c9c
Notes: github-actions[bot] 2024-08-26 07:27:23 +00:00
7 changed files with 28 additions and 1 deletions

View file

@ -86,6 +86,7 @@ clip-rule: nonzero
color: rgb(0, 0, 0) color: rgb(0, 0, 0)
column-count: auto column-count: auto
column-gap: auto column-gap: auto
column-span: none
column-width: auto column-width: auto
content: normal content: normal
content-visibility: visible content-visibility: visible
@ -124,7 +125,7 @@ grid-row-start: auto
grid-template-areas: grid-template-areas:
grid-template-columns: grid-template-columns:
grid-template-rows: grid-template-rows:
height: 2142px height: 2159px
image-rendering: auto image-rendering: auto
inline-size: auto inline-size: auto
inset-block-end: auto inset-block-end: auto

View file

@ -165,6 +165,7 @@ public:
static CSS::GridAutoFlow grid_auto_flow() { return CSS::GridAutoFlow {}; } static CSS::GridAutoFlow grid_auto_flow() { return CSS::GridAutoFlow {}; }
static ColumnCount column_count() { return ColumnCount::make_auto(); } static ColumnCount column_count() { return ColumnCount::make_auto(); }
static CSS::Size column_gap() { return CSS::Size::make_auto(); } static CSS::Size column_gap() { return CSS::Size::make_auto(); }
static CSS::ColumnSpan column_span() { return CSS::ColumnSpan::None; }
static CSS::Size column_width() { return CSS::Size::make_auto(); } static CSS::Size column_width() { return CSS::Size::make_auto(); }
static CSS::Size row_gap() { return CSS::Size::make_auto(); } static CSS::Size row_gap() { return CSS::Size::make_auto(); }
static CSS::BorderCollapse border_collapse() { return CSS::BorderCollapse::Separate; } static CSS::BorderCollapse border_collapse() { return CSS::BorderCollapse::Separate; }
@ -419,6 +420,7 @@ public:
CSS::GridTrackPlacement const& grid_row_start() const { return m_noninherited.grid_row_start; } CSS::GridTrackPlacement const& grid_row_start() const { return m_noninherited.grid_row_start; }
CSS::ColumnCount column_count() const { return m_noninherited.column_count; } CSS::ColumnCount column_count() const { return m_noninherited.column_count; }
CSS::Size const& column_gap() const { return m_noninherited.column_gap; } CSS::Size const& column_gap() const { return m_noninherited.column_gap; }
CSS::ColumnSpan const& column_span() const { return m_noninherited.column_span; }
CSS::Size const& column_width() const { return m_noninherited.column_width; } CSS::Size const& column_width() const { return m_noninherited.column_width; }
CSS::Size const& row_gap() const { return m_noninherited.row_gap; } CSS::Size const& row_gap() const { return m_noninherited.row_gap; }
CSS::BorderCollapse border_collapse() const { return m_inherited.border_collapse; } CSS::BorderCollapse border_collapse() const { return m_inherited.border_collapse; }
@ -621,6 +623,7 @@ protected:
CSS::GridTrackPlacement grid_row_start { InitialValues::grid_row_start() }; CSS::GridTrackPlacement grid_row_start { InitialValues::grid_row_start() };
CSS::ColumnCount column_count { InitialValues::column_count() }; CSS::ColumnCount column_count { InitialValues::column_count() };
CSS::Size column_gap { InitialValues::column_gap() }; CSS::Size column_gap { InitialValues::column_gap() };
CSS::ColumnSpan column_span { InitialValues::column_span() };
CSS::Size column_width { InitialValues::column_width() }; CSS::Size column_width { InitialValues::column_width() };
CSS::Size row_gap { InitialValues::row_gap() }; CSS::Size row_gap { InitialValues::row_gap() };
Vector<Vector<String>> grid_template_areas { InitialValues::grid_template_areas() }; Vector<Vector<String>> grid_template_areas { InitialValues::grid_template_areas() };
@ -753,6 +756,7 @@ public:
void set_grid_row_start(CSS::GridTrackPlacement value) { m_noninherited.grid_row_start = value; } void set_grid_row_start(CSS::GridTrackPlacement value) { m_noninherited.grid_row_start = value; }
void set_column_count(CSS::ColumnCount value) { m_noninherited.column_count = value; } void set_column_count(CSS::ColumnCount value) { m_noninherited.column_count = value; }
void set_column_gap(CSS::Size const& column_gap) { m_noninherited.column_gap = column_gap; } void set_column_gap(CSS::Size const& column_gap) { m_noninherited.column_gap = column_gap; }
void set_column_span(CSS::ColumnSpan const& column_span) { m_noninherited.column_span = column_span; }
void set_column_width(CSS::Size const& column_width) { m_noninherited.column_width = column_width; } void set_column_width(CSS::Size const& column_width) { m_noninherited.column_width = column_width; }
void set_row_gap(CSS::Size const& row_gap) { m_noninherited.row_gap = row_gap; } void set_row_gap(CSS::Size const& row_gap) { m_noninherited.row_gap = row_gap; }
void set_border_collapse(CSS::BorderCollapse const& border_collapse) { m_inherited.border_collapse = border_collapse; } void set_border_collapse(CSS::BorderCollapse const& border_collapse) { m_inherited.border_collapse = border_collapse; }

View file

@ -101,6 +101,10 @@
"right", "right",
"both" "both"
], ],
"column-span": [
"none",
"all"
],
"content-visibility": [ "content-visibility": [
"visible", "visible",
"auto", "auto",

View file

@ -960,6 +960,14 @@
], ],
"percentages-resolve-to": "length" "percentages-resolve-to": "length"
}, },
"column-span": {
"animation-type": "discrete",
"inherited": false,
"initial": "none",
"valid-types": [
"column-span"
]
},
"column-width": { "column-width": {
"animation-type": "by-computed-value", "animation-type": "by-computed-value",
"inherited": false, "inherited": false,

View file

@ -692,6 +692,12 @@ Optional<CSS::Clear> StyleProperties::clear() const
return keyword_to_clear(value->to_keyword()); return keyword_to_clear(value->to_keyword());
} }
Optional<CSS::ColumnSpan> StyleProperties::column_span() const
{
auto value = property(CSS::PropertyID::ColumnSpan);
return keyword_to_column_span(value->to_keyword());
}
StyleProperties::ContentDataAndQuoteNestingLevel StyleProperties::content(DOM::Element& element, u32 initial_quote_nesting_level) const StyleProperties::ContentDataAndQuoteNestingLevel StyleProperties::content(DOM::Element& element, u32 initial_quote_nesting_level) const
{ {
auto value = property(CSS::PropertyID::Content); auto value = property(CSS::PropertyID::Content);

View file

@ -75,6 +75,7 @@ public:
CSS::Display display() const; CSS::Display display() const;
Optional<CSS::Float> float_() const; Optional<CSS::Float> float_() const;
Optional<CSS::Clear> clear() const; Optional<CSS::Clear> clear() const;
Optional<CSS::ColumnSpan> column_span() const;
struct ContentDataAndQuoteNestingLevel { struct ContentDataAndQuoteNestingLevel {
CSS::ContentData content_data; CSS::ContentData content_data;
u32 final_quote_nesting_level { 0 }; u32 final_quote_nesting_level { 0 };

View file

@ -830,6 +830,9 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& computed_style)
if (auto column_count = computed_style.property(CSS::PropertyID::ColumnCount); column_count->is_integer()) if (auto column_count = computed_style.property(CSS::PropertyID::ColumnCount); column_count->is_integer())
computed_values.set_column_count(CSS::ColumnCount::make_integer(column_count->as_integer().integer())); computed_values.set_column_count(CSS::ColumnCount::make_integer(column_count->as_integer().integer()));
if (auto column_span = computed_style.column_span(); column_span.has_value())
computed_values.set_column_span(column_span.value());
computed_values.set_column_width(computed_style.size_value(CSS::PropertyID::ColumnWidth)); computed_values.set_column_width(computed_style.size_value(CSS::PropertyID::ColumnWidth));
computed_values.set_column_gap(computed_style.size_value(CSS::PropertyID::ColumnGap)); computed_values.set_column_gap(computed_style.size_value(CSS::PropertyID::ColumnGap));