@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(diffDocument, element) {
5
- return diffDocument.findIndex(function (item) {
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(diffDocument, oldDocument, elementId) {
10
- var elementInDiffDocument = getElementIndexInDiffDocument(diffDocument, elementId);
11
- if (elementInDiffDocument > -1) {
12
- return elementInDiffDocument;
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 (elementInDiffDocument === -1 && leftIndex > -1 && rightIndex < oldElementCount) {
23
- var oldLeftElement = oldDocument[leftIndex];
24
- elementInDiffDocument = getElementIndexInDiffDocument(diffDocument, oldLeftElement);
25
- if (elementInDiffDocument > -1) {
26
- break;
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
- var oldLastElement = oldDocument[rightIndex];
29
- elementInDiffDocument = getElementIndexInDiffDocument(diffDocument, oldLastElement);
30
- if (elementInDiffDocument > -1) {
31
- break;
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
- if (elementInDiffDocument === -1) return diffDocument.length - 1;
37
- return elementInDiffDocument;
46
+ return diffValue.length - 1;
38
47
  };
39
- var updateDiffDocument = function updateDiffDocument(diffDocument, count, element, oldElement) {
40
- if (!diffDocument || !element || !oldElement) return;
48
+ var updateDiffValue = function updateDiffValue(diff, element, oldElement) {
49
+ if (!diff || !element || !oldElement) return;
41
50
  if (ObjectUtils.isSameObject(element, oldElement)) {
42
- diffDocument.push(_objectSpread(_objectSpread({}, element), {}, {
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
- count++;
51
- diffDocument.push(_objectSpread(_objectSpread({}, oldElement), {}, {
59
+ diff.changes.push(oldElement.id);
60
+ diff.value.push(_objectSpread(_objectSpread({}, oldElement), {}, {
52
61
  diff_type: DIFF_TYPE.DELETE
53
62
  }));
54
- diffDocument.push(_objectSpread(_objectSpread({}, element), {}, {
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
- count++;
74
- diffDocument.push(_objectSpread(_objectSpread({}, oldElement), {}, {
82
+ diff.changes.push(oldElement.id);
83
+ diff.value.push(_objectSpread(_objectSpread({}, oldElement), {}, {
75
84
  diff_type: DIFF_TYPE.DELETE
76
85
  }));
77
- diffDocument.push(_objectSpread(_objectSpread({}, element), {}, {
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
- diffCount = _getElementDiffValue.count;
90
- count += diffCount;
91
- diffDocument.push(_objectSpread(_objectSpread({}, element), {}, {
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
- count++;
100
- diffDocument.push(_objectSpread(_objectSpread({}, oldElement), {}, {
109
+ diff.changes.push(oldElement.id);
110
+ diff.value.push(_objectSpread(_objectSpread({}, oldElement), {}, {
101
111
  diff_type: DIFF_TYPE.DELETE
102
112
  }));
103
- diffDocument.push(_objectSpread(_objectSpread({}, element), {}, {
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
- var getElementDiffValue = function getElementDiffValue(currentChildren, oldChildren) {
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 diffDocument = [];
113
- var count = 0;
114
- var currentChildrenMap = {};
115
- var oldChildrenMap = {};
116
- currentChildren.forEach(function (element) {
117
- currentChildrenMap[element.id] = element;
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
- oldChildren.forEach(function (element) {
120
- oldChildrenMap[element.id] = element;
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 < currentChildren.length; i++) {
125
- var element = currentChildren[i];
126
- var isAdded = !oldChildrenMap[element.id]; // added
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
- count++;
129
- diffDocument.push(_objectSpread(_objectSpread({}, element), {}, {
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
- updateDiffDocument(diffDocument, count, element, oldChildrenMap[element.id]);
153
+ updateDiffValue(diff, element, oldContentMap[element.id]);
135
154
  }
136
- oldChildren.forEach(function (oldElement) {
137
- if (!currentChildrenMap[oldElement.id]) {
155
+ oldContent.forEach(function (oldElement) {
156
+ var oldElementId = oldElement.id;
157
+ if (!currentContentMap[oldElementId]) {
138
158
  // deleted
139
- count++;
140
- var elementIndex = getNearestElementIndex(diffDocument, oldChildren, oldElement.id);
141
- diffDocument.splice(elementIndex, 0, _objectSpread(_objectSpread({}, oldElement), {}, {
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
- currentChildren = currentValue.children;
177
+ currentContent = currentValue.children;
154
178
  var oldVersion = oldValue.version,
155
- oldChildren = oldValue.children;
179
+ oldContent = oldValue.children;
156
180
  if (currentVersion === oldVersion) return {
157
- value: currentChildren,
158
- count: 0
181
+ value: currentContent,
182
+ changes: []
159
183
  };
160
- return getElementDiffValue(currentChildren, oldChildren);
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
- var _getDiff = getDiff(currentContent, lastContent),
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"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "0.1.28beta4",
3
+ "version": "0.1.28beta6",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",