LibWeb/CSS: Implement parsing of grid-auto-columns and grid-auto-rows
This commit is contained in:
parent
b49e9d2eab
commit
6e0601a63e
Notes:
sideshowbarker
2024-07-18 04:38:32 +09:00
Author: https://github.com/kalenikaliaksandr Commit: https://github.com/SerenityOS/serenity/commit/6e0601a63e Pull-request: https://github.com/SerenityOS/serenity/pull/18961
6 changed files with 71 additions and 0 deletions
|
@ -251,6 +251,8 @@ public:
|
||||||
CSS::Size const& min_height() const { return m_noninherited.min_height; }
|
CSS::Size const& min_height() const { return m_noninherited.min_height; }
|
||||||
CSS::Size const& max_height() const { return m_noninherited.max_height; }
|
CSS::Size const& max_height() const { return m_noninherited.max_height; }
|
||||||
Variant<CSS::VerticalAlign, CSS::LengthPercentage> const& vertical_align() const { return m_noninherited.vertical_align; }
|
Variant<CSS::VerticalAlign, CSS::LengthPercentage> const& vertical_align() const { return m_noninherited.vertical_align; }
|
||||||
|
CSS::GridTrackSizeList const& grid_auto_columns() const { return m_noninherited.grid_auto_columns; }
|
||||||
|
CSS::GridTrackSizeList const& grid_auto_rows() const { return m_noninherited.grid_auto_rows; }
|
||||||
CSS::GridTrackSizeList const& grid_template_columns() const { return m_noninherited.grid_template_columns; }
|
CSS::GridTrackSizeList const& grid_template_columns() const { return m_noninherited.grid_template_columns; }
|
||||||
CSS::GridTrackSizeList const& grid_template_rows() const { return m_noninherited.grid_template_rows; }
|
CSS::GridTrackSizeList const& grid_template_rows() const { return m_noninherited.grid_template_rows; }
|
||||||
CSS::GridTrackPlacement const& grid_column_end() const { return m_noninherited.grid_column_end; }
|
CSS::GridTrackPlacement const& grid_column_end() const { return m_noninherited.grid_column_end; }
|
||||||
|
@ -385,6 +387,8 @@ protected:
|
||||||
CSS::BoxSizing box_sizing { InitialValues::box_sizing() };
|
CSS::BoxSizing box_sizing { InitialValues::box_sizing() };
|
||||||
CSS::ContentData content;
|
CSS::ContentData content;
|
||||||
Variant<CSS::VerticalAlign, CSS::LengthPercentage> vertical_align { InitialValues::vertical_align() };
|
Variant<CSS::VerticalAlign, CSS::LengthPercentage> vertical_align { InitialValues::vertical_align() };
|
||||||
|
CSS::GridTrackSizeList grid_auto_columns;
|
||||||
|
CSS::GridTrackSizeList grid_auto_rows;
|
||||||
CSS::GridTrackSizeList grid_template_columns;
|
CSS::GridTrackSizeList grid_template_columns;
|
||||||
CSS::GridTrackSizeList grid_template_rows;
|
CSS::GridTrackSizeList grid_template_rows;
|
||||||
CSS::GridTrackPlacement grid_column_end { InitialValues::grid_column_end() };
|
CSS::GridTrackPlacement grid_column_end { InitialValues::grid_column_end() };
|
||||||
|
@ -471,6 +475,8 @@ public:
|
||||||
void set_box_sizing(CSS::BoxSizing value) { m_noninherited.box_sizing = value; }
|
void set_box_sizing(CSS::BoxSizing value) { m_noninherited.box_sizing = value; }
|
||||||
void set_vertical_align(Variant<CSS::VerticalAlign, CSS::LengthPercentage> value) { m_noninherited.vertical_align = move(value); }
|
void set_vertical_align(Variant<CSS::VerticalAlign, CSS::LengthPercentage> value) { m_noninherited.vertical_align = move(value); }
|
||||||
void set_visibility(CSS::Visibility value) { m_inherited.visibility = value; }
|
void set_visibility(CSS::Visibility value) { m_inherited.visibility = value; }
|
||||||
|
void set_grid_auto_columns(CSS::GridTrackSizeList value) { m_noninherited.grid_auto_columns = move(value); }
|
||||||
|
void set_grid_auto_rows(CSS::GridTrackSizeList value) { m_noninherited.grid_auto_rows = move(value); }
|
||||||
void set_grid_template_columns(CSS::GridTrackSizeList value) { m_noninherited.grid_template_columns = move(value); }
|
void set_grid_template_columns(CSS::GridTrackSizeList value) { m_noninherited.grid_template_columns = move(value); }
|
||||||
void set_grid_template_rows(CSS::GridTrackSizeList value) { m_noninherited.grid_template_rows = move(value); }
|
void set_grid_template_rows(CSS::GridTrackSizeList value) { m_noninherited.grid_template_rows = move(value); }
|
||||||
void set_grid_column_end(CSS::GridTrackPlacement value) { m_noninherited.grid_column_end = value; }
|
void set_grid_column_end(CSS::GridTrackPlacement value) { m_noninherited.grid_column_end = value; }
|
||||||
|
|
|
@ -6486,6 +6486,24 @@ ErrorOr<RefPtr<StyleValue>> Parser::parse_grid_track_size_list(Vector<ComponentV
|
||||||
return GridTrackSizeListStyleValue::create(CSS::GridTrackSizeList(track_list, line_names_list));
|
return GridTrackSizeListStyleValue::create(CSS::GridTrackSizeList(track_list, line_names_list));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<RefPtr<StyleValue>> Parser::parse_grid_auto_track_sizes(Vector<ComponentValue> const& component_values)
|
||||||
|
{
|
||||||
|
// https://www.w3.org/TR/css-grid-2/#auto-tracks
|
||||||
|
// <track-size>+
|
||||||
|
Vector<CSS::ExplicitGridTrack> track_list;
|
||||||
|
TokenStream tokens { component_values };
|
||||||
|
while (tokens.has_next_token()) {
|
||||||
|
auto token = tokens.next_token();
|
||||||
|
auto track_sizing_function = parse_track_sizing_function(token);
|
||||||
|
if (!track_sizing_function.has_value())
|
||||||
|
return GridTrackSizeListStyleValue::make_auto();
|
||||||
|
// FIXME: Handle multiple repeat values (should combine them here, or remove
|
||||||
|
// any other ones if the first one is auto-fill, etc.)
|
||||||
|
track_list.append(track_sizing_function.value());
|
||||||
|
}
|
||||||
|
return GridTrackSizeListStyleValue::create(CSS::GridTrackSizeList(track_list, {}));
|
||||||
|
}
|
||||||
|
|
||||||
ErrorOr<RefPtr<StyleValue>> Parser::parse_grid_track_placement(Vector<ComponentValue> const& component_values)
|
ErrorOr<RefPtr<StyleValue>> Parser::parse_grid_track_placement(Vector<ComponentValue> const& component_values)
|
||||||
{
|
{
|
||||||
// https://www.w3.org/TR/css-grid-2/#line-placement
|
// https://www.w3.org/TR/css-grid-2/#line-placement
|
||||||
|
@ -6962,6 +6980,14 @@ Parser::ParseErrorOr<NonnullRefPtr<StyleValue>> Parser::parse_css_value(Property
|
||||||
if (auto parsed_value = FIXME_TRY(parse_grid_track_size_list(component_values)))
|
if (auto parsed_value = FIXME_TRY(parse_grid_track_size_list(component_values)))
|
||||||
return parsed_value.release_nonnull();
|
return parsed_value.release_nonnull();
|
||||||
return ParseError::SyntaxError;
|
return ParseError::SyntaxError;
|
||||||
|
case PropertyID::GridAutoColumns:
|
||||||
|
if (auto parsed_value = FIXME_TRY(parse_grid_auto_track_sizes(component_values)))
|
||||||
|
return parsed_value.release_nonnull();
|
||||||
|
return ParseError::SyntaxError;
|
||||||
|
case PropertyID::GridAutoRows:
|
||||||
|
if (auto parsed_value = FIXME_TRY(parse_grid_auto_track_sizes(component_values)))
|
||||||
|
return parsed_value.release_nonnull();
|
||||||
|
return ParseError::SyntaxError;
|
||||||
case PropertyID::ListStyle:
|
case PropertyID::ListStyle:
|
||||||
if (auto parsed_value = FIXME_TRY(parse_list_style_value(component_values)))
|
if (auto parsed_value = FIXME_TRY(parse_list_style_value(component_values)))
|
||||||
return parsed_value.release_nonnull();
|
return parsed_value.release_nonnull();
|
||||||
|
|
|
@ -323,6 +323,7 @@ private:
|
||||||
ErrorOr<RefPtr<StyleValue>> parse_transform_value(Vector<ComponentValue> const&);
|
ErrorOr<RefPtr<StyleValue>> parse_transform_value(Vector<ComponentValue> const&);
|
||||||
ErrorOr<RefPtr<StyleValue>> parse_transform_origin_value(Vector<ComponentValue> const&);
|
ErrorOr<RefPtr<StyleValue>> parse_transform_origin_value(Vector<ComponentValue> const&);
|
||||||
ErrorOr<RefPtr<StyleValue>> parse_grid_track_size_list(Vector<ComponentValue> const&, bool allow_separate_line_name_blocks = false);
|
ErrorOr<RefPtr<StyleValue>> parse_grid_track_size_list(Vector<ComponentValue> const&, bool allow_separate_line_name_blocks = false);
|
||||||
|
ErrorOr<RefPtr<StyleValue>> parse_grid_auto_track_sizes(Vector<ComponentValue> const&);
|
||||||
ErrorOr<RefPtr<StyleValue>> parse_grid_track_size_list_shorthand_value(Vector<ComponentValue> const&);
|
ErrorOr<RefPtr<StyleValue>> parse_grid_track_size_list_shorthand_value(Vector<ComponentValue> const&);
|
||||||
ErrorOr<RefPtr<StyleValue>> parse_grid_track_placement(Vector<ComponentValue> const&);
|
ErrorOr<RefPtr<StyleValue>> parse_grid_track_placement(Vector<ComponentValue> const&);
|
||||||
ErrorOr<RefPtr<StyleValue>> parse_grid_track_placement_shorthand_value(Vector<ComponentValue> const&);
|
ErrorOr<RefPtr<StyleValue>> parse_grid_track_placement_shorthand_value(Vector<ComponentValue> const&);
|
||||||
|
|
|
@ -958,6 +958,30 @@
|
||||||
"string"
|
"string"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"grid-auto-columns": {
|
||||||
|
"inherited": false,
|
||||||
|
"initial": "auto",
|
||||||
|
"valid-identifiers": [
|
||||||
|
"auto"
|
||||||
|
],
|
||||||
|
"valid-types": [
|
||||||
|
"length",
|
||||||
|
"percentage",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"grid-auto-rows": {
|
||||||
|
"inherited": false,
|
||||||
|
"initial": "auto",
|
||||||
|
"valid-identifiers": [
|
||||||
|
"auto"
|
||||||
|
],
|
||||||
|
"valid-types": [
|
||||||
|
"length",
|
||||||
|
"percentage",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
"grid-template-columns": {
|
"grid-template-columns": {
|
||||||
"inherited": false,
|
"inherited": false,
|
||||||
"initial": "auto",
|
"initial": "auto",
|
||||||
|
|
|
@ -758,6 +758,18 @@ Optional<CSS::FontVariant> StyleProperties::font_variant() const
|
||||||
return value_id_to_font_variant(value->to_identifier());
|
return value_id_to_font_variant(value->to_identifier());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CSS::GridTrackSizeList StyleProperties::grid_auto_columns() const
|
||||||
|
{
|
||||||
|
auto value = property(CSS::PropertyID::GridAutoColumns);
|
||||||
|
return value->as_grid_track_size_list().grid_track_size_list();
|
||||||
|
}
|
||||||
|
|
||||||
|
CSS::GridTrackSizeList StyleProperties::grid_auto_rows() const
|
||||||
|
{
|
||||||
|
auto value = property(CSS::PropertyID::GridAutoRows);
|
||||||
|
return value->as_grid_track_size_list().grid_track_size_list();
|
||||||
|
}
|
||||||
|
|
||||||
CSS::GridTrackSizeList StyleProperties::grid_template_columns() const
|
CSS::GridTrackSizeList StyleProperties::grid_template_columns() const
|
||||||
{
|
{
|
||||||
auto value = property(CSS::PropertyID::GridTemplateColumns);
|
auto value = property(CSS::PropertyID::GridTemplateColumns);
|
||||||
|
|
|
@ -85,6 +85,8 @@ public:
|
||||||
Optional<CSS::PointerEvents> pointer_events() const;
|
Optional<CSS::PointerEvents> pointer_events() const;
|
||||||
Variant<CSS::VerticalAlign, CSS::LengthPercentage> vertical_align() const;
|
Variant<CSS::VerticalAlign, CSS::LengthPercentage> vertical_align() const;
|
||||||
Optional<CSS::FontVariant> font_variant() const;
|
Optional<CSS::FontVariant> font_variant() const;
|
||||||
|
CSS::GridTrackSizeList grid_auto_columns() const;
|
||||||
|
CSS::GridTrackSizeList grid_auto_rows() const;
|
||||||
CSS::GridTrackSizeList grid_template_columns() const;
|
CSS::GridTrackSizeList grid_template_columns() const;
|
||||||
CSS::GridTrackSizeList grid_template_rows() const;
|
CSS::GridTrackSizeList grid_template_rows() const;
|
||||||
CSS::GridTrackPlacement grid_column_end() const;
|
CSS::GridTrackPlacement grid_column_end() const;
|
||||||
|
|
Loading…
Add table
Reference in a new issue