diff --git a/Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp b/Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp index d5e572fcf3..66bd50f446 100644 --- a/Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp +++ b/Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp @@ -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; } } diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp index dae3a69a59..0635a4c2e3 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp @@ -64,9 +64,12 @@ Optional 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(*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); +} + } diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h index 17bfcb26c1..37a32c9f6a 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h @@ -34,6 +34,8 @@ public: virtual Optional 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: diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl index 743f2151ad..bce8af29f3 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl @@ -6,4 +6,6 @@ interface CSSStyleDeclaration { CSSOMString getPropertyValue(CSSOMString property); + [CEReactions] undefined setProperty(CSSOMString property, [LegacyNullToEmptyString] CSSOMString value); + };