mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 10:57:34 +00:00
LibWeb: Implement and use ListStyleStyleValue
Yes, the name is silly, but it's a StyleValue for list-style, so... yeah. :^) Since `list-style-type` and `list-style-image` can both have `none` as a value, and can appear in any order, we have to handle it separately, and then assign either or both of those to `none` depending on how many `none`s there are, and whether those sub-properties already have values. Added some extra test cases to lists.html to cover list-style-image and list-style-position parts of the list-style shorthand, and the `none` values.
This commit is contained in:
parent
dcbfb61816
commit
0e15561df0
7 changed files with 246 additions and 98 deletions
|
@ -232,6 +232,7 @@ public:
|
|||
Background,
|
||||
BoxShadow,
|
||||
Font,
|
||||
ListStyle,
|
||||
};
|
||||
|
||||
Type type() const { return m_type; }
|
||||
|
@ -251,6 +252,7 @@ public:
|
|||
bool is_background() const { return type() == Type::Background; }
|
||||
bool is_box_shadow() const { return type() == Type::BoxShadow; }
|
||||
bool is_font() const { return type() == Type::Font; }
|
||||
bool is_list_style() const { return type() == Type::ListStyle; }
|
||||
|
||||
bool is_builtin() const { return is_inherit() || is_initial(); }
|
||||
|
||||
|
@ -717,6 +719,43 @@ private:
|
|||
// FIXME: Implement font-stretch and font-variant.
|
||||
};
|
||||
|
||||
class ListStyleStyleValue final : public StyleValue {
|
||||
public:
|
||||
static NonnullRefPtr<ListStyleStyleValue> create(
|
||||
NonnullRefPtr<StyleValue> position,
|
||||
NonnullRefPtr<StyleValue> image,
|
||||
NonnullRefPtr<StyleValue> style_type)
|
||||
{
|
||||
return adopt_ref(*new ListStyleStyleValue(position, image, style_type));
|
||||
}
|
||||
virtual ~ListStyleStyleValue() override { }
|
||||
|
||||
NonnullRefPtr<StyleValue> position() const { return m_position; }
|
||||
NonnullRefPtr<StyleValue> image() const { return m_image; }
|
||||
NonnullRefPtr<StyleValue> style_type() const { return m_style_type; }
|
||||
|
||||
virtual String to_string() const override
|
||||
{
|
||||
return String::formatted("ListStyle position: {}, image: {}, style_type: {}", m_position->to_string(), m_image->to_string(), m_style_type->to_string());
|
||||
}
|
||||
|
||||
private:
|
||||
ListStyleStyleValue(
|
||||
NonnullRefPtr<StyleValue> position,
|
||||
NonnullRefPtr<StyleValue> image,
|
||||
NonnullRefPtr<StyleValue> style_type)
|
||||
: StyleValue(Type::ListStyle)
|
||||
, m_position(position)
|
||||
, m_image(image)
|
||||
, m_style_type(style_type)
|
||||
{
|
||||
}
|
||||
|
||||
NonnullRefPtr<StyleValue> m_position;
|
||||
NonnullRefPtr<StyleValue> m_image;
|
||||
NonnullRefPtr<StyleValue> m_style_type;
|
||||
};
|
||||
|
||||
class StyleValueList final : public StyleValue {
|
||||
public:
|
||||
static NonnullRefPtr<StyleValueList> create(NonnullRefPtrVector<StyleValue>&& values) { return adopt_ref(*new StyleValueList(move(values))); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue