From 696a54392e8595eadbcee438f87ccc6a3f0ce45e Mon Sep 17 00:00:00 2001 From: Matt Colyer Date: Mon, 26 Aug 2013 15:36:31 -0700 Subject: [PATCH] Determine public API of SelectList --- src/select-list.coffee | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/select-list.coffee b/src/select-list.coffee index 55ea9dfeb..83de17021 100644 --- a/src/select-list.coffee +++ b/src/select-list.coffee @@ -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