mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-22 08:00:45 +00:00
Both sides of the Editing internals now have to deal with some awkward converting between UTF-8 and UTF-16, but the upside is that it immediately exposed an issue with the `insertText` command: instead of dealing with code units, it was iterating over code points causing the selection to be updated only once instead of twice. This resulted in the final selection potentially ending up in between a surrogate pair. Fixes #5547 (pasting/typing surrogate pairs).
32 lines
1 KiB
HTML
32 lines
1 KiB
HTML
<!DOCTYPE html>
|
|
<script src="../include.js"></script>
|
|
<div contenteditable="true">foobar</div>
|
|
<script>
|
|
test(() => {
|
|
const selection = getSelection();
|
|
const reportSelection = () => {
|
|
if (selection.rangeCount === 0) {
|
|
println('No range.');
|
|
return;
|
|
}
|
|
const range = selection.getRangeAt(0);
|
|
println(`${range.startContainer.nodeName} ${range.startOffset} - ${range.endContainer.nodeName} ${range.endOffset}`);
|
|
};
|
|
|
|
var divElm = document.querySelector('div');
|
|
divElm.addEventListener('input', (e) => println('input triggered'));
|
|
|
|
// Put cursor between 'foo' and 'bar'
|
|
selection.setBaseAndExtent(divElm.childNodes[0], 3, divElm.childNodes[0], 3);
|
|
|
|
// Insert text
|
|
document.execCommand('insertText', false, 'baz');
|
|
reportSelection();
|
|
|
|
// Insert Unicode
|
|
document.execCommand('insertText', false, '🙂');
|
|
reportSelection();
|
|
|
|
println(divElm.innerHTML);
|
|
});
|
|
</script>
|