From 0f96b6bf07c02704272a90a017ee14661dca8ce0 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 23 Jan 2015 17:19:19 +0000 Subject: Visual/edit modes: miscellaneous improvements. --- content_scripts/scroller.coffee | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'content_scripts/scroller.coffee') diff --git a/content_scripts/scroller.coffee b/content_scripts/scroller.coffee index 43fad87e..f84dce8e 100644 --- a/content_scripts/scroller.coffee +++ b/content_scripts/scroller.coffee @@ -246,26 +246,38 @@ Scroller = amount = getDimension(element,direction,pos) - element[scrollProperties[direction].axisName] CoreScroller.scroll element, direction, amount + # FIXME(smblott). Implement scroll in the "x" dimension. scrollIntoView: (element) -> activatedElement ||= document.body and firstScrollableElement() rect = element.getBoundingClientRect() + direction = "y" if rect.top < 0 - CoreScroller.scroll activatedElement, "y", rect.top - 50, false + amount = rect.top - 10 + element = findScrollableElement element, direction, amount, 1 + CoreScroller.scroll element, direction, amount, false else if window.innerHeight < rect.bottom - CoreScroller.scroll activatedElement, "y", 50 + rect.bottom - window.innerHeight, false + amount = rect.bottom - window.innerHeight + 10 + element = findScrollableElement element, direction, amount, 1 + CoreScroller.scroll element, direction, amount, false scrollToPosition: (element, top, left) -> - padding = 20 - bottom = top + padding - right = left + padding + activatedElement ||= document.body and firstScrollableElement() + + # Scroll down, "y". + amount = top + 20 - (element.clientHeight + element.scrollTop) + CoreScroller.scroll element, "y", amount, false if 0 < amount + + # Scroll up, "y". + amount = top - (element.scrollTop) - 5 + CoreScroller.scroll element, "y", amount, false if amount < 0 - element.scrollTop = top if top <= element.scrollTop - element.scrollLeft = left if left <= element.scrollLeft + # Scroll down, "x". + amount = left + 20 - (element.clientWidth + element.scrollLeft) + CoreScroller.scroll element, "x", amount, false if 0 < amount - if element.scrollTop + element.clientHeight <= bottom - element.scrollTop = bottom - element.clientHeight - if element.scrollLeft + element.clientWidth <= right - element.scrollLeft = right - element.clientWidth + # Scroll up, "x". + amount = left - (element.scrollLeft) - 5 + CoreScroller.scroll element, "x", amount, false if amount < 0 root = exports ? window root.Scroller = Scroller -- cgit v1.2.3