fix: Add a plugin to fix the last column in a table (#7036)
This commit is contained in:
37
shared/editor/lib/changedDescendants.ts
Normal file
37
shared/editor/lib/changedDescendants.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { Node } from "prosemirror-model";
|
||||
|
||||
/**
|
||||
* Helper for iterating through the nodes in a document that changed
|
||||
* compared to the given previous document. Useful for avoiding
|
||||
* duplicate work on each transaction.
|
||||
*/
|
||||
export function changedDescendants(
|
||||
/** The previous node */
|
||||
old: Node,
|
||||
/** The current node */
|
||||
cur: Node,
|
||||
/** The offset of the current node */
|
||||
offset: number,
|
||||
/** The function to call for each changed node */
|
||||
callback: (node: Node, pos: number) => void
|
||||
): void {
|
||||
const oldSize = old.childCount,
|
||||
curSize = cur.childCount;
|
||||
outer: for (let i = 0, j = 0; i < curSize; i++) {
|
||||
const child = cur.child(i);
|
||||
for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {
|
||||
if (old.child(scan) === child) {
|
||||
j = scan + 1;
|
||||
offset += child.nodeSize;
|
||||
continue outer;
|
||||
}
|
||||
}
|
||||
callback(child, offset);
|
||||
if (j < oldSize && old.child(j).sameMarkup(child)) {
|
||||
changedDescendants(old.child(j), child, offset + 1, callback);
|
||||
} else {
|
||||
child.nodesBetween(0, child.content.size, callback, offset + 1);
|
||||
}
|
||||
offset += child.nodeSize;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user