new functions

This commit is contained in:
Mateusz Gruszczyński
2026-07-29 09:49:37 +02:00
parent bbcd1fe987
commit 904f59146b
23 changed files with 469 additions and 53 deletions
+19 -17
View File
@@ -175,31 +175,33 @@ export function renderAuthorshipLayer(layer, editor, model, colorFor) {
if (!layer) return;
const style = getComputedStyle(editor);
layer.style.left = `${editor.offsetLeft}px`;
layer.style.paddingTop = style.paddingTop;
layer.style.paddingRight = style.paddingRight;
layer.style.paddingBottom = style.paddingBottom;
layer.style.paddingLeft = style.paddingLeft;
layer.style.fontFamily = style.fontFamily;
layer.style.fontSize = style.fontSize;
layer.style.fontWeight = style.fontWeight;
layer.style.lineHeight = style.lineHeight;
layer.style.letterSpacing = style.letterSpacing;
const canvas = document.createElement("div");
canvas.className = "authorship-canvas";
canvas.style.paddingTop = style.paddingTop;
canvas.style.paddingRight = style.paddingRight;
canvas.style.paddingBottom = style.paddingBottom;
canvas.style.paddingLeft = style.paddingLeft;
canvas.style.fontFamily = style.fontFamily;
canvas.style.fontSize = style.fontSize;
canvas.style.fontWeight = style.fontWeight;
canvas.style.lineHeight = style.lineHeight;
canvas.style.letterSpacing = style.letterSpacing;
canvas.style.minWidth = `${editor.scrollWidth}px`;
canvas.style.minHeight = `${editor.scrollHeight}px`;
const text = editor.value;
const fragment = document.createDocumentFragment();
let cursor = 0;
for (const span of normalize(model?.spans, text.length)) {
if (span.start > cursor) fragment.append(document.createTextNode(text.slice(cursor, span.start)));
if (span.start > cursor) canvas.append(document.createTextNode(text.slice(cursor, span.start)));
const mark = document.createElement("span");
mark.className = "authorship-fragment";
mark.style.setProperty("--owner", colorFor(span.owner));
mark.textContent = text.slice(span.start, span.end);
mark.title = span.owner.split("\u001f", 1)[0];
fragment.append(mark);
canvas.append(mark);
cursor = span.end;
}
if (cursor < text.length) fragment.append(document.createTextNode(text.slice(cursor)));
if (!text.endsWith("\n")) fragment.append(document.createTextNode("\n"));
layer.replaceChildren(fragment);
layer.scrollTop = editor.scrollTop;
layer.scrollLeft = editor.scrollLeft;
if (cursor < text.length) canvas.append(document.createTextNode(text.slice(cursor)));
if (!text.endsWith("\n")) canvas.append(document.createTextNode("\n"));
canvas.style.transform = `translate3d(${-editor.scrollLeft}px, ${-editor.scrollTop}px, 0)`;
layer.replaceChildren(canvas);
}