@seafile/sdoc-editor 0.1.28-beta4 → 0.1.28-beta6
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.
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
1
2
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
3
|
import { DIFF_TYPE, ELEMENT_TYPE } from '../../basic-sdk/extension/constants';
|
|
3
4
|
import ObjectUtils from './object-utils';
|
|
4
|
-
var getElementIndexInDiffDocument = function getElementIndexInDiffDocument(
|
|
5
|
-
return
|
|
5
|
+
var getElementIndexInDiffDocument = function getElementIndexInDiffDocument(diffValue, element) {
|
|
6
|
+
return diffValue.findIndex(function (item) {
|
|
6
7
|
return item.id === element.id;
|
|
7
8
|
});
|
|
8
9
|
};
|
|
9
|
-
var getNearestElementIndex = function getNearestElementIndex(
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
10
|
+
var getNearestElementIndex = function getNearestElementIndex(diff, oldDocument, elementId) {
|
|
11
|
+
var diffValue = diff.value;
|
|
12
|
+
var elementInDiffDocumentIdx = getElementIndexInDiffDocument(diffValue, elementId);
|
|
13
|
+
if (elementInDiffDocumentIdx > -1) return elementInDiffDocumentIdx + 1;
|
|
14
14
|
var oldElementCount = oldDocument.length;
|
|
15
15
|
var elementInOldDocumentIndex = oldDocument.findIndex(function (item) {
|
|
16
16
|
return item.id === elementId;
|
|
@@ -19,27 +19,36 @@ var getNearestElementIndex = function getNearestElementIndex(diffDocument, oldDo
|
|
|
19
19
|
leftIndex = leftIndex === -1 ? 0 : leftIndex;
|
|
20
20
|
var rightIndex = elementInOldDocumentIndex + 1;
|
|
21
21
|
rightIndex = rightIndex === oldElementCount - 1 ? oldElementCount - 1 : rightIndex;
|
|
22
|
-
while (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
while (elementInDiffDocumentIdx === -1 && leftIndex > -2 && rightIndex < oldElementCount + 1) {
|
|
23
|
+
if (leftIndex > -1) {
|
|
24
|
+
var oldLeftElement = oldDocument[leftIndex];
|
|
25
|
+
elementInDiffDocumentIdx = getElementIndexInDiffDocument(diffValue, oldLeftElement);
|
|
26
|
+
if (elementInDiffDocumentIdx > -1) {
|
|
27
|
+
return elementInDiffDocumentIdx + 1;
|
|
28
|
+
}
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
if (rightIndex < oldElementCount) {
|
|
31
|
+
var oldLastElement = oldDocument[rightIndex];
|
|
32
|
+
elementInDiffDocumentIdx = getElementIndexInDiffDocument(diffValue, oldLastElement);
|
|
33
|
+
if (elementInDiffDocumentIdx > -1) {
|
|
34
|
+
return elementInDiffDocumentIdx;
|
|
35
|
+
}
|
|
32
36
|
}
|
|
33
37
|
leftIndex--;
|
|
34
38
|
rightIndex++;
|
|
39
|
+
if (leftIndex === -2 && rightIndex < oldElementCount) {
|
|
40
|
+
leftIndex = -1;
|
|
41
|
+
}
|
|
42
|
+
if (rightIndex === oldElementCount && leftIndex > -1) {
|
|
43
|
+
rightIndex = oldElementCount;
|
|
44
|
+
}
|
|
35
45
|
}
|
|
36
|
-
|
|
37
|
-
return elementInDiffDocument;
|
|
46
|
+
return diffValue.length - 1;
|
|
38
47
|
};
|
|
39
|
-
var
|
|
40
|
-
if (!
|
|
48
|
+
var updateDiffValue = function updateDiffValue(diff, element, oldElement) {
|
|
49
|
+
if (!diff || !element || !oldElement) return;
|
|
41
50
|
if (ObjectUtils.isSameObject(element, oldElement)) {
|
|
42
|
-
|
|
51
|
+
diff.value.push(_objectSpread(_objectSpread({}, element), {}, {
|
|
43
52
|
diff_type: DIFF_TYPE.COMMON
|
|
44
53
|
}));
|
|
45
54
|
return;
|
|
@@ -47,11 +56,11 @@ var updateDiffDocument = function updateDiffDocument(diffDocument, count, elemen
|
|
|
47
56
|
var currentElementType = element.type;
|
|
48
57
|
var oldElementType = oldElement.type;
|
|
49
58
|
if (currentElementType !== oldElementType) {
|
|
50
|
-
|
|
51
|
-
|
|
59
|
+
diff.changes.push(oldElement.id);
|
|
60
|
+
diff.value.push(_objectSpread(_objectSpread({}, oldElement), {}, {
|
|
52
61
|
diff_type: DIFF_TYPE.DELETE
|
|
53
62
|
}));
|
|
54
|
-
|
|
63
|
+
diff.value.push(_objectSpread(_objectSpread({}, element), {}, {
|
|
55
64
|
diff_type: DIFF_TYPE.ADD
|
|
56
65
|
}));
|
|
57
66
|
return;
|
|
@@ -70,11 +79,11 @@ var updateDiffDocument = function updateDiffDocument(diffDocument, count, elemen
|
|
|
70
79
|
case ELEMENT_TYPE.CODE_BLOCK:
|
|
71
80
|
case ELEMENT_TYPE.IMAGE:
|
|
72
81
|
{
|
|
73
|
-
|
|
74
|
-
|
|
82
|
+
diff.changes.push(oldElement.id);
|
|
83
|
+
diff.value.push(_objectSpread(_objectSpread({}, oldElement), {}, {
|
|
75
84
|
diff_type: DIFF_TYPE.DELETE
|
|
76
85
|
}));
|
|
77
|
-
|
|
86
|
+
diff.value.push(_objectSpread(_objectSpread({}, element), {}, {
|
|
78
87
|
diff_type: DIFF_TYPE.ADD
|
|
79
88
|
}));
|
|
80
89
|
break;
|
|
@@ -84,11 +93,12 @@ var updateDiffDocument = function updateDiffDocument(diffDocument, count, elemen
|
|
|
84
93
|
case ELEMENT_TYPE.LIST_ITEM:
|
|
85
94
|
case ELEMENT_TYPE.LIST_LIC:
|
|
86
95
|
{
|
|
96
|
+
var _diff$changes;
|
|
87
97
|
var _getElementDiffValue = getElementDiffValue(element.children, oldElement.children),
|
|
88
98
|
diffValue = _getElementDiffValue.value,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
99
|
+
diffChanges = _getElementDiffValue.changes;
|
|
100
|
+
(_diff$changes = diff.changes).push.apply(_diff$changes, _toConsumableArray(diffChanges));
|
|
101
|
+
diff.value.push(_objectSpread(_objectSpread({}, element), {}, {
|
|
92
102
|
children: diffValue,
|
|
93
103
|
diff_type: DIFF_TYPE.MODIFY
|
|
94
104
|
}));
|
|
@@ -96,66 +106,80 @@ var updateDiffDocument = function updateDiffDocument(diffDocument, count, elemen
|
|
|
96
106
|
}
|
|
97
107
|
default:
|
|
98
108
|
{
|
|
99
|
-
|
|
100
|
-
|
|
109
|
+
diff.changes.push(oldElement.id);
|
|
110
|
+
diff.value.push(_objectSpread(_objectSpread({}, oldElement), {}, {
|
|
101
111
|
diff_type: DIFF_TYPE.DELETE
|
|
102
112
|
}));
|
|
103
|
-
|
|
113
|
+
diff.value.push(_objectSpread(_objectSpread({}, element), {}, {
|
|
104
114
|
diff_type: DIFF_TYPE.ADD
|
|
105
115
|
}));
|
|
106
116
|
break;
|
|
107
117
|
}
|
|
108
118
|
}
|
|
109
119
|
};
|
|
110
|
-
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* params:
|
|
123
|
+
* currentValue: current version document content
|
|
124
|
+
* oldValue: last version document content
|
|
125
|
+
* return { value: [], change: [] }
|
|
126
|
+
*/
|
|
127
|
+
var getElementDiffValue = function getElementDiffValue(currentContent, oldContent) {
|
|
111
128
|
// init
|
|
112
|
-
var
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
129
|
+
var diff = {
|
|
130
|
+
value: [],
|
|
131
|
+
changes: []
|
|
132
|
+
};
|
|
133
|
+
var currentContentMap = {};
|
|
134
|
+
var oldContentMap = {};
|
|
135
|
+
currentContent.forEach(function (element) {
|
|
136
|
+
currentContentMap[element.id] = element;
|
|
118
137
|
});
|
|
119
|
-
|
|
120
|
-
|
|
138
|
+
oldContent.forEach(function (element) {
|
|
139
|
+
oldContentMap[element.id] = element;
|
|
121
140
|
});
|
|
122
141
|
|
|
123
142
|
// generator diff elements
|
|
124
|
-
for (var i = 0; i <
|
|
125
|
-
var element =
|
|
126
|
-
var isAdded = !
|
|
143
|
+
for (var i = 0; i < currentContent.length; i++) {
|
|
144
|
+
var element = currentContent[i];
|
|
145
|
+
var isAdded = !oldContentMap[element.id]; // added
|
|
127
146
|
if (isAdded) {
|
|
128
|
-
|
|
129
|
-
|
|
147
|
+
diff.changes.push(element.id);
|
|
148
|
+
diff.value.push(_objectSpread(_objectSpread({}, element), {}, {
|
|
130
149
|
diff_type: DIFF_TYPE.ADD
|
|
131
150
|
}));
|
|
132
151
|
continue;
|
|
133
152
|
}
|
|
134
|
-
|
|
153
|
+
updateDiffValue(diff, element, oldContentMap[element.id]);
|
|
135
154
|
}
|
|
136
|
-
|
|
137
|
-
|
|
155
|
+
oldContent.forEach(function (oldElement) {
|
|
156
|
+
var oldElementId = oldElement.id;
|
|
157
|
+
if (!currentContentMap[oldElementId]) {
|
|
138
158
|
// deleted
|
|
139
|
-
|
|
140
|
-
var elementIndex = getNearestElementIndex(
|
|
141
|
-
|
|
159
|
+
diff.changes.push(oldElementId);
|
|
160
|
+
var elementIndex = getNearestElementIndex(diff, oldContent, oldElementId);
|
|
161
|
+
diff.value.splice(elementIndex, 0, _objectSpread(_objectSpread({}, oldElement), {}, {
|
|
142
162
|
diff_type: DIFF_TYPE.DELETE
|
|
143
163
|
}));
|
|
144
164
|
}
|
|
145
165
|
});
|
|
146
|
-
return
|
|
147
|
-
value: diffDocument,
|
|
148
|
-
count: count
|
|
149
|
-
};
|
|
166
|
+
return diff;
|
|
150
167
|
};
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* params:
|
|
171
|
+
* currentValue: current version document
|
|
172
|
+
* oldValue: last version document
|
|
173
|
+
* return { value: [], change: [] }
|
|
174
|
+
*/
|
|
151
175
|
export var getDiff = function getDiff(currentValue, oldValue) {
|
|
152
176
|
var currentVersion = currentValue.version,
|
|
153
|
-
|
|
177
|
+
currentContent = currentValue.children;
|
|
154
178
|
var oldVersion = oldValue.version,
|
|
155
|
-
|
|
179
|
+
oldContent = oldValue.children;
|
|
156
180
|
if (currentVersion === oldVersion) return {
|
|
157
|
-
value:
|
|
158
|
-
|
|
181
|
+
value: currentContent,
|
|
182
|
+
changes: []
|
|
159
183
|
};
|
|
160
|
-
return getElementDiffValue(
|
|
184
|
+
return getElementDiffValue(currentContent, oldContent);
|
|
161
185
|
};
|
|
@@ -21,7 +21,7 @@ var ObjectUtils = /*#__PURE__*/function () {
|
|
|
21
21
|
}
|
|
22
22
|
}, {
|
|
23
23
|
key: "isObjectChanged",
|
|
24
|
-
value: function isObjectChanged(source, comparison) {
|
|
24
|
+
value: function isObjectChanged(source, comparison, notIncludeKeys) {
|
|
25
25
|
var _this = this;
|
|
26
26
|
if (!this.iterable(source)) {
|
|
27
27
|
throw new Error("source should be a Object or Array , but got ".concat(this.getDataType(source)));
|
|
@@ -30,13 +30,15 @@ var ObjectUtils = /*#__PURE__*/function () {
|
|
|
30
30
|
return true;
|
|
31
31
|
}
|
|
32
32
|
var sourceKeys = Object.keys(source);
|
|
33
|
-
var comparisonKeys = Object.keys(_objectSpread(_objectSpread({}, source), comparison))
|
|
33
|
+
var comparisonKeys = Object.keys(_objectSpread(_objectSpread({}, source), comparison)).filter(function (key) {
|
|
34
|
+
return !notIncludeKeys.includes(key);
|
|
35
|
+
});
|
|
34
36
|
if (sourceKeys.length !== comparisonKeys.length) {
|
|
35
37
|
return true;
|
|
36
38
|
}
|
|
37
39
|
return comparisonKeys.some(function (key) {
|
|
38
40
|
if (_this.iterable(source[key])) {
|
|
39
|
-
return _this.isObjectChanged(source[key], comparison[key]);
|
|
41
|
+
return _this.isObjectChanged(source[key], comparison[key], notIncludeKeys);
|
|
40
42
|
} else {
|
|
41
43
|
return source[key] !== comparison[key];
|
|
42
44
|
}
|
|
@@ -45,8 +47,9 @@ var ObjectUtils = /*#__PURE__*/function () {
|
|
|
45
47
|
}, {
|
|
46
48
|
key: "isSameObject",
|
|
47
49
|
value: function isSameObject(source, comparison) {
|
|
50
|
+
var notIncludeKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
48
51
|
if (!source || !comparison) return false;
|
|
49
|
-
return !this.isObjectChanged(source, comparison);
|
|
52
|
+
return !this.isObjectChanged(source, comparison, notIncludeKeys);
|
|
50
53
|
}
|
|
51
54
|
}]);
|
|
52
55
|
return ObjectUtils;
|
|
@@ -76,21 +76,14 @@ var DiffViewer = /*#__PURE__*/function (_Component) {
|
|
|
76
76
|
};
|
|
77
77
|
var currentContent = _props.currentContent,
|
|
78
78
|
lastContent = _props.lastContent;
|
|
79
|
-
|
|
80
|
-
value = _getDiff.value,
|
|
81
|
-
count = _getDiff.count;
|
|
79
|
+
_this.diff = getDiff(currentContent, lastContent);
|
|
82
80
|
_this.editor = withNodeId(editor);
|
|
83
|
-
_this.value = value;
|
|
84
|
-
_this.count = count;
|
|
85
81
|
return _this;
|
|
86
82
|
}
|
|
87
83
|
_createClass(DiffViewer, [{
|
|
88
84
|
key: "componentDidMount",
|
|
89
85
|
value: function componentDidMount() {
|
|
90
|
-
this.props.didMountCallback && this.props.didMountCallback(
|
|
91
|
-
value: this.value,
|
|
92
|
-
count: this.count
|
|
93
|
-
});
|
|
86
|
+
this.props.didMountCallback && this.props.didMountCallback(this.diff);
|
|
94
87
|
}
|
|
95
88
|
}, {
|
|
96
89
|
key: "render",
|
|
@@ -103,7 +96,7 @@ var DiffViewer = /*#__PURE__*/function (_Component) {
|
|
|
103
96
|
className: "flex-fill o-auto"
|
|
104
97
|
}, /*#__PURE__*/React.createElement(Slate, {
|
|
105
98
|
editor: this.editor,
|
|
106
|
-
value: this.value,
|
|
99
|
+
value: this.diff.value,
|
|
107
100
|
onChange: function onChange() {}
|
|
108
101
|
}, /*#__PURE__*/React.createElement("div", {
|
|
109
102
|
className: "article mx-auto"
|