@atlaskit/editor-plugin-show-diff 14.0.4 → 14.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/cjs/pm-plugins/calculateDiff/calculateDiffDecorations.js +215 -103
- package/dist/cjs/pm-plugins/calculateDiff/diffBySteps.js +20 -9
- package/dist/cjs/pm-plugins/calculateDiff/simplifyChangesWithAttribution.js +89 -0
- package/dist/cjs/pm-plugins/calculateDiff/simplifySteps.js +81 -4
- package/dist/cjs/pm-plugins/decorations/colorSchemes/attributions.js +68 -0
- package/dist/cjs/pm-plugins/decorations/colorSchemes/schemes.js +26 -2
- package/dist/cjs/pm-plugins/decorations/colorSchemes/types.js +5 -1
- package/dist/cjs/pm-plugins/decorations/createBlockChangedDecoration.js +7 -2
- package/dist/cjs/pm-plugins/decorations/createChangedRowDecorationWidgets.js +2 -2
- package/dist/cjs/pm-plugins/decorations/createInlineChangedDecoration.js +4 -2
- package/dist/cjs/pm-plugins/decorations/utils/getAttrChangeRanges.js +59 -30
- package/dist/cjs/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.js +14 -10
- package/dist/cjs/pm-plugins/main.js +1 -0
- package/dist/cjs/showDiffPlugin.js +36 -14
- package/dist/es2019/pm-plugins/calculateDiff/calculateDiffDecorations.js +130 -22
- package/dist/es2019/pm-plugins/calculateDiff/diffBySteps.js +17 -9
- package/dist/es2019/pm-plugins/calculateDiff/simplifyChangesWithAttribution.js +64 -0
- package/dist/es2019/pm-plugins/calculateDiff/simplifySteps.js +64 -1
- package/dist/es2019/pm-plugins/decorations/colorSchemes/attributions.js +37 -0
- package/dist/es2019/pm-plugins/decorations/colorSchemes/schemes.js +19 -2
- package/dist/es2019/pm-plugins/decorations/colorSchemes/types.js +1 -0
- package/dist/es2019/pm-plugins/decorations/createBlockChangedDecoration.js +6 -3
- package/dist/es2019/pm-plugins/decorations/createChangedRowDecorationWidgets.js +3 -3
- package/dist/es2019/pm-plugins/decorations/createInlineChangedDecoration.js +6 -3
- package/dist/es2019/pm-plugins/decorations/utils/getAttrChangeRanges.js +55 -30
- package/dist/es2019/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.js +12 -9
- package/dist/es2019/pm-plugins/main.js +1 -0
- package/dist/es2019/showDiffPlugin.js +23 -1
- package/dist/esm/pm-plugins/calculateDiff/calculateDiffDecorations.js +216 -104
- package/dist/esm/pm-plugins/calculateDiff/diffBySteps.js +20 -9
- package/dist/esm/pm-plugins/calculateDiff/simplifyChangesWithAttribution.js +82 -0
- package/dist/esm/pm-plugins/calculateDiff/simplifySteps.js +79 -5
- package/dist/esm/pm-plugins/decorations/colorSchemes/attributions.js +61 -0
- package/dist/esm/pm-plugins/decorations/colorSchemes/schemes.js +24 -1
- package/dist/esm/pm-plugins/decorations/colorSchemes/types.js +1 -0
- package/dist/esm/pm-plugins/decorations/createBlockChangedDecoration.js +8 -3
- package/dist/esm/pm-plugins/decorations/createChangedRowDecorationWidgets.js +3 -3
- package/dist/esm/pm-plugins/decorations/createInlineChangedDecoration.js +5 -3
- package/dist/esm/pm-plugins/decorations/utils/getAttrChangeRanges.js +59 -30
- package/dist/esm/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.js +14 -9
- package/dist/esm/pm-plugins/main.js +1 -0
- package/dist/esm/showDiffPlugin.js +36 -14
- package/dist/types/entry-points/show-diff-plugin-type.d.ts +1 -1
- package/dist/types/pm-plugins/calculateDiff/diffBySteps.d.ts +2 -1
- package/dist/types/pm-plugins/calculateDiff/simplifyChangesWithAttribution.d.ts +7 -0
- package/dist/types/pm-plugins/calculateDiff/simplifySteps.d.ts +10 -0
- package/dist/types/pm-plugins/decorations/colorSchemes/attributions.d.ts +12 -0
- package/dist/types/pm-plugins/decorations/colorSchemes/schemes.d.ts +5 -3
- package/dist/types/pm-plugins/decorations/colorSchemes/types.d.ts +6 -1
- package/dist/types/pm-plugins/decorations/createBlockChangedDecoration.d.ts +2 -1
- package/dist/types/pm-plugins/decorations/createChangedRowDecorationWidgets.d.ts +2 -1
- package/dist/types/pm-plugins/decorations/createInlineChangedDecoration.d.ts +2 -1
- package/dist/types/pm-plugins/decorations/createNodeChangedDecorationWidget.d.ts +2 -1
- package/dist/types/pm-plugins/decorations/utils/getAttrChangeRanges.d.ts +12 -2
- package/dist/types/pm-plugins/decorations/utils/wrapBlockNodeView.d.ts +2 -1
- package/dist/types/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.d.ts +2 -1
- package/dist/types/pm-plugins/main.d.ts +3 -1
- package/dist/types/showDiffPluginType.d.ts +29 -1
- package/package.json +10 -7
|
@@ -11,6 +11,7 @@ import memoizeOne from 'memoize-one';
|
|
|
11
11
|
import { ChangeSet, simplifyChanges } from 'prosemirror-changeset';
|
|
12
12
|
import { isExperimentEnabled } from '@atlaskit/editor-common/deprecated-platform-feature-experiments';
|
|
13
13
|
import { areNodesEqualIgnoreAttrs } from '@atlaskit/editor-common/utils/document';
|
|
14
|
+
import { Mapping } from '@atlaskit/editor-prosemirror/transform';
|
|
14
15
|
import { DecorationSet } from '@atlaskit/editor-prosemirror/view';
|
|
15
16
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
16
17
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
@@ -19,6 +20,7 @@ import { createDocMarginAnchorWidget } from '../decorations/createAnchorDecorati
|
|
|
19
20
|
import { createBlockChangedDecoration } from '../decorations/createBlockChangedDecoration';
|
|
20
21
|
import { createInlineChangedDecoration } from '../decorations/createInlineChangedDecoration';
|
|
21
22
|
import { createNodeChangedDecorationWidget } from '../decorations/createNodeChangedDecorationWidget';
|
|
23
|
+
import { createAttributionColorMap, getAttributionKey, getColorSchemeForChange, isAttributionColoringEnabled } from '../decorations/colorSchemes/attributions';
|
|
22
24
|
import { extractDiffDescriptors } from '../decorations/decorationKeys';
|
|
23
25
|
import { getAttrChangeRanges, stepIsValidAttrChange } from '../decorations/utils/getAttrChangeRanges';
|
|
24
26
|
import { getMarkChangeRanges } from '../decorations/utils/getMarkChangeRanges';
|
|
@@ -27,7 +29,8 @@ import { attrAwareTokenEncoder } from './attrAwareTokenEncoder';
|
|
|
27
29
|
import { diffBySteps } from './diffBySteps';
|
|
28
30
|
import { groupChangesByBlock } from './groupChangesByBlock';
|
|
29
31
|
import { optimizeChanges } from './optimizeChanges';
|
|
30
|
-
import {
|
|
32
|
+
import { simplifyChangesWithAttribution } from './simplifyChangesWithAttribution';
|
|
33
|
+
import { simplifySteps, simplifyStepsWithAttribution } from './simplifySteps';
|
|
31
34
|
import { classifySmartChanges } from './smart/classifySmartChanges';
|
|
32
35
|
import { smartChangeLevel } from './smart/helpers';
|
|
33
36
|
var getChanges = function getChanges(_ref) {
|
|
@@ -65,6 +68,34 @@ var getChanges = function getChanges(_ref) {
|
|
|
65
68
|
var changes = simplifyChanges(changeset.changes, tr.doc);
|
|
66
69
|
return optimizeChanges(changes);
|
|
67
70
|
};
|
|
71
|
+
var getAttributedChanges = function getAttributedChanges(_ref2) {
|
|
72
|
+
var attributedChanges = _ref2.attributedChanges,
|
|
73
|
+
changeset = _ref2.changeset,
|
|
74
|
+
originalDoc = _ref2.originalDoc,
|
|
75
|
+
steppedDoc = _ref2.steppedDoc,
|
|
76
|
+
diffType = _ref2.diffType,
|
|
77
|
+
tr = _ref2.tr,
|
|
78
|
+
intl = _ref2.intl,
|
|
79
|
+
smartThresholds = _ref2.smartThresholds;
|
|
80
|
+
if (isExtendedEnabled(diffType)) {
|
|
81
|
+
if (diffType === 'smart' && fg('platform_editor_ai_smart_diff')) {
|
|
82
|
+
return classifySmartChanges({
|
|
83
|
+
changes: simplifyChangesWithAttribution(attributedChanges, tr.doc),
|
|
84
|
+
originalDoc: originalDoc,
|
|
85
|
+
newDoc: tr.doc,
|
|
86
|
+
locale: intl.locale,
|
|
87
|
+
thresholds: smartThresholds
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (diffType === 'step') {
|
|
91
|
+
return attributedChanges;
|
|
92
|
+
}
|
|
93
|
+
if (diffType === 'block') {
|
|
94
|
+
return groupChangesByBlock(changeset.changes, originalDoc, steppedDoc);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return simplifyChangesWithAttribution(attributedChanges, tr.doc);
|
|
98
|
+
};
|
|
68
99
|
|
|
69
100
|
/**
|
|
70
101
|
* Collect the inline-content ranges of every leaf text-bearing block (paragraph, heading, …)
|
|
@@ -123,28 +154,28 @@ var tableRanges = function tableRanges(doc, from, to) {
|
|
|
123
154
|
return ranges;
|
|
124
155
|
};
|
|
125
156
|
var isInsideTable = function isInsideTable(tables, pos) {
|
|
126
|
-
return tables.some(function (
|
|
127
|
-
var
|
|
128
|
-
tFrom =
|
|
129
|
-
tTo =
|
|
157
|
+
return tables.some(function (_ref3) {
|
|
158
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
159
|
+
tFrom = _ref4[0],
|
|
160
|
+
tTo = _ref4[1];
|
|
130
161
|
return pos >= tFrom && pos < tTo;
|
|
131
162
|
});
|
|
132
163
|
};
|
|
133
|
-
var calculateNodesForBlockDecoration = function calculateNodesForBlockDecoration(
|
|
134
|
-
var doc =
|
|
135
|
-
from =
|
|
136
|
-
to =
|
|
137
|
-
colorScheme =
|
|
138
|
-
|
|
139
|
-
isInserted =
|
|
140
|
-
activeIndexPos =
|
|
141
|
-
|
|
142
|
-
shouldHideDeleted =
|
|
143
|
-
|
|
144
|
-
showIndicators =
|
|
145
|
-
diffType =
|
|
146
|
-
|
|
147
|
-
coarseTableCellsOnly =
|
|
164
|
+
var calculateNodesForBlockDecoration = function calculateNodesForBlockDecoration(_ref5) {
|
|
165
|
+
var doc = _ref5.doc,
|
|
166
|
+
from = _ref5.from,
|
|
167
|
+
to = _ref5.to,
|
|
168
|
+
colorScheme = _ref5.colorScheme,
|
|
169
|
+
_ref5$isInserted = _ref5.isInserted,
|
|
170
|
+
isInserted = _ref5$isInserted === void 0 ? true : _ref5$isInserted,
|
|
171
|
+
activeIndexPos = _ref5.activeIndexPos,
|
|
172
|
+
_ref5$shouldHideDelet = _ref5.shouldHideDeleted,
|
|
173
|
+
shouldHideDeleted = _ref5$shouldHideDelet === void 0 ? false : _ref5$shouldHideDelet,
|
|
174
|
+
_ref5$showIndicators = _ref5.showIndicators,
|
|
175
|
+
showIndicators = _ref5$showIndicators === void 0 ? false : _ref5$showIndicators,
|
|
176
|
+
diffType = _ref5.diffType,
|
|
177
|
+
_ref5$coarseTableCell = _ref5.coarseTableCellsOnly,
|
|
178
|
+
coarseTableCellsOnly = _ref5$coarseTableCell === void 0 ? false : _ref5$coarseTableCell;
|
|
148
179
|
var decorations = [];
|
|
149
180
|
// Coarse path: inside the large table, only cell/header overlays are kept — the
|
|
150
181
|
// table/row/paragraph decorations there are redundant and cause expensive per-cell
|
|
@@ -190,10 +221,10 @@ var calculateNodesForBlockDecoration = function calculateNodesForBlockDecoration
|
|
|
190
221
|
*
|
|
191
222
|
* Callers are responsible for the `smart` diffType and gate checks.
|
|
192
223
|
*/
|
|
193
|
-
export var isDeletedContentPlacedBelow = function isDeletedContentPlacedBelow(
|
|
194
|
-
var change =
|
|
195
|
-
deletedDiffPlacement =
|
|
196
|
-
inlineDeletedDiffPlacement =
|
|
224
|
+
export var isDeletedContentPlacedBelow = function isDeletedContentPlacedBelow(_ref6) {
|
|
225
|
+
var change = _ref6.change,
|
|
226
|
+
deletedDiffPlacement = _ref6.deletedDiffPlacement,
|
|
227
|
+
inlineDeletedDiffPlacement = _ref6.inlineDeletedDiffPlacement;
|
|
197
228
|
var level = smartChangeLevel(change);
|
|
198
229
|
if (level === 'node' || level === 'paragraph') {
|
|
199
230
|
return deletedDiffPlacement === 'bottom';
|
|
@@ -202,31 +233,32 @@ export var isDeletedContentPlacedBelow = function isDeletedContentPlacedBelow(_r
|
|
|
202
233
|
// Inline-level (undefined) and sentence-level changes.
|
|
203
234
|
return inlineDeletedDiffPlacement === 'after';
|
|
204
235
|
};
|
|
205
|
-
var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(
|
|
206
|
-
var state =
|
|
207
|
-
pluginState =
|
|
208
|
-
nodeViewSerializer =
|
|
209
|
-
colorScheme =
|
|
210
|
-
intl =
|
|
211
|
-
activeIndexPos =
|
|
212
|
-
api =
|
|
213
|
-
|
|
214
|
-
isInverted =
|
|
215
|
-
|
|
216
|
-
diffType =
|
|
217
|
-
|
|
218
|
-
hideDeletedDiffs =
|
|
219
|
-
|
|
220
|
-
hideAddedDiffsUnderlineParam =
|
|
221
|
-
|
|
222
|
-
showIndicators =
|
|
223
|
-
smartThresholds =
|
|
224
|
-
|
|
225
|
-
deletedDiffPlacement =
|
|
226
|
-
|
|
227
|
-
inlineDeletedDiffPlacement =
|
|
236
|
+
var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref7) {
|
|
237
|
+
var state = _ref7.state,
|
|
238
|
+
pluginState = _ref7.pluginState,
|
|
239
|
+
nodeViewSerializer = _ref7.nodeViewSerializer,
|
|
240
|
+
colorScheme = _ref7.colorScheme,
|
|
241
|
+
intl = _ref7.intl,
|
|
242
|
+
activeIndexPos = _ref7.activeIndexPos,
|
|
243
|
+
api = _ref7.api,
|
|
244
|
+
_ref7$isInverted = _ref7.isInverted,
|
|
245
|
+
isInverted = _ref7$isInverted === void 0 ? false : _ref7$isInverted,
|
|
246
|
+
_ref7$diffType = _ref7.diffType,
|
|
247
|
+
diffType = _ref7$diffType === void 0 ? getDefaultDiffType() : _ref7$diffType,
|
|
248
|
+
_ref7$hideDeletedDiff = _ref7.hideDeletedDiffs,
|
|
249
|
+
hideDeletedDiffs = _ref7$hideDeletedDiff === void 0 ? false : _ref7$hideDeletedDiff,
|
|
250
|
+
_ref7$hideAddedDiffsU = _ref7.hideAddedDiffsUnderline,
|
|
251
|
+
hideAddedDiffsUnderlineParam = _ref7$hideAddedDiffsU === void 0 ? false : _ref7$hideAddedDiffsU,
|
|
252
|
+
_ref7$showIndicators = _ref7.showIndicators,
|
|
253
|
+
showIndicators = _ref7$showIndicators === void 0 ? false : _ref7$showIndicators,
|
|
254
|
+
smartThresholds = _ref7.smartThresholds,
|
|
255
|
+
_ref7$deletedDiffPlac = _ref7.deletedDiffPlacement,
|
|
256
|
+
deletedDiffPlacement = _ref7$deletedDiffPlac === void 0 ? 'top' : _ref7$deletedDiffPlac,
|
|
257
|
+
_ref7$inlineDeletedDi = _ref7.inlineDeletedDiffPlacement,
|
|
258
|
+
inlineDeletedDiffPlacement = _ref7$inlineDeletedDi === void 0 ? 'before' : _ref7$inlineDeletedDi;
|
|
228
259
|
var originalDoc = pluginState.originalDoc,
|
|
229
260
|
steps = pluginState.steps,
|
|
261
|
+
stepAttributions = pluginState.stepAttributions,
|
|
230
262
|
isDisplayingChanges = pluginState.isDisplayingChanges;
|
|
231
263
|
if (!originalDoc || !isDisplayingChanges) {
|
|
232
264
|
return {
|
|
@@ -240,8 +272,23 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
240
272
|
var hideAddedDiffsUnderline = hideAddedDiffsUnderlineParam && fg('platform_editor_ai_smart_diff');
|
|
241
273
|
var tr = state.tr;
|
|
242
274
|
var steppedDoc = originalDoc;
|
|
243
|
-
var
|
|
244
|
-
var simplifiedSteps
|
|
275
|
+
var attributionColoringEnabled = isAttributionColoringEnabled(stepAttributions);
|
|
276
|
+
var simplifiedSteps;
|
|
277
|
+
var simplifiedStepAttributions = [];
|
|
278
|
+
if (attributionColoringEnabled) {
|
|
279
|
+
var simplifiedStepsWithAttribution = simplifyStepsWithAttribution(steps, stepAttributions !== null && stepAttributions !== void 0 ? stepAttributions : [], originalDoc);
|
|
280
|
+
simplifiedSteps = simplifiedStepsWithAttribution.map(function (_ref8) {
|
|
281
|
+
var step = _ref8.step;
|
|
282
|
+
return step;
|
|
283
|
+
});
|
|
284
|
+
simplifiedStepAttributions = simplifiedStepsWithAttribution.map(function (_ref9) {
|
|
285
|
+
var stepAttribution = _ref9.stepAttribution;
|
|
286
|
+
return stepAttribution;
|
|
287
|
+
});
|
|
288
|
+
} else {
|
|
289
|
+
simplifiedSteps = simplifySteps(steps, originalDoc);
|
|
290
|
+
}
|
|
291
|
+
var pendingAttrSteps = [];
|
|
245
292
|
var stepMaps = [];
|
|
246
293
|
var _iterator = _createForOfIteratorHelper(simplifiedSteps),
|
|
247
294
|
_step;
|
|
@@ -251,20 +298,56 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
251
298
|
var result = step.apply(steppedDoc);
|
|
252
299
|
if (result.failed === null && result.doc) {
|
|
253
300
|
if (stepIsValidAttrChange(step, steppedDoc, result.doc)) {
|
|
254
|
-
|
|
301
|
+
pendingAttrSteps.push({
|
|
302
|
+
afterNode: result.doc.nodeAt(step.pos),
|
|
303
|
+
beforeNode: steppedDoc.nodeAt(step.pos),
|
|
304
|
+
mapIndex: stepMaps.length,
|
|
305
|
+
step: step
|
|
306
|
+
});
|
|
255
307
|
}
|
|
256
308
|
stepMaps.push(step.getMap());
|
|
257
309
|
steppedDoc = result.doc;
|
|
258
310
|
}
|
|
259
311
|
}
|
|
260
|
-
|
|
261
|
-
//
|
|
262
|
-
// changes and ignores differences in attributes which don't affect decoration positions
|
|
312
|
+
// Gate the complete attribution fix: mapped positions and step-time nodes are used together.
|
|
313
|
+
// The fallback deliberately preserves the legacy raw-position lookups for rollout safety.
|
|
263
314
|
} catch (err) {
|
|
264
315
|
_iterator.e(err);
|
|
265
316
|
} finally {
|
|
266
317
|
_iterator.f();
|
|
267
318
|
}
|
|
319
|
+
var attrStepContexts = fg('platform_editor_reduce_diff_attr_sensitivity') ? pendingAttrSteps.flatMap(function (_ref0) {
|
|
320
|
+
var afterNode = _ref0.afterNode,
|
|
321
|
+
beforeNode = _ref0.beforeNode,
|
|
322
|
+
mapIndex = _ref0.mapIndex,
|
|
323
|
+
step = _ref0.step;
|
|
324
|
+
var finalPosition = new Mapping(stepMaps.slice(mapIndex + 1)).mapResult(step.pos);
|
|
325
|
+
if (finalPosition.deleted) {
|
|
326
|
+
return [];
|
|
327
|
+
}
|
|
328
|
+
var originalPosition = new Mapping(stepMaps.slice(0, mapIndex)).invert().mapResult(step.pos);
|
|
329
|
+
return [_objectSpread(_objectSpread({
|
|
330
|
+
afterNode: afterNode,
|
|
331
|
+
beforeNode: beforeNode,
|
|
332
|
+
finalPos: finalPosition.pos
|
|
333
|
+
}, originalPosition.deleted ? {} : {
|
|
334
|
+
originalPos: originalPosition.pos
|
|
335
|
+
}), {}, {
|
|
336
|
+
step: step
|
|
337
|
+
})];
|
|
338
|
+
}) : pendingAttrSteps.map(function (_ref1) {
|
|
339
|
+
var step = _ref1.step;
|
|
340
|
+
return {
|
|
341
|
+
afterNode: tr.doc.nodeAt(step.pos),
|
|
342
|
+
beforeNode: originalDoc.nodeAt(step.pos),
|
|
343
|
+
finalPos: step.pos,
|
|
344
|
+
originalPos: step.pos,
|
|
345
|
+
step: step
|
|
346
|
+
};
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
// Rather than using .eq() we use a custom function that only checks for structural
|
|
350
|
+
// changes and ignores differences in attributes which don't affect decoration positions
|
|
268
351
|
if (!areNodesEqualIgnoreAttrs(steppedDoc, tr.doc)) {
|
|
269
352
|
var _api$analytics;
|
|
270
353
|
var recoveredViaContentEquality = areDocsEqualByBlockStructureAndText(steppedDoc, tr.doc);
|
|
@@ -289,17 +372,45 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
289
372
|
// gated with it; other diff types keep the library default so their output is
|
|
290
373
|
// unchanged.
|
|
291
374
|
var tokenEncoder = diffType === 'smart' && fg('platform_editor_ai_smart_diff') ? attrAwareTokenEncoder : undefined;
|
|
292
|
-
var
|
|
293
|
-
var
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
375
|
+
var changes;
|
|
376
|
+
var attributedChanges = [];
|
|
377
|
+
var attributionColors;
|
|
378
|
+
if (attributionColoringEnabled) {
|
|
379
|
+
var changeset = ChangeSet.create(originalDoc, function (left, right) {
|
|
380
|
+
return getAttributionKey(left) === getAttributionKey(right) ? left.stepIndex > right.stepIndex ? left : right :
|
|
381
|
+
// `prosemirror-changeset` uses null as its incompatible-data sentinel even
|
|
382
|
+
// though its public combine callback is typed as returning Data.
|
|
383
|
+
null;
|
|
384
|
+
}, tokenEncoder).addSteps(steppedDoc, stepMaps, simplifiedStepAttributions.map(function (attribution, stepIndex) {
|
|
385
|
+
return _objectSpread(_objectSpread({}, attribution), {}, {
|
|
386
|
+
stepIndex: stepIndex
|
|
387
|
+
});
|
|
388
|
+
}));
|
|
389
|
+
attributedChanges = diffBySteps(originalDoc, simplifiedSteps, simplifiedStepAttributions);
|
|
390
|
+
changes = getAttributedChanges({
|
|
391
|
+
changeset: changeset,
|
|
392
|
+
originalDoc: originalDoc,
|
|
393
|
+
steppedDoc: steppedDoc,
|
|
394
|
+
diffType: diffType,
|
|
395
|
+
tr: tr,
|
|
396
|
+
attributedChanges: attributedChanges,
|
|
397
|
+
intl: intl,
|
|
398
|
+
smartThresholds: smartThresholds
|
|
399
|
+
});
|
|
400
|
+
attributionColors = createAttributionColorMap(simplifiedStepAttributions);
|
|
401
|
+
} else {
|
|
402
|
+
var _changeset = ChangeSet.create(originalDoc, undefined, tokenEncoder).addSteps(steppedDoc, stepMaps, tr.doc);
|
|
403
|
+
changes = getChanges({
|
|
404
|
+
changeset: _changeset,
|
|
405
|
+
originalDoc: originalDoc,
|
|
406
|
+
steppedDoc: steppedDoc,
|
|
407
|
+
diffType: diffType,
|
|
408
|
+
tr: tr,
|
|
409
|
+
steps: simplifiedSteps,
|
|
410
|
+
intl: intl,
|
|
411
|
+
smartThresholds: smartThresholds
|
|
412
|
+
});
|
|
413
|
+
}
|
|
303
414
|
var decorations = [];
|
|
304
415
|
|
|
305
416
|
/**
|
|
@@ -312,6 +423,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
312
423
|
// Our default operations are insertions, so it should match the opposite of isInverted.
|
|
313
424
|
var isInserted = !isInverted;
|
|
314
425
|
var createDecorationsForChange = function createDecorationsForChange(change) {
|
|
426
|
+
var changeColorScheme = attributionColors ? getColorSchemeForChange(change, attributedChanges, attributionColors, colorScheme) : colorScheme;
|
|
315
427
|
var isActive = activeIndexPos && change.fromB === activeIndexPos.from && change.toB === activeIndexPos.to;
|
|
316
428
|
|
|
317
429
|
// Hoisted because it decides BOTH where the deleted widget is anchored and — since the
|
|
@@ -366,7 +478,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
366
478
|
toB: to
|
|
367
479
|
},
|
|
368
480
|
doc: tr.doc,
|
|
369
|
-
colorScheme:
|
|
481
|
+
colorScheme: changeColorScheme,
|
|
370
482
|
isActive: isActive,
|
|
371
483
|
diffType: diffType
|
|
372
484
|
}, isExtendedEnabled(diffType) && {
|
|
@@ -387,7 +499,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
387
499
|
decorations.push.apply(decorations, _toConsumableArray(createInlineChangedDecoration(_objectSpread({
|
|
388
500
|
change: change,
|
|
389
501
|
doc: tr.doc,
|
|
390
|
-
colorScheme:
|
|
502
|
+
colorScheme: changeColorScheme,
|
|
391
503
|
isActive: isActive,
|
|
392
504
|
diffType: diffType
|
|
393
505
|
}, isExtendedEnabled(diffType) && {
|
|
@@ -403,7 +515,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
403
515
|
doc: tr.doc,
|
|
404
516
|
from: change.fromB,
|
|
405
517
|
to: change.toB,
|
|
406
|
-
colorScheme:
|
|
518
|
+
colorScheme: changeColorScheme
|
|
407
519
|
}, isExtendedEnabled(diffType) && {
|
|
408
520
|
isInserted: isInserted,
|
|
409
521
|
shouldHideDeleted: shouldHideDeleted,
|
|
@@ -422,7 +534,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
422
534
|
change: change,
|
|
423
535
|
doc: originalDoc,
|
|
424
536
|
nodeViewSerializer: nodeViewSerializer,
|
|
425
|
-
colorScheme:
|
|
537
|
+
colorScheme: changeColorScheme,
|
|
426
538
|
newDoc: tr.doc,
|
|
427
539
|
intl: intl,
|
|
428
540
|
activeIndexPos: activeIndexPos
|
|
@@ -449,7 +561,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
449
561
|
isInserted: true
|
|
450
562
|
})));
|
|
451
563
|
});
|
|
452
|
-
getAttrChangeRanges(tr.doc,
|
|
564
|
+
getAttrChangeRanges(tr.doc, attrStepContexts, originalDoc).forEach(function (change) {
|
|
453
565
|
if (change.isInline) {
|
|
454
566
|
// Inline nodes (e.g. date, emoji, mention, status) need an inline decoration rather than a block decoration
|
|
455
567
|
var isActive = activeIndexPos && change.fromB === activeIndexPos.from && change.toB === activeIndexPos.to;
|
|
@@ -539,42 +651,42 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref6
|
|
|
539
651
|
};
|
|
540
652
|
export var calculateDiffDecorations = memoizeOne(calculateDiffDecorationsInner,
|
|
541
653
|
// Cache results unless relevant inputs change
|
|
542
|
-
function (
|
|
543
|
-
var
|
|
544
|
-
var
|
|
545
|
-
|
|
546
|
-
pluginState =
|
|
547
|
-
state =
|
|
548
|
-
colorScheme =
|
|
549
|
-
intl =
|
|
550
|
-
activeIndexPos =
|
|
551
|
-
isInverted =
|
|
552
|
-
diffType =
|
|
553
|
-
hideDeletedDiffs =
|
|
554
|
-
hideAddedDiffsUnderline =
|
|
555
|
-
showIndicators =
|
|
556
|
-
smartThresholds =
|
|
557
|
-
deletedDiffPlacement =
|
|
558
|
-
inlineDeletedDiffPlacement =
|
|
559
|
-
var
|
|
560
|
-
|
|
561
|
-
lastPluginState =
|
|
562
|
-
lastState =
|
|
563
|
-
lastColorScheme =
|
|
564
|
-
lastIntl =
|
|
565
|
-
lastActiveIndexPos =
|
|
566
|
-
lastIsInverted =
|
|
567
|
-
lastDiffType =
|
|
568
|
-
lastHideDeletedDiffs =
|
|
569
|
-
lastHideAddedDiffsUnderline =
|
|
570
|
-
lastShowIndicators =
|
|
571
|
-
lastSmartThresholds =
|
|
572
|
-
lastDeletedDiffPlacement =
|
|
573
|
-
lastInlineDeletedDiffPlacement =
|
|
654
|
+
function (_ref10, _ref11) {
|
|
655
|
+
var _ref15;
|
|
656
|
+
var _ref12 = _slicedToArray(_ref10, 1),
|
|
657
|
+
_ref12$ = _ref12[0],
|
|
658
|
+
pluginState = _ref12$.pluginState,
|
|
659
|
+
state = _ref12$.state,
|
|
660
|
+
colorScheme = _ref12$.colorScheme,
|
|
661
|
+
intl = _ref12$.intl,
|
|
662
|
+
activeIndexPos = _ref12$.activeIndexPos,
|
|
663
|
+
isInverted = _ref12$.isInverted,
|
|
664
|
+
diffType = _ref12$.diffType,
|
|
665
|
+
hideDeletedDiffs = _ref12$.hideDeletedDiffs,
|
|
666
|
+
hideAddedDiffsUnderline = _ref12$.hideAddedDiffsUnderline,
|
|
667
|
+
showIndicators = _ref12$.showIndicators,
|
|
668
|
+
smartThresholds = _ref12$.smartThresholds,
|
|
669
|
+
deletedDiffPlacement = _ref12$.deletedDiffPlacement,
|
|
670
|
+
inlineDeletedDiffPlacement = _ref12$.inlineDeletedDiffPlacement;
|
|
671
|
+
var _ref13 = _slicedToArray(_ref11, 1),
|
|
672
|
+
_ref13$ = _ref13[0],
|
|
673
|
+
lastPluginState = _ref13$.pluginState,
|
|
674
|
+
lastState = _ref13$.state,
|
|
675
|
+
lastColorScheme = _ref13$.colorScheme,
|
|
676
|
+
lastIntl = _ref13$.intl,
|
|
677
|
+
lastActiveIndexPos = _ref13$.activeIndexPos,
|
|
678
|
+
lastIsInverted = _ref13$.isInverted,
|
|
679
|
+
lastDiffType = _ref13$.diffType,
|
|
680
|
+
lastHideDeletedDiffs = _ref13$.hideDeletedDiffs,
|
|
681
|
+
lastHideAddedDiffsUnderline = _ref13$.hideAddedDiffsUnderline,
|
|
682
|
+
lastShowIndicators = _ref13$.showIndicators,
|
|
683
|
+
lastSmartThresholds = _ref13$.smartThresholds,
|
|
684
|
+
lastDeletedDiffPlacement = _ref13$.deletedDiffPlacement,
|
|
685
|
+
lastInlineDeletedDiffPlacement = _ref13$.inlineDeletedDiffPlacement;
|
|
574
686
|
var originalDocIsSame = lastPluginState.originalDoc && pluginState.originalDoc && pluginState.originalDoc.eq(lastPluginState.originalDoc);
|
|
575
687
|
if (isExtendedEnabled(diffType)) {
|
|
576
|
-
var
|
|
577
|
-
return (
|
|
688
|
+
var _ref14;
|
|
689
|
+
return (_ref14 = colorScheme === lastColorScheme && intl.locale === lastIntl.locale && isInverted === lastIsInverted && diffType === lastDiffType && isEqual(activeIndexPos, lastActiveIndexPos) && originalDocIsSame && isEqual(pluginState.steps, lastPluginState.steps) && isEqual(pluginState.stepAttributions, lastPluginState.stepAttributions) && state.doc.eq(lastState.doc) && hideDeletedDiffs === lastHideDeletedDiffs && hideAddedDiffsUnderline === lastHideAddedDiffsUnderline && showIndicators === lastShowIndicators && isEqual(smartThresholds, lastSmartThresholds) && deletedDiffPlacement === lastDeletedDiffPlacement && inlineDeletedDiffPlacement === lastInlineDeletedDiffPlacement) !== null && _ref14 !== void 0 ? _ref14 : false;
|
|
578
690
|
}
|
|
579
|
-
return (
|
|
691
|
+
return (_ref15 = originalDocIsSame && isEqual(pluginState.steps, lastPluginState.steps) && isEqual(pluginState.stepAttributions, lastPluginState.stepAttributions) && state.doc.eq(lastState.doc) && colorScheme === lastColorScheme && intl.locale === lastIntl.locale && isEqual(activeIndexPos, lastActiveIndexPos) && hideDeletedDiffs === lastHideDeletedDiffs) !== null && _ref15 !== void 0 ? _ref15 : false;
|
|
580
692
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
1
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
3
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
4
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -8,6 +9,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
8
9
|
import { simplifyChanges, ChangeSet } from 'prosemirror-changeset';
|
|
9
10
|
import { Mark } from '@atlaskit/editor-prosemirror/model';
|
|
10
11
|
import { Mapping, ReplaceStep } from '@atlaskit/editor-prosemirror/transform';
|
|
12
|
+
import { getAttributionKey } from '../decorations/colorSchemes/attributions';
|
|
11
13
|
import { attrAwareTokenEncoder } from './attrAwareTokenEncoder';
|
|
12
14
|
import { optimizeChanges } from './optimizeChanges';
|
|
13
15
|
var WORD_CHAR_REGEX = /(?:[0-9A-Z_a-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD40-\uDD59\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDD40-\uDD65\uDD6F-\uDD85\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC7\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDED0-\uDEE3\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0\uDFF0-\uDFF9]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDDB0-\uDDDB\uDDE0-\uDDE9\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDF50-\uDF59\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D\uDD30-\uDD39]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDD70-\uDD79\uDE40-\uDE96\uDEA0-\uDEB8\uDEBB-\uDED3\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF2-\uDFF6]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD833[\uDCF0-\uDCF9]|\uD834[\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDCD0-\uDCEB\uDCF0-\uDCF9\uDDD0-\uDDED\uDDF0-\uDDFA\uDEC0-\uDEDE\uDEE0-\uDEE2\uDEE4\uDEE5\uDEE7-\uDEED\uDEF0-\uDEF4\uDEFE\uDEFF\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79])/;
|
|
@@ -198,9 +200,10 @@ var createMapping = function createMapping(maps) {
|
|
|
198
200
|
return mapping;
|
|
199
201
|
};
|
|
200
202
|
var createSpans = function createSpans(length) {
|
|
203
|
+
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
201
204
|
return length > 0 ? [{
|
|
202
205
|
length: length,
|
|
203
|
-
data:
|
|
206
|
+
data: data
|
|
204
207
|
}] : [];
|
|
205
208
|
};
|
|
206
209
|
var mergeOverlappingByNewDocRange = function mergeOverlappingByNewDocRange(changes) {
|
|
@@ -213,8 +216,11 @@ var mergeOverlappingByNewDocRange = function mergeOverlappingByNewDocRange(chang
|
|
|
213
216
|
var merged = [];
|
|
214
217
|
var current = _objectSpread({}, sortedChanges[0]);
|
|
215
218
|
for (var i = 1; i < sortedChanges.length; i++) {
|
|
219
|
+
var _, _2;
|
|
216
220
|
var next = sortedChanges[i];
|
|
217
|
-
var
|
|
221
|
+
var currentIdentity = getAttributionKey((_ = [].concat(_toConsumableArray(current.deleted), _toConsumableArray(current.inserted))[0]) === null || _ === void 0 ? void 0 : _.data);
|
|
222
|
+
var nextIdentity = getAttributionKey((_2 = [].concat(_toConsumableArray(next.deleted), _toConsumableArray(next.inserted))[0]) === null || _2 === void 0 ? void 0 : _2.data);
|
|
223
|
+
var isOverlapping = next.fromB <= current.toB && currentIdentity === nextIdentity;
|
|
218
224
|
if (isOverlapping) {
|
|
219
225
|
current = {
|
|
220
226
|
fromA: Math.min(current.fromA, next.fromA),
|
|
@@ -268,16 +274,18 @@ var shouldCheckGranularDiff = function shouldCheckGranularDiff(step, before, fro
|
|
|
268
274
|
var isTextContentEqual = (replacedNode === null || replacedNode === void 0 ? void 0 : replacedNode.textContent) === (replacingNode === null || replacingNode === void 0 ? void 0 : replacingNode.textContent);
|
|
269
275
|
return !isTextContentEqual || isTextContentEqual && hasSameChildMarks(replacedNode, replacingNode);
|
|
270
276
|
};
|
|
271
|
-
export var diffBySteps = function diffBySteps(originalDoc, steps) {
|
|
277
|
+
export var diffBySteps = function diffBySteps(originalDoc, steps, stepAttributions) {
|
|
272
278
|
var changes = [];
|
|
273
279
|
var currentDoc = originalDoc;
|
|
274
280
|
var successfulStepMaps = [];
|
|
275
281
|
var rangedSteps = [];
|
|
276
|
-
var _iterator2 = _createForOfIteratorHelper(steps),
|
|
282
|
+
var _iterator2 = _createForOfIteratorHelper(steps.entries()),
|
|
277
283
|
_step2;
|
|
278
284
|
try {
|
|
279
285
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
280
|
-
var
|
|
286
|
+
var _step2$value = _slicedToArray(_step2.value, 2),
|
|
287
|
+
stepIndex = _step2$value[0],
|
|
288
|
+
step = _step2$value[1];
|
|
281
289
|
var before = currentDoc;
|
|
282
290
|
var result = step.apply(currentDoc);
|
|
283
291
|
if (result.failed !== null || !result.doc) {
|
|
@@ -292,6 +300,9 @@ export var diffBySteps = function diffBySteps(originalDoc, steps) {
|
|
|
292
300
|
from: rangeStep.from,
|
|
293
301
|
to: rangeStep.to,
|
|
294
302
|
mapIndex: successfulStepMaps.length,
|
|
303
|
+
stepAttribution: stepAttributions !== null && stepAttributions !== void 0 && stepAttributions[stepIndex] ? _objectSpread(_objectSpread({}, stepAttributions[stepIndex]), {}, {
|
|
304
|
+
stepIndex: stepIndex
|
|
305
|
+
}) : null,
|
|
295
306
|
step: step,
|
|
296
307
|
stepMap: stepMap
|
|
297
308
|
});
|
|
@@ -377,8 +388,8 @@ export var diffBySteps = function diffBySteps(originalDoc, steps) {
|
|
|
377
388
|
toA: granularToA,
|
|
378
389
|
fromB: granularFromB,
|
|
379
390
|
toB: granularToB,
|
|
380
|
-
deleted: createSpans(Math.max(0, granularToA - granularFromA)),
|
|
381
|
-
inserted: createSpans(Math.max(0, granularToB - granularFromB))
|
|
391
|
+
deleted: createSpans(Math.max(0, granularToA - granularFromA), rangedStep.stepAttribution),
|
|
392
|
+
inserted: createSpans(Math.max(0, granularToB - granularFromB), rangedStep.stepAttribution)
|
|
382
393
|
});
|
|
383
394
|
}
|
|
384
395
|
} catch (err) {
|
|
@@ -393,8 +404,8 @@ export var diffBySteps = function diffBySteps(originalDoc, steps) {
|
|
|
393
404
|
toA: toA,
|
|
394
405
|
fromB: fromB,
|
|
395
406
|
toB: toB,
|
|
396
|
-
deleted: createSpans(Math.max(0, toA - fromA)),
|
|
397
|
-
inserted: createSpans(Math.max(0, toB - fromB))
|
|
407
|
+
deleted: createSpans(Math.max(0, toA - fromA), rangedStep.stepAttribution),
|
|
408
|
+
inserted: createSpans(Math.max(0, toB - fromB), rangedStep.stepAttribution)
|
|
398
409
|
});
|
|
399
410
|
}
|
|
400
411
|
return mergeOverlappingByNewDocRange(changes);
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
4
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
5
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
6
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
|
+
import { simplifyChanges } from 'prosemirror-changeset';
|
|
9
|
+
import { getAttributionKey } from '../decorations/colorSchemes/attributions';
|
|
10
|
+
import { optimizeChanges } from './optimizeChanges';
|
|
11
|
+
var getAttributionIdentity = function getAttributionIdentity(change) {
|
|
12
|
+
var identities = new Set();
|
|
13
|
+
for (var _i = 0, _arr = [].concat(_toConsumableArray(change.deleted), _toConsumableArray(change.inserted)); _i < _arr.length; _i++) {
|
|
14
|
+
var span = _arr[_i];
|
|
15
|
+
identities.add(getAttributionKey(span.data));
|
|
16
|
+
}
|
|
17
|
+
if (identities.size > 1) {
|
|
18
|
+
return {
|
|
19
|
+
key: undefined,
|
|
20
|
+
mergeable: false
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
key: identities.values().next().value,
|
|
25
|
+
mergeable: true
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Simplifies and optimizes consecutive changes without crossing an attribution boundary.
|
|
31
|
+
* A change which already contains more than one identity is deliberately kept isolated.
|
|
32
|
+
*/
|
|
33
|
+
export var simplifyChangesWithAttribution = function simplifyChangesWithAttribution(changes, doc) {
|
|
34
|
+
var result = [];
|
|
35
|
+
var run = [];
|
|
36
|
+
var runIdentity;
|
|
37
|
+
var flush = function flush() {
|
|
38
|
+
if (run.length > 0) {
|
|
39
|
+
// Some show-diff producers use structurally compatible Change objects rather than the
|
|
40
|
+
// library class. `simplifyChanges` reads runtime `lenA`/`lenB` getters even though they
|
|
41
|
+
// are intentionally omitted from its public declarations, so add equivalent getters
|
|
42
|
+
// without calling the library's internal constructor.
|
|
43
|
+
var normalizedRun = run.map(function (change) {
|
|
44
|
+
return _objectSpread(_objectSpread({}, change), {}, {
|
|
45
|
+
get lenA() {
|
|
46
|
+
return change.toA - change.fromA;
|
|
47
|
+
},
|
|
48
|
+
get lenB() {
|
|
49
|
+
return change.toB - change.fromB;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
result.push.apply(result, _toConsumableArray(optimizeChanges(simplifyChanges(normalizedRun, doc))));
|
|
54
|
+
}
|
|
55
|
+
run = [];
|
|
56
|
+
runIdentity = undefined;
|
|
57
|
+
};
|
|
58
|
+
var _iterator = _createForOfIteratorHelper(changes),
|
|
59
|
+
_step;
|
|
60
|
+
try {
|
|
61
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
62
|
+
var _runIdentity;
|
|
63
|
+
var change = _step.value;
|
|
64
|
+
var identity = getAttributionIdentity(change);
|
|
65
|
+
var canJoinRun = ((_runIdentity = runIdentity) === null || _runIdentity === void 0 ? void 0 : _runIdentity.mergeable) === true && identity.mergeable && runIdentity.key === identity.key;
|
|
66
|
+
if (run.length > 0 && !canJoinRun) {
|
|
67
|
+
flush();
|
|
68
|
+
}
|
|
69
|
+
run.push(change);
|
|
70
|
+
runIdentity = identity;
|
|
71
|
+
if (!identity.mergeable) {
|
|
72
|
+
flush();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
} catch (err) {
|
|
76
|
+
_iterator.e(err);
|
|
77
|
+
} finally {
|
|
78
|
+
_iterator.f();
|
|
79
|
+
}
|
|
80
|
+
flush();
|
|
81
|
+
return result;
|
|
82
|
+
};
|