HTML: Put HTMLTextAreaElement selection helpers in FormAssociatedElement

This will allow us to more closely follow the spec and share these
functions with HTMLInputElement.

(cherry picked from commit 62bf428a7f57b585e6d0b8c01af2c0aca336fe2c)
This commit is contained in:
Shannon Booth
2024-07-28 15:55:09 +12:00
committed by Nico Weber
parent 8a469cf7e4
commit 744b0e2d02
4 changed files with 64 additions and 63 deletions

View File

@@ -213,63 +213,6 @@ void HTMLTextAreaElement::set_custom_validity(String const& error)
dbgln("(STUBBED) HTMLTextAreaElement::set_custom_validity(\"{}\"). Called on: {}", error, debug_description());
}
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-textarea/input-selectionstart
WebIDL::UnsignedLong HTMLTextAreaElement::selection_start() const
{
// 1. If this element is an input element, and selectionStart does not apply to this element, return null.
// 2. If there is no selection, return the code unit offset within the relevant value to the character that
// immediately follows the text entry cursor.
if (auto navigable = document().navigable()) {
if (auto cursor = navigable->cursor_position())
return cursor->offset();
}
// FIXME: 3. Return the code unit offset within the relevant value to the character that immediately follows the start of
// the selection.
return 0;
}
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#textFieldSelection:dom-textarea/input-selectionstart-2
WebIDL::ExceptionOr<void> HTMLTextAreaElement::set_selection_start(WebIDL::UnsignedLong)
{
// 1. If this element is an input element, and selectionStart does not apply to this element, throw an
// "InvalidStateError" DOMException.
// FIXME: 2. Let end be the value of this element's selectionEnd attribute.
// FIXME: 3. If end is less than the given value, set end to the given value.
// FIXME: 4. Set the selection range with the given value, end, and the value of this element's selectionDirection attribute.
return {};
}
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-textarea/input-selectionend
WebIDL::UnsignedLong HTMLTextAreaElement::selection_end() const
{
// 1. If this element is an input element, and selectionEnd does not apply to this element, return null.
// 2. If there is no selection, return the code unit offset within the relevant value to the character that
// immediately follows the text entry cursor.
if (auto navigable = document().navigable()) {
if (auto cursor = navigable->cursor_position())
return cursor->offset();
}
// FIXME: 3. Return the code unit offset within the relevant value to the character that immediately follows the end of
// the selection.
return 0;
}
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#textFieldSelection:dom-textarea/input-selectionend-3
WebIDL::ExceptionOr<void> HTMLTextAreaElement::set_selection_end(WebIDL::UnsignedLong)
{
// 1. If this element is an input element, and selectionEnd does not apply to this element, throw an
// "InvalidStateError" DOMException.
// FIXME: 2. Set the selection range with the value of this element's selectionStart attribute, the given value, and the
// value of this element's selectionDirection attribute.
return {};
}
// https://html.spec.whatwg.org/multipage/form-elements.html#dom-textarea-maxlength
WebIDL::Long HTMLTextAreaElement::max_length() const
{