mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 01:37:36 +00:00
LibWeb: Parse grid-template
property
This commit is contained in:
parent
bebf4363db
commit
22202715fc
13 changed files with 351 additions and 3 deletions
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Martin Falisse <mfalisse@outlook.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "GridTrackSizeListShorthandStyleValue.h"
|
||||
#include <LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h>
|
||||
|
||||
namespace Web::CSS {
|
||||
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListShorthandStyleValue> GridTrackSizeListShorthandStyleValue::create(
|
||||
ValueComparingNonnullRefPtr<GridTemplateAreaStyleValue const> areas,
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListStyleValue const> rows,
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListStyleValue const> columns)
|
||||
{
|
||||
return adopt_ref(*new GridTrackSizeListShorthandStyleValue(move(areas), move(rows), move(columns)));
|
||||
}
|
||||
|
||||
ErrorOr<String> GridTrackSizeListShorthandStyleValue::to_string() const
|
||||
{
|
||||
auto construct_rows_string = [&]() -> ErrorOr<String> {
|
||||
StringBuilder builder;
|
||||
size_t idx = 0;
|
||||
for (auto const& row : m_properties.rows->grid_track_size_list().track_list()) {
|
||||
if (m_properties.areas->grid_template_area().size() > idx) {
|
||||
TRY(builder.try_append("\""sv));
|
||||
for (size_t y = 0; y < m_properties.areas->grid_template_area()[idx].size(); ++y) {
|
||||
TRY(builder.try_append(m_properties.areas->grid_template_area()[idx][y]));
|
||||
if (y != m_properties.areas->grid_template_area()[idx].size() - 1)
|
||||
TRY(builder.try_append(" "sv));
|
||||
}
|
||||
TRY(builder.try_append("\" "sv));
|
||||
}
|
||||
TRY(builder.try_append(TRY(row.to_string())));
|
||||
if (idx < m_properties.rows->grid_track_size_list().track_list().size() - 1)
|
||||
TRY(builder.try_append(' '));
|
||||
idx++;
|
||||
}
|
||||
return TRY(builder.to_string());
|
||||
};
|
||||
|
||||
if (m_properties.columns->grid_track_size_list().track_list().size() == 0)
|
||||
return String::formatted("{}", TRY(construct_rows_string()));
|
||||
return String::formatted("{} / {}", TRY(construct_rows_string()), TRY(m_properties.columns->grid_track_size_list().to_string()));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Martin Falisse <mfalisse@outlook.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibWeb/CSS/StyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h>
|
||||
|
||||
namespace Web::CSS {
|
||||
|
||||
class GridTrackSizeListShorthandStyleValue final : public StyleValueWithDefaultOperators<GridTrackSizeListShorthandStyleValue> {
|
||||
public:
|
||||
static ValueComparingNonnullRefPtr<GridTrackSizeListShorthandStyleValue> create(
|
||||
ValueComparingNonnullRefPtr<GridTemplateAreaStyleValue const> areas,
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListStyleValue const> rows,
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListStyleValue const> columns);
|
||||
virtual ~GridTrackSizeListShorthandStyleValue() override = default;
|
||||
|
||||
auto rows() const { return m_properties.rows; }
|
||||
auto columns() const { return m_properties.columns; }
|
||||
auto areas() const { return m_properties.areas; }
|
||||
|
||||
virtual ErrorOr<String> to_string() const override;
|
||||
|
||||
bool properties_equal(GridTrackSizeListShorthandStyleValue const& other) const { return m_properties == other.m_properties; };
|
||||
|
||||
private:
|
||||
GridTrackSizeListShorthandStyleValue(
|
||||
ValueComparingNonnullRefPtr<GridTemplateAreaStyleValue const> areas,
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListStyleValue const> rows,
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListStyleValue const> columns)
|
||||
: StyleValueWithDefaultOperators(Type::GridTrackSizeListShorthand)
|
||||
, m_properties { .areas = move(areas), .rows = move(rows), .columns = move(columns) }
|
||||
{
|
||||
}
|
||||
|
||||
struct Properties {
|
||||
ValueComparingNonnullRefPtr<GridTemplateAreaStyleValue const> areas;
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListStyleValue const> rows;
|
||||
ValueComparingNonnullRefPtr<GridTrackSizeListStyleValue const> columns;
|
||||
bool operator==(Properties const&) const = default;
|
||||
} m_properties;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue