Start on SelectList, a common base class for filterable lists

Like autocompleter, fuzzy-finder, and event palette
This commit is contained in:
Jerry Cheung & Nathan Sobo
2012-10-03 11:49:08 -10:00
committed by Nathan Sobo
parent 389552c057
commit a3f25fbc9b
4 changed files with 118 additions and 3 deletions

View File

@@ -0,0 +1,47 @@
$ = require 'jquery'
{ View } = require 'space-pen'
Editor = require 'editor'
fuzzyFilter = require 'fuzzy-filter'
module.exports =
class SelectList extends View
@content: ->
@div class: 'select-list', =>
@subview 'miniEditor', new Editor(mini: true)
@ol outlet: 'list'
maxItems: Infinity
initialize: ->
@miniEditor.getBuffer().on 'change', => @populateList()
@on 'move-up', => @selectPreviousItem()
@on 'move-down', => @selectNextItem()
setArray: (@array) ->
@populateList()
@selectItem(@list.find('li:first'))
populateList: ->
filterQuery = @miniEditor.getText()
if filterQuery.length
filteredArray = fuzzyFilter(@array, filterQuery, key: @filterKey)
else
filteredArray = @array
@list.empty()
for i in [0...Math.min(filteredArray.length, @maxItems)]
@list.append(@itemForElement(filteredArray[i]))
selectPreviousItem: ->
@selectItem(@getSelectedItem().prev())
selectNextItem: ->
@selectItem(@getSelectedItem().next())
selectItem: (item) ->
if item.length
@list.find('.selected').removeClass('selected')
item.addClass 'selected'
getSelectedItem: ->
@list.find('li.selected')