@manuscripts/article-editor 4.2.8 → 4.2.10
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/EditorApp.js +8 -1
- package/dist/cjs/EditorApp.js.map +1 -1
- package/dist/cjs/Main.js +3 -3
- package/dist/cjs/Main.js.map +1 -1
- package/dist/cjs/components/inspector/SnapshotsList.js +14 -2
- package/dist/cjs/components/inspector/SnapshotsList.js.map +1 -1
- package/dist/cjs/components/projects/EditorElement.js +5 -4
- package/dist/cjs/components/projects/EditorElement.js.map +1 -1
- package/dist/cjs/components/projects/Inspector.js +6 -0
- package/dist/cjs/components/projects/Inspector.js.map +1 -1
- package/dist/cjs/components/projects/ManuscriptPageContainer.js +4 -3
- package/dist/cjs/components/projects/ManuscriptPageContainer.js.map +1 -1
- package/dist/cjs/components/tools/CompareDocumentsModal.js +170 -0
- package/dist/cjs/components/tools/CompareDocumentsModal.js.map +1 -0
- package/dist/cjs/components/track-changes/SortByDropdown.js +1 -1
- package/dist/cjs/components/track-changes/TrackChangesPanel.js +16 -3
- package/dist/cjs/components/track-changes/TrackChangesPanel.js.map +1 -1
- package/dist/cjs/components/track-changes/suggestion-list/Suggestion.js +7 -3
- package/dist/cjs/components/track-changes/suggestion-list/Suggestion.js.map +1 -1
- package/dist/cjs/components/track-changes/suggestion-list/SuggestionList.js +6 -2
- package/dist/cjs/components/track-changes/suggestion-list/SuggestionList.js.map +1 -1
- package/dist/cjs/hooks/use-compare-documents.js +69 -0
- package/dist/cjs/hooks/use-compare-documents.js.map +1 -0
- package/dist/cjs/hooks/use-create-editor.js +30 -13
- package/dist/cjs/hooks/use-create-editor.js.map +1 -1
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/change-handlers.js +10 -1
- package/dist/cjs/lib/change-handlers.js.map +1 -1
- package/dist/cjs/lib/comparison/compare-documents.js +53 -0
- package/dist/cjs/lib/comparison/compare-documents.js.map +1 -0
- package/dist/cjs/lib/comparison/compare-paragraph-like.js +388 -0
- package/dist/cjs/lib/comparison/compare-paragraph-like.js.map +1 -0
- package/dist/cjs/lib/comparison/compare-table-element.js +567 -0
- package/dist/cjs/lib/comparison/compare-table-element.js.map +1 -0
- package/dist/cjs/lib/comparison/create-dataTracked-attrs.js +60 -0
- package/dist/cjs/lib/comparison/create-dataTracked-attrs.js.map +1 -0
- package/dist/cjs/lib/comparison/distribute-nodes.js +131 -0
- package/dist/cjs/lib/comparison/distribute-nodes.js.map +1 -0
- package/dist/cjs/lib/comparison/rebuild-nodes-tree.js +76 -0
- package/dist/cjs/lib/comparison/rebuild-nodes-tree.js.map +1 -0
- package/dist/cjs/store/Store.js +7 -2
- package/dist/cjs/store/Store.js.map +1 -1
- package/dist/es/EditorApp.js +8 -1
- package/dist/es/EditorApp.js.map +1 -1
- package/dist/es/Main.js +3 -3
- package/dist/es/Main.js.map +1 -1
- package/dist/es/components/inspector/SnapshotsList.js +15 -3
- package/dist/es/components/inspector/SnapshotsList.js.map +1 -1
- package/dist/es/components/projects/EditorElement.js +5 -4
- package/dist/es/components/projects/EditorElement.js.map +1 -1
- package/dist/es/components/projects/Inspector.js +6 -0
- package/dist/es/components/projects/Inspector.js.map +1 -1
- package/dist/es/components/projects/ManuscriptPageContainer.js +4 -3
- package/dist/es/components/projects/ManuscriptPageContainer.js.map +1 -1
- package/dist/es/components/tools/CompareDocumentsModal.js +140 -0
- package/dist/es/components/tools/CompareDocumentsModal.js.map +1 -0
- package/dist/es/components/track-changes/SortByDropdown.js +1 -1
- package/dist/es/components/track-changes/TrackChangesPanel.js +16 -3
- package/dist/es/components/track-changes/TrackChangesPanel.js.map +1 -1
- package/dist/es/components/track-changes/suggestion-list/Suggestion.js +7 -3
- package/dist/es/components/track-changes/suggestion-list/Suggestion.js.map +1 -1
- package/dist/es/components/track-changes/suggestion-list/SuggestionList.js +6 -2
- package/dist/es/components/track-changes/suggestion-list/SuggestionList.js.map +1 -1
- package/dist/es/hooks/use-compare-documents.js +65 -0
- package/dist/es/hooks/use-compare-documents.js.map +1 -0
- package/dist/es/hooks/use-create-editor.js +31 -14
- package/dist/es/hooks/use-create-editor.js.map +1 -1
- package/dist/es/index.js +3 -3
- package/dist/es/index.js.map +1 -1
- package/dist/es/lib/change-handlers.js +10 -1
- package/dist/es/lib/change-handlers.js.map +1 -1
- package/dist/es/lib/comparison/compare-documents.js +48 -0
- package/dist/es/lib/comparison/compare-documents.js.map +1 -0
- package/dist/es/lib/comparison/compare-paragraph-like.js +378 -0
- package/dist/es/lib/comparison/compare-paragraph-like.js.map +1 -0
- package/dist/es/lib/comparison/compare-table-element.js +559 -0
- package/dist/es/lib/comparison/compare-table-element.js.map +1 -0
- package/dist/es/lib/comparison/create-dataTracked-attrs.js +54 -0
- package/dist/es/lib/comparison/create-dataTracked-attrs.js.map +1 -0
- package/dist/es/lib/comparison/distribute-nodes.js +127 -0
- package/dist/es/lib/comparison/distribute-nodes.js.map +1 -0
- package/dist/es/lib/comparison/rebuild-nodes-tree.js +72 -0
- package/dist/es/lib/comparison/rebuild-nodes-tree.js.map +1 -0
- package/dist/es/store/Store.js +7 -2
- package/dist/es/store/Store.js.map +1 -1
- package/dist/types/EditorApp.d.ts +2 -1
- package/dist/types/Main.d.ts +1 -1
- package/dist/types/components/projects/ManuscriptPageContainer.d.ts +1 -1
- package/dist/types/components/tools/CompareDocumentsModal.d.ts +11 -0
- package/dist/types/components/track-changes/TrackChangesPanel.d.ts +1 -1
- package/dist/types/components/track-changes/suggestion-list/Suggestion.d.ts +1 -1
- package/dist/types/components/track-changes/suggestion-list/SuggestionList.d.ts +3 -3
- package/dist/types/hooks/use-compare-documents.d.ts +24 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/comparison/compare-documents.d.ts +16 -0
- package/dist/types/lib/comparison/compare-paragraph-like.d.ts +23 -0
- package/dist/types/lib/comparison/compare-table-element.d.ts +21 -0
- package/dist/types/lib/comparison/create-dataTracked-attrs.d.ts +15 -0
- package/dist/types/lib/comparison/distribute-nodes.d.ts +19 -0
- package/dist/types/lib/comparison/rebuild-nodes-tree.d.ts +14 -0
- package/dist/types/store/Store.d.ts +3 -1
- package/package.json +5 -3
@@ -0,0 +1,559 @@
|
|
1
|
+
/*!
|
2
|
+
* The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
|
3
|
+
*
|
4
|
+
* Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
|
5
|
+
*
|
6
|
+
* The Original Code is manuscripts-frontend.
|
7
|
+
*
|
8
|
+
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
9
|
+
*
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { schema } from '@manuscripts/transform';
|
13
|
+
import diff_match_patch from 'diff-match-patch';
|
14
|
+
import { isEqual } from 'lodash';
|
15
|
+
import { v4 as uuidv4 } from 'uuid';
|
16
|
+
import { compareParagraphLike } from './compare-paragraph-like';
|
17
|
+
import { createComparisonDeleteAttrsDataTracked, createComparisonInsertAttrsDataTracked, createComparisonSetAttrsDataTracked, } from './create-dataTracked-attrs';
|
18
|
+
/**
|
19
|
+
* Compare two table elements and track changes between them.
|
20
|
+
* This is the main entry point for table comparison.
|
21
|
+
*/
|
22
|
+
export const compareTableElement = (originalNode, comparisonNode) => {
|
23
|
+
if (!originalNode || !comparisonNode) {
|
24
|
+
return comparisonNode;
|
25
|
+
}
|
26
|
+
const newContent = [];
|
27
|
+
comparisonNode.content.forEach((comparisonChild) => {
|
28
|
+
let originalChild = undefined;
|
29
|
+
originalNode.content.forEach((origChild) => {
|
30
|
+
if (origChild.type.name === comparisonChild.type.name) {
|
31
|
+
originalChild = origChild;
|
32
|
+
}
|
33
|
+
});
|
34
|
+
if (originalChild) {
|
35
|
+
if (comparisonChild.type.name === 'table') {
|
36
|
+
newContent.push(compareTable(originalChild, comparisonChild));
|
37
|
+
}
|
38
|
+
else if (comparisonChild.type.name === 'figcaption') {
|
39
|
+
newContent.push(compareFigCaption(originalChild, comparisonChild));
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
const origWithAttrs = originalChild;
|
43
|
+
const compWithAttrs = comparisonChild;
|
44
|
+
if (!isEqual(origWithAttrs.attrs, compWithAttrs.attrs)) {
|
45
|
+
const newAttrs = {
|
46
|
+
...compWithAttrs.attrs,
|
47
|
+
dataTracked: [
|
48
|
+
createComparisonSetAttrsDataTracked('', origWithAttrs.attrs),
|
49
|
+
],
|
50
|
+
};
|
51
|
+
newContent.push(comparisonChild.type.create(newAttrs, comparisonChild.content));
|
52
|
+
}
|
53
|
+
else {
|
54
|
+
newContent.push(comparisonChild);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
else {
|
59
|
+
newContent.push(markNodeAsInserted(comparisonChild));
|
60
|
+
}
|
61
|
+
});
|
62
|
+
originalNode.content.forEach((originalChild) => {
|
63
|
+
let found = false;
|
64
|
+
comparisonNode.content.forEach((comparisonChild) => {
|
65
|
+
if (originalChild.type.name === comparisonChild.type.name) {
|
66
|
+
found = true;
|
67
|
+
}
|
68
|
+
});
|
69
|
+
if (!found) {
|
70
|
+
newContent.push(markNodeAsDeleted(originalChild));
|
71
|
+
}
|
72
|
+
});
|
73
|
+
return schema.nodes.table_element.create(comparisonNode.attrs, newContent);
|
74
|
+
};
|
75
|
+
/**
|
76
|
+
* Compare figcaption nodes and their content.
|
77
|
+
*/
|
78
|
+
export const compareFigCaption = (originalNode, comparisonNode) => {
|
79
|
+
const newContent = [];
|
80
|
+
comparisonNode.content.forEach((comparisonChild) => {
|
81
|
+
let originalChild = undefined;
|
82
|
+
originalNode.content.forEach((origChild) => {
|
83
|
+
if (origChild.type.name === comparisonChild.type.name) {
|
84
|
+
originalChild = origChild;
|
85
|
+
}
|
86
|
+
});
|
87
|
+
if (originalChild) {
|
88
|
+
if (comparisonChild.type.name === 'caption_title') {
|
89
|
+
const hasOnlyText = containsOnlyTextNodes(originalChild) &&
|
90
|
+
containsOnlyTextNodes(comparisonChild);
|
91
|
+
if (hasOnlyText) {
|
92
|
+
const result = compareParagraphLike(originalChild, comparisonChild);
|
93
|
+
newContent.push(result);
|
94
|
+
}
|
95
|
+
else {
|
96
|
+
newContent.push(schema.nodes.caption_title.create(comparisonChild.attrs, comparisonChild.content));
|
97
|
+
}
|
98
|
+
}
|
99
|
+
else if (comparisonChild.type.name === 'caption') {
|
100
|
+
newContent.push(schema.nodes.caption.create(comparisonChild.attrs, comparisonChild.content));
|
101
|
+
}
|
102
|
+
else {
|
103
|
+
newContent.push(comparisonChild);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
else {
|
107
|
+
newContent.push(markNodeAsInserted(comparisonChild));
|
108
|
+
}
|
109
|
+
});
|
110
|
+
originalNode.content.forEach((originalChild) => {
|
111
|
+
let found = false;
|
112
|
+
comparisonNode.content.forEach((comparisonChild) => {
|
113
|
+
if (originalChild.type.name === comparisonChild.type.name) {
|
114
|
+
found = true;
|
115
|
+
}
|
116
|
+
});
|
117
|
+
if (!found) {
|
118
|
+
newContent.push(markNodeAsDeleted(originalChild));
|
119
|
+
}
|
120
|
+
});
|
121
|
+
return schema.nodes.figcaption.create(comparisonNode.attrs, newContent);
|
122
|
+
};
|
123
|
+
const containsOnlyTextNodes = (node) => {
|
124
|
+
if (!node.content || node.content.childCount === 0) {
|
125
|
+
return true;
|
126
|
+
}
|
127
|
+
for (let i = 0; i < node.content.childCount; i++) {
|
128
|
+
const child = node.content.child(i);
|
129
|
+
if (child.type.name !== 'text') {
|
130
|
+
return false;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
return true;
|
134
|
+
};
|
135
|
+
/**
|
136
|
+
* Compare table nodes and their rows.
|
137
|
+
*/
|
138
|
+
const compareTable = (originalNode, comparisonNode) => {
|
139
|
+
const newContent = [];
|
140
|
+
const originalRows = [];
|
141
|
+
const comparisonRows = [];
|
142
|
+
const originalOther = [];
|
143
|
+
const comparisonOther = [];
|
144
|
+
originalNode.content.forEach((child) => {
|
145
|
+
if (child.type.name === 'table_row') {
|
146
|
+
originalRows.push(child);
|
147
|
+
}
|
148
|
+
else {
|
149
|
+
originalOther.push(child);
|
150
|
+
}
|
151
|
+
});
|
152
|
+
comparisonNode.content.forEach((child) => {
|
153
|
+
if (child.type.name === 'table_row') {
|
154
|
+
comparisonRows.push(child);
|
155
|
+
}
|
156
|
+
else {
|
157
|
+
comparisonOther.push(child);
|
158
|
+
}
|
159
|
+
});
|
160
|
+
const matches = findRowMatches(originalRows, comparisonRows);
|
161
|
+
const matchedOrigIndices = new Set(matches.map((m) => m.origIndex));
|
162
|
+
for (let compIndex = 0; compIndex < comparisonRows.length; compIndex++) {
|
163
|
+
const match = matches.find((m) => m.compIndex === compIndex);
|
164
|
+
if (match) {
|
165
|
+
const originalRow = originalRows[match.origIndex];
|
166
|
+
const comparisonRow = comparisonRows[compIndex];
|
167
|
+
newContent.push(compareTableRow(originalRow, comparisonRow));
|
168
|
+
}
|
169
|
+
else {
|
170
|
+
newContent.push(markRowAsInserted(comparisonRows[compIndex]));
|
171
|
+
}
|
172
|
+
}
|
173
|
+
for (let origIndex = 0; origIndex < originalRows.length; origIndex++) {
|
174
|
+
if (!matchedOrigIndices.has(origIndex)) {
|
175
|
+
let insertPosition = 0;
|
176
|
+
const prevOrigIndex = origIndex - 1;
|
177
|
+
const nextOrigIndex = origIndex + 1;
|
178
|
+
if (prevOrigIndex >= 0 && matchedOrigIndices.has(prevOrigIndex)) {
|
179
|
+
const prevMatch = matches.find((m) => m.origIndex === prevOrigIndex);
|
180
|
+
if (prevMatch) {
|
181
|
+
const prevCompIndex = prevMatch.compIndex;
|
182
|
+
insertPosition = newContent.findIndex((node) => node.attrs &&
|
183
|
+
comparisonRows[prevCompIndex].attrs &&
|
184
|
+
node.attrs.id === comparisonRows[prevCompIndex].attrs.id);
|
185
|
+
if (insertPosition >= 0) {
|
186
|
+
insertPosition += 1;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
}
|
190
|
+
else if (nextOrigIndex < originalRows.length &&
|
191
|
+
matchedOrigIndices.has(nextOrigIndex)) {
|
192
|
+
const nextMatch = matches.find((m) => m.origIndex === nextOrigIndex);
|
193
|
+
if (nextMatch) {
|
194
|
+
const nextCompIndex = nextMatch.compIndex;
|
195
|
+
insertPosition = newContent.findIndex((node) => node.attrs &&
|
196
|
+
comparisonRows[nextCompIndex].attrs &&
|
197
|
+
node.attrs.id === comparisonRows[nextCompIndex].attrs.id);
|
198
|
+
}
|
199
|
+
}
|
200
|
+
if (insertPosition < 0) {
|
201
|
+
insertPosition = Math.min(origIndex, newContent.length);
|
202
|
+
}
|
203
|
+
newContent.splice(insertPosition, 0, markRowAsDeleted(originalRows[origIndex]));
|
204
|
+
}
|
205
|
+
}
|
206
|
+
comparisonOther.forEach((node) => {
|
207
|
+
const originalOtherNode = originalOther.find((n) => n.type.name === node.type.name);
|
208
|
+
if (originalOtherNode) {
|
209
|
+
const origWithAttrs = originalOtherNode;
|
210
|
+
const compWithAttrs = node;
|
211
|
+
if (!isEqual(origWithAttrs.attrs, compWithAttrs.attrs)) {
|
212
|
+
const newAttrs = {
|
213
|
+
...compWithAttrs.attrs,
|
214
|
+
dataTracked: [
|
215
|
+
createComparisonSetAttrsDataTracked('', origWithAttrs.attrs),
|
216
|
+
],
|
217
|
+
};
|
218
|
+
newContent.push(node.type.create(newAttrs, node.content));
|
219
|
+
}
|
220
|
+
else {
|
221
|
+
newContent.push(node);
|
222
|
+
}
|
223
|
+
}
|
224
|
+
else {
|
225
|
+
newContent.push(markNodeAsInserted(node));
|
226
|
+
}
|
227
|
+
});
|
228
|
+
originalOther.forEach((node) => {
|
229
|
+
const exists = comparisonOther.some((n) => n.type.name === node.type.name);
|
230
|
+
if (!exists) {
|
231
|
+
newContent.push(markNodeAsDeleted(node));
|
232
|
+
}
|
233
|
+
});
|
234
|
+
return schema.nodes.table.create(comparisonNode.attrs, newContent);
|
235
|
+
};
|
236
|
+
const findRowMatches = (originalRows, comparisonRows) => {
|
237
|
+
const similarityThreshold = 0.7;
|
238
|
+
const matches = [];
|
239
|
+
const similarityMatrix = [];
|
240
|
+
for (let i = 0; i < originalRows.length; i++) {
|
241
|
+
similarityMatrix[i] = [];
|
242
|
+
for (let j = 0; j < comparisonRows.length; j++) {
|
243
|
+
const similarity = calculateRowSimilarity(originalRows[i], comparisonRows[j]);
|
244
|
+
similarityMatrix[i][j] =
|
245
|
+
similarity >= similarityThreshold ? similarity : 0;
|
246
|
+
}
|
247
|
+
}
|
248
|
+
for (let i = 0; i < originalRows.length; i++) {
|
249
|
+
const origRow = originalRows[i];
|
250
|
+
if (!origRow.attrs?.id) {
|
251
|
+
continue;
|
252
|
+
}
|
253
|
+
for (let j = 0; j < comparisonRows.length; j++) {
|
254
|
+
const compRow = comparisonRows[j];
|
255
|
+
if (compRow.attrs?.id && origRow.attrs.id === compRow.attrs.id) {
|
256
|
+
matches.push({ origIndex: i, compIndex: j, similarity: 1 });
|
257
|
+
for (let x = 0; x < originalRows.length; x++) {
|
258
|
+
similarityMatrix[x][j] = 0;
|
259
|
+
}
|
260
|
+
for (let y = 0; y < comparisonRows.length; y++) {
|
261
|
+
similarityMatrix[i][y] = 0;
|
262
|
+
}
|
263
|
+
break;
|
264
|
+
}
|
265
|
+
}
|
266
|
+
}
|
267
|
+
let remainingMatches = true;
|
268
|
+
while (remainingMatches) {
|
269
|
+
remainingMatches = false;
|
270
|
+
let bestMatch = { origIndex: -1, compIndex: -1, similarity: 0 };
|
271
|
+
for (let i = 0; i < originalRows.length; i++) {
|
272
|
+
for (let j = 0; j < comparisonRows.length; j++) {
|
273
|
+
if (similarityMatrix[i][j] > bestMatch.similarity) {
|
274
|
+
bestMatch = {
|
275
|
+
origIndex: i,
|
276
|
+
compIndex: j,
|
277
|
+
similarity: similarityMatrix[i][j],
|
278
|
+
};
|
279
|
+
}
|
280
|
+
}
|
281
|
+
}
|
282
|
+
if (bestMatch.similarity > 0) {
|
283
|
+
matches.push(bestMatch);
|
284
|
+
remainingMatches = true;
|
285
|
+
for (let x = 0; x < originalRows.length; x++) {
|
286
|
+
similarityMatrix[x][bestMatch.compIndex] = 0;
|
287
|
+
}
|
288
|
+
for (let y = 0; y < comparisonRows.length; y++) {
|
289
|
+
similarityMatrix[bestMatch.origIndex][y] = 0;
|
290
|
+
}
|
291
|
+
}
|
292
|
+
}
|
293
|
+
matches.sort((a, b) => a.origIndex - b.origIndex);
|
294
|
+
return matches;
|
295
|
+
};
|
296
|
+
/**
|
297
|
+
* Compare table row nodes and their cells.
|
298
|
+
*/
|
299
|
+
const compareTableRow = (originalRow, comparisonRow) => {
|
300
|
+
const newContent = [];
|
301
|
+
const originalCells = [];
|
302
|
+
const comparisonCells = [];
|
303
|
+
if (originalRow.content) {
|
304
|
+
originalRow.content.forEach((cell) => {
|
305
|
+
originalCells.push(cell);
|
306
|
+
});
|
307
|
+
}
|
308
|
+
if (comparisonRow.content) {
|
309
|
+
comparisonRow.content.forEach((cell) => {
|
310
|
+
comparisonCells.push(cell);
|
311
|
+
});
|
312
|
+
}
|
313
|
+
const minCells = Math.min(originalCells.length, comparisonCells.length);
|
314
|
+
for (let i = 0; i < minCells; i++) {
|
315
|
+
newContent.push(compareTableCell(originalCells[i], comparisonCells[i]));
|
316
|
+
}
|
317
|
+
for (let i = minCells; i < comparisonCells.length; i++) {
|
318
|
+
newContent.push(markCellAsInserted(comparisonCells[i]));
|
319
|
+
}
|
320
|
+
for (let i = minCells; i < originalCells.length; i++) {
|
321
|
+
newContent.push(markCellAsDeleted(originalCells[i]));
|
322
|
+
}
|
323
|
+
const origRowAttrs = originalRow;
|
324
|
+
const compRowAttrs = comparisonRow;
|
325
|
+
const rowAttrs = { ...compRowAttrs.attrs };
|
326
|
+
if (!isEqual(origRowAttrs.attrs, compRowAttrs.attrs)) {
|
327
|
+
rowAttrs.dataTracked = [
|
328
|
+
createComparisonSetAttrsDataTracked('', origRowAttrs.attrs),
|
329
|
+
];
|
330
|
+
}
|
331
|
+
return schema.nodes.table_row.create(rowAttrs, newContent);
|
332
|
+
};
|
333
|
+
/**
|
334
|
+
* Compare table cell nodes and their content.
|
335
|
+
*/
|
336
|
+
const compareTableCell = (originalCell, comparisonCell) => {
|
337
|
+
const newContent = [];
|
338
|
+
const originalTextBlocks = [];
|
339
|
+
const comparisonTextBlocks = [];
|
340
|
+
if (originalCell.content) {
|
341
|
+
originalCell.content.forEach((block) => {
|
342
|
+
originalTextBlocks.push(block);
|
343
|
+
});
|
344
|
+
}
|
345
|
+
if (comparisonCell.content) {
|
346
|
+
comparisonCell.content.forEach((block) => {
|
347
|
+
comparisonTextBlocks.push(block);
|
348
|
+
});
|
349
|
+
}
|
350
|
+
const minBlocks = Math.min(originalTextBlocks.length, comparisonTextBlocks.length);
|
351
|
+
for (let i = 0; i < minBlocks; i++) {
|
352
|
+
newContent.push(compareParagraphLike(originalTextBlocks[i], comparisonTextBlocks[i]));
|
353
|
+
}
|
354
|
+
for (let i = minBlocks; i < comparisonTextBlocks.length; i++) {
|
355
|
+
newContent.push(markNodeAsInserted(comparisonTextBlocks[i]));
|
356
|
+
}
|
357
|
+
for (let i = minBlocks; i < originalTextBlocks.length; i++) {
|
358
|
+
newContent.push(markNodeAsDeleted(originalTextBlocks[i]));
|
359
|
+
}
|
360
|
+
const origCellAttrs = originalCell;
|
361
|
+
const compCellAttrs = comparisonCell;
|
362
|
+
const cellAttrs = { ...compCellAttrs.attrs };
|
363
|
+
if (!isEqual(origCellAttrs.attrs, compCellAttrs.attrs)) {
|
364
|
+
cellAttrs.dataTracked = [
|
365
|
+
createComparisonSetAttrsDataTracked('', origCellAttrs.attrs),
|
366
|
+
];
|
367
|
+
}
|
368
|
+
return comparisonCell.type.create(cellAttrs, newContent);
|
369
|
+
};
|
370
|
+
/**
|
371
|
+
* Mark a node and its content as inserted.
|
372
|
+
*/
|
373
|
+
const markNodeAsInserted = (node) => {
|
374
|
+
if (node.isText) {
|
375
|
+
return node.mark([
|
376
|
+
schema.marks.tracked_insert.create({ dataTracked: { id: uuidv4() } }),
|
377
|
+
]);
|
378
|
+
}
|
379
|
+
const newContent = [];
|
380
|
+
if (node.content && node.content.childCount > 0) {
|
381
|
+
node.content.forEach((child) => {
|
382
|
+
newContent.push(markNodeAsInserted(child));
|
383
|
+
});
|
384
|
+
}
|
385
|
+
const nodeWithAttrs = node;
|
386
|
+
const newAttrs = {
|
387
|
+
...nodeWithAttrs.attrs,
|
388
|
+
dataTracked: [createComparisonInsertAttrsDataTracked('')],
|
389
|
+
};
|
390
|
+
return node.type.create(newAttrs, newContent, node.marks);
|
391
|
+
};
|
392
|
+
/**
|
393
|
+
* Mark a node and its content as deleted.
|
394
|
+
*/
|
395
|
+
const markNodeAsDeleted = (node) => {
|
396
|
+
if (node.isText) {
|
397
|
+
return node.mark([
|
398
|
+
schema.marks.tracked_delete.create({ dataTracked: { id: uuidv4() } }),
|
399
|
+
]);
|
400
|
+
}
|
401
|
+
const newContent = [];
|
402
|
+
if (node.content && node.content.childCount > 0) {
|
403
|
+
node.content.forEach((child) => {
|
404
|
+
newContent.push(markNodeAsDeleted(child));
|
405
|
+
});
|
406
|
+
}
|
407
|
+
const nodeWithAttrs = node;
|
408
|
+
const newAttrs = {
|
409
|
+
...nodeWithAttrs.attrs,
|
410
|
+
dataTracked: [createComparisonDeleteAttrsDataTracked('')],
|
411
|
+
};
|
412
|
+
return node.type.create(newAttrs, newContent, node.marks);
|
413
|
+
};
|
414
|
+
/**
|
415
|
+
* Mark a row as inserted, including all its cells
|
416
|
+
*/
|
417
|
+
const markRowAsInserted = (row) => {
|
418
|
+
const newContent = [];
|
419
|
+
if (row.content) {
|
420
|
+
row.content.forEach((cell) => {
|
421
|
+
newContent.push(markCellAsInserted(cell));
|
422
|
+
});
|
423
|
+
}
|
424
|
+
const rowWithAttrs = row;
|
425
|
+
const newAttrs = {
|
426
|
+
...rowWithAttrs.attrs,
|
427
|
+
dataTracked: [createComparisonInsertAttrsDataTracked('')],
|
428
|
+
};
|
429
|
+
return schema.nodes.table_row.create(newAttrs, newContent);
|
430
|
+
};
|
431
|
+
/**
|
432
|
+
* Mark a row as deleted, including all its cells
|
433
|
+
*/
|
434
|
+
const markRowAsDeleted = (row) => {
|
435
|
+
const newContent = [];
|
436
|
+
if (row.content) {
|
437
|
+
row.content.forEach((cell) => {
|
438
|
+
newContent.push(markCellAsDeleted(cell));
|
439
|
+
});
|
440
|
+
}
|
441
|
+
const rowWithAttrs = row;
|
442
|
+
const newAttrs = {
|
443
|
+
...rowWithAttrs.attrs,
|
444
|
+
dataTracked: [createComparisonDeleteAttrsDataTracked('')],
|
445
|
+
};
|
446
|
+
return schema.nodes.table_row.create(newAttrs, newContent);
|
447
|
+
};
|
448
|
+
/**
|
449
|
+
* Mark a cell as inserted, including all its content
|
450
|
+
*/
|
451
|
+
const markCellAsInserted = (cell) => {
|
452
|
+
const newContent = [];
|
453
|
+
if (cell.content) {
|
454
|
+
cell.content.forEach((block) => {
|
455
|
+
newContent.push(markNodeAsInserted(block));
|
456
|
+
});
|
457
|
+
}
|
458
|
+
const cellWithAttrs = cell;
|
459
|
+
const newAttrs = {
|
460
|
+
...cellWithAttrs.attrs,
|
461
|
+
dataTracked: [createComparisonInsertAttrsDataTracked('')],
|
462
|
+
};
|
463
|
+
return cell.type.create(newAttrs, newContent);
|
464
|
+
};
|
465
|
+
/**
|
466
|
+
* Mark a cell as deleted, including all its content
|
467
|
+
*/
|
468
|
+
const markCellAsDeleted = (cell) => {
|
469
|
+
const newContent = [];
|
470
|
+
if (cell.content) {
|
471
|
+
cell.content.forEach((block) => {
|
472
|
+
newContent.push(markNodeAsDeleted(block));
|
473
|
+
});
|
474
|
+
}
|
475
|
+
const cellWithAttrs = cell;
|
476
|
+
const newAttrs = {
|
477
|
+
...cellWithAttrs.attrs,
|
478
|
+
dataTracked: [createComparisonDeleteAttrsDataTracked('')],
|
479
|
+
};
|
480
|
+
return cell.type.create(newAttrs, newContent);
|
481
|
+
};
|
482
|
+
/**
|
483
|
+
* Calculate a similarity score between two rows
|
484
|
+
* Returns a number between 0 (completely different) and 1 (identical)
|
485
|
+
*/
|
486
|
+
const calculateRowSimilarity = (row1, row2) => {
|
487
|
+
if (row1.type.name !== row2.type.name) {
|
488
|
+
return 0;
|
489
|
+
}
|
490
|
+
const cellCount1 = row1.content ? row1.content.childCount : 0;
|
491
|
+
const cellCount2 = row2.content ? row2.content.childCount : 0;
|
492
|
+
if (cellCount1 === 0 && cellCount2 === 0) {
|
493
|
+
return 1;
|
494
|
+
}
|
495
|
+
if (cellCount1 === 0 || cellCount2 === 0) {
|
496
|
+
return 0;
|
497
|
+
}
|
498
|
+
if (Math.abs(cellCount1 - cellCount2) >
|
499
|
+
Math.min(cellCount1, cellCount2) / 2) {
|
500
|
+
return 0.1;
|
501
|
+
}
|
502
|
+
let matchingCells = 0;
|
503
|
+
const minCells = Math.min(cellCount1, cellCount2);
|
504
|
+
for (let i = 0; i < minCells; i++) {
|
505
|
+
const cell1 = row1.content.child(i);
|
506
|
+
const cell2 = row2.content.child(i);
|
507
|
+
const text1 = cell1.textContent || '';
|
508
|
+
const text2 = cell2.textContent || '';
|
509
|
+
const similarity = calculateTextSimilarity(text1, text2);
|
510
|
+
if (similarity > 0.7) {
|
511
|
+
matchingCells += similarity;
|
512
|
+
}
|
513
|
+
}
|
514
|
+
return matchingCells / minCells;
|
515
|
+
};
|
516
|
+
/**
|
517
|
+
* Calculate text similarity using Levenshtein distance
|
518
|
+
*/
|
519
|
+
const calculateTextSimilarity = (text1, text2) => {
|
520
|
+
if (text1 === text2) {
|
521
|
+
return 1;
|
522
|
+
}
|
523
|
+
if (!text1 || !text2) {
|
524
|
+
return 0;
|
525
|
+
}
|
526
|
+
const cleanText1 = cleanTextForComparison(text1);
|
527
|
+
const cleanText2 = cleanTextForComparison(text2);
|
528
|
+
if (cleanText1 === cleanText2) {
|
529
|
+
return 0.95;
|
530
|
+
}
|
531
|
+
const maxLen = Math.max(cleanText1.length, cleanText2.length);
|
532
|
+
if (maxLen === 0) {
|
533
|
+
return 1;
|
534
|
+
}
|
535
|
+
const dmp = new diff_match_patch();
|
536
|
+
const diffs = dmp.diff_main(cleanText1, cleanText2);
|
537
|
+
dmp.diff_cleanupSemantic(diffs);
|
538
|
+
let diffSize = 0;
|
539
|
+
for (const [op, text] of diffs) {
|
540
|
+
if (op !== 0) {
|
541
|
+
diffSize += text.length;
|
542
|
+
}
|
543
|
+
}
|
544
|
+
if (diffSize <= 3) {
|
545
|
+
return 0.9;
|
546
|
+
}
|
547
|
+
const distance = dmp.diff_levenshtein(diffs);
|
548
|
+
return 1 - distance / maxLen;
|
549
|
+
};
|
550
|
+
/**
|
551
|
+
* Clean text for comparison by removing likely typos
|
552
|
+
*/
|
553
|
+
const cleanTextForComparison = (text) => {
|
554
|
+
const repeatedCharsRegex = /([a-z])\1{1,2}/gi;
|
555
|
+
let cleaned = text.replace(repeatedCharsRegex, '$1');
|
556
|
+
cleaned = cleaned.replace(/\s+/g, ' ').trim();
|
557
|
+
return cleaned;
|
558
|
+
};
|
559
|
+
//# sourceMappingURL=compare-table-element.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"compare-table-element.js","sourceRoot":"","sources":["../../../../src/lib/comparison/compare-table-element.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/*!
|
2
|
+
* The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
|
3
|
+
*
|
4
|
+
* Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
|
5
|
+
*
|
6
|
+
* The Original Code is manuscripts-frontend.
|
7
|
+
*
|
8
|
+
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
9
|
+
*
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { CHANGE_OPERATION, CHANGE_STATUS, } from '@manuscripts/track-changes-plugin';
|
13
|
+
import { v4 as uuidv4 } from 'uuid';
|
14
|
+
// Creates a dataTracked attribute for a set node attributes operation in comparison context
|
15
|
+
export const createComparisonSetAttrsDataTracked = (authorID, oldAttrs) => {
|
16
|
+
return {
|
17
|
+
id: uuidv4(),
|
18
|
+
authorID,
|
19
|
+
reviewedByID: null,
|
20
|
+
operation: CHANGE_OPERATION.set_node_attributes,
|
21
|
+
status: CHANGE_STATUS.pending,
|
22
|
+
statusUpdateAt: Date.now(),
|
23
|
+
createdAt: Date.now(),
|
24
|
+
updatedAt: Date.now(),
|
25
|
+
oldAttrs,
|
26
|
+
};
|
27
|
+
};
|
28
|
+
// Creates a dataTracked attribute for a delete node operation in comparison context
|
29
|
+
export const createComparisonDeleteAttrsDataTracked = (authorID) => {
|
30
|
+
return {
|
31
|
+
id: uuidv4(),
|
32
|
+
authorID,
|
33
|
+
reviewedByID: null,
|
34
|
+
operation: CHANGE_OPERATION.delete,
|
35
|
+
status: CHANGE_STATUS.pending,
|
36
|
+
statusUpdateAt: Date.now(),
|
37
|
+
createdAt: Date.now(),
|
38
|
+
updatedAt: Date.now(),
|
39
|
+
};
|
40
|
+
};
|
41
|
+
// Creates a dataTracked attribute for an insert node operation in comparison context
|
42
|
+
export const createComparisonInsertAttrsDataTracked = (authorID) => {
|
43
|
+
return {
|
44
|
+
id: uuidv4(),
|
45
|
+
authorID,
|
46
|
+
reviewedByID: null,
|
47
|
+
operation: CHANGE_OPERATION.insert,
|
48
|
+
status: CHANGE_STATUS.pending,
|
49
|
+
statusUpdateAt: Date.now(),
|
50
|
+
createdAt: Date.now(),
|
51
|
+
updatedAt: Date.now(),
|
52
|
+
};
|
53
|
+
};
|
54
|
+
//# sourceMappingURL=create-dataTracked-attrs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"create-dataTracked-attrs.js","sourceRoot":"","sources":["../../../../src/lib/comparison/create-dataTracked-attrs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,gBAAgB,EAChB,aAAa,GAEd,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAA;AAEnC,4FAA4F;AAC5F,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,QAAgB,EAChB,QAAiC,EACnB,EAAE;IAChB,OAAO;QACL,EAAE,EAAE,MAAM,EAAE;QACZ,QAAQ;QACR,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,gBAAgB,CAAC,mBAAmB;QAC/C,MAAM,EAAE,aAAa,CAAC,OAAO;QAC7B,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;QAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,QAAQ;KACT,CAAA;AACH,CAAC,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,QAAgB,EACF,EAAE;IAChB,OAAO;QACL,EAAE,EAAE,MAAM,EAAE;QACZ,QAAQ;QACR,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,gBAAgB,CAAC,MAAM;QAClC,MAAM,EAAE,aAAa,CAAC,OAAO;QAC7B,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;QAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAA;AACH,CAAC,CAAA;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,QAAgB,EACF,EAAE;IAChB,OAAO;QACL,EAAE,EAAE,MAAM,EAAE;QACZ,QAAQ;QACR,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,gBAAgB,CAAC,MAAM;QAClC,MAAM,EAAE,aAAa,CAAC,OAAO;QAC7B,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;QAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAA;AACH,CAAC,CAAA"}
|