mirror of
https://github.com/atom/atom.git
synced 2026-01-23 13:58:08 -05:00
Simplify marker events
Instead of marker-added and marker-removed events which are emitted when markers are created/invalidated/revalidated/destroyed, we now just have marker-created events that are triggered *only* when markers are created for the first time. The marker itself emits a 'destroyed' event when it is destroyed. The marker already notifies observers when its validation status changes, so that's covered.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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]])
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user