diff --git a/services/web/public/coffee/ide/editor/Document.coffee b/services/web/public/coffee/ide/editor/Document.coffee
index fe396f19b2..b2b2be6dac 100644
--- a/services/web/public/coffee/ide/editor/Document.coffee
+++ b/services/web/public/coffee/ide/editor/Document.coffee
@@ -82,7 +82,7 @@ define [
_unBindFromSocketEvents: () ->
@ide.socket.removeListener "otUpdateApplied", @_onUpdateAppliedHandler
- @ide.socket.removeListener "otUpdateError", @_onUpdateErrorHandler
+ @ide.socket.removeListener "otUpdateError", @_onErrorHandler
@ide.socket.removeListener "disconnect", @_onDisconnectHandler
leaveAndCleanUp: () ->
diff --git a/services/web/public/coffee/ide/editor/directives/aceEditor.coffee b/services/web/public/coffee/ide/editor/directives/aceEditor.coffee
index 37bb18fd89..845d92f5e5 100644
--- a/services/web/public/coffee/ide/editor/directives/aceEditor.coffee
+++ b/services/web/public/coffee/ide/editor/directives/aceEditor.coffee
@@ -107,6 +107,9 @@ define [
session.setMode("ace/mode/latex")
session.setAnnotations scope.annotations
+ emitChange = () ->
+ scope.$emit "#{scope.name}:change"
+
attachToAce = (sharejs_doc) ->
lines = sharejs_doc.getSnapshot().split("\n")
editor.setSession(new EditSession(lines))
@@ -114,8 +117,7 @@ define [
session = editor.getSession()
doc = session.getDocument()
- doc.on "change", () ->
- scope.$emit "#{scope.name}:change"
+ doc.on "change", emitChange
sharejs_doc.on "remoteop.recordForUndo", () =>
undoManager.nextUpdateIsRemote = true
@@ -128,6 +130,10 @@ define [
sharejs_doc.detachFromAce()
sharejs_doc.off "remoteop.recordForUndo"
+ session = editor.getSession()
+ doc = session.getDocument()
+ doc.off "change", emitChange
+
template: """
+ @onChange(change)
+
@editor.on "changeSession", (e) =>
- @bindToSession(e.session)
+ e.oldSession.off "change", onChange
+ e.session.on "change", onChange
enable: () ->
@editor.setOptions({
@@ -45,9 +49,6 @@ define [
enableSnippets: false
})
- bindToSession: (@aceSession) ->
- @aceSession.on "change", (change) => @onChange(change)
-
onChange: (change) ->
cursorPosition = @editor.getCursorPosition()
end = change.data.range.end
@@ -56,7 +57,7 @@ define [
if end.row == cursorPosition.row and end.column == cursorPosition.column + 1
if change.data.action == "insertText"
range = new Range(end.row, 0, end.row, end.column)
- lineUpToCursor = @aceSession.getTextRange(range)
+ lineUpToCursor = @editor.getSession().getTextRange(range)
commandFragment = getLastCommandFragment(lineUpToCursor)
if commandFragment? and commandFragment.length > 2
diff --git a/services/web/public/coffee/ide/editor/directives/aceEditor/cursor-position/CursorPositionManager.coffee b/services/web/public/coffee/ide/editor/directives/aceEditor/cursor-position/CursorPositionManager.coffee
index 92b3400cdf..ee35af07df 100644
--- a/services/web/public/coffee/ide/editor/directives/aceEditor/cursor-position/CursorPositionManager.coffee
+++ b/services/web/public/coffee/ide/editor/directives/aceEditor/cursor-position/CursorPositionManager.coffee
@@ -2,6 +2,9 @@ define [], () ->
class CursorPositionManager
constructor: (@$scope, @editor, @element) ->
+ onChangeCursor = (e) =>
+ @emitCursorUpdateEvent(e)
+
@editor.on "changeSession", (e) =>
if e.oldSession?
@storeCursorPosition(e.oldSession)
@@ -9,8 +12,8 @@ define [], () ->
@doc_id = @$scope.sharejsDoc?.doc_id
- e.session.selection.on 'changeCursor', (e) =>
- @emitCursorUpdateEvent(e)
+ e.oldSession?.selection.off 'changeCursor', onChangeCursor
+ e.session.selection.on 'changeCursor', onChangeCursor
setTimeout () =>
@gotoStoredPosition()
diff --git a/services/web/public/coffee/ide/editor/directives/aceEditor/spell-check/SpellCheckManager.coffee b/services/web/public/coffee/ide/editor/directives/aceEditor/spell-check/SpellCheckManager.coffee
index 44de83e7ce..8f35bb72ec 100644
--- a/services/web/public/coffee/ide/editor/directives/aceEditor/spell-check/SpellCheckManager.coffee
+++ b/services/web/public/coffee/ide/editor/directives/aceEditor/spell-check/SpellCheckManager.coffee
@@ -13,12 +13,14 @@ define [
if language != oldLanguage and oldLanguage?
@runFullCheck()
+ onChange = (e) =>
+ @runCheckOnChange(e)
+
@editor.on "changeSession", (e) =>
@runFullCheck()
- doc = e.session.getDocument()
- doc.on "change", (e) =>
- @runCheckOnChange(e)
+ e.oldSession?.getDocument().off "change", onChange
+ e.session.getDocument().on "change", onChange
@$scope.spellingMenu = {left: '0px', top: '0px'}