LineFolder emits 'fold' and 'unfold' events

This commit is contained in:
Nathan Sobo
2012-02-24 14:18:55 -07:00
parent c8c7033550
commit 63be776837
2 changed files with 21 additions and 0 deletions

View File

@@ -14,6 +14,25 @@ describe "LineFolder", ->
folder.on 'change', changeHandler
describe "when folds are created and removed", ->
it "emits 'fold' and 'unfold' events", ->
foldHandler = jasmine.createSpy 'foldHandler'
unfoldHandler = jasmine.createSpy 'unfoldHandler'
folder.on 'fold', foldHandler
folder.on 'unfold', unfoldHandler
foldRange = new Range([4, 29], [7, 4])
fold = folder.createFold(foldRange)
expect(foldHandler).toHaveBeenCalled()
[[range]] = foldHandler.argsForCall
expect(range).toEqual foldRange
fold.destroy()
expect(unfoldHandler).toHaveBeenCalled()
[[range]] = unfoldHandler.argsForCall
expect(range).toEqual foldRange
describe "when there is a single fold spanning multiple lines", ->
it "replaces folded lines with a single line containing a placeholder and emits a change event", ->
[line4, line5] = folder.linesForScreenRows(4, 5)

View File

@@ -39,6 +39,7 @@ class LineFolder
newScreenRange.end.column += fragment.text.length
@trigger 'change', oldRange: oldScreenRange, newRange: newScreenRange
@trigger 'fold', bufferRange
fold
destroyFold: (fold) ->
@@ -56,6 +57,7 @@ class LineFolder
newScreenRange = @expandScreenRangeToLineEnds(@screenRangeForBufferRange(bufferRange))
@trigger 'change', oldRange: oldScreenRange, newRange: newScreenRange
@trigger 'unfold', fold.getRange()
registerFold: (bufferRow, fold) ->
@activeFolds[bufferRow] ?= []