mirror of
https://github.com/atom/atom.git
synced 2026-01-25 14:59:03 -05:00
More conversion of FuzzyFinder to a SelectList subclass
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user