diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp index e4fb38586b..48470893d1 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp @@ -355,8 +355,7 @@ void HTMLInputElement::did_pick_color(Optional picked_color) m_value = value_sanitization_algorithm(picked_color.value().to_string_without_alpha()); m_dirty_value = true; - if (m_color_well_element) - update_color_well_element(); + update_color_well_element(); // the user agent must queue an element task on the user interaction task source queue_an_element_task(HTML::Task::Source::UserInteraction, [this] { @@ -442,11 +441,7 @@ WebIDL::ExceptionOr HTMLInputElement::set_value(String const& value) browsing_context->set_cursor_position(DOM::Position::create(realm, *m_text_node, m_text_node->data().bytes().size())); } - if (type_state() == TypeAttributeState::Color && m_color_well_element) - update_color_well_element(); - - if (type_state() == TypeAttributeState::Range && m_slider_thumb) - update_slider_thumb_element(); + update_shadow_tree(); } break; @@ -615,6 +610,20 @@ void HTMLInputElement::create_shadow_tree_if_needed() } } +void HTMLInputElement::update_shadow_tree() +{ + switch (type_state()) { + case TypeAttributeState::Color: + update_color_well_element(); + break; + case TypeAttributeState::Range: + update_slider_thumb_element(); + break; + default: + break; + } +} + void HTMLInputElement::create_text_input_shadow_tree() { auto shadow_root = heap().allocate(realm(), document(), *this, Bindings::ShadowRootMode::Closed); @@ -737,6 +746,9 @@ void HTMLInputElement::create_color_input_shadow_tree() void HTMLInputElement::update_color_well_element() { + if (!m_color_well_element) + return; + MUST(m_color_well_element->style_for_bindings()->set_property(CSS::PropertyID::BackgroundColor, m_value)); } @@ -846,6 +858,9 @@ void HTMLInputElement::create_range_input_shadow_tree() void HTMLInputElement::update_slider_thumb_element() { + if (!m_slider_thumb) + return; + double value = value_as_number(); double minimum = *min(); double maximum = *max(); @@ -891,13 +906,9 @@ void HTMLInputElement::form_associated_element_attribute_changed(FlyString const } else { m_value = value_sanitization_algorithm(*value); } + update_placeholder_visibility(); - - if (type_state() == TypeAttributeState::Color && m_color_well_element) - update_color_well_element(); - - if (type_state() == TypeAttributeState::Range && m_slider_thumb) - update_slider_thumb_element(); + update_shadow_tree(); } } else if (name == HTML::AttributeNames::placeholder) { if (m_placeholder_text_node) @@ -1133,11 +1144,7 @@ void HTMLInputElement::reset_algorithm() update_placeholder_visibility(); } - if (type_state() == TypeAttributeState::Color && m_color_well_element) - update_color_well_element(); - - if (type_state() == TypeAttributeState::Range && m_slider_thumb) - update_slider_thumb_element(); + update_shadow_tree(); } void HTMLInputElement::form_associated_element_was_inserted() diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h index b0e0826e17..468372aa23 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h @@ -223,6 +223,7 @@ private: static TypeAttributeState parse_type_attribute(StringView); void create_shadow_tree_if_needed(); + void update_shadow_tree(); void create_text_input_shadow_tree(); void create_color_input_shadow_tree(); void create_range_input_shadow_tree();