mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
The editing command that relies the most on this, `insertLinebreak`, did not perform a layout update after inserting a `<br>` which caused this algorithm to always return false. But instead of actually building the layout tree needlessly, we can check the DOM tree instead.
53 lines
2.0 KiB
HTML
53 lines
2.0 KiB
HTML
<!DOCTYPE html>
|
|
<script src="../include.js"></script>
|
|
<div id="a" contenteditable>foobar</div>
|
|
<div id="b" contenteditable><p style="white-space: pre">foobar</p></div>
|
|
<div id="c" contenteditable><p style="white-space: pre">foobar</p></div>
|
|
<div id="d" contenteditable>foo</div>
|
|
<script>
|
|
test(() => {
|
|
let divA = document.querySelector('div#a');
|
|
let divB = document.querySelector('div#b');
|
|
let divC = document.querySelector('div#c');
|
|
let divD = document.querySelector('div#d');
|
|
|
|
document.body.offsetWidth // Force a layout
|
|
|
|
// A: Insert linebreak after 'foo'
|
|
println(`Before: "${divA.innerHTML}"`);
|
|
var range = document.createRange();
|
|
range.setStart(divA.firstChild, 3);
|
|
getSelection().addRange(range);
|
|
document.execCommand('insertLinebreak');
|
|
println(`After: "${divA.innerHTML}"`);
|
|
getSelection().empty();
|
|
|
|
// B: Insert linebreak after 'foo'
|
|
println(`Before: "${divB.innerHTML}"`);
|
|
var range = document.createRange();
|
|
range.setStart(divB.firstChild.firstChild, 3);
|
|
getSelection().addRange(range);
|
|
document.execCommand('insertLinebreak');
|
|
println(`After: "${divB.innerHTML}"`);
|
|
getSelection().empty();
|
|
|
|
// C: Insert linebreak after 'bar'
|
|
println(`Before: "${divC.innerHTML}"`);
|
|
var range = document.createRange();
|
|
range.setStart(divC.firstChild.firstChild, 6);
|
|
getSelection().addRange(range);
|
|
document.execCommand('insertLinebreak');
|
|
println(`After: "${divC.innerHTML}"`);
|
|
getSelection().empty();
|
|
|
|
// D: Insert linebreak after 'foo'
|
|
println(`Before: "${divD.innerHTML}"`);
|
|
var range = document.createRange();
|
|
range.setStart(divD.firstChild, 3);
|
|
getSelection().addRange(range);
|
|
document.execCommand('insertLinebreak');
|
|
println(`After: "${divD.innerHTML}"`);
|
|
getSelection().empty();
|
|
});
|
|
</script>
|