More conversion of FuzzyFinder to a SelectList subclass

This commit is contained in:
Nathan Sobo
2012-10-03 20:45:25 -10:00
parent 2991048c1e
commit ebad961b20
3 changed files with 18 additions and 56 deletions

View File

@@ -3,7 +3,7 @@ FuzzyFinder = require 'fuzzy-finder'
$ = require 'jquery'
{$$} = require 'space-pen'
describe 'FuzzyFinder', ->
fdescribe 'FuzzyFinder', ->
[rootView, finder] = []
beforeEach ->
@@ -27,6 +27,8 @@ describe 'FuzzyFinder', ->
rootView.trigger 'fuzzy-finder:toggle-file-finder'
expect(rootView.find('.fuzzy-finder')).toExist()
expect(finder.miniEditor.isFocused).toBeTruthy()
expect(editor1.isFocused).toBeFalsy()
expect(editor2.isFocused).toBeFalsy()
finder.miniEditor.insertText('this should not show up next time we toggle')
rootView.trigger 'fuzzy-finder:toggle-file-finder'
@@ -38,7 +40,7 @@ describe 'FuzzyFinder', ->
expect(finder.miniEditor.getText()).toBe ''
it "shows all relative file paths for the current project and selects the first", ->
finder.maxResults = 1000
finder.maxItems = Infinity
rootView.trigger 'fuzzy-finder:toggle-file-finder'
rootView.project.getFilePaths().done (paths) ->
expect(finder.list.children('li').length).toBe paths.length, finder.maxResults

View File

@@ -9,25 +9,20 @@ Editor = require 'editor'
module.exports =
class FuzzyFinder extends SelectList
@activate: (rootView) ->
requireStylesheet 'select-list.css'
requireStylesheet 'fuzzy-finder.css'
@instance = new FuzzyFinder(rootView)
rootView.on 'fuzzy-finder:toggle-file-finder', => @instance.toggleFileFinder()
rootView.on 'fuzzy-finder:toggle-buffer-finder', => @instance.toggleBufferFinder()
@viewClass: ->
_.compact([super, 'fuzzy-finder']).join(' ')
[super, 'fuzzy-finder'].join(' ')
paths: null
allowActiveEditorChange: null
maxResults: null
maxItems: 10
initialize: (@rootView) ->
requireStylesheet 'fuzzy-finder.css'
@maxResults = 10
@rootView.on 'fuzzy-finder:toggle-file-finder', => @toggleFileFinder()
@rootView.on 'fuzzy-finder:toggle-buffer-finder', => @toggleBufferFinder()
@on 'fuzzy-finder:cancel', => @detach()
@on 'fuzzy-finder:select-path', => @select()
@on 'mousedown', 'li', (e) => @entryClicked(e)
super
itemForElement: (path) ->
$$ -> @li path
@@ -38,11 +33,12 @@ class FuzzyFinder extends SelectList
@detach()
cancelled: ->
@miniEditor.setText('')
@rootView.focus()
toggleFileFinder: ->
if @hasParent()
@detach()
@cancel()
else
return unless @rootView.project.getPath()?
@allowActiveEditorChange = false
@@ -51,7 +47,7 @@ class FuzzyFinder extends SelectList
toggleBufferFinder: ->
if @hasParent()
@detach()
@cancel()
else
@allowActiveEditorChange = true
@populateOpenBufferPaths()
@@ -68,39 +64,3 @@ class FuzzyFinder extends SelectList
attach: ->
@rootView.append(this)
@miniEditor.focus()
populatePathList: ->
@pathList.empty()
for path in @findMatches(@miniEditor.getText())
@pathList.append $$ -> @li path
@pathList.children('li:first').addClass 'selected'
findSelectedLi: ->
@pathList.children('li.selected')
entryClicked: (e) ->
@open($(e.currentTarget).text())
false
moveUp: ->
selected = @findSelectedLi().removeClass('selected')
if selected.filter(':not(:first-child)').length is 0
selected = @pathList.children('li:last')
else
selected = selected.prev()
selected.addClass('selected')
moveDown: ->
selected = @findSelectedLi().removeClass('selected')
if selected.filter(':not(:last-child)').length is 0
selected = @pathList.children('li:first')
else
selected = selected.next()
selected.addClass('selected')
findMatches: (query) ->
fuzzyFilter(@paths, query, maxResults: @maxResults)

View File

@@ -1,8 +1,8 @@
window.keymap.bindKeys '*'
window.keymap.bindKeys 'body'
'meta-t': 'fuzzy-finder:toggle-file-finder'
'meta-b': 'fuzzy-finder:toggle-buffer-finder'
window.keymap.bindKeys ".fuzzy-finder .editor input",
'enter': 'fuzzy-finder:select-path',
'escape': 'fuzzy-finder:cancel'
'meta-w': 'fuzzy-finder:cancel'
'enter': 'core:confirm',
'escape': 'core:cancel'
'meta-w': 'core:cancel'