mirror of
https://github.com/atom/atom.git
synced 2026-01-23 13:58:08 -05:00
Determine public API of SelectList
This commit is contained in:
@@ -3,13 +3,12 @@ $ = require 'jquery'
|
||||
Editor = require 'editor'
|
||||
fuzzyFilter = require 'fuzzy-filter'
|
||||
|
||||
# Public: Provides an interface for users to make a selection from a list of
|
||||
# Public: Provides a widget for users to make a selection from a list of
|
||||
# choices.
|
||||
module.exports =
|
||||
class SelectList extends View
|
||||
|
||||
### Internal ###
|
||||
|
||||
# Private:
|
||||
@content: ->
|
||||
@div class: @viewClass(), =>
|
||||
@subview 'miniEditor', new Editor(mini: true)
|
||||
@@ -19,6 +18,7 @@ class SelectList extends View
|
||||
@span class: 'badge', outlet: 'loadingBadge'
|
||||
@ol outlet: 'list'
|
||||
|
||||
# Private:
|
||||
@viewClass: -> 'select-list'
|
||||
|
||||
maxItems: Infinity
|
||||
@@ -26,6 +26,7 @@ class SelectList extends View
|
||||
inputThrottle: 50
|
||||
cancelling: false
|
||||
|
||||
# Public:
|
||||
initialize: ->
|
||||
requireStylesheet 'select-list'
|
||||
|
||||
@@ -52,16 +53,19 @@ class SelectList extends View
|
||||
@confirmSelection() if $(e.target).closest('li').hasClass('selected')
|
||||
e.preventDefault()
|
||||
|
||||
# Private:
|
||||
schedulePopulateList: ->
|
||||
clearTimeout(@scheduleTimeout)
|
||||
populateCallback = =>
|
||||
@populateList() if @isOnDom()
|
||||
@scheduleTimeout = setTimeout(populateCallback, @inputThrottle)
|
||||
|
||||
# Public:
|
||||
setArray: (@array) ->
|
||||
@populateList()
|
||||
@setLoading()
|
||||
|
||||
# Public:
|
||||
setError: (message='') ->
|
||||
if message.length is 0
|
||||
@error.text('').hide()
|
||||
@@ -69,6 +73,7 @@ class SelectList extends View
|
||||
@setLoading()
|
||||
@error.text(message).show()
|
||||
|
||||
# Public:
|
||||
setLoading: (message='') ->
|
||||
if message.length is 0
|
||||
@loading.text("")
|
||||
@@ -79,9 +84,11 @@ class SelectList extends View
|
||||
@loading.text(message)
|
||||
@loadingArea.show()
|
||||
|
||||
# Public:
|
||||
getFilterQuery: ->
|
||||
@miniEditor.getText()
|
||||
|
||||
# Public:
|
||||
populateList: ->
|
||||
return unless @array?
|
||||
|
||||
@@ -105,24 +112,29 @@ class SelectList extends View
|
||||
else
|
||||
@setError(@getEmptyMessage(@array.length, filteredArray.length))
|
||||
|
||||
# Public:
|
||||
getEmptyMessage: (itemCount, filteredItemCount) -> 'No matches found'
|
||||
|
||||
# Private:
|
||||
selectPreviousItem: ->
|
||||
item = @getSelectedItem().prev()
|
||||
item = @list.find('li:last') unless item.length
|
||||
@selectItem(item)
|
||||
|
||||
# Private:
|
||||
selectNextItem: ->
|
||||
item = @getSelectedItem().next()
|
||||
item = @list.find('li:first') unless item.length
|
||||
@selectItem(item)
|
||||
|
||||
# Public:
|
||||
selectItem: (item) ->
|
||||
return unless item.length
|
||||
@list.find('.selected').removeClass('selected')
|
||||
item.addClass 'selected'
|
||||
@scrollToItem(item)
|
||||
|
||||
# Public:
|
||||
scrollToItem: (item) ->
|
||||
scrollTop = @list.scrollTop()
|
||||
desiredTop = item.position().top + scrollTop
|
||||
@@ -133,12 +145,15 @@ class SelectList extends View
|
||||
else if desiredBottom > @list.scrollBottom()
|
||||
@list.scrollBottom(desiredBottom)
|
||||
|
||||
# Public:
|
||||
getSelectedItem: ->
|
||||
@list.find('li.selected')
|
||||
|
||||
# Public:
|
||||
getSelectedElement: ->
|
||||
@getSelectedItem().data('select-list-element')
|
||||
|
||||
# Public:
|
||||
confirmSelection: ->
|
||||
element = @getSelectedElement()
|
||||
if element?
|
||||
@@ -146,22 +161,27 @@ class SelectList extends View
|
||||
else
|
||||
@cancel()
|
||||
|
||||
# Private:
|
||||
attach: ->
|
||||
@storeFocusedElement()
|
||||
|
||||
# Private:
|
||||
storeFocusedElement: ->
|
||||
@previouslyFocusedElement = $(':focus')
|
||||
|
||||
# Private:
|
||||
restoreFocus: ->
|
||||
if @previouslyFocusedElement?.isOnDom()
|
||||
@previouslyFocusedElement.focus()
|
||||
else
|
||||
rootView.focus()
|
||||
|
||||
# Public:
|
||||
cancelled: ->
|
||||
@miniEditor.setText('')
|
||||
@miniEditor.updateDisplay()
|
||||
|
||||
# Public:
|
||||
cancel: ->
|
||||
@list.empty()
|
||||
@cancelling = true
|
||||
|
||||
Reference in New Issue
Block a user