mirror of
https://github.com/atom/atom.git
synced 2026-02-12 23:55:10 -05:00
TreeView scrolls to selected path when move-down or move-up are triggered
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user