mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 22:27:42 +00:00
LibWeb: Refactor parsing a GridTrackSize
This functionality was duplicated and this way it is more clean. It will also be used when parsing minmax() values.
This commit is contained in:
parent
202620e80c
commit
3cba4b6e41
1 changed files with 29 additions and 29 deletions
|
@ -5409,6 +5409,28 @@ RefPtr<StyleValue> Parser::parse_as_css_value(PropertyID property_id)
|
||||||
|
|
||||||
RefPtr<StyleValue> Parser::parse_grid_track_sizes(Vector<ComponentValue> const& component_values)
|
RefPtr<StyleValue> Parser::parse_grid_track_sizes(Vector<ComponentValue> const& component_values)
|
||||||
{
|
{
|
||||||
|
auto parse_grid_track_size = [&](ComponentValue const& component_value) -> Optional<GridTrackSize> {
|
||||||
|
// FIXME: Parse calc here if necessary
|
||||||
|
if (component_value.is_function())
|
||||||
|
return {};
|
||||||
|
auto token = component_value.token();
|
||||||
|
if (token.is(Token::Type::Dimension) && token.dimension_unit().equals_ignoring_case("fr"sv)) {
|
||||||
|
float numeric_value = token.dimension_value();
|
||||||
|
if (numeric_value)
|
||||||
|
return GridTrackSize(numeric_value);
|
||||||
|
}
|
||||||
|
if (token.is(Token::Type::Ident) && token.ident().equals_ignoring_case("auto"sv))
|
||||||
|
return GridTrackSize::make_auto();
|
||||||
|
auto dimension = parse_dimension(token);
|
||||||
|
if (!dimension.has_value())
|
||||||
|
return {};
|
||||||
|
if (dimension->is_length())
|
||||||
|
return GridTrackSize(dimension->length());
|
||||||
|
else if (dimension->is_percentage())
|
||||||
|
return GridTrackSize(dimension->percentage());
|
||||||
|
return {};
|
||||||
|
};
|
||||||
|
|
||||||
Vector<CSS::MetaGridTrackSize> params;
|
Vector<CSS::MetaGridTrackSize> params;
|
||||||
for (auto const& component_value : component_values) {
|
for (auto const& component_value : component_values) {
|
||||||
if (component_value.is_function()) {
|
if (component_value.is_function()) {
|
||||||
|
@ -5453,20 +5475,10 @@ RefPtr<StyleValue> Parser::parse_grid_track_sizes(Vector<ComponentValue> const&
|
||||||
} else if (current_component_value.is_block()) {
|
} else if (current_component_value.is_block()) {
|
||||||
// FIXME: Implement things like grid-template-columns: repeat(1, [col-start] 8);
|
// FIXME: Implement things like grid-template-columns: repeat(1, [col-start] 8);
|
||||||
} else {
|
} else {
|
||||||
current_token = current_component_value.token();
|
auto grid_track_size = parse_grid_track_size(current_component_value);
|
||||||
if (current_token.type() == Token::Type::Dimension && current_token.dimension_unit().equals_ignoring_case("fr"sv)) {
|
if (!grid_track_size.has_value())
|
||||||
float numeric_value = current_token.dimension_value();
|
return GridTrackSizeStyleValue::create({});
|
||||||
if (numeric_value)
|
repeat_params.append(grid_track_size.value());
|
||||||
repeat_params.append(GridTrackSize(numeric_value));
|
|
||||||
} else {
|
|
||||||
auto dimension = parse_dimension(current_token);
|
|
||||||
if (!dimension.has_value())
|
|
||||||
return GridTrackSizeStyleValue::create({});
|
|
||||||
if (dimension->is_length())
|
|
||||||
repeat_params.append(GridTrackSize(dimension->length()));
|
|
||||||
else if (dimension->is_percentage())
|
|
||||||
repeat_params.append(GridTrackSize(dimension->percentage()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
part_two_tokens.skip_whitespace();
|
part_two_tokens.skip_whitespace();
|
||||||
if (!part_two_tokens.has_next_token())
|
if (!part_two_tokens.has_next_token())
|
||||||
|
@ -5508,22 +5520,10 @@ RefPtr<StyleValue> Parser::parse_grid_track_sizes(Vector<ComponentValue> const&
|
||||||
params.append(GridTrackSize(Length::make_auto()));
|
params.append(GridTrackSize(Length::make_auto()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (component_value.token().type() == Token::Type::Dimension) {
|
auto grid_track_size = parse_grid_track_size(component_value);
|
||||||
float numeric_value = component_value.token().dimension_value();
|
if (!grid_track_size.has_value())
|
||||||
auto unit_string = component_value.token().dimension_unit();
|
|
||||||
if (unit_string.equals_ignoring_case("fr"sv) && numeric_value) {
|
|
||||||
params.append(GridTrackSize(numeric_value));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto dimension = parse_dimension(component_value);
|
|
||||||
if (!dimension.has_value())
|
|
||||||
return GridTrackSizeStyleValue::create({});
|
return GridTrackSizeStyleValue::create({});
|
||||||
if (dimension->is_length())
|
params.append(grid_track_size.value());
|
||||||
params.append(GridTrackSize(dimension->length()));
|
|
||||||
if (dimension->is_percentage())
|
|
||||||
params.append(GridTrackSize(dimension->percentage()));
|
|
||||||
}
|
}
|
||||||
return GridTrackSizeStyleValue::create(params);
|
return GridTrackSizeStyleValue::create(params);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue