Files
atom/src/app/fold.coffee
2012-05-25 11:17:50 -07:00

67 lines
1.4 KiB
CoffeeScript

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