mirror of
https://github.com/atom/atom.git
synced 2026-02-10 22:55:09 -05:00
67 lines
1.4 KiB
CoffeeScript
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
|