easy-richtextarea 4.0.1 → 4.0.3
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/example.js +1124 -1124
- package/lib/browser.js +9 -9
- package/lib/main.js +1 -1
- package/lib/operations/generate.js +11 -11
- package/package.json +1 -1
- package/src/browser.js +3 -3
- package/src/main.js +1 -0
- package/src/operations/generate.js +11 -11
- package/test/content/transform.js +9 -9
- package/test/operations/generate.js +15 -16
package/lib/browser.js
CHANGED
|
@@ -9,6 +9,12 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
+
Selection: function() {
|
|
13
|
+
return _selection.default;
|
|
14
|
+
},
|
|
15
|
+
RichTextarea: function() {
|
|
16
|
+
return _richTextarea.default;
|
|
17
|
+
},
|
|
12
18
|
EmptyOperation: function() {
|
|
13
19
|
return _empty.default;
|
|
14
20
|
},
|
|
@@ -32,14 +38,10 @@ _export(exports, {
|
|
|
32
38
|
},
|
|
33
39
|
transformOperations: function() {
|
|
34
40
|
return _transform1.default;
|
|
35
|
-
},
|
|
36
|
-
Selection: function() {
|
|
37
|
-
return _selection.default;
|
|
38
|
-
},
|
|
39
|
-
RichTextarea: function() {
|
|
40
|
-
return _richTextarea.default;
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
|
+
var _selection = /*#__PURE__*/ _interopRequireDefault(require("./selection"));
|
|
44
|
+
var _richTextarea = /*#__PURE__*/ _interopRequireDefault(require("./richTextarea"));
|
|
43
45
|
var _empty = /*#__PURE__*/ _interopRequireDefault(require("./operation/empty"));
|
|
44
46
|
var _insert = /*#__PURE__*/ _interopRequireDefault(require("./operation/insert"));
|
|
45
47
|
var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete"));
|
|
@@ -48,12 +50,10 @@ var _toJSON = /*#__PURE__*/ _interopRequireDefault(require("./operations/toJSON"
|
|
|
48
50
|
var _fromJSON = /*#__PURE__*/ _interopRequireDefault(require("./operations/fromJSON"));
|
|
49
51
|
var _generate = /*#__PURE__*/ _interopRequireDefault(require("./operations/generate"));
|
|
50
52
|
var _transform1 = /*#__PURE__*/ _interopRequireDefault(require("./operations/transform"));
|
|
51
|
-
var _selection = /*#__PURE__*/ _interopRequireDefault(require("./selection"));
|
|
52
|
-
var _richTextarea = /*#__PURE__*/ _interopRequireDefault(require("./richTextarea"));
|
|
53
53
|
function _interopRequireDefault(obj) {
|
|
54
54
|
return obj && obj.__esModule ? obj : {
|
|
55
55
|
default: obj
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuL3JpY2hUZXh0YXJlYVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbXB0eU9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvbi9lbXB0eVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbnNlcnRPcGVyYXRpb24gfSBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlbGV0ZU9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvbi9kZWxldGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHJhbnNmb3JtQ29udGVudCB9IGZyb20gXCIuL2NvbnRlbnQvdHJhbnNmb3JtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9wZXJhdGlvbnNUb0pTT04gfSBmcm9tIFwiLi9vcGVyYXRpb25zL3RvSlNPTlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvcGVyYXRpb25zRnJvbUpTT04gfSBmcm9tIFwiLi9vcGVyYXRpb25zL2Zyb21KU09OXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdlbmVyYXRlT3BlcmF0aW9ucyB9IGZyb20gXCIuL29wZXJhdGlvbnMvZ2VuZXJhdGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHJhbnNmb3JtT3BlcmF0aW9ucyB9IGZyb20gXCIuL29wZXJhdGlvbnMvdHJhbnNmb3JtXCI7XG5cbiJdLCJuYW1lcyI6WyJTZWxlY3Rpb24iLCJSaWNoVGV4dGFyZWEiLCJFbXB0eU9wZXJhdGlvbiIsIkluc2VydE9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsInRyYW5zZm9ybUNvbnRlbnQiLCJvcGVyYXRpb25zVG9KU09OIiwib3BlcmF0aW9uc0Zyb21KU09OIiwiZ2VuZXJhdGVPcGVyYXRpb25zIiwidHJhbnNmb3JtT3BlcmF0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBR29CQSxTQUFTO2VBQVRBLGtCQUFTOztJQUNUQyxZQUFZO2VBQVpBLHFCQUFZOztJQUNaQyxjQUFjO2VBQWRBLGNBQWM7O0lBQ2RDLGVBQWU7ZUFBZkEsZUFBZTs7SUFDZkMsZUFBZTtlQUFmQSxlQUFlOztJQUNmQyxnQkFBZ0I7ZUFBaEJBLGtCQUFnQjs7SUFDaEJDLGdCQUFnQjtlQUFoQkEsZUFBZ0I7O0lBQ2hCQyxrQkFBa0I7ZUFBbEJBLGlCQUFrQjs7SUFDbEJDLGtCQUFrQjtlQUFsQkEsaUJBQWtCOztJQUNsQkMsbUJBQW1CO2VBQW5CQSxtQkFBbUI7Ozs4REFURjtpRUFDRzswREFDRTsyREFDQzsyREFDQTs4REFDQzsyREFDQTs2REFDRTs2REFDQTsrREFDQyJ9
|
package/lib/main.js
CHANGED
|
@@ -56,4 +56,4 @@ function _interopRequireDefault(obj) {
|
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW1wdHlPcGVyYXRpb24gfSBmcm9tIFwiLi9vcGVyYXRpb24vZW1wdHlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5zZXJ0T3BlcmF0aW9uIH0gZnJvbSBcIi4vb3BlcmF0aW9uL2luc2VydFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWxldGVPcGVyYXRpb24gfSBmcm9tIFwiLi9vcGVyYXRpb24vZGVsZXRlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyYW5zZm9ybUNvbnRlbnQgfSBmcm9tIFwiLi9jb250ZW50L3RyYW5zZm9ybVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvcGVyYXRpb25zVG9KU09OIH0gZnJvbSBcIi4vb3BlcmF0aW9ucy90b0pTT05cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3BlcmF0aW9uc0Zyb21KU09OIH0gZnJvbSBcIi4vb3BlcmF0aW9ucy9mcm9tSlNPTlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBnZW5lcmF0ZU9wZXJhdGlvbnMgfSBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyYW5zZm9ybU9wZXJhdGlvbnMgfSBmcm9tIFwiLi9vcGVyYXRpb25zL3RyYW5zZm9ybVwiO1xuIl0sIm5hbWVzIjpbInR5cGVzIiwiU2VsZWN0aW9uIiwiRW1wdHlPcGVyYXRpb24iLCJJbnNlcnRPcGVyYXRpb24iLCJEZWxldGVPcGVyYXRpb24iLCJ0cmFuc2Zvcm1Db250ZW50Iiwib3BlcmF0aW9uc1RvSlNPTiIsIm9wZXJhdGlvbnNGcm9tSlNPTiIsImdlbmVyYXRlT3BlcmF0aW9ucyIsInRyYW5zZm9ybU9wZXJhdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQUVvQkEsS0FBSztlQUFMQSxjQUFLOztJQUNMQyxTQUFTO2VBQVRBLGtCQUFTOztJQUVUQyxjQUFjO2VBQWRBLGNBQWM7O0lBQ2RDLGVBQWU7ZUFBZkEsZUFBZTs7SUFDZkMsZUFBZTtlQUFmQSxlQUFlOztJQUNmQyxnQkFBZ0I7ZUFBaEJBLGtCQUFnQjs7SUFDaEJDLGdCQUFnQjtlQUFoQkEsZUFBZ0I7O0lBQ2hCQyxrQkFBa0I7ZUFBbEJBLGlCQUFrQjs7SUFDbEJDLGtCQUFrQjtlQUFsQkEsaUJBQWtCOztJQUNsQkMsbUJBQW1CO2VBQW5CQSxtQkFBbUI7OzswREFWTjs4REFDSTswREFFSzsyREFDQzsyREFDQTs4REFDQzsyREFDQTs2REFDRTs2REFDQTsrREFDQyJ9
|
|
@@ -15,28 +15,28 @@ function _interopRequireDefault(obj) {
|
|
|
15
15
|
default: obj
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
function generateOperations(
|
|
19
|
-
var operations = [],
|
|
18
|
+
function generateOperations(contentA, contentB) {
|
|
19
|
+
var operations = [], contentALength = contentA.length, contentBLength = contentB.length;
|
|
20
20
|
var left, right;
|
|
21
|
-
for(left = 0; left <
|
|
22
|
-
if (
|
|
21
|
+
for(left = 0; left < contentALength && left < contentBLength; left++){
|
|
22
|
+
if (contentA[left] !== contentB[left]) {
|
|
23
23
|
break;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
for(right = 0; right <
|
|
27
|
-
if (
|
|
26
|
+
for(right = 0; right < contentALength - left && right < contentBLength - left; right++){
|
|
27
|
+
if (contentA[contentALength - right - 1] !== contentB[contentBLength - right - 1]) {
|
|
28
28
|
break;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
if (left + right !==
|
|
32
|
-
var length =
|
|
31
|
+
if (left + right !== contentALength) {
|
|
32
|
+
var length = contentALength - left - right, position = left, deleteOperation = _delete.default.fromLengthAndPosition(length, position);
|
|
33
33
|
operations.push(deleteOperation);
|
|
34
34
|
}
|
|
35
|
-
if (left + right !==
|
|
36
|
-
var string =
|
|
35
|
+
if (left + right !== contentBLength) {
|
|
36
|
+
var string = contentB.substring(left, contentBLength - right), position1 = left, insertOperation = _insert.default.fromStringAndPosition(string, position1);
|
|
37
37
|
operations.push(insertOperation);
|
|
38
38
|
}
|
|
39
39
|
return operations;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb25zL2dlbmVyYXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi4vb3BlcmF0aW9uL2luc2VydFwiO1xyXG5pbXBvcnQgRGVsZXRlT3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb24vZGVsZXRlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZU9wZXJhdGlvbnMoY29udGVudEEsIGNvbnRlbnRCKSB7XHJcbiAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdLFxyXG4gICAgICAgIGNvbnRlbnRBTGVuZ3RoID0gY29udGVudEEubGVuZ3RoLFxyXG4gICAgICAgIGNvbnRlbnRCTGVuZ3RoID0gY29udGVudEIubGVuZ3RoO1xyXG4gIFxyXG4gIGxldCBsZWZ0LCByaWdodDtcclxuXHJcbiAgZm9yIChsZWZ0ID0gMDsgKGxlZnQgPCBjb250ZW50QUxlbmd0aCkgJiYgKGxlZnQgPCBjb250ZW50Qkxlbmd0aCk7IGxlZnQrKykge1xyXG4gICAgaWYgKGNvbnRlbnRBW2xlZnRdICE9PSBjb250ZW50QltsZWZ0XSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAocmlnaHQgPSAwOyAocmlnaHQgPCBjb250ZW50QUxlbmd0aCAtIGxlZnQpICYmIChyaWdodCA8IGNvbnRlbnRCTGVuZ3RoIC0gbGVmdCk7IHJpZ2h0KyspIHtcclxuICAgIGlmIChjb250ZW50QVtjb250ZW50QUxlbmd0aCAtIHJpZ2h0IC0gMV0gIT09IGNvbnRlbnRCW2NvbnRlbnRCTGVuZ3RoIC0gcmlnaHQgLSAxXSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChsZWZ0ICsgcmlnaHQgIT09IGNvbnRlbnRBTGVuZ3RoKSB7XHJcbiAgICBjb25zdCBsZW5ndGggPSBjb250ZW50QUxlbmd0aCAtIGxlZnQgLSByaWdodCwgIC8vL1xyXG4gICAgICAgICAgcG9zaXRpb24gPSBsZWZ0LCAvLy9cclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tTGVuZ3RoQW5kUG9zaXRpb24obGVuZ3RoLCBwb3NpdGlvbik7XHJcblxyXG4gICAgb3BlcmF0aW9ucy5wdXNoKGRlbGV0ZU9wZXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICBpZiAobGVmdCArIHJpZ2h0ICE9PSBjb250ZW50Qkxlbmd0aCkge1xyXG4gICAgY29uc3Qgc3RyaW5nID0gY29udGVudEIuc3Vic3RyaW5nKGxlZnQsIGNvbnRlbnRCTGVuZ3RoIC0gcmlnaHQpLCAgLy8vXHJcbiAgICAgICAgICBwb3NpdGlvbiA9IGxlZnQsIC8vL1xyXG4gICAgICAgICAgaW5zZXJ0T3BlcmF0aW9uID0gSW5zZXJ0T3BlcmF0aW9uLmZyb21TdHJpbmdBbmRQb3NpdGlvbihzdHJpbmcsIHBvc2l0aW9uKTtcclxuXHJcbiAgICBvcGVyYXRpb25zLnB1c2goaW5zZXJ0T3BlcmF0aW9uKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBvcGVyYXRpb25zO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJnZW5lcmF0ZU9wZXJhdGlvbnMiLCJjb250ZW50QSIsImNvbnRlbnRCIiwib3BlcmF0aW9ucyIsImNvbnRlbnRBTGVuZ3RoIiwibGVuZ3RoIiwiY29udGVudEJMZW5ndGgiLCJsZWZ0IiwicmlnaHQiLCJwb3NpdGlvbiIsImRlbGV0ZU9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsImZyb21MZW5ndGhBbmRQb3NpdGlvbiIsInB1c2giLCJzdHJpbmciLCJzdWJzdHJpbmciLCJpbnNlcnRPcGVyYXRpb24iLCJJbnNlcnRPcGVyYXRpb24iLCJmcm9tU3RyaW5nQW5kUG9zaXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUtBOzs7ZUFBd0JBOzs7MkRBSEk7MkRBQ0E7Ozs7OztBQUViLFNBQVNBLG1CQUFtQkMsUUFBUSxFQUFFQyxRQUFRLEVBQUU7SUFDN0QsSUFBTUMsYUFBYSxFQUFFLEVBQ2ZDLGlCQUFpQkgsU0FBU0ksTUFBTSxFQUNoQ0MsaUJBQWlCSixTQUFTRyxNQUFNO0lBRXRDLElBQUlFLE1BQU1DO0lBRVYsSUFBS0QsT0FBTyxHQUFHLEFBQUNBLE9BQU9ILGtCQUFvQkcsT0FBT0QsZ0JBQWlCQyxPQUFRO1FBQ3pFLElBQUlOLFFBQVEsQ0FBQ00sS0FBSyxLQUFLTCxRQUFRLENBQUNLLEtBQUssRUFBRTtZQUNyQyxLQUFNO1FBQ1IsQ0FBQztJQUNIO0lBRUEsSUFBS0MsUUFBUSxHQUFHLEFBQUNBLFFBQVFKLGlCQUFpQkcsUUFBVUMsUUFBUUYsaUJBQWlCQyxNQUFPQyxRQUFTO1FBQzNGLElBQUlQLFFBQVEsQ0FBQ0csaUJBQWlCSSxRQUFRLEVBQUUsS0FBS04sUUFBUSxDQUFDSSxpQkFBaUJFLFFBQVEsRUFBRSxFQUFFO1lBQ2pGLEtBQU07UUFDUixDQUFDO0lBQ0g7SUFFQSxJQUFJRCxPQUFPQyxVQUFVSixnQkFBZ0I7UUFDbkMsSUFBTUMsU0FBU0QsaUJBQWlCRyxPQUFPQyxPQUNqQ0MsV0FBV0YsTUFDWEcsa0JBQWtCQyxlQUFlLENBQUNDLHFCQUFxQixDQUFDUCxRQUFRSTtRQUV0RU4sV0FBV1UsSUFBSSxDQUFDSDtJQUNsQixDQUFDO0lBRUQsSUFBSUgsT0FBT0MsVUFBVUYsZ0JBQWdCO1FBQ25DLElBQU1RLFNBQVNaLFNBQVNhLFNBQVMsQ0FBQ1IsTUFBTUQsaUJBQWlCRSxRQUNuREMsWUFBV0YsTUFDWFMsa0JBQWtCQyxlQUFlLENBQUNDLHFCQUFxQixDQUFDSixRQUFRTDtRQUV0RU4sV0FBV1UsSUFBSSxDQUFDRztJQUNsQixDQUFDO0lBRUQsT0FBT2I7QUFDVCJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "easy-richtextarea",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.3",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/easy-richtextarea",
|
|
7
7
|
"description": "A textarea element that handles and hands off events well.",
|
package/src/browser.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
export { default as Selection } from "./selection";
|
|
5
|
+
export { default as RichTextarea } from "./richTextarea";
|
|
3
6
|
export { default as EmptyOperation } from "./operation/empty";
|
|
4
7
|
export { default as InsertOperation } from "./operation/insert";
|
|
5
8
|
export { default as DeleteOperation } from "./operation/delete";
|
|
@@ -9,6 +12,3 @@ export { default as operationsFromJSON } from "./operations/fromJSON";
|
|
|
9
12
|
export { default as generateOperations } from "./operations/generate";
|
|
10
13
|
export { default as transformOperations } from "./operations/transform";
|
|
11
14
|
|
|
12
|
-
export { default as Selection } from "./selection";
|
|
13
|
-
|
|
14
|
-
export { default as RichTextarea } from "./richTextarea";
|
package/src/main.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
export { default as types } from "./types";
|
|
4
4
|
export { default as Selection } from "./selection";
|
|
5
|
+
|
|
5
6
|
export { default as EmptyOperation } from "./operation/empty";
|
|
6
7
|
export { default as InsertOperation } from "./operation/insert";
|
|
7
8
|
export { default as DeleteOperation } from "./operation/delete";
|
|
@@ -3,35 +3,35 @@
|
|
|
3
3
|
import InsertOperation from "../operation/insert";
|
|
4
4
|
import DeleteOperation from "../operation/delete";
|
|
5
5
|
|
|
6
|
-
export default function generateOperations(
|
|
6
|
+
export default function generateOperations(contentA, contentB) {
|
|
7
7
|
const operations = [],
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
contentALength = contentA.length,
|
|
9
|
+
contentBLength = contentB.length;
|
|
10
10
|
|
|
11
11
|
let left, right;
|
|
12
12
|
|
|
13
|
-
for (left = 0; (left <
|
|
14
|
-
if (
|
|
13
|
+
for (left = 0; (left < contentALength) && (left < contentBLength); left++) {
|
|
14
|
+
if (contentA[left] !== contentB[left]) {
|
|
15
15
|
break;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
for (right = 0; (right <
|
|
20
|
-
if (
|
|
19
|
+
for (right = 0; (right < contentALength - left) && (right < contentBLength - left); right++) {
|
|
20
|
+
if (contentA[contentALength - right - 1] !== contentB[contentBLength - right - 1]) {
|
|
21
21
|
break;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
if (left + right !==
|
|
26
|
-
const length =
|
|
25
|
+
if (left + right !== contentALength) {
|
|
26
|
+
const length = contentALength - left - right, ///
|
|
27
27
|
position = left, ///
|
|
28
28
|
deleteOperation = DeleteOperation.fromLengthAndPosition(length, position);
|
|
29
29
|
|
|
30
30
|
operations.push(deleteOperation);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if (left + right !==
|
|
34
|
-
const string =
|
|
33
|
+
if (left + right !== contentBLength) {
|
|
34
|
+
const string = contentB.substring(left, contentBLength - right), ///
|
|
35
35
|
position = left, ///
|
|
36
36
|
insertOperation = InsertOperation.fromStringAndPosition(string, position);
|
|
37
37
|
|
|
@@ -45,15 +45,15 @@ describe("transformContent", () => {
|
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
-
describe("the array of operations is generated
|
|
49
|
-
it("returns the result of applying those operations
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
operations = generateOperations(
|
|
53
|
-
|
|
54
|
-
expectedContent =
|
|
55
|
-
|
|
56
|
-
assert.equal(
|
|
48
|
+
describe("the array of operations is generated", () => {
|
|
49
|
+
it("returns the result of applying those operations", () => {
|
|
50
|
+
const contentA = helpers.content(),
|
|
51
|
+
contentB = helpers.content(),
|
|
52
|
+
operations = generateOperations(contentA, contentB),
|
|
53
|
+
transformedContentA = transformContent(contentA, operations),
|
|
54
|
+
expectedContent = contentB; ///
|
|
55
|
+
|
|
56
|
+
assert.equal(transformedContentA, expectedContent);
|
|
57
57
|
});
|
|
58
58
|
});
|
|
59
59
|
});
|
|
@@ -10,21 +10,20 @@ const{ first, second } = arrayUtilities,
|
|
|
10
10
|
{ insertType, deleteType } = types;
|
|
11
11
|
|
|
12
12
|
describe("generateOperations", () => {
|
|
13
|
-
describe("the
|
|
13
|
+
describe("the contents are the same", () => {
|
|
14
14
|
it("generates a zero length array of operations", () => {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
operations = generateOperations(workingContent, editableContent);
|
|
15
|
+
const content = helpers.content(),
|
|
16
|
+
operations = generateOperations(content, content);
|
|
18
17
|
|
|
19
18
|
assert.lengthOf(operations, 0);
|
|
20
19
|
});
|
|
21
20
|
});
|
|
22
21
|
|
|
23
|
-
describe("the
|
|
22
|
+
describe("the second content is a subset of the first content", () => {
|
|
24
23
|
it("generates a array of operations containing an insert operation", () => {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
operations = generateOperations(
|
|
24
|
+
const contentA = helpers.content(),
|
|
25
|
+
contentB = `123${contentA}`,
|
|
26
|
+
operations = generateOperations(contentA, contentB);
|
|
28
27
|
|
|
29
28
|
assert.lengthOf(operations, 1);
|
|
30
29
|
|
|
@@ -39,11 +38,11 @@ describe("generateOperations", () => {
|
|
|
39
38
|
});
|
|
40
39
|
});
|
|
41
40
|
|
|
42
|
-
describe("the
|
|
41
|
+
describe("the first content is a subset of second content", () => {
|
|
43
42
|
it("generates array of operations containing a delete operation", () => {
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
operations = generateOperations(
|
|
43
|
+
const contentB = helpers.content(),
|
|
44
|
+
contentA = `xyz${contentB}`,
|
|
45
|
+
operations = generateOperations(contentA, contentB);
|
|
47
46
|
|
|
48
47
|
assert.lengthOf(operations, 1);
|
|
49
48
|
|
|
@@ -58,11 +57,11 @@ describe("generateOperations", () => {
|
|
|
58
57
|
});
|
|
59
58
|
});
|
|
60
59
|
|
|
61
|
-
describe("the
|
|
60
|
+
describe("the contents are different", () => {
|
|
62
61
|
it("generates array of operations containing one delete operation followed by an insert operation", () => {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
operations = generateOperations(
|
|
62
|
+
const contentA = helpers.content(),
|
|
63
|
+
contentB = helpers.content(),
|
|
64
|
+
operations = generateOperations(contentA, contentB);
|
|
66
65
|
|
|
67
66
|
assert.lengthOf(operations, 2);
|
|
68
67
|
|