1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 19:55:10 +00:00

LibWeb/CSS: Implement parsing of grid-auto-columns and grid-auto-rows

This commit is contained in:
Aliaksandr Kalenik 2023-05-21 18:08:41 +03:00 committed by Andreas Kling
parent b49e9d2eab
commit 6e0601a63e
6 changed files with 71 additions and 0 deletions

View file

@ -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));
}
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)
{
// 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)))
return parsed_value.release_nonnull();
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:
if (auto parsed_value = FIXME_TRY(parse_list_style_value(component_values)))
return parsed_value.release_nonnull();