@manuscripts/track-changes-plugin 2.1.1 → 2.2.0
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 +2 -2
- 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
|
@@ -1,55 +1,87 @@
|
|
|
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.setFragmentAsInserted = setFragmentAsInserted;
|
|
37
4
|
exports.setFragmentAsWrapChange = setFragmentAsWrapChange;
|
|
38
5
|
exports.setFragmentAsMoveChange = setFragmentAsMoveChange;
|
|
39
6
|
exports.setFragmentAsNodeSplit = setFragmentAsNodeSplit;
|
|
7
|
+
exports.cutFragment = cutFragment;
|
|
40
8
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
41
9
|
const change_1 = require("../types/change");
|
|
42
10
|
const logger_1 = require("../utils/logger");
|
|
43
|
-
const trackUtils = __importStar(require("../utils/track-utils"));
|
|
44
11
|
const uuidv4_1 = require("../utils/uuidv4");
|
|
45
|
-
const
|
|
12
|
+
const attributes_1 = require("./attributes");
|
|
13
|
+
const mark_1 = require("./mark");
|
|
14
|
+
function setFragmentAsInserted(inserted, insertAttrs, schema) {
|
|
15
|
+
const updatedInserted = loopContentAndMergeText(inserted, insertAttrs, schema);
|
|
16
|
+
return updatedInserted.length === 0 ? prosemirror_model_1.Fragment.empty : prosemirror_model_1.Fragment.fromArray(updatedInserted);
|
|
17
|
+
}
|
|
18
|
+
function setFragmentAsWrapChange(inserted, attrs, schema) {
|
|
19
|
+
const content = [];
|
|
20
|
+
inserted.forEach((node) => {
|
|
21
|
+
content.push(node.type.create(Object.assign(Object.assign({}, node.attrs), { dataTracked: [(0, attributes_1.addTrackIdIfDoesntExist)((0, attributes_1.createNewWrapAttrs)(attrs))] }), setFragmentAsInserted(node.content, (0, attributes_1.createNewInsertAttrs)(attrs), schema), node.marks));
|
|
22
|
+
});
|
|
23
|
+
return prosemirror_model_1.Fragment.from(content);
|
|
24
|
+
}
|
|
25
|
+
function setFragmentAsMoveChange(fragment, moveAttrs) {
|
|
26
|
+
const content = [];
|
|
27
|
+
fragment.forEach((node) => {
|
|
28
|
+
content.push(node.type.create(Object.assign(Object.assign({}, node.attrs), { dataTracked: [(0, attributes_1.addTrackIdIfDoesntExist)(moveAttrs)] }), node.content, node.marks));
|
|
29
|
+
});
|
|
30
|
+
return prosemirror_model_1.Fragment.from(content);
|
|
31
|
+
}
|
|
32
|
+
function setFragmentAsNodeSplit($pos, newTr, inserted, attrs) {
|
|
33
|
+
const lastChild = inserted.lastChild;
|
|
34
|
+
const referenceId = (0, uuidv4_1.uuidv4)();
|
|
35
|
+
const parentPos = $pos.before($pos.depth);
|
|
36
|
+
const parent = $pos.node($pos.depth);
|
|
37
|
+
const oldDataTracked = (0, attributes_1.getBlockInlineTrackedData)(parent) || [];
|
|
38
|
+
newTr.setNodeMarkup(parentPos, undefined, Object.assign(Object.assign({}, parent.attrs), { dataTracked: [
|
|
39
|
+
...oldDataTracked.filter((c) => c.operation !== 'reference'),
|
|
40
|
+
Object.assign({}, (0, attributes_1.addTrackIdIfDoesntExist)((0, attributes_1.createNewReferenceAttrs)(Object.assign(Object.assign({}, attrs), { status: change_1.CHANGE_STATUS.pending }), referenceId))),
|
|
41
|
+
] }));
|
|
42
|
+
const splitSource = oldDataTracked.find((c) => c.operation === 'reference');
|
|
43
|
+
const dataTracked = Object.assign(Object.assign({}, (0, attributes_1.createNewSplitAttrs)(Object.assign({}, attrs))), { id: referenceId });
|
|
44
|
+
if (lastChild.type.name === 'list_item') {
|
|
45
|
+
let firstChild = lastChild.content.firstChild;
|
|
46
|
+
firstChild = firstChild.type.create(Object.assign(Object.assign({}, lastChild.attrs), { dataTracked: splitSource ? [dataTracked, splitSource] : [dataTracked] }), firstChild.content);
|
|
47
|
+
inserted = inserted.replaceChild(inserted.childCount - 1, lastChild.type.create(lastChild.attrs, lastChild.content.cut(firstChild.nodeSize).addToStart(firstChild)));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
inserted = inserted.replaceChild(inserted.childCount - 1, lastChild.type.create(Object.assign(Object.assign({}, lastChild.attrs), { dataTracked: splitSource ? [dataTracked, splitSource] : [dataTracked] }), lastChild.content));
|
|
51
|
+
}
|
|
52
|
+
return inserted;
|
|
53
|
+
}
|
|
54
|
+
function cutFragment(matched, deleted, content) {
|
|
55
|
+
const newContent = [];
|
|
56
|
+
for (let i = 0; matched <= deleted && i < content.childCount; i += 1) {
|
|
57
|
+
const child = content.child(i);
|
|
58
|
+
if (!child.isText && child.content.size > 0) {
|
|
59
|
+
const cut = cutFragment(matched + 1, deleted, child.content);
|
|
60
|
+
matched = cut[0];
|
|
61
|
+
newContent.push(...cut[1].content);
|
|
62
|
+
}
|
|
63
|
+
else if (child.isText && matched + child.nodeSize > deleted) {
|
|
64
|
+
if (deleted - matched > 0) {
|
|
65
|
+
newContent.push(child.cut(deleted - matched));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
newContent.push(child);
|
|
69
|
+
}
|
|
70
|
+
matched = deleted + 1;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
matched += child.nodeSize;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return [matched, prosemirror_model_1.Fragment.fromArray(newContent)];
|
|
77
|
+
}
|
|
46
78
|
function markInlineNodeChange(node, newTrackAttrs, schema) {
|
|
47
79
|
const filtered = node.marks.filter((m) => m.type !== schema.marks.tracked_insert && m.type !== schema.marks.tracked_delete);
|
|
48
80
|
const mark = newTrackAttrs.operation === change_1.CHANGE_OPERATION.insert
|
|
49
81
|
? schema.marks.tracked_insert
|
|
50
82
|
: schema.marks.tracked_delete;
|
|
51
83
|
const createdMark = mark.create({
|
|
52
|
-
dataTracked: (0,
|
|
84
|
+
dataTracked: (0, attributes_1.addTrackIdIfDoesntExist)(newTrackAttrs),
|
|
53
85
|
});
|
|
54
86
|
return node.mark(filtered.concat(createdMark));
|
|
55
87
|
}
|
|
@@ -61,8 +93,8 @@ function loopContentAndMergeText(content, newTrackAttrs, schema) {
|
|
|
61
93
|
const prev = i > 0 ? updatedChildren[i - 1] : null;
|
|
62
94
|
if ((prev === null || prev === void 0 ? void 0 : prev.isText) &&
|
|
63
95
|
recursed.isText &&
|
|
64
|
-
(0,
|
|
65
|
-
((_a = (0,
|
|
96
|
+
(0, mark_1.equalMarks)(prev, recursed) &&
|
|
97
|
+
((_a = (0, attributes_1.getTextNodeTrackedMarkData)(prev, schema)) === null || _a === void 0 ? void 0 : _a.operation) === change_1.CHANGE_OPERATION.insert) {
|
|
66
98
|
updatedChildren.splice(i - 1, 1, schema.text('' + prev.text + recursed.text, prev.marks));
|
|
67
99
|
}
|
|
68
100
|
else {
|
|
@@ -77,50 +109,10 @@ function recurseNodeContent(node, newTrackAttrs, schema) {
|
|
|
77
109
|
}
|
|
78
110
|
else if (node.isBlock || node.isInline) {
|
|
79
111
|
const updatedChildren = loopContentAndMergeText(node.content, newTrackAttrs, schema);
|
|
80
|
-
return node.type.create(Object.assign(Object.assign({}, node.attrs), { dataTracked: [(0,
|
|
112
|
+
return node.type.create(Object.assign(Object.assign({}, node.attrs), { dataTracked: [(0, attributes_1.addTrackIdIfDoesntExist)(newTrackAttrs)] }), prosemirror_model_1.Fragment.fromArray(updatedChildren), node.marks);
|
|
81
113
|
}
|
|
82
114
|
else {
|
|
83
115
|
logger_1.log.error(`unhandled node type: "${node.type.name}"`, node);
|
|
84
116
|
return node;
|
|
85
117
|
}
|
|
86
118
|
}
|
|
87
|
-
function setFragmentAsInserted(inserted, insertAttrs, schema) {
|
|
88
|
-
const updatedInserted = loopContentAndMergeText(inserted, insertAttrs, schema);
|
|
89
|
-
return updatedInserted.length === 0 ? prosemirror_model_1.Fragment.empty : prosemirror_model_1.Fragment.fromArray(updatedInserted);
|
|
90
|
-
}
|
|
91
|
-
function setFragmentAsWrapChange(inserted, attrs, schema) {
|
|
92
|
-
const content = [];
|
|
93
|
-
inserted.forEach((node) => {
|
|
94
|
-
content.push(node.type.create(Object.assign(Object.assign({}, node.attrs), { dataTracked: [(0, nodeHelpers_1.addTrackIdIfDoesntExist)(trackUtils.createNewWrapAttrs(attrs))] }), setFragmentAsInserted(node.content, trackUtils.createNewInsertAttrs(attrs), schema), node.marks));
|
|
95
|
-
});
|
|
96
|
-
return prosemirror_model_1.Fragment.from(content);
|
|
97
|
-
}
|
|
98
|
-
function setFragmentAsMoveChange(fragment, moveAttrs) {
|
|
99
|
-
const content = [];
|
|
100
|
-
fragment.forEach((node) => {
|
|
101
|
-
content.push(node.type.create(Object.assign(Object.assign({}, node.attrs), { dataTracked: [(0, nodeHelpers_1.addTrackIdIfDoesntExist)(moveAttrs)] }), node.content, node.marks));
|
|
102
|
-
});
|
|
103
|
-
return prosemirror_model_1.Fragment.from(content);
|
|
104
|
-
}
|
|
105
|
-
function setFragmentAsNodeSplit($pos, newTr, inserted, attrs) {
|
|
106
|
-
const lastChild = inserted.lastChild;
|
|
107
|
-
const referenceId = (0, uuidv4_1.uuidv4)();
|
|
108
|
-
const parentPos = $pos.before($pos.depth);
|
|
109
|
-
const parent = $pos.node($pos.depth);
|
|
110
|
-
const oldDataTracked = (0, nodeHelpers_1.getBlockInlineTrackedData)(parent) || [];
|
|
111
|
-
newTr.setNodeMarkup(parentPos, undefined, Object.assign(Object.assign({}, parent.attrs), { dataTracked: [
|
|
112
|
-
...oldDataTracked.filter((c) => c.operation !== 'reference'),
|
|
113
|
-
Object.assign({}, (0, nodeHelpers_1.addTrackIdIfDoesntExist)(trackUtils.createNewReferenceAttrs(Object.assign(Object.assign({}, attrs), { status: change_1.CHANGE_STATUS.pending }), referenceId))),
|
|
114
|
-
] }));
|
|
115
|
-
const splitSource = oldDataTracked.find((c) => c.operation === 'reference');
|
|
116
|
-
const dataTracked = Object.assign(Object.assign({}, trackUtils.createNewSplitAttrs(Object.assign({}, attrs))), { id: referenceId });
|
|
117
|
-
if (lastChild.type.name === 'list_item') {
|
|
118
|
-
let firstChild = lastChild.content.firstChild;
|
|
119
|
-
firstChild = firstChild.type.create(Object.assign(Object.assign({}, lastChild.attrs), { dataTracked: splitSource ? [dataTracked, splitSource] : [dataTracked] }), firstChild.content);
|
|
120
|
-
inserted = inserted.replaceChild(inserted.childCount - 1, lastChild.type.create(lastChild.attrs, lastChild.content.cut(firstChild.nodeSize).addToStart(firstChild)));
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
inserted = inserted.replaceChild(inserted.childCount - 1, lastChild.type.create(Object.assign(Object.assign({}, lastChild.attrs), { dataTracked: splitSource ? [dataTracked, splitSource] : [dataTracked] }), lastChild.content));
|
|
124
|
-
}
|
|
125
|
-
return inserted;
|
|
126
|
-
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isValidTrackableMark = isValidTrackableMark;
|
|
4
|
+
exports.equalMarks = equalMarks;
|
|
5
|
+
function isValidTrackableMark(mark) {
|
|
6
|
+
var _a, _b;
|
|
7
|
+
const spec = mark.type.spec;
|
|
8
|
+
const name = mark.type.name;
|
|
9
|
+
if (!name.startsWith('tracked_') &&
|
|
10
|
+
((_a = spec.attrs) === null || _a === void 0 ? void 0 : _a.dataTracked) &&
|
|
11
|
+
typeof ((_b = spec.attrs) === null || _b === void 0 ? void 0 : _b.dataTracked) === 'object') {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
function equalMarks(n1, n2) {
|
|
17
|
+
return (n1.marks.length === n2.marks.length &&
|
|
18
|
+
n1.marks.every((mark) => n1.marks.find((m) => m.type === mark.type)));
|
|
19
|
+
}
|
package/dist/cjs/plugin.js
CHANGED
|
@@ -14,14 +14,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.trackChangesPlugin = exports.trackChangesPluginKey = void 0;
|
|
15
15
|
const prosemirror_state_1 = require("prosemirror-state");
|
|
16
16
|
const actions_1 = require("./actions");
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const updateChangesStatus_1 = require("./changes/updateChangesStatus");
|
|
17
|
+
const fixInconsistentChanges_1 = require("./changeHelpers/fixInconsistentChanges");
|
|
18
|
+
const updateChangesStatus_1 = require("./changeHelpers/updateChangesStatus");
|
|
20
19
|
const ChangeSet_1 = require("./ChangeSet");
|
|
21
|
-
const
|
|
20
|
+
const findChanges_1 = require("./findChanges");
|
|
21
|
+
const trackChanges_1 = require("./trackChanges");
|
|
22
|
+
const transactionProcessing_1 = require("./tracking/transactionProcessing");
|
|
22
23
|
const track_1 = require("./types/track");
|
|
23
24
|
const logger_1 = require("./utils/logger");
|
|
24
|
-
const track_utils_1 = require("./utils/track-utils");
|
|
25
25
|
exports.trackChangesPluginKey = new prosemirror_state_1.PluginKey('track-changes');
|
|
26
26
|
const trackChangesPlugin = (opts = { userID: 'anonymous:Anonymous', initialStatus: track_1.TrackChangesStatus.enabled }) => {
|
|
27
27
|
const { userID, debug, skipTrsWithMetas = [] } = opts;
|
|
@@ -61,7 +61,7 @@ const trackChangesPlugin = (opts = { userID: 'anonymous:Anonymous', initialStatu
|
|
|
61
61
|
return Object.assign(Object.assign({}, pluginState), { changeSet: new ChangeSet_1.ChangeSet() });
|
|
62
62
|
}
|
|
63
63
|
let { changeSet } = pluginState, rest = __rest(pluginState, ["changeSet"]);
|
|
64
|
-
if ((0, actions_1.getAction)(tr, actions_1.TrackChangesAction.refreshChanges) || (0,
|
|
64
|
+
if ((0, actions_1.getAction)(tr, actions_1.TrackChangesAction.refreshChanges) || (0, transactionProcessing_1.trFromHistory)(tr)) {
|
|
65
65
|
changeSet = (0, findChanges_1.findChanges)(newState);
|
|
66
66
|
}
|
|
67
67
|
return Object.assign({ changeSet }, rest);
|
|
@@ -83,31 +83,22 @@ const trackChangesPlugin = (opts = { userID: 'anonymous:Anonymous', initialStatu
|
|
|
83
83
|
let createdTr = newState.tr, docChanged = false;
|
|
84
84
|
logger_1.log.info('TRS', trs);
|
|
85
85
|
trs.forEach((tr) => {
|
|
86
|
-
const wasAppended = tr.getMeta('appendedTransaction');
|
|
87
|
-
const skipMetaUsed = skipTrsWithMetas.some((m) => tr.getMeta(m) || (wasAppended === null || wasAppended === void 0 ? void 0 : wasAppended.getMeta(m)));
|
|
88
86
|
const collabRebased = tr.getMeta('rebased');
|
|
89
87
|
if (collabRebased !== undefined) {
|
|
90
88
|
(0, actions_1.setAction)(createdTr, actions_1.TrackChangesAction.refreshChanges, true);
|
|
91
89
|
docChanged = true;
|
|
92
90
|
return;
|
|
93
91
|
}
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (!setChangeStatuses &&
|
|
98
|
-
tr.docChanged &&
|
|
99
|
-
!skipMetaUsed &&
|
|
100
|
-
!skipTrackUsed &&
|
|
101
|
-
!(0, track_utils_1.trFromHistory)(tr) &&
|
|
102
|
-
!(wasAppended && tr.getMeta('origin') === 'paragraphs')) {
|
|
103
|
-
createdTr = (0, trackTransaction_1.trackTransaction)(tr, oldState, createdTr, userID, changeSet);
|
|
104
|
-
}
|
|
105
|
-
docChanged = docChanged || tr.docChanged;
|
|
106
|
-
if (setChangeStatuses) {
|
|
107
|
-
const { status, ids } = setChangeStatuses;
|
|
92
|
+
const setsChangeStatus = (0, actions_1.getAction)(tr, actions_1.TrackChangesAction.setChangeStatuses);
|
|
93
|
+
if (setsChangeStatus) {
|
|
94
|
+
const { status, ids } = setsChangeStatus;
|
|
108
95
|
(0, updateChangesStatus_1.updateChangesStatus)(createdTr, changeSet, ids, status, userID, oldState);
|
|
109
96
|
(0, actions_1.setAction)(createdTr, actions_1.TrackChangesAction.refreshChanges, true);
|
|
110
97
|
}
|
|
98
|
+
else {
|
|
99
|
+
createdTr = (0, trackChanges_1.trackChanges)(tr, createdTr, oldState, userID, skipTrsWithMetas) || createdTr;
|
|
100
|
+
}
|
|
101
|
+
docChanged = docChanged || tr.docChanged;
|
|
111
102
|
});
|
|
112
103
|
const changed = pluginState.changeSet.hasInconsistentData &&
|
|
113
104
|
(0, fixInconsistentChanges_1.fixInconsistentChanges)(pluginState.changeSet, userID, createdTr, oldState.schema);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* © 2025 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
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.trackChanges = trackChanges;
|
|
19
|
+
const actions_1 = require("./actions");
|
|
20
|
+
const processStepsBeforeTracking_1 = require("./tracking/lib/processStepsBeforeTracking");
|
|
21
|
+
const trackTransaction_1 = require("./tracking/trackTransaction");
|
|
22
|
+
const transactionProcessing_1 = require("./tracking/transactionProcessing");
|
|
23
|
+
function trackChanges(tr, createdTr, oldState, userID, skipTrsWithMetas) {
|
|
24
|
+
var _a;
|
|
25
|
+
const wasAppended = tr.getMeta('appendedTransaction');
|
|
26
|
+
const skipMetaUsed = skipTrsWithMetas.some((m) => tr.getMeta(m) || (wasAppended === null || wasAppended === void 0 ? void 0 : wasAppended.getMeta(m)));
|
|
27
|
+
const skipTrackUsed = (0, actions_1.getAction)(tr, actions_1.TrackChangesAction.skipTrack) ||
|
|
28
|
+
(wasAppended && (0, actions_1.getAction)(wasAppended, actions_1.TrackChangesAction.skipTrack));
|
|
29
|
+
if (tr.docChanged &&
|
|
30
|
+
!skipMetaUsed &&
|
|
31
|
+
!skipTrackUsed &&
|
|
32
|
+
!(0, transactionProcessing_1.trFromHistory)(tr) &&
|
|
33
|
+
!(wasAppended && tr.getMeta('origin') === 'paragraphs')) {
|
|
34
|
+
const action = (_a = (0, actions_1.getAction)(tr, actions_1.TrackChangesAction.indentationAction)) === null || _a === void 0 ? void 0 : _a.action;
|
|
35
|
+
const trContext = {
|
|
36
|
+
action,
|
|
37
|
+
stepsByGroupIDMap: new Map(),
|
|
38
|
+
};
|
|
39
|
+
const clearedSteps = (0, processStepsBeforeTracking_1.processStepsBeforeTracking)(tr, trContext, [
|
|
40
|
+
transactionProcessing_1.getMoveOperationsSteps,
|
|
41
|
+
transactionProcessing_1.getIndentationOperationSteps,
|
|
42
|
+
transactionProcessing_1.filterMeaninglessMoveSteps,
|
|
43
|
+
]);
|
|
44
|
+
(0, transactionProcessing_1.changeMovedToInsertsOnSourceDeletion)(tr, createdTr, trContext);
|
|
45
|
+
return (0, trackTransaction_1.trackTransaction)(tr, oldState, createdTr, userID, clearedSteps, trContext);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* © 2025 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
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
18
|
exports.diffChangeSteps = diffChangeSteps;
|
|
4
19
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const cut = cutFragment(matched + 1, deleted, child.content);
|
|
13
|
-
matched = cut[0];
|
|
14
|
-
newContent.push(...cut[1].content);
|
|
15
|
-
}
|
|
16
|
-
else if (child.isText && matched + child.nodeSize > deleted) {
|
|
17
|
-
if (deleted - matched > 0) {
|
|
18
|
-
newContent.push(child.cut(deleted - matched));
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
newContent.push(child);
|
|
22
|
-
}
|
|
23
|
-
matched = deleted + 1;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
matched += child.nodeSize;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return [matched, prosemirror_model_1.Fragment.fromArray(newContent)];
|
|
30
|
-
}
|
|
31
|
-
function diffChangeSteps(deleted, inserted) {
|
|
20
|
+
const fragment_1 = require("../../helpers/fragment");
|
|
21
|
+
const logger_1 = require("../../utils/logger");
|
|
22
|
+
const matchInserted_1 = require("../lib/matchInserted");
|
|
23
|
+
function diffChangeSteps(steps) {
|
|
24
|
+
const deleted = steps.filter((s) => s.type !== 'insert-slice');
|
|
25
|
+
const inserted = steps.filter((s) => s.type === 'insert-slice');
|
|
26
|
+
logger_1.log.info('INSERT STEPS: ', inserted);
|
|
32
27
|
const updated = [];
|
|
33
28
|
let updatedDeleted = [...deleted];
|
|
34
29
|
inserted.forEach((ins) => {
|
|
@@ -52,7 +47,7 @@ function diffChangeSteps(deleted, inserted) {
|
|
|
52
47
|
return;
|
|
53
48
|
}
|
|
54
49
|
updatedDeleted = updatedDel;
|
|
55
|
-
const [_, newInserted] = cutFragment(0, matchedDeleted - deleteStart, ins.slice.content);
|
|
50
|
+
const [_, newInserted] = (0, fragment_1.cutFragment)(0, matchedDeleted - deleteStart, ins.slice.content);
|
|
56
51
|
if (newInserted.size > 0) {
|
|
57
52
|
updated.push(Object.assign(Object.assign({}, ins), { slice: new prosemirror_model_1.Slice(newInserted, ins.slice.openStart, ins.slice.openEnd) }));
|
|
58
53
|
}
|
|
@@ -1,37 +1,4 @@
|
|
|
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
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
36
3
|
var t = {};
|
|
37
4
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -46,17 +13,16 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
46
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
14
|
exports.processChangeSteps = processChangeSteps;
|
|
48
15
|
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, deletedNodeMapping) {
|
|
16
|
+
const attributes_1 = require("../../helpers/attributes");
|
|
17
|
+
const change_1 = require("../../types/change");
|
|
18
|
+
const logger_1 = require("../../utils/logger");
|
|
19
|
+
const deleteNode_1 = require("../lib/deleteNode");
|
|
20
|
+
const deleteTextIfInserted_1 = require("../lib/deleteTextIfInserted");
|
|
21
|
+
const mergeTrackedMarks_1 = require("../lib/mergeTrackedMarks");
|
|
22
|
+
function processChangeSteps(changes, newTr, emptyAttrs, schema, deletedNodeMapping) {
|
|
57
23
|
const mapping = new prosemirror_transform_1.Mapping();
|
|
58
|
-
const deleteAttrs =
|
|
59
|
-
let selectionPos =
|
|
24
|
+
const deleteAttrs = (0, attributes_1.createNewDeleteAttrs)(emptyAttrs);
|
|
25
|
+
let selectionPos = undefined;
|
|
60
26
|
let deletesCounter = 0;
|
|
61
27
|
let isInserted = false;
|
|
62
28
|
let prevDelete;
|
|
@@ -66,7 +32,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
66
32
|
case 'delete-node': {
|
|
67
33
|
deletesCounter++;
|
|
68
34
|
const prevDeletedNodeInserted = isInserted;
|
|
69
|
-
const trackedData = (0,
|
|
35
|
+
const trackedData = (0, attributes_1.getBlockInlineTrackedData)(c.node);
|
|
70
36
|
const inserted = trackedData === null || trackedData === void 0 ? void 0 : trackedData.find((d) => d.operation === change_1.CHANGE_OPERATION.insert || d.operation === change_1.CHANGE_OPERATION.wrap_with_node);
|
|
71
37
|
const structure = trackedData === null || trackedData === void 0 ? void 0 : trackedData.find((c) => c.operation === change_1.CHANGE_OPERATION.structure &&
|
|
72
38
|
deleteAttrs.moveNodeId &&
|
|
@@ -111,7 +77,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
111
77
|
logger_1.log.error(`processChangeSteps: no text node found for text-change`, c);
|
|
112
78
|
return;
|
|
113
79
|
}
|
|
114
|
-
const where = (0,
|
|
80
|
+
const where = (0, deleteTextIfInserted_1.deleteTextIfInserted)(node, mapping.map(c.pos), newTr, schema, deleteAttrs, mapping.map(c.from), mapping.map(c.to));
|
|
115
81
|
const textNewestStep = newTr.steps[newTr.steps.length - 1];
|
|
116
82
|
if (node.marks.find((m) => m.type === schema.marks.tracked_insert)) {
|
|
117
83
|
deletedNodeMapping.appendMap(textNewestStep.getMap());
|
|
@@ -126,7 +92,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
126
92
|
case 'merge-fragment': {
|
|
127
93
|
let insertPos = mapping.map(c.mergePos);
|
|
128
94
|
if (c.node.isText) {
|
|
129
|
-
insertPos = (0,
|
|
95
|
+
insertPos = (0, deleteTextIfInserted_1.deleteTextIfInserted)(c.node, mapping.map(c.pos), newTr, schema, deleteAttrs, mapping.map(c.from), mapping.map(c.to));
|
|
130
96
|
const newestStep = newTr.steps[newTr.steps.length - 1];
|
|
131
97
|
if (c.node.marks.find((m) => m.type === schema.marks.tracked_insert)) {
|
|
132
98
|
deletedNodeMapping.appendMap(newestStep.getMap());
|
|
@@ -155,7 +121,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
155
121
|
break;
|
|
156
122
|
}
|
|
157
123
|
case 'update-node-attrs': {
|
|
158
|
-
const oldDataTracked = (0,
|
|
124
|
+
const oldDataTracked = (0, attributes_1.getBlockInlineTrackedData)(c.node) || [];
|
|
159
125
|
const oldUpdate = oldDataTracked.reverse().find((d) => {
|
|
160
126
|
if (d.operation === change_1.CHANGE_OPERATION.set_node_attributes && d.status === change_1.CHANGE_STATUS.pending) {
|
|
161
127
|
return true;
|
|
@@ -166,7 +132,7 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, delete
|
|
|
166
132
|
const oldAttrs = restAttrs;
|
|
167
133
|
const newDataTracked = [...oldDataTracked.filter((d) => !oldUpdate || d.id !== oldUpdate.id)];
|
|
168
134
|
const newUpdate = oldUpdate && oldUpdate.status !== change_1.CHANGE_STATUS.rejected
|
|
169
|
-
? Object.assign(Object.assign({}, oldUpdate), { updatedAt: emptyAttrs.updatedAt }) : (0,
|
|
135
|
+
? Object.assign(Object.assign({}, oldUpdate), { updatedAt: emptyAttrs.updatedAt }) : (0, attributes_1.addTrackIdIfDoesntExist)((0, attributes_1.createNewUpdateAttrs)(emptyAttrs, c.node.attrs));
|
|
170
136
|
if ((JSON.stringify(oldAttrs) !== JSON.stringify(c.newAttrs) ||
|
|
171
137
|
c.node.type === c.node.type.schema.nodes.citation) &&
|
|
172
138
|
!oldDataTracked.find((d) => (d.operation === change_1.CHANGE_OPERATION.insert || d.operation === change_1.CHANGE_OPERATION.wrap_with_node) &&
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* © 2025 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
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.getSelectionStaticConstructor = void 0;
|
|
19
|
+
exports.fixAndSetSelectionAfterTracking = fixAndSetSelectionAfterTracking;
|
|
20
|
+
const prosemirror_state_1 = require("prosemirror-state");
|
|
21
|
+
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
22
|
+
const structureChange_1 = require("../changeHelpers/structureChange");
|
|
23
|
+
const getSelectionStaticConstructor = (sel) => Object.getPrototypeOf(sel).constructor;
|
|
24
|
+
exports.getSelectionStaticConstructor = getSelectionStaticConstructor;
|
|
25
|
+
function fixAndSetSelectionAfterTracking(newTr, oldTr, deletedNodeMapping, trContext) {
|
|
26
|
+
const wasNodeSelection = oldTr.selection instanceof prosemirror_state_1.NodeSelection;
|
|
27
|
+
if (!wasNodeSelection && !oldTr.selectionSet && trContext.selectionPosFromInsertion) {
|
|
28
|
+
const sel = (0, exports.getSelectionStaticConstructor)(oldTr.selection);
|
|
29
|
+
const near = sel.near(newTr.doc.resolve(trContext.selectionPosFromInsertion), -1);
|
|
30
|
+
newTr.setSelection(near);
|
|
31
|
+
}
|
|
32
|
+
if (oldTr.selectionSet && oldTr.selection instanceof prosemirror_state_1.TextSelection) {
|
|
33
|
+
let from = oldTr.selection.from;
|
|
34
|
+
if ((0, structureChange_1.isStructuralChange)(oldTr)) {
|
|
35
|
+
const selectionMapping = new prosemirror_transform_1.Mapping();
|
|
36
|
+
oldTr.steps.map((step) => {
|
|
37
|
+
const isDeleteStep = step instanceof prosemirror_transform_1.ReplaceStep && step.from !== step.to && step.slice.size === 0;
|
|
38
|
+
if (isDeleteStep) {
|
|
39
|
+
selectionMapping.appendMap(step.getMap().invert());
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
selectionMapping.appendMapping(deletedNodeMapping);
|
|
43
|
+
from = selectionMapping.map(oldTr.selection.from);
|
|
44
|
+
}
|
|
45
|
+
const newPos = newTr.doc.resolve(from);
|
|
46
|
+
newTr.setSelection(new prosemirror_state_1.TextSelection(newPos));
|
|
47
|
+
}
|
|
48
|
+
if (wasNodeSelection) {
|
|
49
|
+
const mappedPos = newTr.mapping.map(oldTr.selection.from, -1);
|
|
50
|
+
const sel = (0, exports.getSelectionStaticConstructor)(oldTr.selection);
|
|
51
|
+
newTr.setSelection(sel.create(newTr.doc, mappedPos));
|
|
52
|
+
}
|
|
53
|
+
return newTr;
|
|
54
|
+
}
|
|
@@ -1,45 +1,12 @@
|
|
|
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.deleteAndMergeSplitNodes = deleteAndMergeSplitNodes;
|
|
37
4
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
function deleteAndMergeSplitNodes(from, to, gap, startDoc,
|
|
5
|
+
const attributes_1 = require("../../helpers/attributes");
|
|
6
|
+
const fragment_1 = require("../../helpers/fragment");
|
|
7
|
+
const qualifiers_1 = require("../steps-trackers/qualifiers");
|
|
8
|
+
const splitSliceIntoMergedParts_1 = require("./splitSliceIntoMergedParts");
|
|
9
|
+
function deleteAndMergeSplitNodes(from, to, gap, startDoc, schema, trackAttrs, insertSlice) {
|
|
43
10
|
const steps = [];
|
|
44
11
|
if (from === to) {
|
|
45
12
|
return {
|
|
@@ -70,7 +37,7 @@ function deleteAndMergeSplitNodes(from, to, gap, startDoc, newTr, schema, trackA
|
|
|
70
37
|
const mergeEndNode = startTokenDeleted && openEnd > 0 && depth === openEnd && mergeContent;
|
|
71
38
|
const mergeEndNodeNotEmpty = mergeEndNode && mergeContent.size;
|
|
72
39
|
if (mergeEndNode && !mergeEndNodeNotEmpty && gap) {
|
|
73
|
-
if ((0,
|
|
40
|
+
if ((0, qualifiers_1.isLiftStepForGap)(gap, node, to)) {
|
|
74
41
|
gap.slice.content.forEach((node, offset) => {
|
|
75
42
|
steps.push({
|
|
76
43
|
type: 'delete-node',
|
|
@@ -89,7 +56,7 @@ function deleteAndMergeSplitNodes(from, to, gap, startDoc, newTr, schema, trackA
|
|
|
89
56
|
from,
|
|
90
57
|
to,
|
|
91
58
|
node,
|
|
92
|
-
fragment: (0,
|
|
59
|
+
fragment: (0, fragment_1.setFragmentAsInserted)(mergeContent, (0, attributes_1.createNewInsertAttrs)(trackAttrs), schema),
|
|
93
60
|
});
|
|
94
61
|
}
|
|
95
62
|
else if (node.isText) {
|