@manuscripts/track-changes-plugin 2.0.9 → 2.0.11
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/actions.js +6 -5
- package/dist/cjs/change-steps/diffChangeSteps.js +1 -2
- package/dist/cjs/change-steps/matchInserted.js +1 -2
- package/dist/cjs/change-steps/processChangeSteps.js +22 -10
- package/dist/cjs/changes/applyChanges.js +53 -12
- package/dist/cjs/changes/findChanges.js +1 -2
- package/dist/cjs/changes/fixInconsistentChanges.js +1 -2
- package/dist/cjs/changes/revertChange.js +2 -3
- package/dist/cjs/changes/updateChangeAttrs.js +9 -3
- package/dist/cjs/changes/updateChangesStatus.js +1 -2
- package/dist/cjs/compute/nodeHelpers.js +7 -8
- package/dist/cjs/compute/setFragmentAsInserted.js +23 -14
- package/dist/cjs/compute/splitSliceIntoMergedParts.js +1 -2
- package/dist/cjs/index.js +20 -8
- package/dist/cjs/mutate/deleteAndMergeSplitNodes.js +18 -9
- package/dist/cjs/mutate/deleteNode.js +4 -4
- package/dist/cjs/mutate/deleteText.js +1 -2
- package/dist/cjs/mutate/mergeNode.js +1 -2
- package/dist/cjs/mutate/mergeTrackedMarks.js +1 -2
- package/dist/cjs/steps/trackReplaceAroundStep.js +18 -9
- package/dist/cjs/steps/trackReplaceStep.js +25 -14
- package/dist/cjs/steps/trackTransaction.js +17 -7
- package/dist/cjs/types/change.js +2 -2
- package/dist/cjs/types/track.js +1 -1
- package/dist/cjs/utils/mapChangeStep.js +1 -2
- package/dist/cjs/utils/track-utils.js +11 -11
- package/dist/cjs/utils/uuidv4.js +1 -2
- package/dist/es/actions.js +1 -0
- package/dist/es/change-steps/processChangeSteps.js +4 -1
- package/dist/es/changes/applyChanges.js +52 -10
- package/dist/es/changes/updateChangeAttrs.js +6 -0
- package/dist/es/compute/setFragmentAsInserted.js +2 -2
- package/dist/es/index.js +1 -1
- package/dist/es/mutate/deleteNode.js +2 -1
- package/dist/es/steps/trackReplaceStep.js +7 -5
- package/dist/es/steps/trackTransaction.js +16 -5
- package/dist/es/utils/track-utils.js +2 -2
- package/dist/types/ChangeSet.d.ts +4 -4
- package/dist/types/actions.d.ts +5 -1
- package/dist/types/changes/updateChangeAttrs.d.ts +1 -0
- package/dist/types/compute/setFragmentAsInserted.d.ts +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/types/change.d.ts +1 -0
- package/dist/types/types/track.d.ts +6 -2
- package/dist/types/utils/track-utils.d.ts +2 -2
- package/package.json +8 -8
|
@@ -15,15 +15,25 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
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
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.trackReplaceAroundStep =
|
|
36
|
+
exports.trackReplaceAroundStep = trackReplaceAroundStep;
|
|
27
37
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
28
38
|
const actions_1 = require("../actions");
|
|
29
39
|
const setFragmentAsInserted_1 = require("../compute/setFragmentAsInserted");
|
|
@@ -121,4 +131,3 @@ function trackReplaceAroundStep(step, oldState, tr, newTr, attrs, currentStepDoc
|
|
|
121
131
|
}
|
|
122
132
|
return steps;
|
|
123
133
|
}
|
|
124
|
-
exports.trackReplaceAroundStep = trackReplaceAroundStep;
|
|
@@ -15,16 +15,27 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
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
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.trackReplaceStep =
|
|
36
|
+
exports.trackReplaceStep = trackReplaceStep;
|
|
27
37
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
38
|
+
const actions_1 = require("../actions");
|
|
28
39
|
const setFragmentAsInserted_1 = require("../compute/setFragmentAsInserted");
|
|
29
40
|
const deleteAndMergeSplitNodes_1 = require("../mutate/deleteAndMergeSplitNodes");
|
|
30
41
|
const logger_1 = require("../utils/logger");
|
|
@@ -40,7 +51,7 @@ function trackReplaceStep(step, oldState, newTr, attrsTemplate, stepResult, curr
|
|
|
40
51
|
attrs.moveNodeId = moveID;
|
|
41
52
|
}
|
|
42
53
|
step.getMap().forEach((fromA, toA, fromB, toB) => {
|
|
43
|
-
var _a, _b, _c;
|
|
54
|
+
var _a, _b, _c, _d;
|
|
44
55
|
logger_1.log.info(`changed ranges: ${fromA} ${toA} ${fromB} ${toB}`);
|
|
45
56
|
const { slice } = step;
|
|
46
57
|
logger_1.log.info('TR: steps before applying delete', [...newTr.steps]);
|
|
@@ -71,12 +82,13 @@ function trackReplaceStep(step, oldState, newTr, attrsTemplate, stepResult, curr
|
|
|
71
82
|
fragment = (0, setFragmentAsInserted_1.setFragmentAsNodeSplit)(newTr.doc.resolve(step.from), newTr, fragment, attrs);
|
|
72
83
|
}
|
|
73
84
|
if (moveID) {
|
|
74
|
-
|
|
85
|
+
const indentationType = (_a = (0, actions_1.getAction)(tr, actions_1.TrackChangesAction.indentationAction)) === null || _a === void 0 ? void 0 : _a.action;
|
|
86
|
+
fragment = (0, setFragmentAsInserted_1.setFragmentAsMoveChange)(newSliceContent, trackUtils.createNewMoveAttrs(attrs, indentationType));
|
|
75
87
|
}
|
|
76
88
|
const openStart = slice.openStart !== slice.openEnd ? 0 : slice.openStart;
|
|
77
89
|
const openEnd = slice.openStart !== slice.openEnd ? 0 : slice.openEnd;
|
|
78
90
|
const textWasDeleted = !!changeSteps.length && !(fromA === fromB);
|
|
79
|
-
const isBlock = !!((
|
|
91
|
+
const isBlock = !!((_b = fragment.firstChild) === null || _b === void 0 ? void 0 : _b.isBlock);
|
|
80
92
|
changeSteps.push({
|
|
81
93
|
type: 'insert-slice',
|
|
82
94
|
from: textWasDeleted ? fromB : isBlock ? toA : fromA,
|
|
@@ -86,11 +98,10 @@ function trackReplaceStep(step, oldState, newTr, attrsTemplate, stepResult, curr
|
|
|
86
98
|
});
|
|
87
99
|
}
|
|
88
100
|
else {
|
|
89
|
-
const isDeleteEvent = ((
|
|
90
|
-
const isDeleteContentForward = ((
|
|
101
|
+
const isDeleteEvent = ((_c = window.event) === null || _c === void 0 ? void 0 : _c.code) === 'Delete';
|
|
102
|
+
const isDeleteContentForward = ((_d = window.event) === null || _d === void 0 ? void 0 : _d.inputType) === 'deleteContentForward';
|
|
91
103
|
selectionPos = isDeleteEvent || isDeleteContentForward ? toA : fromA;
|
|
92
104
|
}
|
|
93
105
|
});
|
|
94
106
|
return [changeSteps, selectionPos];
|
|
95
107
|
}
|
|
96
|
-
exports.trackReplaceStep = trackReplaceStep;
|
|
@@ -3,9 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.trackTransaction =
|
|
6
|
+
exports.trackTransaction = trackTransaction;
|
|
7
7
|
const prosemirror_state_1 = require("prosemirror-state");
|
|
8
8
|
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
9
|
+
const actions_1 = require("../actions");
|
|
9
10
|
const diffChangeSteps_1 = require("../change-steps/diffChangeSteps");
|
|
10
11
|
const processChangeSteps_1 = require("../change-steps/processChangeSteps");
|
|
11
12
|
const updateChangeAttrs_1 = require("../changes/updateChangeAttrs");
|
|
@@ -21,7 +22,7 @@ const trackReplaceStep_1 = require("./trackReplaceStep");
|
|
|
21
22
|
const getSelectionStaticConstructor = (sel) => Object.getPrototypeOf(sel).constructor;
|
|
22
23
|
const isHighlightMarkerNode = (node) => node && node.type === node.type.schema.nodes.highlight_marker;
|
|
23
24
|
function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
24
|
-
var _a, _b, _c, _d, _e;
|
|
25
|
+
var _a, _b, _c, _d, _e, _f;
|
|
25
26
|
const emptyAttrs = {
|
|
26
27
|
authorID,
|
|
27
28
|
reviewedByID: null,
|
|
@@ -30,13 +31,23 @@ function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
30
31
|
statusUpdateAt: 0,
|
|
31
32
|
status: change_1.CHANGE_STATUS.pending,
|
|
32
33
|
};
|
|
34
|
+
const action = (_a = (0, actions_1.getAction)(tr, actions_1.TrackChangesAction.indentationAction)) === null || _a === void 0 ? void 0 : _a.action;
|
|
35
|
+
const isIndentation = action === 'indent' || action === 'unindent';
|
|
33
36
|
const wasNodeSelection = tr.selection instanceof prosemirror_state_1.NodeSelection;
|
|
34
37
|
const setsNewSelection = tr.selectionSet;
|
|
35
38
|
const deletedNodeMapping = new prosemirror_transform_1.Mapping();
|
|
36
39
|
let iters = 0;
|
|
37
40
|
logger_1.log.info('ORIGINAL transaction', tr);
|
|
38
41
|
let trContext = {};
|
|
39
|
-
|
|
42
|
+
let movingStepsAssociated = (0, track_utils_1.HasMoveOperations)(tr);
|
|
43
|
+
if (isIndentation) {
|
|
44
|
+
const moveId = (0, uuidv4_1.uuidv4)();
|
|
45
|
+
tr.steps.forEach((step) => {
|
|
46
|
+
if (step instanceof prosemirror_transform_1.ReplaceStep) {
|
|
47
|
+
movingStepsAssociated.set(step, moveId);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
40
51
|
(0, track_utils_1.handleDirectPendingMoveDeletions)(tr, newTr, movingStepsAssociated);
|
|
41
52
|
const cleanSteps = (0, track_utils_1.filterMeaninglessMoveSteps)(tr, movingStepsAssociated);
|
|
42
53
|
for (let i = cleanSteps.length - 1; i >= 0; i--) {
|
|
@@ -57,7 +68,7 @@ function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
57
68
|
}
|
|
58
69
|
else if (step instanceof prosemirror_transform_1.ReplaceStep) {
|
|
59
70
|
const { slice } = step;
|
|
60
|
-
if (((
|
|
71
|
+
if (((_c = (_b = slice === null || slice === void 0 ? void 0 : slice.content) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.length) === 1 && isHighlightMarkerNode(slice.content.content[0])) {
|
|
61
72
|
continue;
|
|
62
73
|
}
|
|
63
74
|
const invertedStep = step.invert(tr.docs[i]);
|
|
@@ -71,7 +82,7 @@ function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
71
82
|
let [steps, startPos] = (0, trackReplaceStep_1.trackReplaceStep)(step, oldState, newTr, emptyAttrs, stepResult, tr.docs[i], tr, movingStepsAssociated.get(step));
|
|
72
83
|
if (steps.length === 1) {
|
|
73
84
|
const step = steps[0];
|
|
74
|
-
if (isHighlightMarkerNode((step === null || step === void 0 ? void 0 : step.node) || ((
|
|
85
|
+
if (isHighlightMarkerNode((step === null || step === void 0 ? void 0 : step.node) || ((_e = (_d = step === null || step === void 0 ? void 0 : step.slice) === null || _d === void 0 ? void 0 : _d.content) === null || _e === void 0 ? void 0 : _e.content[0]))) {
|
|
75
86
|
continue;
|
|
76
87
|
}
|
|
77
88
|
}
|
|
@@ -104,7 +115,7 @@ function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
104
115
|
const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(changeSteps, tr.selection.from, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
|
|
105
116
|
}
|
|
106
117
|
else if (step instanceof prosemirror_transform_1.AddMarkStep) {
|
|
107
|
-
const dataTracked = (
|
|
118
|
+
const dataTracked = (_f = (0, nodeHelpers_1.getNodeTrackedData)(newTr.doc.nodeAt(step.from), oldState.schema)) === null || _f === void 0 ? void 0 : _f.pop();
|
|
108
119
|
if (dataTracked) {
|
|
109
120
|
(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);
|
|
110
121
|
}
|
|
@@ -125,4 +136,3 @@ function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
125
136
|
logger_1.log.info('NEW transaction', newTr);
|
|
126
137
|
return newTr;
|
|
127
138
|
}
|
|
128
|
-
exports.trackTransaction = trackTransaction;
|
package/dist/cjs/types/change.js
CHANGED
|
@@ -25,10 +25,10 @@ var CHANGE_OPERATION;
|
|
|
25
25
|
CHANGE_OPERATION["node_split"] = "node_split";
|
|
26
26
|
CHANGE_OPERATION["reference"] = "reference";
|
|
27
27
|
CHANGE_OPERATION["move"] = "move";
|
|
28
|
-
})(CHANGE_OPERATION
|
|
28
|
+
})(CHANGE_OPERATION || (exports.CHANGE_OPERATION = CHANGE_OPERATION = {}));
|
|
29
29
|
var CHANGE_STATUS;
|
|
30
30
|
(function (CHANGE_STATUS) {
|
|
31
31
|
CHANGE_STATUS["accepted"] = "accepted";
|
|
32
32
|
CHANGE_STATUS["rejected"] = "rejected";
|
|
33
33
|
CHANGE_STATUS["pending"] = "pending";
|
|
34
|
-
})(CHANGE_STATUS
|
|
34
|
+
})(CHANGE_STATUS || (exports.CHANGE_STATUS = CHANGE_STATUS = {}));
|
package/dist/cjs/types/track.js
CHANGED
|
@@ -6,4 +6,4 @@ var TrackChangesStatus;
|
|
|
6
6
|
TrackChangesStatus["enabled"] = "enabled";
|
|
7
7
|
TrackChangesStatus["viewSnapshots"] = "view-snapshots";
|
|
8
8
|
TrackChangesStatus["disabled"] = "disabled";
|
|
9
|
-
})(TrackChangesStatus
|
|
9
|
+
})(TrackChangesStatus || (exports.TrackChangesStatus = TrackChangesStatus = {}));
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.mapChangeSteps =
|
|
18
|
+
exports.mapChangeSteps = mapChangeSteps;
|
|
19
19
|
function mapChangeSteps(steps, mapping) {
|
|
20
20
|
steps.forEach((step) => {
|
|
21
21
|
if ('from' in step) {
|
|
@@ -36,4 +36,3 @@ function mapChangeSteps(steps, mapping) {
|
|
|
36
36
|
});
|
|
37
37
|
return steps;
|
|
38
38
|
}
|
|
39
|
-
exports.mapChangeSteps = mapChangeSteps;
|
|
@@ -11,39 +11,40 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
return t;
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.filterMeaninglessMoveSteps = exports.handleDirectPendingMoveDeletions = exports.isDirectPendingMoveDeletion = exports.isDeletingPendingMovedNode = exports.isPendingChange = exports.HasMoveOperations = exports.trFromHistory = exports.
|
|
14
|
+
exports.filterMeaninglessMoveSteps = exports.handleDirectPendingMoveDeletions = exports.isDirectPendingMoveDeletion = exports.isDeletingPendingMovedNode = exports.isPendingChange = exports.HasMoveOperations = exports.trFromHistory = exports.isLiftStep = exports.isWrapStep = exports.isSplitStep = void 0;
|
|
15
|
+
exports.createNewInsertAttrs = createNewInsertAttrs;
|
|
16
|
+
exports.createNewWrapAttrs = createNewWrapAttrs;
|
|
17
|
+
exports.createNewSplitAttrs = createNewSplitAttrs;
|
|
18
|
+
exports.createNewReferenceAttrs = createNewReferenceAttrs;
|
|
19
|
+
exports.createNewDeleteAttrs = createNewDeleteAttrs;
|
|
20
|
+
exports.createNewMoveAttrs = createNewMoveAttrs;
|
|
21
|
+
exports.createNewUpdateAttrs = createNewUpdateAttrs;
|
|
22
|
+
exports.stepIsLift = stepIsLift;
|
|
15
23
|
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
16
24
|
const change_1 = require("../types/change");
|
|
17
25
|
const uuidv4_1 = require("./uuidv4");
|
|
18
26
|
function createNewInsertAttrs(attrs) {
|
|
19
27
|
return Object.assign(Object.assign({}, attrs), { operation: change_1.CHANGE_OPERATION.insert });
|
|
20
28
|
}
|
|
21
|
-
exports.createNewInsertAttrs = createNewInsertAttrs;
|
|
22
29
|
function createNewWrapAttrs(attrs) {
|
|
23
30
|
return Object.assign(Object.assign({}, attrs), { operation: change_1.CHANGE_OPERATION.wrap_with_node });
|
|
24
31
|
}
|
|
25
|
-
exports.createNewWrapAttrs = createNewWrapAttrs;
|
|
26
32
|
function createNewSplitAttrs(attrs) {
|
|
27
33
|
return Object.assign(Object.assign({}, attrs), { operation: change_1.CHANGE_OPERATION.node_split });
|
|
28
34
|
}
|
|
29
|
-
exports.createNewSplitAttrs = createNewSplitAttrs;
|
|
30
35
|
function createNewReferenceAttrs(attrs, id) {
|
|
31
36
|
return Object.assign(Object.assign({}, attrs), { operation: change_1.CHANGE_OPERATION.reference, referenceId: id });
|
|
32
37
|
}
|
|
33
|
-
exports.createNewReferenceAttrs = createNewReferenceAttrs;
|
|
34
38
|
function createNewDeleteAttrs(attrs) {
|
|
35
39
|
return Object.assign(Object.assign({}, attrs), { operation: change_1.CHANGE_OPERATION.delete });
|
|
36
40
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return Object.assign(Object.assign({}, attrs), { operation: change_1.CHANGE_OPERATION.move });
|
|
41
|
+
function createNewMoveAttrs(attrs, indentationType) {
|
|
42
|
+
return Object.assign(Object.assign(Object.assign({}, attrs), { operation: change_1.CHANGE_OPERATION.move }), (indentationType && { indentationType }));
|
|
40
43
|
}
|
|
41
|
-
exports.createNewMoveAttrs = createNewMoveAttrs;
|
|
42
44
|
function createNewUpdateAttrs(attrs, oldAttrs) {
|
|
43
45
|
const { dataTracked } = oldAttrs, restAttrs = __rest(oldAttrs, ["dataTracked"]);
|
|
44
46
|
return Object.assign(Object.assign({}, attrs), { operation: change_1.CHANGE_OPERATION.set_node_attributes, oldAttrs: JSON.parse(JSON.stringify(restAttrs)) });
|
|
45
47
|
}
|
|
46
|
-
exports.createNewUpdateAttrs = createNewUpdateAttrs;
|
|
47
48
|
const isSplitStep = (step, selection, uiEvent) => {
|
|
48
49
|
var _a, _b, _c, _d;
|
|
49
50
|
const { from, to, slice } = step;
|
|
@@ -88,7 +89,6 @@ exports.isLiftStep = isLiftStep;
|
|
|
88
89
|
function stepIsLift(gap, node, to) {
|
|
89
90
|
return gap.start < gap.end && gap.insert === 0 && gap.end === to && !node.isText;
|
|
90
91
|
}
|
|
91
|
-
exports.stepIsLift = stepIsLift;
|
|
92
92
|
const trFromHistory = (tr) => Object.keys(tr.meta).find((s) => s.startsWith('history$'));
|
|
93
93
|
exports.trFromHistory = trFromHistory;
|
|
94
94
|
const HasMoveOperations = (tr) => {
|
package/dist/cjs/utils/uuidv4.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.uuidv4 =
|
|
3
|
+
exports.uuidv4 = uuidv4;
|
|
4
4
|
function uuidv4() {
|
|
5
5
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
6
6
|
const r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;
|
|
7
7
|
return v.toString(16);
|
|
8
8
|
});
|
|
9
9
|
}
|
|
10
|
-
exports.uuidv4 = uuidv4;
|
package/dist/es/actions.js
CHANGED
|
@@ -6,6 +6,7 @@ export var TrackChangesAction;
|
|
|
6
6
|
TrackChangesAction["setChangeStatuses"] = "track-changes-set-change-statuses";
|
|
7
7
|
TrackChangesAction["refreshChanges"] = "track-changes-refresh-changes";
|
|
8
8
|
TrackChangesAction["updateMetaNode"] = "track-changes-update-meta-node";
|
|
9
|
+
TrackChangesAction["indentationAction"] = "track-changes-indentation-action";
|
|
9
10
|
})(TrackChangesAction || (TrackChangesAction = {}));
|
|
10
11
|
export function hasAction(tr) {
|
|
11
12
|
return Object.values(TrackChangesAction).some((action) => !!tr.getMeta(action));
|
|
@@ -46,7 +46,10 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema,
|
|
|
46
46
|
}
|
|
47
47
|
const nodeAtMappedPos = newTr.doc.nodeAt(mapping.map(c.pos));
|
|
48
48
|
const nodeWasAlreadyDeleted = !nodeAtMappedPos || nodeAtMappedPos !== c.node;
|
|
49
|
-
|
|
49
|
+
const isMoveOperation = !!emptyAttrs.moveNodeId;
|
|
50
|
+
if ((isInserted && deletesCounter > 1 && !isMoveOperation) ||
|
|
51
|
+
(childOfDeleted && prevDeletedNodeInserted) ||
|
|
52
|
+
nodeWasAlreadyDeleted) {
|
|
50
53
|
return false;
|
|
51
54
|
}
|
|
52
55
|
deleteOrSetNodeDeleted(c.node, mapping.map(c.pos), newTr, deleteAttrs);
|
|
@@ -5,7 +5,22 @@ import { mergeNode } from '../mutate/mergeNode';
|
|
|
5
5
|
import { CHANGE_OPERATION, CHANGE_STATUS } from '../types/change';
|
|
6
6
|
import { log } from '../utils/logger';
|
|
7
7
|
import { revertSplitNodeChange, revertWrapNodeChange } from './revertChange';
|
|
8
|
-
import { updateChangeChildrenAttributes } from './updateChangeAttrs';
|
|
8
|
+
import { restoreNode, updateChangeChildrenAttributes } from './updateChangeAttrs';
|
|
9
|
+
function collectMoveNodeIds(containerNode, primaryMoveNodeId) {
|
|
10
|
+
const moveNodeIds = new Set();
|
|
11
|
+
moveNodeIds.add(primaryMoveNodeId);
|
|
12
|
+
containerNode.descendants((childNode) => {
|
|
13
|
+
const dataTracked = childNode.attrs.dataTracked;
|
|
14
|
+
if (Array.isArray(dataTracked)) {
|
|
15
|
+
dataTracked.forEach((trackingData) => {
|
|
16
|
+
if (trackingData.moveNodeId) {
|
|
17
|
+
moveNodeIds.add(trackingData.moveNodeId);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return moveNodeIds;
|
|
23
|
+
}
|
|
9
24
|
export function getUpdatedDataTracked(dataTracked, changeId) {
|
|
10
25
|
if (!dataTracked) {
|
|
11
26
|
return null;
|
|
@@ -25,6 +40,9 @@ export function applyAcceptedRejectedChanges(tr, schema, changes, changeSet, del
|
|
|
25
40
|
if (change.dataTracked.operation === CHANGE_OPERATION.move) {
|
|
26
41
|
return;
|
|
27
42
|
}
|
|
43
|
+
if (change.dataTracked.operation === CHANGE_OPERATION.delete && change.dataTracked.moveNodeId) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
28
46
|
const { pos: from, deleted } = deleteMap.mapResult(change.from);
|
|
29
47
|
const node = tr.doc.nodeAt(from);
|
|
30
48
|
const noChangeNeeded = !ChangeSet.shouldDeleteChange(change);
|
|
@@ -90,25 +108,49 @@ export function applyAcceptedRejectedChanges(tr, schema, changes, changeSet, del
|
|
|
90
108
|
return;
|
|
91
109
|
}
|
|
92
110
|
if (change.dataTracked.status === CHANGE_STATUS.accepted) {
|
|
93
|
-
const
|
|
111
|
+
const attrs = Object.assign(Object.assign({}, node.attrs), { dataTracked: getUpdatedDataTracked(node.attrs.dataTracked, change.id) });
|
|
112
|
+
tr.setNodeMarkup(from, undefined, attrs, node.marks);
|
|
113
|
+
const originalChanges = changeSet.changes.filter((c) => c.dataTracked.moveNodeId === change.dataTracked.moveNodeId &&
|
|
94
114
|
c.dataTracked.operation === CHANGE_OPERATION.delete);
|
|
95
|
-
if (
|
|
96
|
-
|
|
115
|
+
if (originalChanges.length === 0) {
|
|
116
|
+
log.warn('No original change found for move operation', { change });
|
|
117
|
+
}
|
|
118
|
+
originalChanges.forEach((originalChange) => {
|
|
119
|
+
const { pos: originalFrom, deleted } = deleteMap.mapResult(originalChange.from);
|
|
120
|
+
if (deleted) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
97
123
|
const originalNode = tr.doc.nodeAt(originalFrom);
|
|
98
|
-
const attrs = Object.assign(Object.assign({}, node.attrs), { dataTracked: getUpdatedDataTracked(node.attrs.dataTracked, change.id) });
|
|
99
|
-
tr.setNodeMarkup(from, undefined, attrs, node.marks);
|
|
100
124
|
if (originalNode) {
|
|
101
125
|
tr.delete(originalFrom, originalFrom + originalNode.nodeSize);
|
|
102
126
|
deleteMap.appendMap(tr.steps[tr.steps.length - 1].getMap());
|
|
103
127
|
}
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
log.warn('No original change found for move operation', { change });
|
|
107
|
-
}
|
|
128
|
+
});
|
|
108
129
|
}
|
|
109
130
|
else if (change.dataTracked.status === CHANGE_STATUS.rejected) {
|
|
131
|
+
const moveNodeIdsToRestore = collectMoveNodeIds(node, change.dataTracked.moveNodeId);
|
|
110
132
|
tr.delete(from, from + node.nodeSize);
|
|
111
133
|
deleteMap.appendMap(tr.steps[tr.steps.length - 1].getMap());
|
|
134
|
+
changeSet.changes
|
|
135
|
+
.filter((c) => c.dataTracked.operation === CHANGE_OPERATION.delete &&
|
|
136
|
+
c.dataTracked.moveNodeId &&
|
|
137
|
+
moveNodeIdsToRestore.has(c.dataTracked.moveNodeId) &&
|
|
138
|
+
ChangeSet.isNodeChange(c))
|
|
139
|
+
.forEach((orig) => {
|
|
140
|
+
const { pos } = deleteMap.mapResult(orig.from);
|
|
141
|
+
const node = tr.doc.nodeAt(pos);
|
|
142
|
+
if (!node) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const dataTracked = node.attrs.dataTracked || [];
|
|
146
|
+
const hasMoved = dataTracked.some((d) => d.operation === CHANGE_OPERATION.move && d.status === CHANGE_STATUS.pending);
|
|
147
|
+
if (hasMoved) {
|
|
148
|
+
tr.delete(pos, pos + node.nodeSize);
|
|
149
|
+
deleteMap.appendMap(tr.steps[tr.steps.length - 1].getMap());
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
restoreNode(tr, node, pos, schema);
|
|
153
|
+
});
|
|
112
154
|
}
|
|
113
155
|
});
|
|
114
156
|
return deleteMap;
|
|
@@ -79,3 +79,9 @@ export function updateChangeChildrenAttributes(changes, tr, mapping) {
|
|
|
79
79
|
}
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
|
+
export function restoreNode(tr, node, pos, schema) {
|
|
83
|
+
const updatedAttrs = Object.assign(Object.assign({}, node.attrs), { dataTracked: null });
|
|
84
|
+
tr.setNodeMarkup(pos, undefined, updatedAttrs, node.marks);
|
|
85
|
+
tr.removeMark(pos, pos + node.nodeSize, schema.marks.tracked_insert);
|
|
86
|
+
tr.removeMark(pos, pos + node.nodeSize, schema.marks.tracked_delete);
|
|
87
|
+
}
|
|
@@ -56,10 +56,10 @@ export function setFragmentAsWrapChange(inserted, attrs, schema) {
|
|
|
56
56
|
});
|
|
57
57
|
return Fragment.from(content);
|
|
58
58
|
}
|
|
59
|
-
export function setFragmentAsMoveChange(fragment,
|
|
59
|
+
export function setFragmentAsMoveChange(fragment, moveAttrs) {
|
|
60
60
|
const content = [];
|
|
61
61
|
fragment.forEach((node) => {
|
|
62
|
-
content.push(node.type.create(Object.assign(Object.assign({}, node.attrs), { dataTracked: [addTrackIdIfDoesntExist(
|
|
62
|
+
content.push(node.type.create(Object.assign(Object.assign({}, node.attrs), { dataTracked: [addTrackIdIfDoesntExist(moveAttrs)] }), node.content, node.marks));
|
|
63
63
|
});
|
|
64
64
|
return Fragment.from(content);
|
|
65
65
|
}
|
package/dist/es/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { trackChangesPluginKey, trackChangesPlugin } from './plugin';
|
|
2
|
-
export { skipTracking } from './actions';
|
|
2
|
+
export { skipTracking, setAction, TrackChangesAction } from './actions';
|
|
3
3
|
export * as trackCommands from './commands';
|
|
4
4
|
export { enableDebug } from './utils/logger';
|
|
5
5
|
export { ChangeSet } from './ChangeSet';
|
|
@@ -19,6 +19,7 @@ export function deleteOrSetNodeDeleted(node, pos, newTr, deleteAttrs) {
|
|
|
19
19
|
const inserted = dataTracked === null || dataTracked === void 0 ? void 0 : dataTracked.find((d) => (d.operation === CHANGE_OPERATION.insert || d.operation === CHANGE_OPERATION.wrap_with_node) &&
|
|
20
20
|
(d.status === CHANGE_STATUS.pending || d.status === CHANGE_STATUS.accepted));
|
|
21
21
|
const updated = dataTracked === null || dataTracked === void 0 ? void 0 : dataTracked.find((d) => d.operation === CHANGE_OPERATION.set_node_attributes || d.operation === CHANGE_OPERATION.reference);
|
|
22
|
+
const moved = dataTracked === null || dataTracked === void 0 ? void 0 : dataTracked.find((d) => d.operation === CHANGE_OPERATION.move && d.status === CHANGE_STATUS.pending);
|
|
22
23
|
if (inserted) {
|
|
23
24
|
return deleteNode(node, pos, newTr);
|
|
24
25
|
}
|
|
@@ -31,5 +32,5 @@ export function deleteOrSetNodeDeleted(node, pos, newTr, deleteAttrs) {
|
|
|
31
32
|
return;
|
|
32
33
|
}
|
|
33
34
|
const newDeleted = addTrackIdIfDoesntExist(deleteAttrs);
|
|
34
|
-
newTr.setNodeMarkup(pos, undefined, Object.assign(Object.assign({}, node.attrs), { dataTracked: updated ? [newDeleted, updated] : [newDeleted] }), node.marks);
|
|
35
|
+
newTr.setNodeMarkup(pos, undefined, Object.assign(Object.assign({}, node.attrs), { dataTracked: updated ? [newDeleted, updated] : moved ? [newDeleted, moved] : [newDeleted] }), node.marks);
|
|
35
36
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Slice } from 'prosemirror-model';
|
|
2
|
+
import { getAction, TrackChangesAction } from '../actions';
|
|
2
3
|
import { setFragmentAsInserted, setFragmentAsMoveChange, setFragmentAsNodeSplit, } from '../compute/setFragmentAsInserted';
|
|
3
4
|
import { deleteAndMergeSplitNodes } from '../mutate/deleteAndMergeSplitNodes';
|
|
4
5
|
import { log } from '../utils/logger';
|
|
@@ -14,7 +15,7 @@ export function trackReplaceStep(step, oldState, newTr, attrsTemplate, stepResul
|
|
|
14
15
|
attrs.moveNodeId = moveID;
|
|
15
16
|
}
|
|
16
17
|
step.getMap().forEach((fromA, toA, fromB, toB) => {
|
|
17
|
-
var _a, _b, _c;
|
|
18
|
+
var _a, _b, _c, _d;
|
|
18
19
|
log.info(`changed ranges: ${fromA} ${toA} ${fromB} ${toB}`);
|
|
19
20
|
const { slice } = step;
|
|
20
21
|
log.info('TR: steps before applying delete', [...newTr.steps]);
|
|
@@ -45,12 +46,13 @@ export function trackReplaceStep(step, oldState, newTr, attrsTemplate, stepResul
|
|
|
45
46
|
fragment = setFragmentAsNodeSplit(newTr.doc.resolve(step.from), newTr, fragment, attrs);
|
|
46
47
|
}
|
|
47
48
|
if (moveID) {
|
|
48
|
-
|
|
49
|
+
const indentationType = (_a = getAction(tr, TrackChangesAction.indentationAction)) === null || _a === void 0 ? void 0 : _a.action;
|
|
50
|
+
fragment = setFragmentAsMoveChange(newSliceContent, trackUtils.createNewMoveAttrs(attrs, indentationType));
|
|
49
51
|
}
|
|
50
52
|
const openStart = slice.openStart !== slice.openEnd ? 0 : slice.openStart;
|
|
51
53
|
const openEnd = slice.openStart !== slice.openEnd ? 0 : slice.openEnd;
|
|
52
54
|
const textWasDeleted = !!changeSteps.length && !(fromA === fromB);
|
|
53
|
-
const isBlock = !!((
|
|
55
|
+
const isBlock = !!((_b = fragment.firstChild) === null || _b === void 0 ? void 0 : _b.isBlock);
|
|
54
56
|
changeSteps.push({
|
|
55
57
|
type: 'insert-slice',
|
|
56
58
|
from: textWasDeleted ? fromB : isBlock ? toA : fromA,
|
|
@@ -60,8 +62,8 @@ export function trackReplaceStep(step, oldState, newTr, attrsTemplate, stepResul
|
|
|
60
62
|
});
|
|
61
63
|
}
|
|
62
64
|
else {
|
|
63
|
-
const isDeleteEvent = ((
|
|
64
|
-
const isDeleteContentForward = ((
|
|
65
|
+
const isDeleteEvent = ((_c = window.event) === null || _c === void 0 ? void 0 : _c.code) === 'Delete';
|
|
66
|
+
const isDeleteContentForward = ((_d = window.event) === null || _d === void 0 ? void 0 : _d.inputType) === 'deleteContentForward';
|
|
65
67
|
selectionPos = isDeleteEvent || isDeleteContentForward ? toA : fromA;
|
|
66
68
|
}
|
|
67
69
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { NodeSelection as NodeSelectionClass, TextSelection, } from 'prosemirror-state';
|
|
2
2
|
import { AddMarkStep, AttrStep, Mapping, ReplaceAroundStep, ReplaceStep, } from 'prosemirror-transform';
|
|
3
|
+
import { getAction, TrackChangesAction } from '../actions';
|
|
3
4
|
import { diffChangeSteps } from '../change-steps/diffChangeSteps';
|
|
4
5
|
import { processChangeSteps } from '../change-steps/processChangeSteps';
|
|
5
6
|
import { updateChangeAttrs } from '../changes/updateChangeAttrs';
|
|
@@ -15,7 +16,7 @@ import { trackReplaceStep } from './trackReplaceStep';
|
|
|
15
16
|
const getSelectionStaticConstructor = (sel) => Object.getPrototypeOf(sel).constructor;
|
|
16
17
|
const isHighlightMarkerNode = (node) => node && node.type === node.type.schema.nodes.highlight_marker;
|
|
17
18
|
export function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
18
|
-
var _a, _b, _c, _d, _e;
|
|
19
|
+
var _a, _b, _c, _d, _e, _f;
|
|
19
20
|
const emptyAttrs = {
|
|
20
21
|
authorID,
|
|
21
22
|
reviewedByID: null,
|
|
@@ -24,13 +25,23 @@ export function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
24
25
|
statusUpdateAt: 0,
|
|
25
26
|
status: CHANGE_STATUS.pending,
|
|
26
27
|
};
|
|
28
|
+
const action = (_a = getAction(tr, TrackChangesAction.indentationAction)) === null || _a === void 0 ? void 0 : _a.action;
|
|
29
|
+
const isIndentation = action === 'indent' || action === 'unindent';
|
|
27
30
|
const wasNodeSelection = tr.selection instanceof NodeSelectionClass;
|
|
28
31
|
const setsNewSelection = tr.selectionSet;
|
|
29
32
|
const deletedNodeMapping = new Mapping();
|
|
30
33
|
let iters = 0;
|
|
31
34
|
log.info('ORIGINAL transaction', tr);
|
|
32
35
|
let trContext = {};
|
|
33
|
-
|
|
36
|
+
let movingStepsAssociated = HasMoveOperations(tr);
|
|
37
|
+
if (isIndentation) {
|
|
38
|
+
const moveId = uuidv4();
|
|
39
|
+
tr.steps.forEach((step) => {
|
|
40
|
+
if (step instanceof ReplaceStep) {
|
|
41
|
+
movingStepsAssociated.set(step, moveId);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
34
45
|
handleDirectPendingMoveDeletions(tr, newTr, movingStepsAssociated);
|
|
35
46
|
const cleanSteps = filterMeaninglessMoveSteps(tr, movingStepsAssociated);
|
|
36
47
|
for (let i = cleanSteps.length - 1; i >= 0; i--) {
|
|
@@ -51,7 +62,7 @@ export function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
51
62
|
}
|
|
52
63
|
else if (step instanceof ReplaceStep) {
|
|
53
64
|
const { slice } = step;
|
|
54
|
-
if (((
|
|
65
|
+
if (((_c = (_b = slice === null || slice === void 0 ? void 0 : slice.content) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.length) === 1 && isHighlightMarkerNode(slice.content.content[0])) {
|
|
55
66
|
continue;
|
|
56
67
|
}
|
|
57
68
|
const invertedStep = step.invert(tr.docs[i]);
|
|
@@ -65,7 +76,7 @@ export function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
65
76
|
let [steps, startPos] = trackReplaceStep(step, oldState, newTr, emptyAttrs, stepResult, tr.docs[i], tr, movingStepsAssociated.get(step));
|
|
66
77
|
if (steps.length === 1) {
|
|
67
78
|
const step = steps[0];
|
|
68
|
-
if (isHighlightMarkerNode((step === null || step === void 0 ? void 0 : step.node) || ((
|
|
79
|
+
if (isHighlightMarkerNode((step === null || step === void 0 ? void 0 : step.node) || ((_e = (_d = step === null || step === void 0 ? void 0 : step.slice) === null || _d === void 0 ? void 0 : _d.content) === null || _e === void 0 ? void 0 : _e.content[0]))) {
|
|
69
80
|
continue;
|
|
70
81
|
}
|
|
71
82
|
}
|
|
@@ -98,7 +109,7 @@ export function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
|
98
109
|
const [mapping, selectionPos] = processChangeSteps(changeSteps, tr.selection.from, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
|
|
99
110
|
}
|
|
100
111
|
else if (step instanceof AddMarkStep) {
|
|
101
|
-
const dataTracked = (
|
|
112
|
+
const dataTracked = (_f = getNodeTrackedData(newTr.doc.nodeAt(step.from), oldState.schema)) === null || _f === void 0 ? void 0 : _f.pop();
|
|
102
113
|
if (dataTracked) {
|
|
103
114
|
updateChangeAttrs(newTr, { id: dataTracked.id, from: step.from, to: step.to, type: 'text-change', dataTracked }, Object.assign(Object.assign({}, dataTracked), { id: uuidv4() }), oldState.schema);
|
|
104
115
|
}
|
|
@@ -27,8 +27,8 @@ export function createNewReferenceAttrs(attrs, id) {
|
|
|
27
27
|
export function createNewDeleteAttrs(attrs) {
|
|
28
28
|
return Object.assign(Object.assign({}, attrs), { operation: CHANGE_OPERATION.delete });
|
|
29
29
|
}
|
|
30
|
-
export function createNewMoveAttrs(attrs) {
|
|
31
|
-
return Object.assign(Object.assign({}, attrs), { operation: CHANGE_OPERATION.move });
|
|
30
|
+
export function createNewMoveAttrs(attrs, indentationType) {
|
|
31
|
+
return Object.assign(Object.assign(Object.assign({}, attrs), { operation: CHANGE_OPERATION.move }), (indentationType && { indentationType }));
|
|
32
32
|
}
|
|
33
33
|
export function createNewUpdateAttrs(attrs, oldAttrs) {
|
|
34
34
|
const { dataTracked } = oldAttrs, restAttrs = __rest(oldAttrs, ["dataTracked"]);
|
|
@@ -7,10 +7,10 @@ export declare class ChangeSet {
|
|
|
7
7
|
get changeTree(): TrackedChange[];
|
|
8
8
|
get groupChanges(): TrackedChange[][];
|
|
9
9
|
get pending(): TrackedChange[];
|
|
10
|
-
get textChanges():
|
|
11
|
-
get nodeChanges():
|
|
12
|
-
get nodeAttrChanges():
|
|
13
|
-
get bothNodeChanges():
|
|
10
|
+
get textChanges(): TextChange[];
|
|
11
|
+
get nodeChanges(): NodeChange[];
|
|
12
|
+
get nodeAttrChanges(): NodeAttrChange[];
|
|
13
|
+
get bothNodeChanges(): (NodeChange | NodeAttrChange | ReferenceChange)[];
|
|
14
14
|
get isEmpty(): boolean;
|
|
15
15
|
get hasInconsistentData(): boolean;
|
|
16
16
|
get hasDuplicateIds(): boolean;
|
package/dist/types/actions.d.ts
CHANGED
|
@@ -7,7 +7,8 @@ export declare enum TrackChangesAction {
|
|
|
7
7
|
setPluginStatus = "track-changes-set-track-status",
|
|
8
8
|
setChangeStatuses = "track-changes-set-change-statuses",
|
|
9
9
|
refreshChanges = "track-changes-refresh-changes",
|
|
10
|
-
updateMetaNode = "track-changes-update-meta-node"
|
|
10
|
+
updateMetaNode = "track-changes-update-meta-node",
|
|
11
|
+
indentationAction = "track-changes-indentation-action"
|
|
11
12
|
}
|
|
12
13
|
export type TrackChangesActionParams = {
|
|
13
14
|
[TrackChangesAction.skipTrack]: boolean;
|
|
@@ -19,6 +20,9 @@ export type TrackChangesActionParams = {
|
|
|
19
20
|
};
|
|
20
21
|
[TrackChangesAction.refreshChanges]: boolean;
|
|
21
22
|
[TrackChangesAction.updateMetaNode]: boolean;
|
|
23
|
+
[TrackChangesAction.indentationAction]: {
|
|
24
|
+
action: 'indent' | 'unindent';
|
|
25
|
+
};
|
|
22
26
|
};
|
|
23
27
|
export declare function hasAction(tr: Transaction): boolean;
|
|
24
28
|
export declare function getAction<K extends keyof TrackChangesActionParams>(tr: Transaction, action: K): TrackChangesActionParams[K] | undefined;
|
|
@@ -4,3 +4,4 @@ import { Mapping } from 'prosemirror-transform';
|
|
|
4
4
|
import { IncompleteChange, TrackedAttrs, TrackedChange } from '../types/change';
|
|
5
5
|
export declare function updateChangeAttrs(tr: Transaction, change: IncompleteChange, trackedAttrs: Partial<TrackedAttrs>, schema: Schema): Transaction;
|
|
6
6
|
export declare function updateChangeChildrenAttributes(changes: TrackedChange[], tr: Transaction, mapping: Mapping): void;
|
|
7
|
+
export declare function restoreNode(tr: Transaction, node: any, pos: number, schema: Schema): void;
|