diff --git a/internal/web/static/paste-lines.js b/internal/web/static/paste-lines.js index a71d8ba..02944a6 100644 --- a/internal/web/static/paste-lines.js +++ b/internal/web/static/paste-lines.js @@ -54,7 +54,16 @@ // is closest to its line's top. var bodyTop = body.getBoundingClientRect().top; var lh = parseFloat(getComputedStyle(body).lineHeight) || 1; - var totalRows = Math.max(lines.length, Math.ceil(body.getBoundingClientRect().height / lh)); + var maxBottom = 0; + for (var j = 0; j < lines.length; j++) { + var btm = lines[j].getBoundingClientRect().bottom - bodyTop; + if (btm > maxBottom) maxBottom = btm; + } + // Rows needed through the last visual row of the deepest line (ceil, so a + // partially-filled last row still gets its gutter span). + // Rows needed: floor(last line bottom / lh) + 1 — the row a line STARTS on + // must exist even when its bottom lands exactly on the body's edge. + var totalRows = Math.max(lines.length, Math.floor(maxBottom / lh) + 1); gutter.textContent = ''; var frag = document.createDocumentFragment(); var spans = [];