diff --git a/spec/app/display-buffer-spec.coffee b/spec/app/display-buffer-spec.coffee index c15c54ab1..274a2d4e8 100644 --- a/spec/app/display-buffer-spec.coffee +++ b/spec/app/display-buffer-spec.coffee @@ -525,6 +525,16 @@ describe "DisplayBuffer", -> expect(marker1.getBufferRange()).toEqual [[8, 4], [8, 10]] expect(marker2.getScreenRange()).toEqual [[5, 4], [5, 10]] + it "emits a 'marker-created' event on the DisplayBuffer whenever a marker is created", -> + displayBuffer.on 'marker-created', markerCreatedHandler = jasmine.createSpy("markerCreatedHandler") + + marker1 = displayBuffer.markScreenRange([[5, 4], [5, 10]]) + expect(markerCreatedHandler).toHaveBeenCalledWith(marker1) + markerCreatedHandler.reset() + + marker2 = buffer.markRange([[5, 4], [5, 10]]) + expect(markerCreatedHandler).toHaveBeenCalledWith(displayBuffer.getMarker(marker2.id)) + it "allows marker head and tail positions to be manipulated in both screen and buffer coordinates", -> marker = displayBuffer.markScreenRange([[5, 4], [5, 10]]) marker.setHeadScreenPosition([5, 4]) @@ -737,22 +747,3 @@ describe "DisplayBuffer", -> marker.destroy() expect(marker.isValid()).toBeFalsy() expect(displayBuffer.getMarker(marker.id)).toBeUndefined() - - describe "marker-added and marker-removed events", -> - it "emits the appropriate event when a marker is created, destroyed, or its validity changes", -> - displayBuffer.on 'marker-added', markerAddedHandler = jasmine.createSpy("markerAddedHandler") - displayBuffer.on 'marker-removed', markerRemovedHandler = jasmine.createSpy("markerRemovedHandler") - - marker = displayBuffer.markBufferRange([[5, 4], [5, 10]]) - expect(markerAddedHandler).toHaveBeenCalledWith(marker) - markerAddedHandler.reset() - - buffer.change([[5, 3], [5, 11]], 'hey') - expect(markerRemovedHandler).toHaveBeenCalledWith(marker) - markerRemovedHandler.reset() - - buffer.undo() - expect(markerAddedHandler).toHaveBeenCalledWith(marker) - - marker.destroy() - expect(markerRemovedHandler).toHaveBeenCalledWith(marker) diff --git a/spec/app/text-buffer-spec.coffee b/spec/app/text-buffer-spec.coffee index 742795076..3b09591c3 100644 --- a/spec/app/text-buffer-spec.coffee +++ b/spec/app/text-buffer-spec.coffee @@ -781,11 +781,10 @@ describe 'Buffer', -> expect(buffer.positionForCharacterIndex(20)).toEqual [3, 0] describe "markers", -> - [markerAddedHandler, markerRemovedHandler] = [] + markerCreatedHandler = null beforeEach -> - buffer.on('marker-added', markerAddedHandler = jasmine.createSpy("markerAddedHandler")) - buffer.on('marker-removed', markerRemovedHandler = jasmine.createSpy("markerRemovedHandler")) + buffer.on('marker-created', markerCreatedHandler = jasmine.createSpy("markerCreatedHandler")) describe "marker creation", -> it "allows markers to be created with ranges and positions", -> @@ -806,9 +805,9 @@ describe 'Buffer', -> expect(marker.getHeadPosition()).toEqual [4, 20] expect(marker.getTailPosition()).toEqual [4, 23] - it "emits the 'marker-added' event when markers are created", -> + it "emits the 'marker-created' event when markers are created", -> marker = buffer.markRange([[4, 20], [4, 23]]) - expect(markerAddedHandler).toHaveBeenCalledWith(marker) + expect(markerCreatedHandler).toHaveBeenCalledWith(marker) describe "marker manipulation", -> marker = null @@ -1005,9 +1004,10 @@ describe 'Buffer', -> buffer.undo() expect(buffer.getMarker(marker2.id)).toBeUndefined() - it "emits 'marker-removed' when markers are destroyed", -> + it "emits 'destroyed' on the marker when it is destroyed", -> + marker.on 'destroyed', destroyedHandler = jasmine.createSpy("destroyedHandler") marker.destroy() - expect(markerRemovedHandler).toHaveBeenCalledWith(marker) + expect(destroyedHandler).toHaveBeenCalled() describe "marker updates due to buffer changes", -> [marker1, marker2, marker3] = [] @@ -1185,17 +1185,6 @@ describe 'Buffer', -> expect(marker4.isValid()).toBeTruthy() expect(marker4.getRange()).toEqual [[4, 20], [4, 23]] - it "emits 'marker-added' and 'marker-removed' events when markers are invalidated or revalidated", -> - marker2.destroy() - marker3.destroy() - markerRemovedHandler.reset() - - buffer.change([[4, 21], [4, 24]], "foo") - expect(markerRemovedHandler).toHaveBeenCalledWith(marker1) - - buffer.undo() - expect(markerAddedHandler).toHaveBeenCalledWith(marker1) - describe ".markersForPosition(position)", -> it "returns all markers that intersect the given position", -> m1 = buffer.markRange([[3, 4], [3, 10]]) diff --git a/src/app/buffer-marker.coffee b/src/app/buffer-marker.coffee index e86ad89d9..33d3eec91 100644 --- a/src/app/buffer-marker.coffee +++ b/src/app/buffer-marker.coffee @@ -165,6 +165,7 @@ class BufferMarker # Destroys the marker destroy: -> @buffer.destroyMarker(@id) + @trigger 'destroyed' # Returns a {Boolean} indicating whether the marker is valid. Markers can be # invalidated when a region surrounding them in the buffer is changed. diff --git a/src/app/display-buffer-marker.coffee b/src/app/display-buffer-marker.coffee index e6d644541..5c2b4d857 100644 --- a/src/app/display-buffer-marker.coffee +++ b/src/app/display-buffer-marker.coffee @@ -15,6 +15,7 @@ class DisplayBufferMarker constructor: ({@bufferMarker, @displayBuffer}) -> @id = @bufferMarker.id + @bufferMarker.on 'destroyed', => @destroyed() ### # Public # @@ -155,6 +156,9 @@ class DisplayBufferMarker # Internal # ### + destroyed: -> + delete @displayBuffer.markers[@id] + observeBufferMarkerIfNeeded: -> return if @subscriptionCount() @getHeadScreenPosition() # memoize current value diff --git a/src/app/display-buffer.coffee b/src/app/display-buffer.coffee index 9f3063608..3e0a65c02 100644 --- a/src/app/display-buffer.coffee +++ b/src/app/display-buffer.coffee @@ -33,12 +33,7 @@ class DisplayBuffer @tokenizedBuffer.on 'grammar-changed', (grammar) => @trigger 'grammar-changed', grammar @tokenizedBuffer.on 'changed', @handleTokenizedBufferChange @buffer.on 'markers-updated', @handleMarkersUpdated - @buffer.on 'marker-added', (marker) => - @trigger 'marker-added', @getMarker(marker.id) - @buffer.on 'marker-removed', (marker) => - marker = @getMarker(marker.id) - delete @markers[marker.id] - @trigger 'marker-removed', marker + @buffer.on 'marker-created', (marker) => @trigger 'marker-created', @getMarker(marker.id) buildLineMap: -> @lineMap = new LineMap diff --git a/src/app/text-buffer.coffee b/src/app/text-buffer.coffee index facb40b6d..d2e1d147e 100644 --- a/src/app/text-buffer.coffee +++ b/src/app/text-buffer.coffee @@ -476,7 +476,7 @@ class Buffer attributes }, options)) @validMarkers[marker.id] = marker - @trigger 'marker-added', marker + @trigger 'marker-created', marker marker # Public: Constructs a new marker at a given position. @@ -650,7 +650,6 @@ class Buffer if marker = @validMarkers[id] ? @invalidMarkers[id] delete @validMarkers[id] delete @invalidMarkers[id] - @trigger 'marker-removed', marker scheduleModifiedEvents: -> clearTimeout(@stoppedChangingTimeout) if @stoppedChangingTimeout