diff options
| author | Stephen Blott | 2016-01-31 16:35:26 +0000 |
|---|---|---|
| committer | Stephen Blott | 2016-01-31 16:35:26 +0000 |
| commit | 63e2387853d69b39454e71ec8006d2b512e86248 (patch) | |
| tree | 80c902e617ff950b8c7ec926e0d692f9647dce08 | |
| parent | b14082d0021830c5359e7fc5f81175941e9319ad (diff) | |
| download | vimium-63e2387853d69b39454e71ec8006d2b512e86248.tar.bz2 | |
Fix visual indicator for `focusInput()`.
Currently, if an input is only partially in the view port, then the page
may scroll when it is focused and the overlays for `focusInput()` are
wonky. See #1257.
Here, we draw the overlay around the *entire* input, instead of just
around the visible part. Being partially visible therefore is no longer
relevant.
Fixes #1257.
Closes #1258.
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 5 | ||||
| -rw-r--r-- | lib/dom_utils.coffee | 12 |
2 files changed, 14 insertions, 3 deletions
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 145a7508..f596ccf7 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -385,9 +385,8 @@ extend window, visibleInputs = for i in [0...resultSet.snapshotLength] by 1 element = resultSet.snapshotItem i - rect = DomUtils.getVisibleClientRect element, true - continue if rect == null - { element: element, rect: rect } + continue unless DomUtils.getVisibleClientRect element, true + { element, rect: DomUtils.getBoundingClientRect element } if visibleInputs.length == 0 HUD.showForDuration("There are no inputs to focus.", 1000) diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 7473df17..5284c813 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -116,6 +116,18 @@ DomUtils = null # + # Returns the smallest rectangle which encloses element. Assumes that there is at least one rectangle. + # + getBoundingClientRect: (element) -> + [clientRect, rects...] = element.getClientRects() + for rect in rects + clientRect.top = Math.min clientRect.top, rect.top + clientRect.bottom = Math.max clientRect.bottom, rect.bottom + clientRect.left = Math.min clientRect.left, rect.left + clientRect.right = Math.max clientRect.right, rect.right + extend clientRect, width: clientRect.right - clientRect.left, height: clientRect.bottom - clientRect.top + + # # Bounds the rect by the current viewport dimensions. If the rect is offscreen or has a height or width < 3 # then null is returned instead of a rect. # |
