mirror of
https://github.com/atom/atom.git
synced 2026-02-10 22:55:09 -05:00
Start on SelectList, a common base class for filterable lists
Like autocompleter, fuzzy-finder, and event palette
This commit is contained in:
committed by
Nathan Sobo
parent
389552c057
commit
a3f25fbc9b
47
src/app/select-list.coffee
Normal file
47
src/app/select-list.coffee
Normal 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')
|
||||
Reference in New Issue
Block a user