@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,48 @@
|
|
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 { isEqual } from 'lodash';
|
14
|
+
import { createComparisonSetAttrsDataTracked } from './create-dataTracked-attrs';
|
15
|
+
import { distributeNodesForComparison } from './distribute-nodes';
|
16
|
+
import { rebuildDocNodeTree } from './rebuild-nodes-tree';
|
17
|
+
// The entry point for the comparison mode, which is used to compare two ManuscriptNode trees
|
18
|
+
// It distributes the nodes, rebuilds the nodes tree and then creates a new ManuscriptNode tree
|
19
|
+
export const compareDocuments = (originalSnapshot, comparisonSnapshot) => {
|
20
|
+
const originalDocument = schema.nodeFromJSON(originalSnapshot.snapshot);
|
21
|
+
const comparisonDocument = schema.nodeFromJSON(comparisonSnapshot.snapshot);
|
22
|
+
const distributedNodes = distributeNodesForComparison(originalDocument, comparisonDocument);
|
23
|
+
const distributedNodesArray = [];
|
24
|
+
distributedNodes.forEach((_, key) => {
|
25
|
+
distributedNodesArray.push(rebuildDocNodeTree(key, distributedNodes));
|
26
|
+
});
|
27
|
+
const manuscript = schema.nodes.manuscript.create(comparisonDocument.attrs, distributedNodesArray);
|
28
|
+
return manuscript;
|
29
|
+
};
|
30
|
+
// Compares the attributes of two nodes and returns a new node with the updated attributes
|
31
|
+
export const compareSingleNodeAttrs = (originalNode, comparisonNode, nodeType, rebuiltChildren) => {
|
32
|
+
const originalAttrs = originalNode?.attrs || {};
|
33
|
+
const comparisonAttrs = comparisonNode?.attrs || {};
|
34
|
+
if (!isEqual(originalAttrs, comparisonAttrs)) {
|
35
|
+
return nodeType.create({
|
36
|
+
...comparisonAttrs,
|
37
|
+
dataTracked: [createComparisonSetAttrsDataTracked('', originalAttrs)],
|
38
|
+
}, rebuiltChildren.length > 0
|
39
|
+
? rebuiltChildren
|
40
|
+
: comparisonNode?.content || null);
|
41
|
+
}
|
42
|
+
else {
|
43
|
+
return nodeType.create(comparisonAttrs, rebuiltChildren.length > 0
|
44
|
+
? rebuiltChildren
|
45
|
+
: comparisonNode?.content || null);
|
46
|
+
}
|
47
|
+
};
|
48
|
+
//# sourceMappingURL=compare-documents.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"compare-documents.js","sourceRoot":"","sources":["../../../../src/lib/comparison/compare-documents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAkB,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAIhC,OAAO,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAA;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,6FAA6F;AAC7F,+FAA+F;AAC/F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,gBAAoC,EACpC,kBAAsC,EACtC,EAAE;IACF,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACvE,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAE3E,MAAM,gBAAgB,GAAG,4BAA4B,CACnD,gBAAgB,EAChB,kBAAkB,CACnB,CAAA;IACD,MAAM,qBAAqB,GAAqB,EAAE,CAAA;IAClD,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAClC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAC/C,kBAAkB,CAAC,KAAK,EACxB,qBAAqB,CACtB,CAAA;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,0FAA0F;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,YAA4B,EAC5B,cAA8B,EAC9B,QAAkB,EAClB,eAAiC,EACjB,EAAE;IAClB,MAAM,aAAa,GAAG,YAAY,EAAE,KAAK,IAAI,EAAE,CAAA;IAC/C,MAAM,eAAe,GAAG,cAAc,EAAE,KAAK,IAAI,EAAE,CAAA;IACnD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE;QAC5C,OAAO,QAAQ,CAAC,MAAM,CACpB;YACE,GAAG,eAAe;YAClB,WAAW,EAAE,CAAC,mCAAmC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;SACtE,EACD,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,cAAc,EAAE,OAAO,IAAI,IAAI,CACpC,CAAA;KACF;SAAM;QACL,OAAO,QAAQ,CAAC,MAAM,CACpB,eAAe,EACf,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,cAAc,EAAE,OAAO,IAAI,IAAI,CACpC,CAAA;KACF;AACH,CAAC,CAAA"}
|
@@ -0,0 +1,378 @@
|
|
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 { createComparisonDeleteAttrsDataTracked, createComparisonInsertAttrsDataTracked, createComparisonSetAttrsDataTracked, } from './create-dataTracked-attrs';
|
16
|
+
// Compares two ManuscriptNode objects that are paragraph-like
|
17
|
+
// It checks if the nodes contain only text nodes and if so, it compares the text content
|
18
|
+
// Otherwise, it flattens the nodes and compares the chunks
|
19
|
+
export const compareParagraphLike = (originalNode, comparisonNode) => {
|
20
|
+
const originalHasOnlyText = containsOnlyTextNodes(originalNode);
|
21
|
+
const comparisonHasOnlyText = containsOnlyTextNodes(comparisonNode);
|
22
|
+
if (originalHasOnlyText && comparisonHasOnlyText) {
|
23
|
+
return compareTextLikeContent(originalNode, comparisonNode, comparisonNode.type);
|
24
|
+
}
|
25
|
+
const originalChunks = flattenParagraph(Array.from({ length: originalNode.content.childCount }, (_, i) => originalNode.content.child(i)));
|
26
|
+
const comparisonChunks = flattenParagraph(Array.from({ length: comparisonNode.content.childCount }, (_, i) => comparisonNode.content.child(i)));
|
27
|
+
const originalString = stringifyChunks(originalChunks);
|
28
|
+
const comparisonString = stringifyChunks(comparisonChunks);
|
29
|
+
const dmp = new diff_match_patch();
|
30
|
+
const diffs = dmp.diff_main(originalString, comparisonString);
|
31
|
+
const content = rebuildFromDiff(diffs, originalChunks, comparisonChunks);
|
32
|
+
return comparisonNode.type.create(comparisonNode.attrs, content);
|
33
|
+
};
|
34
|
+
// Checks if a node contains only text nodes
|
35
|
+
export const containsOnlyTextNodes = (node) => {
|
36
|
+
if (!node.content || node.content.childCount === 0) {
|
37
|
+
return true;
|
38
|
+
}
|
39
|
+
for (let i = 0; i < node.content.childCount; i++) {
|
40
|
+
const child = node.content.child(i);
|
41
|
+
if (child.type.name !== 'text') {
|
42
|
+
return false;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
return true;
|
46
|
+
};
|
47
|
+
// Flattens a paragraph-like node into a list of text and inline chunks
|
48
|
+
const flattenParagraph = (nodes) => {
|
49
|
+
const chunks = [];
|
50
|
+
let inlineCounter = 0;
|
51
|
+
for (const node of nodes) {
|
52
|
+
if (node.type.name === 'text') {
|
53
|
+
chunks.push({ type: 'text', key: node.text, node });
|
54
|
+
}
|
55
|
+
else {
|
56
|
+
let tag = '';
|
57
|
+
if (node.type.name === 'cross_reference' &&
|
58
|
+
node.attrs &&
|
59
|
+
node.attrs.rids) {
|
60
|
+
tag = `[CROSS_REF:${node.attrs.rids.join(',')}]`;
|
61
|
+
}
|
62
|
+
else {
|
63
|
+
tag = `[INLINE_${inlineCounter++}]`;
|
64
|
+
}
|
65
|
+
chunks.push({ type: 'inline', key: tag, node });
|
66
|
+
}
|
67
|
+
}
|
68
|
+
return chunks;
|
69
|
+
};
|
70
|
+
// Stringifies a list of chunks into a single string
|
71
|
+
const stringifyChunks = (chunks) => {
|
72
|
+
return chunks.map((c) => c.key).join('');
|
73
|
+
};
|
74
|
+
// Rebuilds a ManuscriptNode tree from a list of diffs
|
75
|
+
export const rebuildFromDiff = (diffs, originalChunks, comparisonChunks) => {
|
76
|
+
const result = [];
|
77
|
+
const originalChunkMap = buildChunkPositionMap(originalChunks);
|
78
|
+
const comparisonChunkMap = buildChunkPositionMap(comparisonChunks);
|
79
|
+
const originalInlineMap = new Map();
|
80
|
+
const comparisonInlineMap = new Map();
|
81
|
+
originalChunks.forEach((chunk) => {
|
82
|
+
if (chunk.type === 'inline') {
|
83
|
+
const node = chunk.node;
|
84
|
+
if (node.attrs && node.attrs.id) {
|
85
|
+
originalInlineMap.set(node.attrs.id, node);
|
86
|
+
}
|
87
|
+
if (node.type.name === 'cross_reference' &&
|
88
|
+
node.attrs &&
|
89
|
+
node.attrs.rids) {
|
90
|
+
originalInlineMap.set(`cross_ref:${node.attrs.rids.join(',')}`, node);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
});
|
94
|
+
comparisonChunks.forEach((chunk) => {
|
95
|
+
if (chunk.type === 'inline') {
|
96
|
+
const node = chunk.node;
|
97
|
+
if (node.attrs && node.attrs.id) {
|
98
|
+
comparisonInlineMap.set(node.attrs.id, node);
|
99
|
+
}
|
100
|
+
if (node.type.name === 'cross_reference' &&
|
101
|
+
node.attrs &&
|
102
|
+
node.attrs.rids) {
|
103
|
+
comparisonInlineMap.set(`cross_ref:${node.attrs.rids.join(',')}`, node);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
});
|
107
|
+
let origPos = 0;
|
108
|
+
let compPos = 0;
|
109
|
+
for (const [op, str] of diffs) {
|
110
|
+
if (op === 0) {
|
111
|
+
const startCompPos = compPos;
|
112
|
+
compPos += str.length;
|
113
|
+
origPos += str.length;
|
114
|
+
const chunks = getChunksInRange(comparisonChunks, comparisonChunkMap, startCompPos, compPos);
|
115
|
+
for (const chunk of chunks) {
|
116
|
+
if (chunk.type === 'text') {
|
117
|
+
const chunkStartPos = getChunkStartPos(comparisonChunks, comparisonChunks.indexOf(chunk));
|
118
|
+
const chunkEndPos = chunkStartPos + chunk.key.length;
|
119
|
+
if (startCompPos > chunkStartPos || compPos < chunkEndPos) {
|
120
|
+
const startOffset = Math.max(0, startCompPos - chunkStartPos);
|
121
|
+
const endOffset = Math.min(chunk.key.length, compPos - chunkStartPos);
|
122
|
+
const textContent = chunk.key.substring(startOffset, endOffset);
|
123
|
+
const textNode = schema.text(textContent);
|
124
|
+
result.push(textNode);
|
125
|
+
}
|
126
|
+
else {
|
127
|
+
result.push(chunk.node);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
else {
|
131
|
+
const inlineNode = chunk.node;
|
132
|
+
if (inlineNode.type.name === 'cross_reference' &&
|
133
|
+
inlineNode.attrs &&
|
134
|
+
inlineNode.attrs.rids) {
|
135
|
+
const key = `cross_ref:${inlineNode.attrs.rids.join(',')}`;
|
136
|
+
const originalNode = originalInlineMap.get(key);
|
137
|
+
if (originalNode) {
|
138
|
+
if (!isEqual(originalNode.attrs, inlineNode.attrs)) {
|
139
|
+
const comparedNode = compareInlineNodeAttrs(originalNode, inlineNode, 'set');
|
140
|
+
result.push(comparedNode);
|
141
|
+
}
|
142
|
+
else {
|
143
|
+
result.push(inlineNode);
|
144
|
+
}
|
145
|
+
}
|
146
|
+
}
|
147
|
+
else if (inlineNode.attrs && inlineNode.attrs.id) {
|
148
|
+
const originalNode = originalInlineMap.get(inlineNode.attrs.id);
|
149
|
+
if (originalNode) {
|
150
|
+
if (!isEqual(originalNode.attrs, inlineNode.attrs)) {
|
151
|
+
const comparedNode = compareInlineNodeAttrs(originalNode, inlineNode, 'set');
|
152
|
+
result.push(comparedNode);
|
153
|
+
}
|
154
|
+
else {
|
155
|
+
result.push(inlineNode);
|
156
|
+
}
|
157
|
+
}
|
158
|
+
}
|
159
|
+
else {
|
160
|
+
result.push(inlineNode);
|
161
|
+
}
|
162
|
+
}
|
163
|
+
}
|
164
|
+
}
|
165
|
+
else if (op === 1) {
|
166
|
+
const startCompPos = compPos;
|
167
|
+
compPos += str.length;
|
168
|
+
const chunks = getChunksInRange(comparisonChunks, comparisonChunkMap, startCompPos, compPos);
|
169
|
+
for (const chunk of chunks) {
|
170
|
+
if (chunk.type === 'text') {
|
171
|
+
const chunkStartPos = getChunkStartPos(comparisonChunks, comparisonChunks.indexOf(chunk));
|
172
|
+
const chunkEndPos = chunkStartPos + chunk.key.length;
|
173
|
+
if (startCompPos > chunkStartPos || compPos < chunkEndPos) {
|
174
|
+
const startOffset = Math.max(0, startCompPos - chunkStartPos);
|
175
|
+
const endOffset = Math.min(chunk.key.length, compPos - chunkStartPos);
|
176
|
+
const textContent = chunk.key.substring(startOffset, endOffset);
|
177
|
+
const textNode = schema.text(textContent, [
|
178
|
+
schema.marks.tracked_insert.create({
|
179
|
+
dataTracked: createComparisonInsertAttrsDataTracked(''),
|
180
|
+
}),
|
181
|
+
]);
|
182
|
+
result.push(textNode);
|
183
|
+
}
|
184
|
+
else {
|
185
|
+
result.push(chunk.node.mark([
|
186
|
+
schema.marks.tracked_insert.create({
|
187
|
+
dataTracked: createComparisonInsertAttrsDataTracked(''),
|
188
|
+
}),
|
189
|
+
]));
|
190
|
+
}
|
191
|
+
}
|
192
|
+
else {
|
193
|
+
const inlineNode = chunk.node;
|
194
|
+
if (inlineNode.type.name === 'cross_reference' &&
|
195
|
+
inlineNode.attrs &&
|
196
|
+
inlineNode.attrs.rids) {
|
197
|
+
const key = `cross_ref:${inlineNode.attrs.rids.join(',')}`;
|
198
|
+
const originalNode = originalInlineMap.get(key);
|
199
|
+
if (originalNode) {
|
200
|
+
if (!isEqual(originalNode.attrs, inlineNode.attrs)) {
|
201
|
+
const comparedNode = compareInlineNodeAttrs(originalNode, inlineNode, 'set');
|
202
|
+
result.push(comparedNode);
|
203
|
+
}
|
204
|
+
else {
|
205
|
+
result.push(inlineNode);
|
206
|
+
}
|
207
|
+
}
|
208
|
+
else {
|
209
|
+
const trackedNode = compareInlineNodeAttrs(null, inlineNode, 'insert');
|
210
|
+
result.push(trackedNode);
|
211
|
+
}
|
212
|
+
}
|
213
|
+
else if (inlineNode.attrs && inlineNode.attrs.id) {
|
214
|
+
const originalNode = originalInlineMap.get(inlineNode.attrs.id);
|
215
|
+
if (originalNode) {
|
216
|
+
if (!isEqual(originalNode.attrs, inlineNode.attrs)) {
|
217
|
+
const comparedNode = compareInlineNodeAttrs(originalNode, inlineNode, 'set');
|
218
|
+
result.push(comparedNode);
|
219
|
+
}
|
220
|
+
else {
|
221
|
+
result.push(inlineNode);
|
222
|
+
}
|
223
|
+
}
|
224
|
+
else {
|
225
|
+
const trackedNode = compareInlineNodeAttrs(null, inlineNode, 'insert');
|
226
|
+
result.push(trackedNode);
|
227
|
+
}
|
228
|
+
}
|
229
|
+
else {
|
230
|
+
const trackedNode = compareInlineNodeAttrs(null, inlineNode, 'insert');
|
231
|
+
result.push(trackedNode);
|
232
|
+
}
|
233
|
+
}
|
234
|
+
}
|
235
|
+
}
|
236
|
+
else if (op === -1) {
|
237
|
+
const startOrigPos = origPos;
|
238
|
+
origPos += str.length;
|
239
|
+
const chunks = getChunksInRange(originalChunks, originalChunkMap, startOrigPos, origPos);
|
240
|
+
for (const chunk of chunks) {
|
241
|
+
if (chunk.type === 'text') {
|
242
|
+
const chunkStartPos = getChunkStartPos(originalChunks, originalChunks.indexOf(chunk));
|
243
|
+
const chunkEndPos = chunkStartPos + chunk.key.length;
|
244
|
+
if (startOrigPos > chunkStartPos || origPos < chunkEndPos) {
|
245
|
+
const startOffset = Math.max(0, startOrigPos - chunkStartPos);
|
246
|
+
const endOffset = Math.min(chunk.key.length, origPos - chunkStartPos);
|
247
|
+
const textContent = chunk.key.substring(startOffset, endOffset);
|
248
|
+
const textNode = schema.text(textContent, [
|
249
|
+
schema.marks.tracked_delete.create({
|
250
|
+
dataTracked: createComparisonDeleteAttrsDataTracked(''),
|
251
|
+
}),
|
252
|
+
]);
|
253
|
+
result.push(textNode);
|
254
|
+
}
|
255
|
+
else {
|
256
|
+
result.push(chunk.node.mark([
|
257
|
+
schema.marks.tracked_delete.create({
|
258
|
+
dataTracked: createComparisonDeleteAttrsDataTracked(''),
|
259
|
+
}),
|
260
|
+
]));
|
261
|
+
}
|
262
|
+
}
|
263
|
+
else {
|
264
|
+
const inlineNode = chunk.node;
|
265
|
+
if (inlineNode.type.name === 'cross_reference' &&
|
266
|
+
inlineNode.attrs &&
|
267
|
+
inlineNode.attrs.rids) {
|
268
|
+
const key = `cross_ref:${inlineNode.attrs.rids.join(',')}`;
|
269
|
+
const comparisonNode = comparisonInlineMap.get(key);
|
270
|
+
if (!comparisonNode) {
|
271
|
+
const trackedNode = compareInlineNodeAttrs(inlineNode, inlineNode, 'delete');
|
272
|
+
result.push(trackedNode);
|
273
|
+
}
|
274
|
+
}
|
275
|
+
else if (inlineNode.attrs && inlineNode.attrs.id) {
|
276
|
+
const comparisonNode = comparisonInlineMap.get(inlineNode.attrs.id);
|
277
|
+
if (!comparisonNode) {
|
278
|
+
const trackedNode = compareInlineNodeAttrs(inlineNode, inlineNode, 'delete');
|
279
|
+
result.push(trackedNode);
|
280
|
+
}
|
281
|
+
}
|
282
|
+
else {
|
283
|
+
const trackedNode = compareInlineNodeAttrs(inlineNode, inlineNode, 'delete');
|
284
|
+
result.push(trackedNode);
|
285
|
+
}
|
286
|
+
}
|
287
|
+
}
|
288
|
+
}
|
289
|
+
}
|
290
|
+
return result;
|
291
|
+
};
|
292
|
+
// Gets the start position of a chunk
|
293
|
+
const getChunkStartPos = (chunks, index) => {
|
294
|
+
let pos = 0;
|
295
|
+
for (let i = 0; i < index; i++) {
|
296
|
+
pos += chunks[i].key.length;
|
297
|
+
}
|
298
|
+
return pos;
|
299
|
+
};
|
300
|
+
// Gets the chunks in a range
|
301
|
+
const getChunksInRange = (chunks, posMap, startPos, endPos) => {
|
302
|
+
const result = [];
|
303
|
+
for (let i = 0; i < chunks.length; i++) {
|
304
|
+
const { startPos: chunkStart, endPos: chunkEnd } = posMap[i];
|
305
|
+
if (chunkEnd > startPos && chunkStart < endPos) {
|
306
|
+
result.push(chunks[i]);
|
307
|
+
}
|
308
|
+
}
|
309
|
+
return result;
|
310
|
+
};
|
311
|
+
// Builds a map of chunk positions
|
312
|
+
const buildChunkPositionMap = (chunks) => {
|
313
|
+
const posMap = [];
|
314
|
+
let currentPos = 0;
|
315
|
+
for (let i = 0; i < chunks.length; i++) {
|
316
|
+
const chunk = chunks[i];
|
317
|
+
const chunkLength = chunk.key.length;
|
318
|
+
posMap.push({
|
319
|
+
startPos: currentPos,
|
320
|
+
endPos: currentPos + chunkLength,
|
321
|
+
});
|
322
|
+
currentPos += chunkLength;
|
323
|
+
}
|
324
|
+
return posMap;
|
325
|
+
};
|
326
|
+
// Compares the attributes of two inline nodes
|
327
|
+
const compareInlineNodeAttrs = (originalNode, comparisonNode, operation = 'set') => {
|
328
|
+
if (operation === 'insert' || !originalNode) {
|
329
|
+
return comparisonNode.type.create({
|
330
|
+
...comparisonNode.attrs,
|
331
|
+
dataTracked: [createComparisonInsertAttrsDataTracked('')],
|
332
|
+
}, comparisonNode.content, comparisonNode.marks);
|
333
|
+
}
|
334
|
+
else if (operation === 'delete') {
|
335
|
+
return originalNode.type.create({
|
336
|
+
...originalNode.attrs,
|
337
|
+
dataTracked: [createComparisonDeleteAttrsDataTracked('')],
|
338
|
+
}, originalNode.content, originalNode.marks);
|
339
|
+
}
|
340
|
+
else if (!isEqual(originalNode.attrs, comparisonNode.attrs)) {
|
341
|
+
return comparisonNode.type.create({
|
342
|
+
...comparisonNode.attrs,
|
343
|
+
dataTracked: [
|
344
|
+
createComparisonSetAttrsDataTracked('', originalNode.attrs),
|
345
|
+
],
|
346
|
+
}, comparisonNode.content, comparisonNode.marks);
|
347
|
+
}
|
348
|
+
else {
|
349
|
+
return comparisonNode;
|
350
|
+
}
|
351
|
+
};
|
352
|
+
// Compares the text content of two ManuscriptNode objects
|
353
|
+
export const compareTextLikeContent = (original, comparison, wrapperNodeType) => {
|
354
|
+
const dmp = new diff_match_patch();
|
355
|
+
const diffs = dmp.diff_main(original.textContent, comparison.textContent);
|
356
|
+
dmp.diff_cleanupSemantic(diffs);
|
357
|
+
const content = diffs.map(([op, text]) => {
|
358
|
+
if (op === -1) {
|
359
|
+
return schema.text(text, [
|
360
|
+
schema.marks.tracked_delete.create({
|
361
|
+
dataTracked: createComparisonDeleteAttrsDataTracked(''),
|
362
|
+
}),
|
363
|
+
]);
|
364
|
+
}
|
365
|
+
else if (op === 1) {
|
366
|
+
return schema.text(text, [
|
367
|
+
schema.marks.tracked_insert.create({
|
368
|
+
dataTracked: createComparisonInsertAttrsDataTracked(''),
|
369
|
+
}),
|
370
|
+
]);
|
371
|
+
}
|
372
|
+
else {
|
373
|
+
return schema.text(text);
|
374
|
+
}
|
375
|
+
});
|
376
|
+
return wrapperNodeType.create(comparison.attrs, content);
|
377
|
+
};
|
378
|
+
//# sourceMappingURL=compare-paragraph-like.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"compare-paragraph-like.js","sourceRoot":"","sources":["../../../../src/lib/comparison/compare-paragraph-like.ts"],"names":[],"mappings":"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"}
|