Selaa lähdekoodia

Merge pull request #393 from sharelatex/as-fix-cm-sharejs

Fix CM/ShareJS adapter from throwing error when deleting
Alasdair Smith 8 vuotta sitten
vanhempi
sitoutus
1f7ef3ad6e

+ 5 - 15
services/web/public/coffee/ide/editor/sharejs/vendor/client/cm.coffee

@@ -12,21 +12,10 @@ applyCMToShareJS = (editorDoc, delta, doc) ->
   while i < delta.from.line
     startPos += editorDoc.lineInfo(i).text.length + 1   # Add 1 for '\n'
     i++
-
   startPos += delta.from.ch
 
-  if delta.to.line == delta.from.line &&
-     delta.to.ch == delta.from.ch # Then nothing was removed.
-    doc.insert startPos, delta.text.join '\n'
-  else
-    delLen = delta.to.ch - delta.from.ch
-    while i < delta.to.line
-      delLen += editorDoc.lineInfo(i).text.length + 1   # Add 1 for '\n'
-      i++
-    doc.del startPos, delLen
-    doc.insert startPos, delta.text.join '\n' if delta.text
-
-  applyCMToShareJS editorDoc, delta.next, doc if delta.next
+  doc.del startPos, delta.removed.join('\n').length if delta.removed
+  doc.insert startPos, delta.text.join('\n') if delta.text
 
 # Attach a CodeMirror editor to the document. The editor's contents are replaced
 # with the document's contents unless keepEditorContents is true. (In which case
@@ -47,8 +36,9 @@ window.sharejs.extendDoc 'attach_cm', (editor, keepEditorContents) ->
           console.error "Text does not match!"
           console.error "editor: #{editorText}"
           console.error "ot:     #{otText}"
-          # Replace the editor text with the doc snapshot.
-          editor.setValue sharedoc.getText()
+          # Removed editor.setValue here as it would cause recursive loops if
+          # consistency check failed - because setting the value would trigger
+          # the change event
       , 0
 
   if keepEditorContents