From 8d968f6865dc5bbd89615e09fb687e5f415887bc Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 13 Oct 2016 10:09:59 +0100 Subject: [PATCH] Tidy up ReviewPanelController --- .../controllers/ReviewPanelController.coffee | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee b/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee index baaf09dbb5..58f4c7d91f 100644 --- a/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee +++ b/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee @@ -9,33 +9,38 @@ define [ scroller = $element.find(".review-panel-scroller") list = $element.find(".review-entry-list") + # Use these to avoid unnecessary updates. Scrolling one + # panel causes us to scroll the other panel, but there's no + # need to trigger the event back to the original panel. ignoreNextPanelEvent = false ignoreNextAceEvent = false - $scope.onScroll = (scrollTop, height) -> + $scope.scrollEvents = new EventEmitter() + + scrollPanel = (scrollTop, height) -> if ignoreNextAceEvent - # console.log "Ignoring ace event" ignoreNextAceEvent = false else ignoreNextPanelEvent = true list.height(height) scroller.scrollTop(scrollTop) - - $scope.scrollEvents = new EventEmitter() scrollAce = (e) -> - now = new Date() if ignoreNextPanelEvent - # console.log "Ignoring review panel event" ignoreNextPanelEvent = false else - # console.log "review panel scrolled", e ignoreNextAceEvent = true $scope.scrollEvents.emit "scroll", e.target.scrollTop - lastScroll = now - previousScroll = new Date() scroller.on "scroll", scrollAce + $scope.onScroll = scrollPanel # Passed into the editor directive for it to call + + # If we listen for scroll events in the review panel natively, then with a Mac trackpad + # the scroll is very smooth (natively done I'd guess), but we don't get polled regularly + # enough to keep Ace in step, and it noticeably lags. If instead, we borrow the manual + # mousewheel/trackpad scrolling behaviour from Ace, and turn mousewheel events into + # scroll events ourselves, then it makes the review panel slightly less smooth (barely) + # noticeable, but keeps it perfectly in step with Ace. ace.require("ace/lib/event").addMouseWheelListener scroller[0], (e) -> deltaY = e.wheelY # console.log "mousewheel", deltaY