LibWeb: Put cursor in last text node when contenteditable is focused

With this change we match behavior of other engines a bit more closer.
This commit is contained in:
Aliaksandr Kalenik 2024-10-20 16:11:20 +02:00 committed by Tim Flynn
parent da42c19cb6
commit d88e6bee5d
Notes: github-actions[bot] 2024-10-22 12:46:09 +00:00
3 changed files with 23 additions and 1 deletions

View file

@ -0,0 +1,10 @@
<script src="include.js"></script>
<div id="editable" contenteditable="true"><p id="text">hello</p></div>
<script>
test(() => {
const editable = document.getElementById('editable');
internals.sendText(editable, "!!!");
const text = document.getElementById('text');
println(text.textContent);
});
</script>

View file

@ -757,7 +757,18 @@ void HTMLElement::did_receive_focus()
{
if (m_content_editable_state != ContentEditableState::True)
return;
document().set_cursor_position(DOM::Position::create(realm(), *this, 0));
DOM::Text* text = nullptr;
for_each_in_inclusive_subtree_of_type<DOM::Text>([&](auto& node) {
text = &node;
return TraversalDecision::Continue;
});
if (!text) {
document().set_cursor_position(DOM::Position::create(realm(), *this, 0));
return;
}
document().set_cursor_position(DOM::Position::create(realm(), *text, text->length()));
}
// https://html.spec.whatwg.org/multipage/interaction.html#dom-accesskeylabel