mirror of
https://github.com/atom/atom.git
synced 2026-02-11 15:14:59 -05:00
Start converting fuzzy finder to a subclass of SelectList
This commit is contained in:
@@ -6,10 +6,12 @@ fuzzyFilter = require 'fuzzy-filter'
|
||||
module.exports =
|
||||
class SelectList extends View
|
||||
@content: ->
|
||||
@div class: 'select-list', =>
|
||||
@div class: @viewClass(), =>
|
||||
@subview 'miniEditor', new Editor(mini: true)
|
||||
@ol outlet: 'list'
|
||||
|
||||
@viewClass: -> 'select-list'
|
||||
|
||||
maxItems: Infinity
|
||||
filteredArray: null
|
||||
|
||||
@@ -28,14 +30,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)]
|
||||
item = @itemForElement(@filteredArray[i])
|
||||
item.data('select-list-index', i)
|
||||
for i in [0...Math.min(filteredArray.length, @maxItems)]
|
||||
element = filteredArray[i]
|
||||
item = @itemForElement(element)
|
||||
item.data('select-list-element', element)
|
||||
@list.append(item)
|
||||
|
||||
selectPreviousItem: ->
|
||||
@@ -64,5 +67,6 @@ class SelectList extends View
|
||||
@list.find('li.selected')
|
||||
|
||||
confirmSelection: ->
|
||||
index = @getSelectedItem().data('select-list-index')
|
||||
@selected(@filteredArray[index])
|
||||
element = @getSelectedItem().data('select-list-element')
|
||||
@confirmed(element) if element?
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
{View, $$} = require 'space-pen'
|
||||
SelectList = require 'select-list'
|
||||
stringScore = require 'stringscore'
|
||||
fuzzyFilter = require 'fuzzy-filter'
|
||||
$ = require 'jquery'
|
||||
_ = require 'underscore'
|
||||
Editor = require 'editor'
|
||||
|
||||
module.exports =
|
||||
class FuzzyFinder extends View
|
||||
class FuzzyFinder extends SelectList
|
||||
@activate: (rootView) ->
|
||||
@instance = new FuzzyFinder(rootView)
|
||||
|
||||
@content: ->
|
||||
@div class: 'fuzzy-finder', =>
|
||||
@ol outlet: 'pathList'
|
||||
@subview 'miniEditor', new Editor(mini: true)
|
||||
@viewClass: ->
|
||||
_.compact([super, 'fuzzy-finder']).join(' ')
|
||||
|
||||
paths: null
|
||||
allowActiveEditorChange: null
|
||||
@@ -26,13 +26,13 @@ class FuzzyFinder extends View
|
||||
@rootView.on 'fuzzy-finder:toggle-buffer-finder', => @toggleBufferFinder()
|
||||
|
||||
@on 'fuzzy-finder:cancel', => @detach()
|
||||
@on 'move-up', => @moveUp()
|
||||
@on 'move-down', => @moveDown()
|
||||
@on 'fuzzy-finder:select-path', => @select()
|
||||
@on 'mousedown', 'li', (e) => @entryClicked(e)
|
||||
|
||||
@miniEditor.getBuffer().on 'change', => @populatePathList() if @hasParent()
|
||||
@miniEditor.off 'move-up move-down'
|
||||
itemForElement: (path) ->
|
||||
$$ -> @li path
|
||||
|
||||
confirmed: (path) ->
|
||||
|
||||
toggleFileFinder: ->
|
||||
if @hasParent()
|
||||
@@ -52,12 +52,12 @@ class FuzzyFinder extends View
|
||||
@attach() if @paths?.length
|
||||
|
||||
populateProjectPaths: ->
|
||||
@rootView.project.getFilePaths().done (@paths) => @populatePathList()
|
||||
@rootView.project.getFilePaths().done (@paths) => @setArray(@paths)
|
||||
|
||||
populateOpenBufferPaths: ->
|
||||
@paths = @rootView.getOpenBufferPaths().map (path) =>
|
||||
@rootView.project.relativize(path)
|
||||
@populatePathList() if @paths?.length
|
||||
@setArray(@paths)
|
||||
|
||||
attach: ->
|
||||
@rootView.append(this)
|
||||
@@ -80,14 +80,11 @@ class FuzzyFinder extends View
|
||||
findSelectedLi: ->
|
||||
@pathList.children('li.selected')
|
||||
|
||||
open : (path) ->
|
||||
confirmed : (path) ->
|
||||
return unless path.length
|
||||
@rootView.open(path, {@allowActiveEditorChange})
|
||||
@detach()
|
||||
|
||||
select: ->
|
||||
@open(@findSelectedLi().text())
|
||||
|
||||
entryClicked: (e) ->
|
||||
@open($(e.currentTarget).text())
|
||||
false
|
||||
|
||||
Reference in New Issue
Block a user