From 21a56b991cc9e7eac93943644c86d5ff8a1d6466 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 14 Feb 2013 11:24:46 -0800 Subject: [PATCH] Move scroll logic to individual views --- .../command-panel/lib/operation-view.coffee | 5 ++++ .../command-panel/lib/path-view.coffee | 5 ++++ .../command-panel/lib/preview-list.coffee | 25 ++++++++----------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/packages/command-panel/lib/operation-view.coffee b/src/packages/command-panel/lib/operation-view.coffee index 2655a4fba..297ef93b6 100644 --- a/src/packages/command-panel/lib/operation-view.coffee +++ b/src/packages/command-panel/lib/operation-view.coffee @@ -26,3 +26,8 @@ class OperationView extends View bufferRange = @operation.execute(editSession) editSession.setSelectedBufferRange(bufferRange, autoscroll: true) if bufferRange @previewList.focus() + + scrollTo: -> + top = @previewList.scrollTop() + @offset().top - @previewList.offset().top + bottom = top + @outerHeight() + @previewList.scrollTo(top, bottom) diff --git a/src/packages/command-panel/lib/path-view.coffee b/src/packages/command-panel/lib/path-view.coffee index b4f2ba151..dbd93751d 100644 --- a/src/packages/command-panel/lib/path-view.coffee +++ b/src/packages/command-panel/lib/path-view.coffee @@ -47,6 +47,11 @@ class PathView extends View @matches.show() @removeClass 'is-collapsed' + scrollTo: -> + top = @previewList.scrollTop() + @offset().top - @previewList.offset().top + bottom = top + @pathDetails.outerHeight() + @previewList.scrollTo(top, bottom) + collapse: (animate=false) -> if animate @matches.hide 100, => diff --git a/src/packages/command-panel/lib/preview-list.coffee b/src/packages/command-panel/lib/preview-list.coffee index 908b28971..36eb1d8b8 100644 --- a/src/packages/command-panel/lib/preview-list.coffee +++ b/src/packages/command-panel/lib/preview-list.coffee @@ -56,32 +56,32 @@ class PreviewList extends ScrollView selectNextOperation: -> selectedView = @find('.selected').view() + nextView = selectedView.next().view() if selectedView instanceof PathView - if selectedView.hasClass('is-collapsed') - nextView = selectedView.next().view() - else - nextView = selectedView.find('.operation:first') + nextView = selectedView.find('.operation:first').view() unless selectedView.hasClass('is-collapsed') else - nextView = selectedView.next().view() ? selectedView.closest('.path').next().view() + nextView ?= selectedView.closest('.path').next().view() + if nextView? selectedView.removeClass('selected') nextView.addClass('selected') - @scrollToElement(nextView) + nextView.scrollTo() selectPreviousOperation: -> selectedView = @find('.selected').view() + previousView = selectedView.prev().view() if selectedView instanceof PathView - previousView = selectedView.prev() - previousView = previousView.find('.operation:last').view() unless previousView.hasClass('is-collapsed') + if previousView? and not previousView.hasClass('is-collapsed') + previousView = previousView.find('.operation:last').view() else - previousView = selectedView.prev().view() ? selectedView.closest('.path').view() + previousView ?= selectedView.closest('.path').view() if previousView? selectedView.removeClass('selected') previousView.addClass('selected') - @scrollToElement(previousView) + previousView.scrollTo() getPathCount: -> _.keys(_.groupBy(@operations, (operation) -> operation.getPath())).length @@ -96,10 +96,7 @@ class PreviewList extends ScrollView getSelectedOperation: -> @find('.operation.selected').view()?.operation - scrollToElement: (element) -> - top = @scrollTop() + element.offset().top - @offset().top - bottom = top + element.outerHeight() - + scrollTo: (top, bottom) -> @scrollBottom(bottom) if bottom > @scrollBottom() @scrollTop(top) if top < @scrollTop()