From f405054c65335d8bd068e89a16716a418715f5f9 Mon Sep 17 00:00:00 2001 From: Simon Lydell Date: Wed, 18 Nov 2015 15:12:14 +0100 Subject: [PATCH] Consider the entire page as largest if scrollable Its area may technically be less than other elements, but if it is scrollable that's what you expect to scroll. --- extension/lib/scrollable-elements.coffee | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/extension/lib/scrollable-elements.coffee b/extension/lib/scrollable-elements.coffee index 0f64b14..3cf9fde 100644 --- a/extension/lib/scrollable-elements.coffee +++ b/extension/lib/scrollable-elements.coffee @@ -34,9 +34,7 @@ class ScrollableElements add: (element) -> @elements.add(element) utils.onRemoved(@window, element, @delete.bind(this, element)) - - if not @largest or utils.area(element) > utils.area(@largest) - @largest = element + @largest = element if @isLargest(element) delete: (element) => @elements.delete(element) @@ -46,16 +44,18 @@ class ScrollableElements @elements.forEach((element) => @elements.delete(element) if fn(element)) @updateLargest() + isLargest: (element) -> + # Always consider the toplevel document the largest scrollable element, if + # it is scrollable. (Its area may be smaller than other elements). + return not @largest or + element == @window.document.documentElement or + (@largest != @window.document.documentElement and + utils.area(element) > utils.area(@largest)) + updateLargest: -> + # Reset `@largest` and find a new largest scrollable element (if there are + # any left). @largest = null - - # Find a new largest scrollable element (if there are any left). - largestArea = -1 - @elements.forEach((element) => - area = utils.area(element) - if area > largestArea - @largest = element - largestArea = area - ) + @elements.forEach((element) => @largest = element if @isLargest(element)) module.exports = ScrollableElements -- 2.39.3