mirror of
https://github.com/atom/atom.git
synced 2026-02-14 08:35:11 -05:00
Has 2 failing specs... There are still some issue with this code's interaction with the undo system. The tab stops will need to be or destroyed when certain changes are undone or redone.
42 lines
1.2 KiB
CoffeeScript
42 lines
1.2 KiB
CoffeeScript
Range = require 'range'
|
|
EventEmitter = require 'event-emitter'
|
|
Subscriber = require 'subscriber'
|
|
_ = require 'underscore'
|
|
|
|
module.exports =
|
|
class AnchorRange
|
|
start: null
|
|
end: null
|
|
buffer: null
|
|
editSession: null # optional
|
|
destroyed: false
|
|
|
|
constructor: (bufferRange, @buffer, @editSession) ->
|
|
bufferRange = Range.fromObject(bufferRange)
|
|
@startAnchor = @buffer.addAnchorAtPosition(bufferRange.start, ignoreChangesStartingOnAnchor: true)
|
|
@endAnchor = @buffer.addAnchorAtPosition(bufferRange.end)
|
|
@subscribe @startAnchor, 'destroyed', => @destroy()
|
|
@subscribe @endAnchor, 'destroyed', => @destroy()
|
|
|
|
getBufferRange: ->
|
|
new Range(@startAnchor.getBufferPosition(), @endAnchor.getBufferPosition())
|
|
|
|
getScreenRange: ->
|
|
new Range(@startAnchor.getScreenPosition(), @endAnchor.getScreenPosition())
|
|
|
|
containsBufferPosition: (bufferPosition) ->
|
|
@getBufferRange().containsPoint(bufferPosition)
|
|
|
|
destroy: ->
|
|
return if @destroyed
|
|
@unsubscribe()
|
|
@startAnchor.destroy()
|
|
@endAnchor.destroy()
|
|
@buffer.removeAnchorRange(this)
|
|
@editSession?.removeAnchorRange(this)
|
|
@destroyed = true
|
|
@trigger 'destroyed'
|
|
|
|
_.extend(AnchorRange.prototype, EventEmitter)
|
|
_.extend(AnchorRange.prototype, Subscriber)
|