aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts/scroller.coffee
diff options
context:
space:
mode:
authorStephen Blott2014-12-19 07:10:02 +0000
committerStephen Blott2014-12-19 07:10:02 +0000
commit0506ea78ebcd003b47db4f5587e07251f7c8682b (patch)
tree567300666e2e3611a1bb74cabd5b3d4f0e11401f /content_scripts/scroller.coffee
parent4d1b448511b5ce643b90b35d5693bca8b0ffcd73 (diff)
downloadvimium-0506ea78ebcd003b47db4f5587e07251f7c8682b.tar.bz2
Initialize scroller to first scrollable element.
See #1358.
Diffstat (limited to 'content_scripts/scroller.coffee')
-rw-r--r--content_scripts/scroller.coffee14
1 files changed, 12 insertions, 2 deletions
diff --git a/content_scripts/scroller.coffee b/content_scripts/scroller.coffee
index 2f69fc7d..48b99cff 100644
--- a/content_scripts/scroller.coffee
+++ b/content_scripts/scroller.coffee
@@ -84,6 +84,16 @@ findScrollableElement = (element, direction, amount, factor) ->
element = element.parentElement || document.body
element
+# On some pages, document.body is not scrollable. Here, we search the document for the first visible element
+# which does scroll vertically. This is used to initialize activatedElement. See #1358.
+firstScrollableElement = (element=document.body) ->
+ if doesScroll element, "y", 1, 1
+ element
+ else
+ for child in element.children
+ return ele if DomUtils.getVisibleClientRect(child) and ele = firstScrollableElement child
+ null
+
checkVisibility = (element) ->
# If the activated element has been scrolled completely offscreen, then subsequent changes in its scroll
# position will not provide any more visual feedback to the user. Therefore, we deactivate it so that
@@ -206,7 +216,7 @@ Scroller =
window.scrollBy(0, amount)
return
- activatedElement ||= document.body
+ activatedElement ||= firstScrollableElement() || document.body
return unless activatedElement
# Avoid the expensive scroll calculation if it will not be used. This reduces costs during smooth,
@@ -218,7 +228,7 @@ Scroller =
scrollTo: (direction, pos) ->
return unless document.body or activatedElement
- activatedElement ||= document.body
+ activatedElement ||= firstScrollableElement() || document.body
element = findScrollableElement activatedElement, direction, pos, 1
amount = getDimension(element,direction,pos) - element[scrollProperties[direction].axisName]