From d7156ff387eb51e3b2a201a767cb287c849243b7 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 19 Jun 2015 10:24:48 +0200 Subject: [PATCH] Remove event listeners from orphaned gutters --- spec/text-editor-component-spec.coffee | 18 ++++++++++++++++++ src/gutter-container-component.coffee | 7 ++++++- src/line-number-gutter-component.coffee | 4 ++++ src/text-editor-component.coffee | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/spec/text-editor-component-spec.coffee b/spec/text-editor-component-spec.coffee index 31467bed4..a9e98efc1 100644 --- a/spec/text-editor-component-spec.coffee +++ b/spec/text-editor-component-spec.coffee @@ -743,6 +743,16 @@ describe "TextEditorComponent", -> beforeEach -> gutterNode = componentNode.querySelector('.gutter') + describe "when the component is destroyed", -> + it "stops listening for folding events", -> + component.destroy() + + lineNumber = component.lineNumberNodeForScreenRow(1) + target = lineNumber.querySelector('.icon-right') + target.dispatchEvent(buildClickEvent(target)) + + expect(nextAnimationFrame).toBe(noAnimationFrame) + it "folds and unfolds the block represented by the fold indicator when clicked", -> expect(lineNumberHasClass(1, 'folded')).toBe false @@ -1727,6 +1737,14 @@ describe "TextEditorComponent", -> beforeEach -> gutterNode = componentNode.querySelector('.gutter') + describe "when the component is destroyed", -> + it "stops listening for selection events", -> + component.destroy() + + gutterNode.dispatchEvent(buildMouseEvent('mousedown', clientCoordinatesForScreenRowInGutter(1))) + + expect(editor.getSelectedScreenRange()).toEqual [[0, 0], [0, 0]] + describe "when the gutter is clicked", -> it "selects the clicked row", -> gutterNode.dispatchEvent(buildMouseEvent('mousedown', clientCoordinatesForScreenRowInGutter(4))) diff --git a/src/gutter-container-component.coffee b/src/gutter-container-component.coffee index 5fa2f85f4..92ef5e8b6 100644 --- a/src/gutter-container-component.coffee +++ b/src/gutter-container-component.coffee @@ -16,7 +16,12 @@ class GutterContainerComponent @domNode = document.createElement('div') @domNode.classList.add('gutter-container') - @domNode.style.display = 'flex'; + @domNode.style.display = 'flex' + + destroy: -> + for {name, component} in @gutterComponents + component.destroy?() + return getDomNode: -> @domNode diff --git a/src/line-number-gutter-component.coffee b/src/line-number-gutter-component.coffee index 351275f63..7675493de 100644 --- a/src/line-number-gutter-component.coffee +++ b/src/line-number-gutter-component.coffee @@ -18,6 +18,10 @@ class LineNumberGutterComponent @domNode.addEventListener 'click', @onClick @domNode.addEventListener 'mousedown', @onMouseDown + destroy: -> + @domNode.removeEventListener 'click', @onClick + @domNode.removeEventListener 'mousedown', @onMouseDown + getDomNode: -> @domNode diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 66996a996..b8fe39976 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -106,6 +106,7 @@ class TextEditorComponent @mounted = false @disposables.dispose() @presenter.destroy() + @gutterContainerComponent?.destroy() window.removeEventListener 'resize', @requestHeightAndWidthMeasurement getDomNode: ->