SelectList handles 'core:confirm' and 'core:cancel' events

This commit is contained in:
Nathan Sobo
2012-10-03 13:10:43 -10:00
parent b5cb125b7f
commit 9e6fc44d39
2 changed files with 24 additions and 11 deletions

View File

@@ -17,6 +17,9 @@ fdescribe "SelectList", ->
selectList.itemForElement = (element) ->
$$ -> @li element[1], class: element[0]
selectList.selected = jasmine.createSpy('selected hook')
selectList.cancelled = jasmine.createSpy('cancelled hook')
selectList.setArray(array)
{list, miniEditor} = selectList
@@ -72,14 +75,15 @@ fdescribe "SelectList", ->
miniEditor.trigger 'move-up'
expect(list.scrollBottom()).toBe itemHeight * 3
describe "the core:select event", ->
it "triggers the selected hook", ->
describe "the core:confirm event", ->
it "triggers the selected hook with the selected array element", ->
miniEditor.trigger 'move-down'
miniEditor.trigger 'move-down'
miniEditor.trigger 'core:confirm'
expect(selectList.selected).toHaveBeenCalledWith(array[2])
describe "the core:cancel event", ->
it "triggers the cancelled hook", ->
miniEditor.trigger 'core:cancel'
expect(selectList.cancelled).toHaveBeenCalled()

View File

@@ -11,12 +11,15 @@ class SelectList extends View
@ol outlet: 'list'
maxItems: Infinity
filteredArray: null
initialize: ->
requireStylesheet 'select-list.css'
@miniEditor.getBuffer().on 'change', => @populateList()
@on 'move-up', => @selectPreviousItem()
@on 'move-down', => @selectNextItem()
@on 'core:confirm', => @confirmSelection()
@on 'core:cancel', => @cancelled()
setArray: (@array) ->
@populateList()
@@ -25,13 +28,15 @@ class SelectList extends View
populateList: ->
filterQuery = @miniEditor.getText()
if filterQuery.length
filteredArray = fuzzyFilter(@array, filterQuery, key: @filterKey)
@filteredArray = fuzzyFilter(@array, filterQuery, key: @filterKey)
else
filteredArray = @array
@filteredArray = @array
@list.empty()
for i in [0...Math.min(filteredArray.length, @maxItems)]
@list.append(@itemForElement(filteredArray[i]))
for i in [0...Math.min(@filteredArray.length, @maxItems)]
item = @itemForElement(@filteredArray[i])
item.data('select-list-index', i)
@list.append(item)
selectPreviousItem: ->
@selectItem(@getSelectedItem().prev())
@@ -57,3 +62,7 @@ class SelectList extends View
getSelectedItem: ->
@list.find('li.selected')
confirmSelection: ->
index = @getSelectedItem().data('select-list-index')
@selected(@filteredArray[index])