diff --git a/spec/atom/file-finder-spec.coffee b/spec/atom/file-finder-spec.coffee index 3dbf14fc1..700ce227e 100644 --- a/spec/atom/file-finder-spec.coffee +++ b/spec/atom/file-finder-spec.coffee @@ -7,6 +7,7 @@ describe 'FileFinder', -> beforeEach -> urls = ['app.coffee', 'buffer.coffee', 'atom/app.coffee', 'atom/buffer.coffee'] finder = new FileFinder({urls}) + finder.enableKeymap() describe "initialize", -> it "populates the ol with all urls and selects the first element", -> @@ -16,8 +17,7 @@ describe 'FileFinder', -> describe "when characters are typed into the input element", -> it "displays matching urls in the ol element and selects the first", -> - finder.input.val('ap') - finder.input.trigger 'input' + finder.editor.insertText('ap') expect(finder.urlList.children().length).toBe 2 expect(finder.urlList.find('li:contains(app.coffee)').length).toBe 2 @@ -26,8 +26,8 @@ describe 'FileFinder', -> expect(finder.urlList.find('li.selected').length).toBe 1 # we should clear the list before re-populating it - finder.input.val('a/ap') - finder.input.trigger 'input' + finder.editor.setCursorScreenPosition([0, 0]) + finder.editor.insertText('a/') expect(finder.urlList.children().length).toBe 1 expect(finder.urlList.find('li:contains(atom/app.coffee)').length).toBe 1 @@ -37,13 +37,13 @@ describe 'FileFinder', -> expect(finder.find('li:eq(0)')).toHaveClass "selected" expect(finder.find('li:eq(2)')).not.toHaveClass "selected" - finder.trigger 'move-down' - finder.trigger 'move-down' + finder.editor.trigger keydownEvent('down') + finder.editor.trigger keydownEvent('down') expect(finder.find('li:eq(0)')).not.toHaveClass "selected" expect(finder.find('li:eq(2)')).toHaveClass "selected" - finder.trigger 'move-up' + finder.editor.trigger keydownEvent('up') expect(finder.find('li:eq(0)')).not.toHaveClass "selected" expect(finder.find('li:eq(1)')).toHaveClass "selected" @@ -51,11 +51,11 @@ describe 'FileFinder', -> it "does not fall off the end or begining of the list", -> expect(finder.find('li:first')).toHaveClass "selected" - finder.trigger 'move-up' + finder.editor.trigger keydownEvent('up') expect(finder.find('li:first')).toHaveClass "selected" for i in [1..urls.length+10] - finder.trigger 'move-down' + finder.editor.trigger keydownEvent('down') expect(finder.find('li:last')).toHaveClass "selected" @@ -64,19 +64,20 @@ describe 'FileFinder', -> beforeEach -> finder = new FileFinder({urls, selected: selectedCallback}) + finder.enableKeymap() it "when a file is selected Editor.open is called", -> spyOn(finder, 'remove') finder.moveDown() - finder.trigger 'select' + finder.editor.trigger keydownEvent('enter') expect(selectedCallback).toHaveBeenCalledWith(urls[1]) expect(finder.remove).toHaveBeenCalled() it "when no file is selected, does nothing", -> spyOn(atom, 'open') - finder.input.val('this-will-match-nothing-hopefully') + finder.editor.insertText('this-will-match-nothing-hopefully') finder.populateUrlList() - finder.trigger 'select' + finder.editor.trigger keydownEvent('enter') expect(atom.open).not.toHaveBeenCalled() describe "findMatches(queryString)", -> diff --git a/src/atom/file-finder.coffee b/src/atom/file-finder.coffee index c9924be9a..380fc5f8c 100644 --- a/src/atom/file-finder.coffee +++ b/src/atom/file-finder.coffee @@ -1,13 +1,14 @@ $ = require 'jquery' {View} = require 'space-pen' stringScore = require 'stringscore' +Editor = require 'editor' module.exports = class FileFinder extends View @content: -> @div class: 'file-finder', => @ol outlet: 'urlList' - @input outlet: 'input', input: 'populateUrlList' + @subview 'editor', new Editor urls: null maxResults: null @@ -16,18 +17,19 @@ class FileFinder extends View requireStylesheet 'file-finder.css' @maxResults = 10 @populateUrlList() - window.keymap.bindKeys ".file-finder", - 'up': 'move-up' - 'down': 'move-down' - 'enter': 'select' + window.keymap.bindKeys ".file-finder .editor", + 'enter': 'file-finder:select-file' @on 'move-up', => @moveUp() @on 'move-down', => @moveDown() - @on 'select', => @select() + @on 'file-finder:select-file', => @select() + + @editor.buffer.on 'change', => @populateUrlList() + @editor.off 'move-up move-down' populateUrlList: -> @urlList.empty() - for url in @findMatches(@input.val()) + for url in @findMatches(@editor.buffer.getText()) @urlList.append $("