mirror of
https://github.com/atom/atom.git
synced 2026-01-25 06:48:28 -05:00
TreeView directories can be selected by clicking them. Start on keyboard nav.
This commit is contained in:
@@ -13,26 +13,41 @@ class TreeView extends View
|
||||
@subview 'root', new DirectoryView(directory: rootView.project.getRootDirectory(), isExpanded: true)
|
||||
|
||||
initialize: (@rootView) ->
|
||||
@on 'click', '.file', (e) =>
|
||||
clickedLi = $(e.target)
|
||||
@rootView.open(clickedLi.attr('path'))
|
||||
@find('.selected').removeClass('selected')
|
||||
clickedLi.addClass('selected')
|
||||
@on 'click', '.entry', (e) =>
|
||||
entry = $(e.currentTarget)
|
||||
@rootView.open(entry.attr('path')) if entry.is('.file')
|
||||
@selectEntry(entry)
|
||||
false
|
||||
|
||||
@on 'move-down', => @moveDown()
|
||||
@on 'tree-view:expand-directory', => @selectActiveFile()
|
||||
@rootView.on 'active-editor-path-change', => @selectActiveFile()
|
||||
|
||||
selectActiveFile: ->
|
||||
console.log ""
|
||||
@find('.selected').removeClass('selected')
|
||||
activeFilePath = @rootView.activeEditor()?.buffer.path
|
||||
@find(".file[path='#{activeFilePath}']").addClass('selected')
|
||||
@selectEntry(@find(".file[path='#{activeFilePath}']"))
|
||||
|
||||
moveDown: ->
|
||||
selectedEntry = @selectedEntry()
|
||||
|
||||
if selectedEntry.length
|
||||
@selectEntry(selectedEntry.next())
|
||||
else
|
||||
@selectEntry(@root)
|
||||
|
||||
selectedEntry: ->
|
||||
@find('.selected')
|
||||
|
||||
selectEntry: (entry) ->
|
||||
@find('.selected').removeClass('selected')
|
||||
entry.addClass('selected')
|
||||
|
||||
class DirectoryView extends View
|
||||
@content: ({directory, isExpanded}) ->
|
||||
@li class: 'directory', =>
|
||||
@span '▸', class: 'disclosure-arrow', outlet: 'disclosureArrow', click: 'toggleExpansion'
|
||||
@span directory.getName(), class: 'name'
|
||||
@li class: 'directory entry', =>
|
||||
@div class: 'header', =>
|
||||
@span '▸', class: 'disclosure-arrow', outlet: 'disclosureArrow', click: 'toggleExpansion'
|
||||
@span directory.getName(), class: 'name'
|
||||
|
||||
entries: null
|
||||
|
||||
@@ -45,7 +60,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', path: entry.path
|
||||
@entries.append $$ -> @li entry.getName(), class: 'file entry', path: entry.path
|
||||
@append(@entries)
|
||||
|
||||
toggleExpansion: ->
|
||||
@@ -59,6 +74,7 @@ class DirectoryView extends View
|
||||
@deserializeEntries(@entryStates) if @entryStates?
|
||||
@isExpanded = true
|
||||
@trigger 'tree-view:expand-directory'
|
||||
false
|
||||
|
||||
collapse: ->
|
||||
@entryStates = @serializeEntries()
|
||||
@@ -77,7 +93,7 @@ class DirectoryView extends View
|
||||
|
||||
deserializeEntries: (entryStates) ->
|
||||
for directoryName, childEntryStates of entryStates
|
||||
@entries.find("> .directory:contains(#{directoryName})").each ->
|
||||
@entries.find("> .directory:contains('#{directoryName}')").each ->
|
||||
view = $(this).view()
|
||||
view.entryStates = childEntryStates
|
||||
view.expand()
|
||||
|
||||
Reference in New Issue
Block a user