Emit 'marker-added/removed' events on DisplayBuffer

This commit is contained in:
Nathan Sobo
2013-04-29 17:03:43 -06:00
parent 78bb074c0d
commit b2d34d93ab
2 changed files with 26 additions and 2 deletions

View File

@@ -737,3 +737,22 @@ 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)

View File

@@ -33,6 +33,12 @@ 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
buildLineMap: ->
@lineMap = new LineMap
@@ -468,7 +474,7 @@ class DisplayBuffer
#
# Returns the {DisplayBufferMarker} (if it exists).
getMarker: (id) ->
@markers[id] ? do =>
@markers[id] ?= do =>
if bufferMarker = @buffer.getMarker(id)
new DisplayBufferMarker({bufferMarker, displayBuffer: this})
@@ -548,7 +554,6 @@ class DisplayBuffer
###
# Internal #
###
pauseMarkerObservers: ->
marker.pauseEvents() for marker in @getMarkers()