From dc8a9f090a88a41e0d35a8567dbb215ac10d5122 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 23 Apr 2012 17:13:05 -0600 Subject: [PATCH] When a file is clicked in the tree view, it is opened in the active editor --- spec/extensions/tree-view-spec.coffee | 23 ++++++++++++++++++++--- src/extensions/tree-view.coffee | 19 ++++++++++--------- static/tree-view.css | 4 ++++ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/spec/extensions/tree-view-spec.coffee b/spec/extensions/tree-view-spec.coffee index c4b6dc8d2..24b254f50 100644 --- a/spec/extensions/tree-view-spec.coffee +++ b/spec/extensions/tree-view-spec.coffee @@ -1,12 +1,14 @@ TreeView = require 'tree-view' +RootView = require 'root-view' Directory = require 'directory' describe "TreeView", -> - [project, treeView, rootDirectoryView] = [] + [rootView, project, treeView, rootDirectoryView] = [] beforeEach -> - project = new Directory(require.resolve('fixtures/')) - treeView = new TreeView(project) + rootView = new RootView(pathToOpen: require.resolve('fixtures/')) + project = rootView.project + treeView = new TreeView(rootView) rootDirectoryView = treeView.find('> li:first') describe ".initialize(project)", -> @@ -61,3 +63,18 @@ describe "TreeView", -> # collapsed descendants remain collapsed expect(rootDirectoryView.find('> .entries > li.contains(zed/) > .entries')).not.toExist() + describe "when a file is clicked", -> + it "opens it in the active editor and selects it", -> + sampleJs = treeView.find('.file:contains(sample.js)') + sampleTxt = treeView.find('.file:contains(sample.txt)') + + expect(rootView.activeEditor()).toBeUndefined() + sampleJs.click() + expect(sampleJs).toHaveClass 'selected' + expect(rootView.activeEditor().buffer.path).toBe require.resolve('fixtures/sample.js') + + sampleTxt.click() + expect(sampleTxt).toHaveClass 'selected' + expect(treeView.find('.selected').length).toBe 1 + expect(rootView.activeEditor().buffer.path).toBe require.resolve('fixtures/sample.txt') + diff --git a/src/extensions/tree-view.coffee b/src/extensions/tree-view.coffee index 8f03c50bc..8ec74ffdd 100644 --- a/src/extensions/tree-view.coffee +++ b/src/extensions/tree-view.coffee @@ -6,13 +6,18 @@ module.exports = class TreeView extends View @activate: (rootView) -> requireStylesheet 'tree-view.css' - rootView.prepend(new TreeView(rootView.project.getRootDirectory())) + rootView.prepend(new TreeView(rootView)) - @content: (directory) -> + @content: (rootView) -> @div class: 'tree-view', => - @subview 'root', new DirectoryView(directory: directory, isExpanded: true) + @subview 'root', new DirectoryView(directory: rootView.project.getRootDirectory(), isExpanded: true) - initialize: (@project) -> + initialize: (@rootView) -> + @on 'click', '.file', (e) => + clickedLi = $(e.target) + @rootView.open(clickedLi.attr('path')) + @find('.selected').removeClass('selected') + clickedLi.addClass('selected') class DirectoryView extends View @content: ({directory, isExpanded}) -> @@ -31,7 +36,7 @@ class DirectoryView extends View if entry instanceof Directory @entries.append(new DirectoryView(directory: entry, isExpanded: false)) else - @entries.append $$ -> @li entry.getName(), class: 'file' + @entries.append $$ -> @li entry.getName(), class: 'file', path: entry.path @append(@entries) toggleExpansion: -> @@ -66,7 +71,3 @@ class DirectoryView extends View view = $(this).view() view.entryStates = childEntryStates view.expand() - - - - diff --git a/static/tree-view.css b/static/tree-view.css index 2247f4cb3..42c47cc77 100644 --- a/static/tree-view.css +++ b/static/tree-view.css @@ -16,6 +16,10 @@ padding-left: 2ex; } +.tree-view .directory .selected { + background: #333; +} + .tree-view .directory .entries .file { padding-left: 2ex; }