@manuscripts/track-changes-plugin 2.1.1 → 2.2.1
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/ChangeSet.js +23 -9
- package/dist/cjs/actions.js +3 -1
- package/dist/cjs/{changes/applyChanges.js → applyChanges.js} +16 -16
- package/dist/cjs/{changes → changeHelpers}/revertChange.js +3 -4
- package/dist/cjs/{mutate/dropStructureChange.js → changeHelpers/structureChange.js} +23 -17
- package/dist/cjs/{changes → changeHelpers}/updateChangeAttrs.js +4 -5
- package/dist/cjs/{changes → changeHelpers}/updateChangesStatus.js +5 -5
- package/dist/cjs/{changes/findChanges.js → findChanges.js} +5 -5
- package/dist/cjs/helpers/attributes.js +157 -0
- package/dist/cjs/{compute/setFragmentAsInserted.js → helpers/fragment.js} +71 -79
- package/dist/cjs/helpers/mark.js +19 -0
- package/dist/cjs/plugin.js +13 -22
- package/dist/cjs/trackChanges.js +47 -0
- package/dist/cjs/{change-steps → tracking/change-step}/diffChangeSteps.js +23 -28
- package/dist/cjs/{utils/mapChangeStep.js → tracking/change-step/mapChangeSteps.js} +1 -1
- package/dist/cjs/{change-steps → tracking/change-step}/processChangeSteps.js +14 -48
- package/dist/cjs/tracking/fixAndHandleSelection.js +54 -0
- package/dist/cjs/{mutate → tracking/lib}/deleteAndMergeSplitNodes.js +7 -40
- package/dist/cjs/{mutate → tracking/lib}/deleteNode.js +8 -9
- package/dist/cjs/{mutate/deleteText.js → tracking/lib/deleteTextIfInserted.js} +4 -4
- package/dist/cjs/{change-steps → tracking/lib}/matchInserted.js +15 -23
- package/dist/cjs/{mutate → tracking/lib}/mergeTrackedMarks.js +3 -3
- package/dist/cjs/tracking/lib/processStepsBeforeTracking.js +17 -0
- package/dist/cjs/{steps/utils.js → tracking/steps-trackers/qualifiers.js} +37 -10
- package/dist/cjs/{steps/trackAttrsChange.js → tracking/steps-trackers/trackAttrsChangeStep.js} +3 -3
- package/dist/cjs/{steps → tracking/steps-trackers}/trackMarkSteps.js +14 -11
- package/dist/cjs/{steps → tracking/steps-trackers}/trackReplaceAroundStep.js +12 -46
- package/dist/cjs/tracking/steps-trackers/trackReplaceStep.js +85 -0
- package/dist/cjs/tracking/trackTransaction.js +93 -0
- package/dist/cjs/tracking/transactionProcessing.js +164 -0
- package/dist/cjs/tracking/types.js +17 -0
- package/dist/es/ChangeSet.js +23 -9
- package/dist/es/actions.js +1 -0
- package/dist/es/{changes/applyChanges.js → applyChanges.js} +10 -10
- package/dist/es/{changes → changeHelpers}/revertChange.js +1 -2
- package/dist/es/{mutate/dropStructureChange.js → changeHelpers/structureChange.js} +10 -5
- package/dist/es/{changes → changeHelpers}/updateChangeAttrs.js +2 -3
- package/dist/es/{changes → changeHelpers}/updateChangesStatus.js +4 -4
- package/dist/es/{changes/findChanges.js → findChanges.js} +3 -3
- package/dist/es/helpers/attributes.js +136 -0
- package/dist/es/{compute/setFragmentAsInserted.js → helpers/fragment.js} +66 -42
- package/dist/es/helpers/mark.js +15 -0
- package/dist/es/plugin.js +12 -21
- package/dist/es/trackChanges.js +44 -0
- package/dist/es/{change-steps → tracking/change-step}/diffChangeSteps.js +23 -28
- package/dist/es/{utils/mapChangeStep.js → tracking/change-step/mapChangeSteps.js} +1 -1
- package/dist/es/{change-steps → tracking/change-step}/processChangeSteps.js +10 -11
- package/dist/es/tracking/fixAndHandleSelection.js +49 -0
- package/dist/es/{mutate → tracking/lib}/deleteAndMergeSplitNodes.js +7 -7
- package/dist/es/{mutate → tracking/lib}/deleteNode.js +4 -5
- package/dist/es/{mutate/deleteText.js → tracking/lib/deleteTextIfInserted.js} +1 -1
- package/dist/es/{change-steps → tracking/lib}/matchInserted.js +15 -23
- package/dist/es/{mutate → tracking/lib}/mergeTrackedMarks.js +2 -2
- package/dist/es/tracking/lib/processStepsBeforeTracking.js +14 -0
- package/dist/es/{steps/utils.js → tracking/steps-trackers/qualifiers.js} +32 -7
- package/dist/es/{steps/trackAttrsChange.js → tracking/steps-trackers/trackAttrsChangeStep.js} +3 -3
- package/dist/es/{steps → tracking/steps-trackers}/trackMarkSteps.js +6 -3
- package/dist/es/{steps → tracking/steps-trackers}/trackReplaceAroundStep.js +9 -10
- package/dist/es/{steps → tracking/steps-trackers}/trackReplaceStep.js +34 -26
- package/dist/es/tracking/trackTransaction.js +87 -0
- package/dist/es/tracking/transactionProcessing.js +153 -0
- package/dist/es/tracking/types.js +16 -0
- package/dist/types/ChangeSet.d.ts +4 -1
- package/dist/types/actions.d.ts +1 -0
- package/dist/types/applyChanges.d.ts +6 -0
- package/dist/types/{mutate/dropStructureChange.d.ts → changeHelpers/structureChange.d.ts} +2 -1
- package/dist/types/{changes/findChanges.d.ts → findChanges.d.ts} +1 -1
- package/dist/types/helpers/attributes.d.ts +47 -0
- package/dist/types/{compute/setFragmentAsInserted.d.ts → helpers/fragment.d.ts} +3 -1
- package/dist/types/helpers/mark.d.ts +3 -0
- package/dist/types/trackChanges.d.ts +17 -0
- package/dist/types/tracking/change-step/diffChangeSteps.d.ts +17 -0
- package/dist/types/{utils/mapChangeStep.d.ts → tracking/change-step/mapChangeSteps.d.ts} +2 -2
- package/dist/types/tracking/change-step/processChangeSteps.d.ts +6 -0
- package/dist/types/tracking/fixAndHandleSelection.d.ts +20 -0
- package/dist/types/{mutate → tracking/lib}/deleteAndMergeSplitNodes.d.ts +4 -5
- package/dist/types/{mutate → tracking/lib}/deleteNode.d.ts +2 -2
- package/dist/types/{mutate/deleteText.d.ts → tracking/lib/deleteTextIfInserted.d.ts} +1 -1
- package/dist/types/tracking/lib/matchInserted.d.ts +18 -0
- package/dist/types/tracking/lib/processStepsBeforeTracking.d.ts +4 -0
- package/dist/types/{compute → tracking/lib}/splitSliceIntoMergedParts.d.ts +1 -1
- package/dist/types/{steps/utils.d.ts → tracking/steps-trackers/qualifiers.d.ts} +5 -3
- package/dist/types/{steps/trackAttrsChange.d.ts → tracking/steps-trackers/trackAttrsChangeStep.d.ts} +4 -4
- package/dist/types/{steps → tracking/steps-trackers}/trackMarkSteps.d.ts +1 -1
- package/dist/types/{steps → tracking/steps-trackers}/trackReplaceAroundStep.d.ts +2 -2
- package/dist/types/tracking/steps-trackers/trackReplaceStep.d.ts +5 -0
- package/dist/types/tracking/trackTransaction.d.ts +4 -0
- package/dist/types/tracking/transactionProcessing.d.ts +12 -0
- package/dist/types/tracking/types.d.ts +65 -0
- package/dist/types/types/change.d.ts +1 -1
- package/dist/types/types/track.d.ts +0 -30
- package/package.json +17 -14
- package/dist/cjs/compute/nodeHelpers.js +0 -83
- package/dist/cjs/steps/trackReplaceStep.js +0 -110
- package/dist/cjs/steps/trackTransaction.js +0 -162
- package/dist/cjs/types/step.js +0 -2
- package/dist/cjs/utils/track-utils.js +0 -239
- package/dist/es/compute/nodeHelpers.js +0 -73
- package/dist/es/steps/trackTransaction.js +0 -156
- package/dist/es/types/step.js +0 -1
- package/dist/es/utils/track-utils.js +0 -217
- package/dist/types/change-steps/diffChangeSteps.d.ts +0 -2
- package/dist/types/change-steps/matchInserted.d.ts +0 -3
- package/dist/types/change-steps/processChangeSteps.d.ts +0 -6
- package/dist/types/changes/applyChanges.d.ts +0 -6
- package/dist/types/compute/nodeHelpers.d.ts +0 -14
- package/dist/types/steps/trackReplaceStep.d.ts +0 -6
- package/dist/types/steps/trackTransaction.d.ts +0 -3
- package/dist/types/types/step.d.ts +0 -40
- package/dist/types/utils/track-utils.d.ts +0 -24
- /package/dist/cjs/{changes → changeHelpers}/fixInconsistentChanges.js +0 -0
- /package/dist/cjs/{mutate → tracking/lib}/mergeNode.js +0 -0
- /package/dist/cjs/{compute → tracking/lib}/splitSliceIntoMergedParts.js +0 -0
- /package/dist/es/{changes → changeHelpers}/fixInconsistentChanges.js +0 -0
- /package/dist/es/{mutate → tracking/lib}/mergeNode.js +0 -0
- /package/dist/es/{compute → tracking/lib}/splitSliceIntoMergedParts.js +0 -0
- /package/dist/types/{changes → changeHelpers}/fixInconsistentChanges.d.ts +0 -0
- /package/dist/types/{changes → changeHelpers}/revertChange.d.ts +0 -0
- /package/dist/types/{changes → changeHelpers}/updateChangeAttrs.d.ts +0 -0
- /package/dist/types/{changes → changeHelpers}/updateChangesStatus.d.ts +0 -0
- /package/dist/types/{mutate → tracking/lib}/mergeNode.d.ts +0 -0
- /package/dist/types/{mutate → tracking/lib}/mergeTrackedMarks.d.ts +0 -0
|
@@ -4,13 +4,12 @@ exports.keepPairedChanges = void 0;
|
|
|
4
4
|
exports.deleteNode = deleteNode;
|
|
5
5
|
exports.deleteOrSetNodeDeleted = deleteOrSetNodeDeleted;
|
|
6
6
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
7
|
+
const structureChange_1 = require("../../changeHelpers/structureChange");
|
|
8
|
+
const attributes_1 = require("../../helpers/attributes");
|
|
9
|
+
const change_1 = require("../../types/change");
|
|
10
|
+
const logger_1 = require("../../utils/logger");
|
|
11
11
|
function deleteNode(node, pos, tr) {
|
|
12
12
|
var _a;
|
|
13
|
-
const startPos = tr.doc.resolve(pos + 1);
|
|
14
13
|
const resPos = tr.doc.resolve(pos);
|
|
15
14
|
const canMergeToNodeAbove = resPos.parent !== tr.doc && resPos.nodeBefore && node.isBlock && ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.isText);
|
|
16
15
|
if (canMergeToNodeAbove) {
|
|
@@ -21,7 +20,7 @@ function deleteNode(node, pos, tr) {
|
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
22
|
function deleteOrSetNodeDeleted(node, pos, newTr, deleteAttrs) {
|
|
24
|
-
const dataTracked = (0,
|
|
23
|
+
const dataTracked = (0, attributes_1.getBlockInlineTrackedData)(node);
|
|
25
24
|
const inserted = dataTracked === null || dataTracked === void 0 ? void 0 : dataTracked.find((d) => (d.operation === change_1.CHANGE_OPERATION.insert || d.operation === change_1.CHANGE_OPERATION.wrap_with_node) &&
|
|
26
25
|
(d.status === change_1.CHANGE_STATUS.pending || d.status === change_1.CHANGE_STATUS.accepted));
|
|
27
26
|
const updated = dataTracked === null || dataTracked === void 0 ? void 0 : dataTracked.find((d) => d.operation === change_1.CHANGE_OPERATION.set_node_attributes ||
|
|
@@ -43,15 +42,15 @@ function deleteOrSetNodeDeleted(node, pos, newTr, deleteAttrs) {
|
|
|
43
42
|
});
|
|
44
43
|
return;
|
|
45
44
|
}
|
|
46
|
-
const newDeleted = (0,
|
|
45
|
+
const newDeleted = (0, attributes_1.addTrackIdIfDoesntExist)(deleteAttrs);
|
|
47
46
|
newTr.setNodeMarkup(pos, undefined, Object.assign(Object.assign({}, node.attrs), { dataTracked: updated ? [newDeleted, updated] : moved ? [newDeleted, moved] : [newDeleted] }), node.marks);
|
|
48
47
|
if (!deleteAttrs.moveNodeId && (structure === null || structure === void 0 ? void 0 : structure.moveNodeId)) {
|
|
49
|
-
(0,
|
|
48
|
+
(0, structureChange_1.dropStructuralChangeShadow)(structure.moveNodeId, newTr);
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
51
|
const keepPairedChanges = (node) => {
|
|
53
52
|
var _a;
|
|
54
|
-
const dataTracked = (_a = (0,
|
|
53
|
+
const dataTracked = (_a = (0, attributes_1.getBlockInlineTrackedData)(node)) === null || _a === void 0 ? void 0 : _a.filter((c) => (c.operation === change_1.CHANGE_OPERATION.delete && c.moveNodeId) || c.operation === change_1.CHANGE_OPERATION.reference);
|
|
55
54
|
return (dataTracked === null || dataTracked === void 0 ? void 0 : dataTracked.length) ? dataTracked : null;
|
|
56
55
|
};
|
|
57
56
|
exports.keepPairedChanges = keepPairedChanges;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deleteTextIfInserted = deleteTextIfInserted;
|
|
4
4
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
5
|
-
const
|
|
5
|
+
const attributes_1 = require("../../helpers/attributes");
|
|
6
6
|
function deleteTextIfInserted(node, pos, newTr, schema, deleteAttrs, from, to) {
|
|
7
7
|
const start = from ? Math.max(pos, from) : pos;
|
|
8
8
|
const nodeEnd = pos + node.nodeSize;
|
|
@@ -13,13 +13,13 @@ function deleteTextIfInserted(node, pos, newTr, schema, deleteAttrs, from, to) {
|
|
|
13
13
|
}
|
|
14
14
|
else {
|
|
15
15
|
const leftNode = newTr.doc.resolve(start).nodeBefore;
|
|
16
|
-
const leftMarks = (0,
|
|
16
|
+
const leftMarks = (0, attributes_1.getMergeableMarkTrackedAttrs)(leftNode, deleteAttrs, schema);
|
|
17
17
|
const rightNode = newTr.doc.resolve(end).nodeAfter;
|
|
18
|
-
const rightMarks = (0,
|
|
18
|
+
const rightMarks = (0, attributes_1.getMergeableMarkTrackedAttrs)(rightNode, deleteAttrs, schema);
|
|
19
19
|
const fromStartOfMark = start - (leftNode && leftMarks ? leftNode.nodeSize : 0);
|
|
20
20
|
const toEndOfMark = end + (rightNode && rightMarks ? rightNode.nodeSize : 0);
|
|
21
21
|
const createdAt = Math.min((leftMarks === null || leftMarks === void 0 ? void 0 : leftMarks.createdAt) || Number.MAX_VALUE, (rightMarks === null || rightMarks === void 0 ? void 0 : rightMarks.createdAt) || Number.MAX_VALUE, deleteAttrs.createdAt);
|
|
22
|
-
const dataTracked = (0,
|
|
22
|
+
const dataTracked = (0, attributes_1.addTrackIdIfDoesntExist)(Object.assign(Object.assign(Object.assign(Object.assign({}, leftMarks), rightMarks), deleteAttrs), { createdAt }));
|
|
23
23
|
newTr.addMark(fromStartOfMark, toEndOfMark, schema.marks.tracked_delete.create({
|
|
24
24
|
dataTracked,
|
|
25
25
|
}));
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* © 2023 Atypon Systems LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
2
17
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
18
|
var t = {};
|
|
4
19
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -12,29 +27,6 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
12
27
|
};
|
|
13
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
29
|
exports.matchInserted = matchInserted;
|
|
15
|
-
function matchText(adjDeleted, insNode, offset, matchedDeleted, deleted) {
|
|
16
|
-
const { pos, from, to, node: delNode } = adjDeleted;
|
|
17
|
-
let j = offset, d = from - pos, maxSteps = to - Math.max(pos, from);
|
|
18
|
-
for (; maxSteps !== j && insNode.text[j] !== undefined && insNode.text[j] === delNode.text[d]; j += 1, d += 1) {
|
|
19
|
-
matchedDeleted += 1;
|
|
20
|
-
}
|
|
21
|
-
deleted = deleted.filter((d) => d !== adjDeleted);
|
|
22
|
-
if (maxSteps !== j) {
|
|
23
|
-
deleted.push({
|
|
24
|
-
pos,
|
|
25
|
-
from: from + j - offset,
|
|
26
|
-
to,
|
|
27
|
-
type: 'delete-text',
|
|
28
|
-
node: delNode,
|
|
29
|
-
});
|
|
30
|
-
return [matchedDeleted, deleted];
|
|
31
|
-
}
|
|
32
|
-
const nextTextDelete = deleted.find((d) => d.type === 'delete-text' && d.pos === to);
|
|
33
|
-
if (nextTextDelete) {
|
|
34
|
-
return matchText(nextTextDelete, insNode, j, matchedDeleted, deleted);
|
|
35
|
-
}
|
|
36
|
-
return [matchedDeleted, deleted];
|
|
37
|
-
}
|
|
38
30
|
function matchInserted(matchedDeleted, deleted, inserted) {
|
|
39
31
|
var _a;
|
|
40
32
|
let matched = [matchedDeleted, deleted];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.mergeTrackedMarks = mergeTrackedMarks;
|
|
4
|
-
const
|
|
5
|
-
const uuidv4_1 = require("
|
|
4
|
+
const attributes_1 = require("../../helpers/attributes");
|
|
5
|
+
const uuidv4_1 = require("../../utils/uuidv4");
|
|
6
6
|
const assignId = (attrs, leftDataTracked, rightDataTracked) => {
|
|
7
7
|
if (attrs.id === leftDataTracked.id || attrs.id === rightDataTracked.id) {
|
|
8
8
|
return Object.assign(Object.assign({}, attrs), { id: (0, uuidv4_1.uuidv4)() });
|
|
@@ -19,7 +19,7 @@ function mergeTrackedMarks(pos, doc, newTr, schema) {
|
|
|
19
19
|
}
|
|
20
20
|
const leftDataTracked = leftMark.attrs.dataTracked;
|
|
21
21
|
const rightDataTracked = rightMark.attrs.dataTracked;
|
|
22
|
-
if (!(0,
|
|
22
|
+
if (!(0, attributes_1.shouldMergeTrackedAttributes)(leftDataTracked, rightDataTracked)) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
const isLeftOlder = (leftDataTracked.createdAt || 0) < (rightDataTracked.createdAt || 0);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processStepsBeforeTracking = processStepsBeforeTracking;
|
|
4
|
+
const logger_1 = require("../../utils/logger");
|
|
5
|
+
function processStepsBeforeTracking(tr, trContext, processors) {
|
|
6
|
+
let steps = [];
|
|
7
|
+
processors.forEach((p) => {
|
|
8
|
+
const res = p(tr, trContext);
|
|
9
|
+
if (res) {
|
|
10
|
+
steps = res;
|
|
11
|
+
if (steps.length < tr.steps.length) {
|
|
12
|
+
logger_1.log.warn('Bug! A processor function filtered steps incorrectly. Filtered out steps should be replaced with null and not popped out of the array. Length and order has to be preserved');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
return steps;
|
|
17
|
+
}
|
|
@@ -15,10 +15,12 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.
|
|
19
|
-
exports.
|
|
20
|
-
const
|
|
21
|
-
const
|
|
18
|
+
exports.isDeletingPendingMovedNode = exports.isDirectPendingMoveDeletion = exports.isLiftStep = exports.isWrapStep = exports.isSplitStep = exports.isDeleteStep = void 0;
|
|
19
|
+
exports.isLiftStepForGap = isLiftStepForGap;
|
|
20
|
+
const ChangeSet_1 = require("../../ChangeSet");
|
|
21
|
+
const change_1 = require("../../types/change");
|
|
22
|
+
const isDeleteStep = (step) => step.from !== step.to && step.slice.content.size < step.to - step.from;
|
|
23
|
+
exports.isDeleteStep = isDeleteStep;
|
|
22
24
|
const isSplitStep = (step, selection, uiEvent) => {
|
|
23
25
|
var _a, _b, _c, _d;
|
|
24
26
|
const { from, to, slice } = step;
|
|
@@ -60,11 +62,36 @@ const isLiftStep = (step) => {
|
|
|
60
62
|
return false;
|
|
61
63
|
};
|
|
62
64
|
exports.isLiftStep = isLiftStep;
|
|
63
|
-
function
|
|
65
|
+
function isLiftStepForGap(gap, node, to) {
|
|
64
66
|
return gap.start < gap.end && gap.insert === 0 && gap.end === to && !node.isText;
|
|
65
67
|
}
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
const isDirectPendingMoveDeletion = (step, doc, movingSteps) => {
|
|
69
|
+
if (step.from === step.to || step.slice.content.size > 0) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
if (movingSteps.has(step)) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const node = doc.nodeAt(step.from);
|
|
76
|
+
if (!node) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return ChangeSet_1.ChangeSet.isPendingChange(node.attrs.dataTracked, change_1.CHANGE_OPERATION.move);
|
|
80
|
+
};
|
|
81
|
+
exports.isDirectPendingMoveDeletion = isDirectPendingMoveDeletion;
|
|
82
|
+
const isDeletingPendingMovedNode = (step, doc) => {
|
|
83
|
+
if (!step.slice || step.from === step.to || step.slice.content.size > 0) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
const node = doc.nodeAt(step.from);
|
|
87
|
+
if (!node) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
const trackedAttrs = node.attrs.dataTracked;
|
|
91
|
+
const found = trackedAttrs === null || trackedAttrs === void 0 ? void 0 : trackedAttrs.find((tracked) => tracked.operation === change_1.CHANGE_OPERATION.move && tracked.status === change_1.CHANGE_STATUS.pending);
|
|
92
|
+
if (found === null || found === void 0 ? void 0 : found.moveNodeId) {
|
|
93
|
+
return found.moveNodeId;
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
};
|
|
97
|
+
exports.isDeletingPendingMovedNode = isDeletingPendingMovedNode;
|
package/dist/cjs/{steps/trackAttrsChange.js → tracking/steps-trackers/trackAttrsChangeStep.js}
RENAMED
|
@@ -26,8 +26,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
26
26
|
return t;
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
const logger_1 = require("
|
|
30
|
-
function
|
|
29
|
+
const logger_1 = require("../../utils/logger");
|
|
30
|
+
function trackAttrsChangeStep(step, oldState, tr, newTr, attrs, currentStepDoc) {
|
|
31
31
|
const newStep = step.invert(currentStepDoc);
|
|
32
32
|
const stepResult = newTr.maybeStep(newStep);
|
|
33
33
|
if (stepResult.failed) {
|
|
@@ -47,4 +47,4 @@ function trackAttrsChange(step, oldState, tr, newTr, attrs, currentStepDoc) {
|
|
|
47
47
|
};
|
|
48
48
|
return [changeStep];
|
|
49
49
|
}
|
|
50
|
-
exports.default =
|
|
50
|
+
exports.default = trackAttrsChangeStep;
|
|
@@ -5,9 +5,10 @@ exports.trackRemoveNodeMarkStep = trackRemoveNodeMarkStep;
|
|
|
5
5
|
exports.trackAddMarkStep = trackAddMarkStep;
|
|
6
6
|
exports.trackAddNodeMarkStep = trackAddNodeMarkStep;
|
|
7
7
|
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
8
|
+
const attributes_1 = require("../../helpers/attributes");
|
|
9
|
+
const mark_1 = require("../../helpers/mark");
|
|
10
|
+
const change_1 = require("../../types/change");
|
|
11
|
+
const uuidv4_1 = require("../../utils/uuidv4");
|
|
11
12
|
function markHasOp(mark, operation) {
|
|
12
13
|
if (mark.attrs.dataTracked && Array.isArray(mark.attrs.dataTracked)) {
|
|
13
14
|
const dtAttrs = mark.attrs.dataTracked;
|
|
@@ -15,7 +16,7 @@ function markHasOp(mark, operation) {
|
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
function trackRemoveMarkStep(step, emptyAttrs, newTr, doc) {
|
|
18
|
-
if ((0,
|
|
19
|
+
if ((0, mark_1.isValidTrackableMark)(step.mark)) {
|
|
19
20
|
const markName = step.mark.type.name;
|
|
20
21
|
const markSource = step.mark.type.schema.marks[step.mark.type.name];
|
|
21
22
|
let sameMark = null;
|
|
@@ -41,7 +42,7 @@ function trackRemoveMarkStep(step, emptyAttrs, newTr, doc) {
|
|
|
41
42
|
sameMark = parentsSameMark;
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
|
-
const newDataTracked = (0,
|
|
45
|
+
const newDataTracked = (0, attributes_1.createNewDeleteAttrs)(emptyAttrs);
|
|
45
46
|
const newMark = markSource.create({
|
|
46
47
|
dataTracked: [Object.assign(Object.assign({}, newDataTracked), { id: (0, uuidv4_1.uuidv4)() })],
|
|
47
48
|
});
|
|
@@ -65,7 +66,7 @@ function trackRemoveMarkStep(step, emptyAttrs, newTr, doc) {
|
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
function trackRemoveNodeMarkStep(step, emptyAttrs, newTr, doc) {
|
|
68
|
-
if ((0,
|
|
69
|
+
if ((0, mark_1.isValidTrackableMark)(step.mark)) {
|
|
69
70
|
const markName = step.mark.type.name;
|
|
70
71
|
const markSource = step.mark.type.schema.marks[markName];
|
|
71
72
|
let sameMark = null;
|
|
@@ -78,7 +79,7 @@ function trackRemoveNodeMarkStep(step, emptyAttrs, newTr, doc) {
|
|
|
78
79
|
}
|
|
79
80
|
});
|
|
80
81
|
}
|
|
81
|
-
const newDataTracked = (0,
|
|
82
|
+
const newDataTracked = (0, attributes_1.createNewDeleteAttrs)(emptyAttrs);
|
|
82
83
|
const newMark = markSource.create({
|
|
83
84
|
dataTracked: [Object.assign(Object.assign({}, newDataTracked), { id: (0, uuidv4_1.uuidv4)() })],
|
|
84
85
|
});
|
|
@@ -94,6 +95,8 @@ function trackRemoveNodeMarkStep(step, emptyAttrs, newTr, doc) {
|
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
try {
|
|
98
|
+
const inverted = step.invert(doc);
|
|
99
|
+
newTr.step(inverted);
|
|
97
100
|
newTr.step(newStep);
|
|
98
101
|
}
|
|
99
102
|
catch (e) {
|
|
@@ -102,10 +105,10 @@ function trackRemoveNodeMarkStep(step, emptyAttrs, newTr, doc) {
|
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
107
|
function trackAddMarkStep(step, emptyAttrs, newTr, doc) {
|
|
105
|
-
if ((0,
|
|
108
|
+
if ((0, mark_1.isValidTrackableMark)(step.mark)) {
|
|
106
109
|
const markName = step.mark.type.name;
|
|
107
110
|
const markSource = step.mark.type.schema.marks[markName];
|
|
108
|
-
const newDataTracked = (0,
|
|
111
|
+
const newDataTracked = (0, attributes_1.createNewInsertAttrs)(emptyAttrs);
|
|
109
112
|
const newMark = markSource.create({
|
|
110
113
|
dataTracked: [Object.assign(Object.assign({}, newDataTracked), { id: (0, uuidv4_1.uuidv4)() })],
|
|
111
114
|
});
|
|
@@ -121,8 +124,8 @@ function trackAddMarkStep(step, emptyAttrs, newTr, doc) {
|
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
126
|
function trackAddNodeMarkStep(step, emptyAttrs, newTr, stepDoc) {
|
|
124
|
-
if ((0,
|
|
125
|
-
const newDataTracked = (0,
|
|
127
|
+
if ((0, mark_1.isValidTrackableMark)(step.mark)) {
|
|
128
|
+
const newDataTracked = (0, attributes_1.createNewInsertAttrs)(emptyAttrs);
|
|
126
129
|
const markSource = step.mark.type.schema.marks[step.mark.type.name];
|
|
127
130
|
const newMark = markSource.create({
|
|
128
131
|
dataTracked: [Object.assign(Object.assign({}, newDataTracked), { id: (0, uuidv4_1.uuidv4)() })],
|
|
@@ -1,46 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.trackReplaceAroundStep = trackReplaceAroundStep;
|
|
37
4
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
38
|
-
const actions_1 = require("
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const logger_1 = require("
|
|
42
|
-
const
|
|
43
|
-
const
|
|
5
|
+
const actions_1 = require("../../actions");
|
|
6
|
+
const attributes_1 = require("../../helpers/attributes");
|
|
7
|
+
const fragment_1 = require("../../helpers/fragment");
|
|
8
|
+
const logger_1 = require("../../utils/logger");
|
|
9
|
+
const deleteAndMergeSplitNodes_1 = require("../lib/deleteAndMergeSplitNodes");
|
|
10
|
+
const qualifiers_1 = require("./qualifiers");
|
|
44
11
|
function preserveDataTrackedFromPreviousStep(newTr, step, newStep) {
|
|
45
12
|
const prevDoc = newTr.docs[newTr.docs.length - 2];
|
|
46
13
|
if (prevDoc && (step.slice.openEnd || step.slice.openStart)) {
|
|
@@ -66,18 +33,17 @@ function trackReplaceAroundStep(step, oldState, tr, newTr, attrs, currentStepDoc
|
|
|
66
33
|
preserveDataTrackedFromPreviousStep(newTr, step, newStep);
|
|
67
34
|
const gap = currentStepDoc.slice(gapFrom, gapTo);
|
|
68
35
|
logger_1.log.info('RETAINED GAP CONTENT', gap);
|
|
69
|
-
let { sliceWasSplit, newSliceContent, steps: deleteSteps, } = (0, deleteAndMergeSplitNodes_1.deleteAndMergeSplitNodes)(from, to, { start: gapFrom, end: gapTo, slice: gap, insert }, newTr.doc,
|
|
36
|
+
let { sliceWasSplit, newSliceContent, steps: deleteSteps, } = (0, deleteAndMergeSplitNodes_1.deleteAndMergeSplitNodes)(from, to, { start: gapFrom, end: gapTo, slice: gap, insert }, newTr.doc, oldState.schema, attrs, slice);
|
|
70
37
|
let fragment;
|
|
71
|
-
if ((0,
|
|
72
|
-
fragment = (0,
|
|
38
|
+
if ((0, qualifiers_1.isWrapStep)(step)) {
|
|
39
|
+
fragment = (0, fragment_1.setFragmentAsWrapChange)(newSliceContent, attrs, oldState.schema);
|
|
73
40
|
}
|
|
74
41
|
else {
|
|
75
|
-
fragment = (0,
|
|
42
|
+
fragment = (0, fragment_1.setFragmentAsInserted)(newSliceContent, (0, attributes_1.createNewInsertAttrs)(attrs), oldState.schema);
|
|
76
43
|
}
|
|
77
44
|
let steps = deleteSteps;
|
|
78
|
-
logger_1.log.info('TR: new steps after applying delete', [...newTr.steps]);
|
|
79
45
|
logger_1.log.info('DELETE STEPS: ', deleteSteps);
|
|
80
|
-
let liftStep = (0,
|
|
46
|
+
let liftStep = (0, qualifiers_1.isLiftStep)(step);
|
|
81
47
|
if (liftStep) {
|
|
82
48
|
logger_1.log.info('DETECTING INIT LIFT STEP: ', step);
|
|
83
49
|
trContext.prevLiftStep = step;
|
|
@@ -107,7 +73,7 @@ function trackReplaceAroundStep(step, oldState, tr, newTr, attrs, currentStepDoc
|
|
|
107
73
|
? insertedSlice.content.append(trContext.liftFragment)
|
|
108
74
|
: insertedSlice.content;
|
|
109
75
|
if (tr.steps.indexOf(step) === 0) {
|
|
110
|
-
const fragmentTracked = (0,
|
|
76
|
+
const fragmentTracked = (0, fragment_1.setFragmentAsInserted)(trContext.liftFragment, (0, attributes_1.createNewInsertAttrs)(attrs), oldState.schema);
|
|
111
77
|
steps.push({
|
|
112
78
|
type: 'insert-slice',
|
|
113
79
|
from: from,
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.trackReplaceStep = trackReplaceStep;
|
|
4
|
+
const prosemirror_model_1 = require("prosemirror-model");
|
|
5
|
+
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
6
|
+
const actions_1 = require("../../actions");
|
|
7
|
+
const structureChange_1 = require("../../changeHelpers/structureChange");
|
|
8
|
+
const attributes_1 = require("../../helpers/attributes");
|
|
9
|
+
const fragment_1 = require("../../helpers/fragment");
|
|
10
|
+
const logger_1 = require("../../utils/logger");
|
|
11
|
+
const mapChangeSteps_1 = require("../change-step/mapChangeSteps");
|
|
12
|
+
const deleteAndMergeSplitNodes_1 = require("../lib/deleteAndMergeSplitNodes");
|
|
13
|
+
const qualifiers_1 = require("./qualifiers");
|
|
14
|
+
function trackReplaceStep(i, oldState, newTr, attrsTemplate, tr, deletedNodeMapping, trContext) {
|
|
15
|
+
const step = tr.steps[i];
|
|
16
|
+
const moveID = trContext.stepsByGroupIDMap.get(step);
|
|
17
|
+
const invertedStep = step.invert(tr.docs[i]);
|
|
18
|
+
const newStep = new prosemirror_transform_1.ReplaceStep(deletedNodeMapping.map(invertedStep.from), deletedNodeMapping.map(invertedStep.to), invertedStep.slice);
|
|
19
|
+
const stepResult = newTr.maybeStep(newStep);
|
|
20
|
+
logger_1.log.info('###### ReplaceStep ######');
|
|
21
|
+
let selectionPos = 0;
|
|
22
|
+
const changeSteps = [];
|
|
23
|
+
if (stepResult.failed) {
|
|
24
|
+
logger_1.log.error(`invert ReplaceStep failed: "${stepResult.failed}"`);
|
|
25
|
+
return [changeSteps, undefined];
|
|
26
|
+
}
|
|
27
|
+
const attrs = Object.assign({}, attrsTemplate);
|
|
28
|
+
if (moveID) {
|
|
29
|
+
attrs.moveNodeId = moveID;
|
|
30
|
+
}
|
|
31
|
+
step.getMap().forEach((fromA, toA, fromB, toB) => {
|
|
32
|
+
var _a, _b, _c, _d;
|
|
33
|
+
logger_1.log.info(`changed ranges: ${fromA} ${toA} ${fromB} ${toB}`);
|
|
34
|
+
const { slice } = step;
|
|
35
|
+
logger_1.log.info('TR: steps before applying delete', [...newTr.steps]);
|
|
36
|
+
const { sliceWasSplit, newSliceContent, steps: deleteSteps, } = (0, deleteAndMergeSplitNodes_1.deleteAndMergeSplitNodes)(fromA, toA, undefined, tr.docs[i], oldState.schema, attrs, slice);
|
|
37
|
+
changeSteps.push(...deleteSteps);
|
|
38
|
+
logger_1.log.info('TR: steps after applying delete', [...newTr.steps]);
|
|
39
|
+
logger_1.log.info('DELETE STEPS: ', [...changeSteps]);
|
|
40
|
+
const backSpacedText = sameThingBackSpaced(changeSteps, newSliceContent);
|
|
41
|
+
if (backSpacedText) {
|
|
42
|
+
changeSteps.splice(changeSteps.indexOf(backSpacedText));
|
|
43
|
+
}
|
|
44
|
+
if (!backSpacedText && newSliceContent.size > 0) {
|
|
45
|
+
logger_1.log.info('newSliceContent', newSliceContent);
|
|
46
|
+
let fragment = (0, fragment_1.setFragmentAsInserted)(newSliceContent, (0, attributes_1.createNewInsertAttrs)(attrs), oldState.schema);
|
|
47
|
+
if ((0, structureChange_1.isStructuralChange)(tr)) {
|
|
48
|
+
fragment = (0, structureChange_1.joinStructureChanges)(attrs, newSliceContent, fragment, tr, newTr);
|
|
49
|
+
}
|
|
50
|
+
else if ((0, qualifiers_1.isSplitStep)(step, oldState.selection, tr.getMeta('uiEvent'))) {
|
|
51
|
+
fragment = (0, fragment_1.setFragmentAsNodeSplit)(newTr.doc.resolve(step.from), newTr, fragment, attrs);
|
|
52
|
+
}
|
|
53
|
+
else if (moveID) {
|
|
54
|
+
const indentationType = (_a = (0, actions_1.getAction)(tr, actions_1.TrackChangesAction.indentationAction)) === null || _a === void 0 ? void 0 : _a.action;
|
|
55
|
+
fragment = (0, fragment_1.setFragmentAsMoveChange)(newSliceContent, (0, attributes_1.createNewMoveAttrs)(attrs, indentationType));
|
|
56
|
+
}
|
|
57
|
+
const openStart = slice.openStart !== slice.openEnd ? 0 : slice.openStart;
|
|
58
|
+
const openEnd = slice.openStart !== slice.openEnd ? 0 : slice.openEnd;
|
|
59
|
+
const textWasDeleted = !!changeSteps.length && !(fromA === fromB);
|
|
60
|
+
const isBlock = !!((_b = fragment.firstChild) === null || _b === void 0 ? void 0 : _b.isBlock);
|
|
61
|
+
changeSteps.push({
|
|
62
|
+
type: 'insert-slice',
|
|
63
|
+
from: textWasDeleted ? fromB : isBlock ? toA : fromA,
|
|
64
|
+
to: textWasDeleted ? fromB : isBlock ? toA : fromA,
|
|
65
|
+
sliceWasSplit,
|
|
66
|
+
slice: new prosemirror_model_1.Slice(fragment, openStart, openEnd),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const isDeleteEvent = ((_c = window.event) === null || _c === void 0 ? void 0 : _c.code) === 'Delete';
|
|
71
|
+
const isDeleteContentForward = ((_d = window.event) === null || _d === void 0 ? void 0 : _d.inputType) === 'deleteContentForward';
|
|
72
|
+
selectionPos = isDeleteEvent || isDeleteContentForward ? toA : fromA;
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
selectionPos = deletedNodeMapping.map(selectionPos);
|
|
76
|
+
const doneSteps = (0, mapChangeSteps_1.mapChangeSteps)(changeSteps, deletedNodeMapping);
|
|
77
|
+
return [doneSteps, selectionPos];
|
|
78
|
+
}
|
|
79
|
+
function sameThingBackSpaced(changeSteps, newSliceContent) {
|
|
80
|
+
if (changeSteps.length == 2 && newSliceContent.size > 0) {
|
|
81
|
+
const correspondingDeletion = changeSteps.find((step) => step.type === 'delete-text' && step.node.text === newSliceContent.content[0].text);
|
|
82
|
+
return correspondingDeletion;
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.trackTransaction = trackTransaction;
|
|
7
|
+
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
8
|
+
const structureChange_1 = require("../changeHelpers/structureChange");
|
|
9
|
+
const updateChangeAttrs_1 = require("../changeHelpers/updateChangeAttrs");
|
|
10
|
+
const attributes_1 = require("../helpers/attributes");
|
|
11
|
+
const logger_1 = require("../utils/logger");
|
|
12
|
+
const uuidv4_1 = require("../utils/uuidv4");
|
|
13
|
+
const diffChangeSteps_1 = require("./change-step/diffChangeSteps");
|
|
14
|
+
const processChangeSteps_1 = require("./change-step/processChangeSteps");
|
|
15
|
+
const fixAndHandleSelection_1 = require("./fixAndHandleSelection");
|
|
16
|
+
const qualifiers_1 = require("./steps-trackers/qualifiers");
|
|
17
|
+
const trackAttrsChangeStep_1 = __importDefault(require("./steps-trackers/trackAttrsChangeStep"));
|
|
18
|
+
const trackMarkSteps_1 = require("./steps-trackers/trackMarkSteps");
|
|
19
|
+
const trackReplaceAroundStep_1 = require("./steps-trackers/trackReplaceAroundStep");
|
|
20
|
+
const trackReplaceStep_1 = require("./steps-trackers/trackReplaceStep");
|
|
21
|
+
const transactionProcessing_1 = require("./transactionProcessing");
|
|
22
|
+
function trackTransaction(tr, oldState, newTr, authorID, clearedSteps, trContext) {
|
|
23
|
+
var _a, _b, _c, _d, _e;
|
|
24
|
+
const emptyAttrs = (0, attributes_1.createNewPendingAttrs)(tr.time, authorID);
|
|
25
|
+
const deletedNodeMapping = new prosemirror_transform_1.Mapping();
|
|
26
|
+
trContext = Object.assign(Object.assign({}, trContext), { deletedNodeMapping });
|
|
27
|
+
let iterations = 0;
|
|
28
|
+
logger_1.log.info('ORIGINAL transaction', tr);
|
|
29
|
+
for (let i = clearedSteps.length - 1; i >= 0; i--) {
|
|
30
|
+
const step = clearedSteps[i];
|
|
31
|
+
if (!step) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
logger_1.log.info('transaction step', step);
|
|
35
|
+
iterations++;
|
|
36
|
+
if (!(0, transactionProcessing_1.iterationIsValid)(iterations, tr, newTr, step)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
else if (step instanceof prosemirror_transform_1.ReplaceStep) {
|
|
40
|
+
const { slice } = step;
|
|
41
|
+
if (((_b = (_a = slice === null || slice === void 0 ? void 0 : slice.content) === null || _a === void 0 ? void 0 : _a.content) === null || _b === void 0 ? void 0 : _b.length) === 1 && (0, transactionProcessing_1.excludeFromTracking)(slice.content.content[0])) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
let thisStepMapping = tr.mapping.slice(i + 1, i + 1);
|
|
45
|
+
if ((0, qualifiers_1.isDeleteStep)(step) || (0, structureChange_1.isStructuralChange)(tr)) {
|
|
46
|
+
thisStepMapping = deletedNodeMapping;
|
|
47
|
+
}
|
|
48
|
+
let [steps, newSelectionPos] = (0, trackReplaceStep_1.trackReplaceStep)(i, oldState, newTr, emptyAttrs, tr, thisStepMapping, trContext);
|
|
49
|
+
if (steps.length === 1) {
|
|
50
|
+
const step = steps[0];
|
|
51
|
+
if ((0, transactionProcessing_1.excludeFromTracking)((step === null || step === void 0 ? void 0 : step.node) || ((_d = (_c = step === null || step === void 0 ? void 0 : step.slice) === null || _c === void 0 ? void 0 : _c.content) === null || _d === void 0 ? void 0 : _d.content[0]))) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
logger_1.log.info('TRACK REPLACE CHANGES: ', [...steps]);
|
|
56
|
+
steps = (0, diffChangeSteps_1.diffChangeSteps)(steps);
|
|
57
|
+
logger_1.log.info('DIFFED STEPS: ', steps);
|
|
58
|
+
const [_, updatedSelectionPos] = (0, processChangeSteps_1.processChangeSteps)(steps, newTr, trContext.stepsByGroupIDMap.has(step)
|
|
59
|
+
? Object.assign(Object.assign({}, emptyAttrs), { moveNodeId: trContext.stepsByGroupIDMap.get(step) }) : emptyAttrs, oldState.schema, deletedNodeMapping);
|
|
60
|
+
trContext.selectionPosFromInsertion = updatedSelectionPos || newSelectionPos || tr.selection.head;
|
|
61
|
+
}
|
|
62
|
+
else if (step instanceof prosemirror_transform_1.ReplaceAroundStep) {
|
|
63
|
+
let steps = (0, trackReplaceAroundStep_1.trackReplaceAroundStep)(step, oldState, tr, newTr, emptyAttrs, tr.docs[i], trContext);
|
|
64
|
+
steps = (0, diffChangeSteps_1.diffChangeSteps)(steps);
|
|
65
|
+
logger_1.log.info('DIFFED STEPS: ', steps);
|
|
66
|
+
(0, processChangeSteps_1.processChangeSteps)(steps, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
|
|
67
|
+
}
|
|
68
|
+
else if (step instanceof prosemirror_transform_1.AttrStep) {
|
|
69
|
+
const changeSteps = (0, trackAttrsChangeStep_1.default)(step, oldState, tr, newTr, emptyAttrs, tr.docs[i]);
|
|
70
|
+
(0, processChangeSteps_1.processChangeSteps)(changeSteps, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
|
|
71
|
+
}
|
|
72
|
+
else if (step instanceof prosemirror_transform_1.AddMarkStep) {
|
|
73
|
+
(0, trackMarkSteps_1.trackAddMarkStep)(step, emptyAttrs, newTr, tr.docs[i]);
|
|
74
|
+
const dataTracked = (_e = (0, attributes_1.getNodeTrackedData)(newTr.doc.nodeAt(step.from), oldState.schema)) === null || _e === void 0 ? void 0 : _e.pop();
|
|
75
|
+
if (dataTracked) {
|
|
76
|
+
(0, updateChangeAttrs_1.updateChangeAttrs)(newTr, { id: dataTracked.id, from: step.from, to: step.to, type: 'text-change', dataTracked }, Object.assign(Object.assign({}, dataTracked), { id: (0, uuidv4_1.uuidv4)() }), oldState.schema);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (step instanceof prosemirror_transform_1.RemoveMarkStep) {
|
|
80
|
+
(0, trackMarkSteps_1.trackRemoveMarkStep)(step, emptyAttrs, newTr, tr.docs[i]);
|
|
81
|
+
}
|
|
82
|
+
else if (step instanceof prosemirror_transform_1.RemoveNodeMarkStep) {
|
|
83
|
+
(0, trackMarkSteps_1.trackRemoveNodeMarkStep)(step, emptyAttrs, newTr, tr.docs[i]);
|
|
84
|
+
}
|
|
85
|
+
else if (step instanceof prosemirror_transform_1.AddNodeMarkStep) {
|
|
86
|
+
(0, trackMarkSteps_1.trackAddNodeMarkStep)(step, emptyAttrs, newTr, tr.docs[i]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
newTr = (0, transactionProcessing_1.passThroughMeta)(tr, newTr);
|
|
90
|
+
newTr = (0, fixAndHandleSelection_1.fixAndSetSelectionAfterTracking)(newTr, tr, deletedNodeMapping, trContext);
|
|
91
|
+
logger_1.log.info('NEW transaction', newTr);
|
|
92
|
+
return newTr;
|
|
93
|
+
}
|