TreeView scrolls to selected path when move-down or move-up are triggered

This commit is contained in:
Corey Johnson
2012-05-07 10:39:36 -07:00
parent 78d3418c8c
commit 886e2caa52
4 changed files with 40 additions and 5 deletions

View File

@@ -7,12 +7,13 @@ module.exports =
class DirectoryView extends View
@content: ({directory, isExpanded}) ->
@li class: 'directory entry', =>
@div class: 'header', =>
@div outlet: 'header', class: 'header', =>
@span '', class: 'disclosure-arrow', outlet: 'disclosureArrow'
@span directory.getName(), class: 'name'
directory: null
entries: null
header: null
initialize: ({@directory, isExpanded}) ->
@expand() if isExpanded

View File

@@ -76,12 +76,15 @@ class TreeView extends View
selectedEntry = @selectedEntry()
if selectedEntry
if selectedEntry.is('.expanded.directory')
return if @selectEntry(selectedEntry.find('.entry:first'))
return if @selectEntry(selectedEntry.next())
return if @selectEntry(selectedEntry.closest('.directory').next())
@selectEntry(selectedEntry.find('.entry:first'))
else
if not @selectEntry(selectedEntry.next())
@selectEntry(selectedEntry.closest('.directory').next())
else
@selectEntry(@root)
@scollToEntry(@selectedEntry())
moveUp: ->
selectedEntry = @selectedEntry()
if selectedEntry
@@ -93,6 +96,8 @@ class TreeView extends View
else
@selectEntry(@find('.entry').last())
@scollToEntry(@selectedEntry())
expandDirectory: ->
selectedEntry = @selectedEntry()
selectedEntry.view().expand() if (selectedEntry instanceof DirectoryView)
@@ -125,3 +130,13 @@ class TreeView extends View
@find('.selected').removeClass('selected')
entry.addClass('selected')
scollToEntry: (entry) ->
displayElement = if (entry instanceof DirectoryView) then entry.header else entry
top = @scrollTop() + displayElement.position().top
bottom = top + displayElement.outerHeight()
if bottom > @scrollBottom()
@scrollBottom(bottom)
if top < @scrollTop()
@scrollTop(top)