new functions
This commit is contained in:
+19
-17
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user