mirror of
https://github.com/atom/atom.git
synced 2026-04-06 03:02:13 -04:00
Notify observers when markers are invalidated/revalidated
This commit is contained in:
@@ -741,6 +741,7 @@ describe 'Buffer', ->
|
||||
oldTailPosition: [4, 20]
|
||||
newTailPosition: [4, 20]
|
||||
bufferChanged: false
|
||||
valid: true
|
||||
}
|
||||
observeHandler.reset()
|
||||
|
||||
@@ -751,6 +752,7 @@ describe 'Buffer', ->
|
||||
oldHeadPosition: [6, 2]
|
||||
newHeadPosition: [6, 5]
|
||||
bufferChanged: true
|
||||
valid: true
|
||||
}
|
||||
|
||||
it "calls the given callback when the marker's tail position changes", ->
|
||||
@@ -762,6 +764,7 @@ describe 'Buffer', ->
|
||||
oldTailPosition: [4, 20]
|
||||
newTailPosition: [6, 2]
|
||||
bufferChanged: false
|
||||
valid: true
|
||||
}
|
||||
observeHandler.reset()
|
||||
|
||||
@@ -773,6 +776,7 @@ describe 'Buffer', ->
|
||||
oldTailPosition: [6, 2]
|
||||
newTailPosition: [6, 5]
|
||||
bufferChanged: true
|
||||
valid: true
|
||||
}
|
||||
|
||||
it "calls the callback when the selection's tail is cleared", ->
|
||||
@@ -784,6 +788,7 @@ describe 'Buffer', ->
|
||||
oldTailPosition: [4, 20]
|
||||
newTailPosition: [4, 23]
|
||||
bufferChanged: false
|
||||
valid: true
|
||||
}
|
||||
|
||||
it "only calls the callback once when both the marker's head and tail positions change due to the same operation", ->
|
||||
@@ -795,6 +800,7 @@ describe 'Buffer', ->
|
||||
oldHeadPosition: [4, 23]
|
||||
newHeadPosition: [4, 26]
|
||||
bufferChanged: true
|
||||
valid: true
|
||||
}
|
||||
observeHandler.reset()
|
||||
|
||||
@@ -806,6 +812,31 @@ describe 'Buffer', ->
|
||||
oldHeadPosition: [4, 26]
|
||||
newHeadPosition: [1, 1]
|
||||
bufferChanged: false
|
||||
valid: true
|
||||
}
|
||||
|
||||
it "calls the callback with the valid flag set to false when the marker is invalidated", ->
|
||||
buffer.deleteRow(4)
|
||||
expect(observeHandler.callCount).toBe 1
|
||||
expect(observeHandler.argsForCall[0][0]).toEqual {
|
||||
oldTailPosition: [4, 20]
|
||||
newTailPosition: [4, 20]
|
||||
oldHeadPosition: [4, 23]
|
||||
newHeadPosition: [4, 23]
|
||||
bufferChanged: true
|
||||
valid: false
|
||||
}
|
||||
|
||||
observeHandler.reset()
|
||||
buffer.undo()
|
||||
expect(observeHandler.callCount).toBe 1
|
||||
expect(observeHandler.argsForCall[0][0]).toEqual {
|
||||
oldTailPosition: [4, 20]
|
||||
newTailPosition: [4, 20]
|
||||
oldHeadPosition: [4, 23]
|
||||
newHeadPosition: [4, 23]
|
||||
bufferChanged: true
|
||||
valid: true
|
||||
}
|
||||
|
||||
it "allows the observation subscription to be cancelled", ->
|
||||
|
||||
@@ -107,5 +107,4 @@ class BufferChangeOperation
|
||||
if validMarker = @buffer.validMarkers[id]
|
||||
validMarker.setRange(previousRange)
|
||||
else if invalidMarker = @buffer.invalidMarkers[id]
|
||||
@buffer.validMarkers[id] = invalidMarker
|
||||
|
||||
invalidMarker.revalidate()
|
||||
|
||||
@@ -113,23 +113,31 @@ class BufferMarker
|
||||
[newRow, newColumn]
|
||||
|
||||
observe: (callback) ->
|
||||
@on 'position-changed', callback
|
||||
@on 'changed', callback
|
||||
cancel: => @unobserve(callback)
|
||||
|
||||
unobserve: (callback) ->
|
||||
@off 'position-changed', callback
|
||||
@off 'changed', callback
|
||||
|
||||
containsPoint: (point) ->
|
||||
@getRange().containsPoint(point)
|
||||
|
||||
notifyObservers: ({oldHeadPosition, newHeadPosition, oldTailPosition, newTailPosition, bufferChanged}) ->
|
||||
notifyObservers: ({oldHeadPosition, newHeadPosition, oldTailPosition, newTailPosition, bufferChanged} = {}) ->
|
||||
return if @suppressObserverNotification
|
||||
return if _.isEqual(newHeadPosition, oldHeadPosition) and _.isEqual(newTailPosition, oldTailPosition)
|
||||
|
||||
if newHeadPosition? and newTailPosition?
|
||||
return if _.isEqual(newHeadPosition, oldHeadPosition) and _.isEqual(newTailPosition, oldTailPosition)
|
||||
else if newHeadPosition?
|
||||
return if _.isEqual(newHeadPosition, oldHeadPosition)
|
||||
else if newTailPosition?
|
||||
return if _.isEqual(newTailPosition, oldTailPosition)
|
||||
|
||||
oldHeadPosition ?= @getHeadPosition()
|
||||
newHeadPosition ?= @getHeadPosition()
|
||||
oldTailPosition ?= @getTailPosition()
|
||||
newTailPosition ?= @getTailPosition()
|
||||
@trigger 'position-changed', {oldHeadPosition, newHeadPosition, oldTailPosition, newTailPosition, bufferChanged}
|
||||
valid = @buffer.validMarkers[@id]?
|
||||
@trigger 'changed', {oldHeadPosition, newHeadPosition, oldTailPosition, newTailPosition, bufferChanged, valid}
|
||||
|
||||
consolidateObserverNotifications: (bufferChanged, fn) ->
|
||||
@suppressObserverNotification = true
|
||||
@@ -144,5 +152,11 @@ class BufferMarker
|
||||
invalidate: ->
|
||||
delete @buffer.validMarkers[@id]
|
||||
@buffer.invalidMarkers[@id] = this
|
||||
@notifyObservers(bufferChanged: true)
|
||||
|
||||
revalidate: ->
|
||||
delete @buffer.invalidMarkers[@id]
|
||||
@buffer.validMarkers[@id] = this
|
||||
@notifyObservers(bufferChanged: true)
|
||||
|
||||
_.extend BufferMarker.prototype, EventEmitter
|
||||
|
||||
Reference in New Issue
Block a user