From 3fe6a699cc5d28b4cc25e31c6db40c99c45a4b4d Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 24 Apr 2012 18:18:02 -0600 Subject: [PATCH] Pressing enter in TreeView opens selected file or toggles selected directory --- spec/extensions/tree-view-spec.coffee | 23 +++++++++++++++++++++++ src/app/keymaps/tree-view.coffee | 1 + src/extensions/tree-view.coffee | 10 +++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/spec/extensions/tree-view-spec.coffee b/spec/extensions/tree-view-spec.coffee index d8c010678..086facca4 100644 --- a/spec/extensions/tree-view-spec.coffee +++ b/spec/extensions/tree-view-spec.coffee @@ -229,3 +229,26 @@ describe "TreeView", -> expect(subdir).toHaveClass 'selected' expect(rootDirectoryView).toHaveClass 'expanded' + describe "tree-view:open-selected-entry", -> + describe "when a file is selected", -> + it "opens the file in the editor", -> + rootDirectoryView.find('.file:contains(sample.js)').click() + rootDirectoryView.trigger 'tree-view:open-selected-entry' + expect(rootView.activeEditor().buffer.path).toBe require.resolve('fixtures/sample.js') + + describe "when a directory is selected", -> + it "expands or collapses the directory", -> + subdir = rootDirectoryView.find('.directory').first() + subdir.click() + + expect(subdir).not.toHaveClass 'expanded' + rootDirectoryView.trigger 'tree-view:open-selected-entry' + expect(subdir).toHaveClass 'expanded' + rootDirectoryView.trigger 'tree-view:open-selected-entry' + expect(subdir).not.toHaveClass 'expanded' + + describe "when nothing is selected", -> + it "does nothing", -> + rootDirectoryView.trigger 'tree-view:open-selected-entry' + expect(rootView.activeEditor()).toBeUndefined() + diff --git a/src/app/keymaps/tree-view.coffee b/src/app/keymaps/tree-view.coffee index 901066370..a68092bb6 100644 --- a/src/app/keymaps/tree-view.coffee +++ b/src/app/keymaps/tree-view.coffee @@ -1,4 +1,5 @@ window.keymap.bindKeys '.tree-view' 'right': 'tree-view:expand-directory' 'left': 'tree-view:collapse-directory' + 'enter': 'tree-view:open-selected-entry' diff --git a/src/extensions/tree-view.coffee b/src/extensions/tree-view.coffee index c5f44a24b..c49f05375 100644 --- a/src/extensions/tree-view.coffee +++ b/src/extensions/tree-view.coffee @@ -15,14 +15,15 @@ class TreeView extends View initialize: (@rootView) -> @on 'click', '.entry', (e) => entry = $(e.currentTarget) - @rootView.open(entry.attr('path')) if entry.is('.file') @selectEntry(entry) + @openSelectedEntry() if entry.is('.file') false @on 'move-up', => @moveUp() @on 'move-down', => @moveDown() @on 'tree-view:expand-directory', => @expandDirectory() @on 'tree-view:collapse-directory', => @collapseDirectory() + @on 'tree-view:open-selected-entry', => @openSelectedEntry() @rootView.on 'active-editor-path-change', => @selectActiveFile() selectActiveFile: -> @@ -57,6 +58,13 @@ class TreeView extends View directory.collapse() @selectEntry(directory) + openSelectedEntry: -> + selectedEntry = @selectedEntry() + if selectedEntry.is('.directory') + selectedEntry.view().toggleExpansion() + else if selectedEntry.is('.file') + @rootView.open(selectedEntry.attr('path')) + selectedEntry: -> @find('.selected')