diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp index f5018d0d38..1dd5929e45 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp @@ -32,6 +32,12 @@ ElementInlineCSSStyleDeclaration::ElementInlineCSSStyleDeclaration(DOM::Element& { } +ElementInlineCSSStyleDeclaration::ElementInlineCSSStyleDeclaration(DOM::Element& element, CSSStyleDeclaration& declaration) + : CSSStyleDeclaration(move(declaration.m_properties), move(declaration.m_custom_properties)) + , m_element(element.make_weak_ptr()) +{ +} + ElementInlineCSSStyleDeclaration::~ElementInlineCSSStyleDeclaration() { } diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h index 9dbfb8aab6..37a29d838a 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h @@ -44,6 +44,7 @@ protected: explicit CSSStyleDeclaration(Vector&&, HashMap&&); private: + friend class ElementInlineCSSStyleDeclaration; friend class Bindings::CSSStyleDeclarationWrapper; Vector m_properties; @@ -53,6 +54,7 @@ private: class ElementInlineCSSStyleDeclaration final : public CSSStyleDeclaration { public: static NonnullRefPtr create(DOM::Element& element) { return adopt_ref(*new ElementInlineCSSStyleDeclaration(element)); } + static NonnullRefPtr create_and_take_properties_from(DOM::Element& element, CSSStyleDeclaration& declaration) { return adopt_ref(*new ElementInlineCSSStyleDeclaration(element, declaration)); } virtual ~ElementInlineCSSStyleDeclaration() override; DOM::Element* element() { return m_element.ptr(); } @@ -60,6 +62,7 @@ public: private: explicit ElementInlineCSSStyleDeclaration(DOM::Element&); + explicit ElementInlineCSSStyleDeclaration(DOM::Element&, CSSStyleDeclaration&); WeakPtr m_element; }; diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index 59b4cdecc4..526850040c 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -158,8 +158,11 @@ void Element::parse_attribute(const FlyString& name, const String& value) m_classes.unchecked_append(new_class); } } else if (name == HTML::AttributeNames::style) { - m_inline_style = parse_css_declaration(CSS::ParsingContext(document()), value); - set_needs_style_update(true); + auto parsed_style = parse_css_declaration(CSS::ParsingContext(document()), value); + if (!parsed_style.is_null()) { + m_inline_style = CSS::ElementInlineCSSStyleDeclaration::create_and_take_properties_from(*this, parsed_style.release_nonnull()); + set_needs_style_update(true); + } } }