LibWeb: Implement CSS unset builtin value

This is equivalent to `initial` or `inherit`, depending on if the
property is inherited by default.
This commit is contained in:
Sam Atkins 2021-08-20 19:52:36 +01:00 committed by Andreas Kling
parent 3296fd70b3
commit b92a6d6542
Notes: sideshowbarker 2024-07-19 01:59:31 +09:00
3 changed files with 32 additions and 3 deletions

View file

@ -1407,7 +1407,9 @@ RefPtr<StyleValue> Parser::parse_builtin_value(ParsingContext const&, StyleCompo
return InheritStyleValue::the();
if (ident.equals_ignoring_case("initial"))
return InitialStyleValue::the();
// FIXME: Implement `unset` keyword
if (ident.equals_ignoring_case("unset"))
return UnsetStyleValue::the();
// FIXME: Implement `revert` and `revert-layer` keywords, from Cascade4 and Cascade5 respectively
}
return {};

View file

@ -71,6 +71,13 @@ Optional<NonnullRefPtr<StyleValue>> StyleProperties::property(CSS::PropertyID id
return fetch_initial(id);
if (value->is_inherit())
return fetch_inherited(id);
if (value->is_unset()) {
if (is_inherited_property(id)) {
return fetch_inherited(id);
} else {
return fetch_initial(id);
}
}
return value;
}

View file

@ -219,6 +219,7 @@ public:
Invalid,
Inherit,
Initial,
Unset,
String,
Length,
Color,
@ -245,6 +246,7 @@ public:
bool is_inherit() const { return type() == Type::Inherit; }
bool is_initial() const { return type() == Type::Initial; }
bool is_unset() const { return type() == Type::Unset; }
bool is_color() const { return type() == Type::Color; }
bool is_identifier() const { return type() == Type::Identifier || is_auto(); }
bool is_image() const { return type() == Type::Image; }
@ -266,11 +268,11 @@ public:
bool is_overflow() const { return type() == Type::Overflow; }
bool is_text_decoration() const { return type() == Type::TextDecoration; }
bool is_builtin() const { return is_inherit() || is_initial(); }
bool is_builtin() const { return is_inherit() || is_initial() || is_unset(); }
bool is_builtin_or_dynamic() const
{
return is_inherit() || is_initial() || is_custom_property() || is_calculated();
return is_builtin() || is_custom_property() || is_calculated();
}
virtual String to_string() const = 0;
@ -568,6 +570,24 @@ private:
}
};
class UnsetStyleValue final : public StyleValue {
public:
static NonnullRefPtr<UnsetStyleValue> the()
{
static NonnullRefPtr<UnsetStyleValue> instance = adopt_ref(*new UnsetStyleValue);
return instance;
}
virtual ~UnsetStyleValue() override { }
String to_string() const override { return "unset"; }
private:
UnsetStyleValue()
: StyleValue(Type::Unset)
{
}
};
class ColorStyleValue : public StyleValue {
public:
static NonnullRefPtr<ColorStyleValue> create(Color color)