From 9e6fc44d395cbddc1c700ca3e8f4158ace035d3e Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 3 Oct 2012 13:10:43 -1000 Subject: [PATCH] SelectList handles 'core:confirm' and 'core:cancel' events --- spec/extensions/select-list-spec.coffee | 18 +++++++++++------- src/app/select-list.coffee | 17 +++++++++++++---- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/spec/extensions/select-list-spec.coffee b/spec/extensions/select-list-spec.coffee index 9176862ca..053cad469 100644 --- a/spec/extensions/select-list-spec.coffee +++ b/spec/extensions/select-list-spec.coffee @@ -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() diff --git a/src/app/select-list.coffee b/src/app/select-list.coffee index 4f0d1798f..51ae45910 100644 --- a/src/app/select-list.coffee +++ b/src/app/select-list.coffee @@ -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])