@manuscripts/track-changes-plugin 1.10.9-LEAN-4634.1 → 1.10.9

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