@manuscripts/track-changes-plugin 1.10.9-LEAN-4634.1 → 1.10.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/change-steps/processChangeSteps.js +5 -10
- package/dist/cjs/changes/applyChanges.js +8 -2
- package/dist/cjs/changes/revertChange.js +7 -4
- package/dist/cjs/utils/track-utils.js +2 -6
- package/dist/es/change-steps/processChangeSteps.js +5 -10
- package/dist/es/changes/applyChanges.js +8 -2
- package/dist/es/changes/revertChange.js +8 -5
- package/dist/es/utils/track-utils.js +2 -6
- package/dist/types/changes/revertChange.d.ts +2 -1
- package/package.json +1 -1
|
@@ -53,7 +53,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
53
53
|
changes.forEach((c) => {
|
|
54
54
|
let step = newTr.steps[newTr.steps.length - 1];
|
|
55
55
|
switch (c.type) {
|
|
56
|
-
case 'delete-node':
|
|
56
|
+
case 'delete-node':
|
|
57
57
|
deletesCounter++;
|
|
58
58
|
const prevDeletedNodeInserted = isInserted;
|
|
59
59
|
const trackedData = (0, nodeHelpers_1.getBlockInlineTrackedData)(c.node);
|
|
@@ -85,8 +85,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
85
85
|
}
|
|
86
86
|
(0, mergeTrackedMarks_1.mergeTrackedMarks)(mapping.map(c.pos), newTr.doc, newTr, schema);
|
|
87
87
|
break;
|
|
88
|
-
|
|
89
|
-
case 'delete-text': {
|
|
88
|
+
case 'delete-text':
|
|
90
89
|
const node = newTr.doc.nodeAt(mapping.map(c.pos));
|
|
91
90
|
if (!node) {
|
|
92
91
|
logger_1.log.error(`processChangeSteps: no text node found for text-change`, c);
|
|
@@ -103,8 +102,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
103
102
|
}
|
|
104
103
|
(0, mergeTrackedMarks_1.mergeTrackedMarks)(where, newTr.doc, newTr, schema);
|
|
105
104
|
break;
|
|
106
|
-
|
|
107
|
-
case 'merge-fragment': {
|
|
105
|
+
case 'merge-fragment':
|
|
108
106
|
let insertPos = mapping.map(c.mergePos);
|
|
109
107
|
if (c.node.isText) {
|
|
110
108
|
insertPos = (0, deleteText_1.deleteTextIfInserted)(c.node, mapping.map(c.pos), newTr, schema, deleteAttrs, mapping.map(c.from), mapping.map(c.to));
|
|
@@ -121,8 +119,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
121
119
|
newTr.insert(insertPos, c.fragment);
|
|
122
120
|
}
|
|
123
121
|
break;
|
|
124
|
-
|
|
125
|
-
case 'insert-slice': {
|
|
122
|
+
case 'insert-slice':
|
|
126
123
|
const newStep = new prosemirror_transform_1.ReplaceStep(mapping.map(c.from), mapping.map(c.to), c.slice, false);
|
|
127
124
|
const stepResult = newTr.maybeStep(newStep);
|
|
128
125
|
if (stepResult.failed) {
|
|
@@ -134,8 +131,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
134
131
|
(0, mergeTrackedMarks_1.mergeTrackedMarks)(mapping.map(c.to) + (to < newTr.doc.nodeSize ? c.slice.size : 0), newTr.doc, newTr, schema);
|
|
135
132
|
selectionPos = mapping.map(c.to) + c.slice.size;
|
|
136
133
|
break;
|
|
137
|
-
|
|
138
|
-
case 'update-node-attrs': {
|
|
134
|
+
case 'update-node-attrs':
|
|
139
135
|
const oldDataTracked = (0, nodeHelpers_1.getBlockInlineTrackedData)(c.node) || [];
|
|
140
136
|
const oldUpdate = oldDataTracked.reverse().find((d) => {
|
|
141
137
|
if (d.operation === change_1.CHANGE_OPERATION.set_node_attributes && d.status === change_1.CHANGE_STATUS.pending) {
|
|
@@ -157,7 +153,6 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
157
153
|
const finalDataTracked = newDataTracked.length > 0 ? newDataTracked : oldDataTracked;
|
|
158
154
|
newTr.setNodeMarkup(mapping.map(c.pos), undefined, Object.assign(Object.assign({}, c.newAttrs), { dataTracked: finalDataTracked.length > 0 ? finalDataTracked : null }), c.node.marks);
|
|
159
155
|
break;
|
|
160
|
-
}
|
|
161
156
|
default:
|
|
162
157
|
logger_1.log.error(`processChangeSteps: unknown change type`, c);
|
|
163
158
|
return;
|
|
@@ -18,7 +18,13 @@ function getUpdatedDataTracked(dataTracked, changeId) {
|
|
|
18
18
|
}
|
|
19
19
|
exports.getUpdatedDataTracked = getUpdatedDataTracked;
|
|
20
20
|
function applyAcceptedRejectedChanges(tr, schema, changes, changeSet, deleteMap = new prosemirror_transform_1.Mapping()) {
|
|
21
|
-
changes.sort((c1, c2) =>
|
|
21
|
+
changes.sort((c1, c2) => {
|
|
22
|
+
if ((c1.type === 'node-change' && c1.node.type === schema.nodes.list) ||
|
|
23
|
+
(c2.type === 'node-change' && c2.node.type === schema.nodes.list)) {
|
|
24
|
+
return 1;
|
|
25
|
+
}
|
|
26
|
+
return c1.dataTracked.updatedAt - c2.dataTracked.updatedAt;
|
|
27
|
+
});
|
|
22
28
|
changes.forEach((change) => {
|
|
23
29
|
if (change.dataTracked.operation === change_1.CHANGE_OPERATION.move) {
|
|
24
30
|
return;
|
|
@@ -38,7 +44,7 @@ function applyAcceptedRejectedChanges(tr, schema, changes, changeSet, deleteMap
|
|
|
38
44
|
return (0, revertChange_1.revertSplitNodeChange)(tr, change, changeSet);
|
|
39
45
|
}
|
|
40
46
|
if (change.dataTracked.operation === change_1.CHANGE_OPERATION.wrap_with_node) {
|
|
41
|
-
return (0, revertChange_1.revertWrapNodeChange)(tr, change);
|
|
47
|
+
return (0, revertChange_1.revertWrapNodeChange)(tr, change, deleteMap);
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
50
|
if (ChangeSet_1.ChangeSet.isTextChange(change) && noChangeNeeded) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.revertWrapNodeChange = exports.revertSplitNodeChange = void 0;
|
|
4
|
+
const prosemirror_model_1 = require("prosemirror-model");
|
|
4
5
|
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
5
6
|
const nodeHelpers_1 = require("../compute/nodeHelpers");
|
|
6
7
|
const applyChanges_1 = require("./applyChanges");
|
|
@@ -26,17 +27,18 @@ function revertSplitNodeChange(tr, change, changeSet) {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
exports.revertSplitNodeChange = revertSplitNodeChange;
|
|
29
|
-
function revertWrapNodeChange(tr, change) {
|
|
30
|
+
function revertWrapNodeChange(tr, change, deleteMap) {
|
|
30
31
|
const from = tr.mapping.map(change.from);
|
|
31
32
|
const to = tr.mapping.map(change.to);
|
|
32
33
|
const node = tr.doc.nodeAt(from);
|
|
33
34
|
if (node === null || node === void 0 ? void 0 : node.isInline) {
|
|
34
|
-
tr.
|
|
35
|
+
tr.step(new prosemirror_transform_1.ReplaceAroundStep(from, to, from + 1, to - 1, prosemirror_model_1.Slice.empty, 0));
|
|
36
|
+
deleteMap.appendMap(tr.steps[tr.steps.length - 1].getMap());
|
|
35
37
|
}
|
|
36
38
|
else {
|
|
37
39
|
tr.doc.nodesBetween(from, to, (node, pos) => {
|
|
38
|
-
const $fromPos = tr.doc.resolve(pos);
|
|
39
|
-
const $toPos = tr.doc.resolve(pos + node.nodeSize - 1);
|
|
40
|
+
const $fromPos = tr.doc.resolve(tr.mapping.map(pos));
|
|
41
|
+
const $toPos = tr.doc.resolve(tr.mapping.map(pos + node.nodeSize - 1));
|
|
40
42
|
const nodeRange = $fromPos.blockRange($toPos);
|
|
41
43
|
if (!nodeRange) {
|
|
42
44
|
return;
|
|
@@ -44,6 +46,7 @@ function revertWrapNodeChange(tr, change) {
|
|
|
44
46
|
const targetLiftDepth = (0, prosemirror_transform_1.liftTarget)(nodeRange);
|
|
45
47
|
if (targetLiftDepth || targetLiftDepth === 0) {
|
|
46
48
|
tr.lift(nodeRange, targetLiftDepth);
|
|
49
|
+
deleteMap.appendMap(tr.steps[tr.steps.length - 1].getMap());
|
|
47
50
|
}
|
|
48
51
|
});
|
|
49
52
|
}
|
|
@@ -102,19 +102,15 @@ const HasMoveOperations = (tr) => {
|
|
|
102
102
|
}
|
|
103
103
|
const step = tr.steps[i];
|
|
104
104
|
const doc = tr.docs[i];
|
|
105
|
-
if (!step.slice) {
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
105
|
const stepDeletesContent = step.from !== step.to && step.slice.size === 0;
|
|
109
106
|
const stepInsertsContent = step.slice.size && step.slice.content.firstChild ? true : false;
|
|
107
|
+
console.log('stepDeletesContent', stepDeletesContent);
|
|
108
|
+
console.log('stepInsertsContent', stepInsertsContent);
|
|
110
109
|
for (let g = 0; g < tr.steps.length; g++) {
|
|
111
110
|
if (g === i || matched.includes(g)) {
|
|
112
111
|
continue;
|
|
113
112
|
}
|
|
114
113
|
const peerStep = tr.steps[g];
|
|
115
|
-
if (!peerStep.slice) {
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
114
|
const peerStepInsertsContent = peerStep.slice.size && peerStep.slice.content.firstChild;
|
|
119
115
|
const peerStepDeletesContent = peerStep.from !== peerStep.to && peerStep.slice.size === 0;
|
|
120
116
|
if (stepDeletesContent) {
|
|
@@ -27,7 +27,7 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema,
|
|
|
27
27
|
changes.forEach((c) => {
|
|
28
28
|
let step = newTr.steps[newTr.steps.length - 1];
|
|
29
29
|
switch (c.type) {
|
|
30
|
-
case 'delete-node':
|
|
30
|
+
case 'delete-node':
|
|
31
31
|
deletesCounter++;
|
|
32
32
|
const prevDeletedNodeInserted = isInserted;
|
|
33
33
|
const trackedData = getBlockInlineTrackedData(c.node);
|
|
@@ -59,8 +59,7 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema,
|
|
|
59
59
|
}
|
|
60
60
|
mergeTrackedMarks(mapping.map(c.pos), newTr.doc, newTr, schema);
|
|
61
61
|
break;
|
|
62
|
-
|
|
63
|
-
case 'delete-text': {
|
|
62
|
+
case 'delete-text':
|
|
64
63
|
const node = newTr.doc.nodeAt(mapping.map(c.pos));
|
|
65
64
|
if (!node) {
|
|
66
65
|
log.error(`processChangeSteps: no text node found for text-change`, c);
|
|
@@ -77,8 +76,7 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema,
|
|
|
77
76
|
}
|
|
78
77
|
mergeTrackedMarks(where, newTr.doc, newTr, schema);
|
|
79
78
|
break;
|
|
80
|
-
|
|
81
|
-
case 'merge-fragment': {
|
|
79
|
+
case 'merge-fragment':
|
|
82
80
|
let insertPos = mapping.map(c.mergePos);
|
|
83
81
|
if (c.node.isText) {
|
|
84
82
|
insertPos = deleteTextIfInserted(c.node, mapping.map(c.pos), newTr, schema, deleteAttrs, mapping.map(c.from), mapping.map(c.to));
|
|
@@ -95,8 +93,7 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema,
|
|
|
95
93
|
newTr.insert(insertPos, c.fragment);
|
|
96
94
|
}
|
|
97
95
|
break;
|
|
98
|
-
|
|
99
|
-
case 'insert-slice': {
|
|
96
|
+
case 'insert-slice':
|
|
100
97
|
const newStep = new ReplaceStep(mapping.map(c.from), mapping.map(c.to), c.slice, false);
|
|
101
98
|
const stepResult = newTr.maybeStep(newStep);
|
|
102
99
|
if (stepResult.failed) {
|
|
@@ -108,8 +105,7 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema,
|
|
|
108
105
|
mergeTrackedMarks(mapping.map(c.to) + (to < newTr.doc.nodeSize ? c.slice.size : 0), newTr.doc, newTr, schema);
|
|
109
106
|
selectionPos = mapping.map(c.to) + c.slice.size;
|
|
110
107
|
break;
|
|
111
|
-
|
|
112
|
-
case 'update-node-attrs': {
|
|
108
|
+
case 'update-node-attrs':
|
|
113
109
|
const oldDataTracked = getBlockInlineTrackedData(c.node) || [];
|
|
114
110
|
const oldUpdate = oldDataTracked.reverse().find((d) => {
|
|
115
111
|
if (d.operation === CHANGE_OPERATION.set_node_attributes && d.status === CHANGE_STATUS.pending) {
|
|
@@ -131,7 +127,6 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema,
|
|
|
131
127
|
const finalDataTracked = newDataTracked.length > 0 ? newDataTracked : oldDataTracked;
|
|
132
128
|
newTr.setNodeMarkup(mapping.map(c.pos), undefined, Object.assign(Object.assign({}, c.newAttrs), { dataTracked: finalDataTracked.length > 0 ? finalDataTracked : null }), c.node.marks);
|
|
133
129
|
break;
|
|
134
|
-
}
|
|
135
130
|
default:
|
|
136
131
|
log.error(`processChangeSteps: unknown change type`, c);
|
|
137
132
|
return;
|
|
@@ -14,7 +14,13 @@ export function getUpdatedDataTracked(dataTracked, changeId) {
|
|
|
14
14
|
return newDataTracked.length ? newDataTracked : null;
|
|
15
15
|
}
|
|
16
16
|
export function applyAcceptedRejectedChanges(tr, schema, changes, changeSet, deleteMap = new Mapping()) {
|
|
17
|
-
changes.sort((c1, c2) =>
|
|
17
|
+
changes.sort((c1, c2) => {
|
|
18
|
+
if ((c1.type === 'node-change' && c1.node.type === schema.nodes.list) ||
|
|
19
|
+
(c2.type === 'node-change' && c2.node.type === schema.nodes.list)) {
|
|
20
|
+
return 1;
|
|
21
|
+
}
|
|
22
|
+
return c1.dataTracked.updatedAt - c2.dataTracked.updatedAt;
|
|
23
|
+
});
|
|
18
24
|
changes.forEach((change) => {
|
|
19
25
|
if (change.dataTracked.operation === CHANGE_OPERATION.move) {
|
|
20
26
|
return;
|
|
@@ -34,7 +40,7 @@ export function applyAcceptedRejectedChanges(tr, schema, changes, changeSet, del
|
|
|
34
40
|
return revertSplitNodeChange(tr, change, changeSet);
|
|
35
41
|
}
|
|
36
42
|
if (change.dataTracked.operation === CHANGE_OPERATION.wrap_with_node) {
|
|
37
|
-
return revertWrapNodeChange(tr, change);
|
|
43
|
+
return revertWrapNodeChange(tr, change, deleteMap);
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
46
|
if (ChangeSet.isTextChange(change) && noChangeNeeded) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Slice } from 'prosemirror-model';
|
|
2
|
+
import { liftTarget, ReplaceAroundStep } from 'prosemirror-transform';
|
|
2
3
|
import { getBlockInlineTrackedData } from '../compute/nodeHelpers';
|
|
3
4
|
import { getUpdatedDataTracked } from './applyChanges';
|
|
4
5
|
export function revertSplitNodeChange(tr, change, changeSet) {
|
|
@@ -22,17 +23,18 @@ export function revertSplitNodeChange(tr, change, changeSet) {
|
|
|
22
23
|
tr.setNodeMarkup(tr.mapping.map(deleteChange.from), undefined, getUpdatedDataTracked(node.attrs.dataTracked, deleteChange.id));
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
|
-
export function revertWrapNodeChange(tr, change) {
|
|
26
|
+
export function revertWrapNodeChange(tr, change, deleteMap) {
|
|
26
27
|
const from = tr.mapping.map(change.from);
|
|
27
28
|
const to = tr.mapping.map(change.to);
|
|
28
29
|
const node = tr.doc.nodeAt(from);
|
|
29
30
|
if (node === null || node === void 0 ? void 0 : node.isInline) {
|
|
30
|
-
tr.
|
|
31
|
+
tr.step(new ReplaceAroundStep(from, to, from + 1, to - 1, Slice.empty, 0));
|
|
32
|
+
deleteMap.appendMap(tr.steps[tr.steps.length - 1].getMap());
|
|
31
33
|
}
|
|
32
34
|
else {
|
|
33
35
|
tr.doc.nodesBetween(from, to, (node, pos) => {
|
|
34
|
-
const $fromPos = tr.doc.resolve(pos);
|
|
35
|
-
const $toPos = tr.doc.resolve(pos + node.nodeSize - 1);
|
|
36
|
+
const $fromPos = tr.doc.resolve(tr.mapping.map(pos));
|
|
37
|
+
const $toPos = tr.doc.resolve(tr.mapping.map(pos + node.nodeSize - 1));
|
|
36
38
|
const nodeRange = $fromPos.blockRange($toPos);
|
|
37
39
|
if (!nodeRange) {
|
|
38
40
|
return;
|
|
@@ -40,6 +42,7 @@ export function revertWrapNodeChange(tr, change) {
|
|
|
40
42
|
const targetLiftDepth = liftTarget(nodeRange);
|
|
41
43
|
if (targetLiftDepth || targetLiftDepth === 0) {
|
|
42
44
|
tr.lift(nodeRange, targetLiftDepth);
|
|
45
|
+
deleteMap.appendMap(tr.steps[tr.steps.length - 1].getMap());
|
|
43
46
|
}
|
|
44
47
|
});
|
|
45
48
|
}
|
|
@@ -87,19 +87,15 @@ export const HasMoveOperations = (tr) => {
|
|
|
87
87
|
}
|
|
88
88
|
const step = tr.steps[i];
|
|
89
89
|
const doc = tr.docs[i];
|
|
90
|
-
if (!step.slice) {
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
90
|
const stepDeletesContent = step.from !== step.to && step.slice.size === 0;
|
|
94
91
|
const stepInsertsContent = step.slice.size && step.slice.content.firstChild ? true : false;
|
|
92
|
+
console.log('stepDeletesContent', stepDeletesContent);
|
|
93
|
+
console.log('stepInsertsContent', stepInsertsContent);
|
|
95
94
|
for (let g = 0; g < tr.steps.length; g++) {
|
|
96
95
|
if (g === i || matched.includes(g)) {
|
|
97
96
|
continue;
|
|
98
97
|
}
|
|
99
98
|
const peerStep = tr.steps[g];
|
|
100
|
-
if (!peerStep.slice) {
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
99
|
const peerStepInsertsContent = peerStep.slice.size && peerStep.slice.content.firstChild;
|
|
104
100
|
const peerStepDeletesContent = peerStep.from !== peerStep.to && peerStep.slice.size === 0;
|
|
105
101
|
if (stepDeletesContent) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Transaction } from 'prosemirror-state';
|
|
2
|
+
import { Mapping } from 'prosemirror-transform';
|
|
2
3
|
import { ChangeSet } from '../ChangeSet';
|
|
3
4
|
import { IncompleteChange } from '../types/change';
|
|
4
5
|
export declare function revertSplitNodeChange(tr: Transaction, change: IncompleteChange, changeSet: ChangeSet): void;
|
|
5
|
-
export declare function revertWrapNodeChange(tr: Transaction, change: IncompleteChange): void;
|
|
6
|
+
export declare function revertWrapNodeChange(tr: Transaction, change: IncompleteChange, deleteMap: Mapping): void;
|
package/package.json
CHANGED