Files
atom/src/app/fold.coffee
Corey Johnson & Kevin Sawicki 4db876aed1 Deleting before fold no longer unfolds after undo
Use same row delta computation for updating start and
end rows in folds.
2013-01-30 09:10:26 -08:00

61 lines
1.3 KiB
CoffeeScript

Range = require 'range'
Point = require 'point'
module.exports =
class Fold
@idCounter: 1
displayBuffer: null
startRow: null
endRow: null
constructor: (@displayBuffer, @startRow, @endRow) ->
@id = @constructor.idCounter++
destroy: ->
@displayBuffer.destroyFold(this)
inspect: ->
"Fold(#{@startRow}, #{@endRow})"
getBufferRange: ({includeNewline}={}) ->
if includeNewline
end = [@endRow + 1, 0]
else
end = [@endRow, Infinity]
new Range([@startRow, 0], end)
getBufferRowCount: ->
@endRow - @startRow + 1
handleBufferChange: (event) ->
oldStartRow = @startRow
if @isContainedByRange(event.oldRange)
@displayBuffer.unregisterFold(@startRow, this)
return
@startRow += @getRowDelta(event, @startRow)
@endRow += @getRowDelta(event, @endRow)
if @startRow != oldStartRow
@displayBuffer.unregisterFold(oldStartRow, this)
@displayBuffer.registerFold(this)
isContainedByRange: (range) ->
range.start.row <= @startRow and @endRow <= range.end.row
isContainedByFold: (fold) ->
@isContainedByRange(fold.getBufferRange())
getRowDelta: (event, row) ->
{ newRange, oldRange } = event
if oldRange.end.row <= row
newRange.end.row - oldRange.end.row
else if newRange.end.row < row
newRange.end.row - row
else
0