Skip to content
This repository was archived by the owner on Oct 4, 2024. It is now read-only.

Commit c576dfa

Browse files
authored
Fix Multi-Change Event Errors (#381)
* Fix Multi-Change Event Errors An on-change event with multiple operations would throw an error. Examples of these operations include: `Ctrl + Z`, `Text Drag`, `Multi-line comment`, etc. * Update Monaco Adapter Unit Tests Update Monaco Adapter unit tests to reflect code changes
1 parent daf79a0 commit c576dfa

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

lib/monaco-adapter.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ var MonacoAdapter = function () {
304304
/** Change Informations */
305305
var text = change.text;
306306
var rangeLength = change.rangeLength;
307-
var rangeOffset = change.rangeOffset + offset;
307+
var rangeOffset = change.rangeOffset;
308308

309309
/** Additional SEEK distance */
310310
var restLength = content.length + offset - rangeOffset;
@@ -373,8 +373,8 @@ var MonacoAdapter = function () {
373373
this.trigger('change', op, op);
374374
}
375375

376-
/** Reverse iterate all changes */
377-
event.changes.reverse().forEach(function (change) {
376+
/** Iterate through all changes */
377+
event.changes.forEach(function (change) {
378378
var pair = _this.operationFromMonacoChanges(change, content, offset);
379379
offset += pair[0].targetLength - pair[0].baseLength;
380380

test/specs/monaco-ops.spec.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@ describe('Monaco Operations Test', function () {
2020

2121
/** Editor Changes */
2222
var operations = [
23-
{ rangeLength: 0, text: ' */', rangeOffset: 299, forceMoveMarkers: false },
24-
{ rangeLength: 0, text: '/* ', rangeOffset: 21, forceMoveMarkers: false }
23+
{ rangeLength: 0, text: '/* ', rangeOffset: 21, forceMoveMarkers: false },
24+
{ rangeLength: 0, text: ' */', rangeOffset: 299, forceMoveMarkers: false }
2525
];
2626

2727
/** Expected Text Operations */
2828
var textOperations = [
2929
new firepad.TextOperation().retain(21).insert('/* ').retain(281),
30-
new firepad.TextOperation().retain(302).insert(' */').retain(3)
30+
new firepad.TextOperation().retain(299).insert(' */').retain(6)
3131
];
3232

3333
it('should convert Monaco Editor changes to Text Operation', function () {
3434
var MonacoAdapter = firepad.MonacoAdapter;
3535
var operationFromMonacoChange = MonacoAdapter.prototype.operationFromMonacoChanges;
3636

3737
let offset = 0;
38-
operations.reverse().forEach((operation, index) => {
38+
operations.forEach((operation, index) => {
3939
var pair = operationFromMonacoChange.call(null, operation, editorContent, offset);
4040

4141
/** Base Length of First Operation must be Target Length of Second Operation */

0 commit comments

Comments
 (0)