From 7e92ff062e6f49de9618cfe748306c1c41b16f5c Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 30 Nov 2023 16:31:03 -0500 Subject: [PATCH] LibWeb: Update the document's cursor after setting an 's value The spec step here explicitly says to "move the text entry cursor position to the end of the text control". --- Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp index 7c397dcd68..a00b5d6a83 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp @@ -371,11 +371,13 @@ String HTMLInputElement::value() const WebIDL::ExceptionOr HTMLInputElement::set_value(String const& value) { + auto& realm = this->realm(); + // https://html.spec.whatwg.org/multipage/input.html#dom-input-value-filename if (type_state() == TypeAttributeState::FileUpload) { // On setting, if the new value is the empty string, empty the list of selected files; otherwise, throw an "InvalidStateError" DOMException. if (!value.is_empty()) - return WebIDL::InvalidStateError::create(realm(), "Setting value of input type file to non-empty string"_fly_string); + return WebIDL::InvalidStateError::create(realm, "Setting value of input type file to non-empty string"_fly_string); m_selected_files = nullptr; return {}; } @@ -401,6 +403,9 @@ WebIDL::ExceptionOr HTMLInputElement::set_value(String const& value) if (m_text_node && (m_value != old_value)) { m_text_node->set_data(m_value); update_placeholder_visibility(); + + if (auto* browsing_context = document().browsing_context()) + browsing_context->set_cursor_position(DOM::Position::create(realm, *m_text_node, m_text_node->data().bytes().size())); } return {};