mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:27:45 +00:00
LibWeb: Support simplest form of CSSStyleDeclaration.setProperty()
This patch adds the setProperty(name, value) API to CSSStyleDeclaration. Setting an invalid or empty value will cause the property to be removed from the declaration. Note that this only works on mutable declarations (i.e element.style) and not on resolved declarations (i.e window.getComputedStyle(element)).
This commit is contained in:
parent
e0e41116a4
commit
0ab31d8c84
4 changed files with 19 additions and 3 deletions
|
@ -44,7 +44,8 @@ bool CSSStyleDeclarationWrapper::internal_set(JS::PropertyName const& name, JS::
|
|||
if (vm().exception())
|
||||
return false;
|
||||
|
||||
return impl().set_property(property_id, css_text);
|
||||
impl().set_property(property_id, css_text);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -64,9 +64,12 @@ Optional<StyleProperty> PropertyOwningCSSStyleDeclaration::property(PropertyID p
|
|||
bool PropertyOwningCSSStyleDeclaration::set_property(PropertyID property_id, StringView css_text)
|
||||
{
|
||||
auto new_value = parse_css_value(CSS::ParsingContext {}, css_text, property_id);
|
||||
// FIXME: What are we supposed to do if we can't parse it?
|
||||
if (!new_value)
|
||||
if (!new_value) {
|
||||
m_properties.remove_all_matching([&](auto& entry) {
|
||||
return entry.property_id == property_id;
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
ScopeGuard style_invalidation_guard = [&] {
|
||||
auto& declaration = verify_cast<CSS::ElementInlineCSSStyleDeclaration>(*this);
|
||||
|
@ -102,4 +105,12 @@ String CSSStyleDeclaration::get_property_value(StringView property_name) const
|
|||
return maybe_property->value->to_string();
|
||||
}
|
||||
|
||||
void CSSStyleDeclaration::set_property(StringView property_name, StringView css_text)
|
||||
{
|
||||
auto property_id = property_id_from_string(property_name);
|
||||
if (property_id == CSS::PropertyID::Invalid)
|
||||
return;
|
||||
set_property(property_id, css_text);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -34,6 +34,8 @@ public:
|
|||
virtual Optional<StyleProperty> property(PropertyID) const = 0;
|
||||
virtual bool set_property(PropertyID, StringView css_text) = 0;
|
||||
|
||||
void set_property(StringView property_name, StringView css_text);
|
||||
|
||||
String get_property_value(StringView property) const;
|
||||
|
||||
protected:
|
||||
|
|
|
@ -6,4 +6,6 @@ interface CSSStyleDeclaration {
|
|||
|
||||
CSSOMString getPropertyValue(CSSOMString property);
|
||||
|
||||
[CEReactions] undefined setProperty(CSSOMString property, [LegacyNullToEmptyString] CSSOMString value);
|
||||
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue