From 9e4653d83c80aa0d70dd54ebad9313870240010b Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 9 Jul 2014 20:49:10 +0100 Subject: [PATCH] Try to clean up to avoid memory leaks --- services/web/public/coffee/ide/editor/Document.coffee | 2 +- .../coffee/ide/editor/directives/aceEditor.coffee | 10 ++++++++-- .../auto-complete/AutoCompleteManager.coffee | 11 ++++++----- .../cursor-position/CursorPositionManager.coffee | 7 +++++-- .../aceEditor/spell-check/SpellCheckManager.coffee | 8 +++++--- 5 files changed, 25 insertions(+), 13 deletions(-) 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'}