diff options
author | twiz@chromium.org <twiz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-26 19:41:37 +0000 |
---|---|---|
committer | twiz@chromium.org <twiz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-26 19:41:37 +0000 |
commit | 653ef2074f280de4fe765f4e0f4136e7516eea37 (patch) | |
tree | c595183d444999b7a49e5a6d8f8cec9a9afb85bb | |
parent | e72b11f7fa92b7233bde9e75170499e768f4dbb4 (diff) | |
download | chromium_src-653ef2074f280de4fe765f4e0f4136e7516eea37.zip chromium_src-653ef2074f280de4fe765f4e0f4136e7516eea37.tar.gz chromium_src-653ef2074f280de4fe765f4e0f4136e7516eea37.tar.bz2 |
Correction, and simplification of the javascript code to capture the screen-space position of the DOM element on which the experimental popup API is anchored. The old code was taking into consideration the scroll offset within the element to which the popup was attached.
This was incorrect: All scrolling within the parent hierarchy of the given node should be considered, but not scrolling within the node itself.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/1734009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45604 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/renderer/resources/extension_process_bindings.js | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js index 6fd334a..c19872c 100644 --- a/chrome/renderer/resources/extension_process_bindings.js +++ b/chrome/renderer/resources/extension_process_bindings.js @@ -224,32 +224,23 @@ var chrome = chrome || {}; // Returns the absolute position of the given element relative to the hosting // browser frame. function findAbsolutePosition(domElement) { - var curleft = curtop = 0; - var parentNode = domElement.parentNode + var left = domElement.offsetLeft; + var top = domElement.offsetTop; // Ascend through the parent hierarchy, taking into account object nesting // and scoll positions. - if (domElement.offsetParent) { - do { - if (domElement.offsetLeft) curleft += domElement.offsetLeft; - if (domElement.offsetTop) curtop += domElement.offsetTop; - - if (domElement.scrollLeft) curleft -= domElement.scrollLeft; - if (domElement.scrollTop) curtop -= domElement.scrollTop; - - if (parentNode != domElement.offsetParent) { - while(parentNode != null && parentNode != domElement.offsetParent) { - if (parentNode.scrollLeft) curleft -= parentNode.scrollLeft; - if (parentNode.scrollTop) curtop -= parentNode.scrollTop; - parentNode = parentNode.parentNode; - } - } - } while ((domElement = domElement.offsetParent) != null); + for (var parentElement = domElement.offsetParent; parentElement; + parentElement = parentElement.offsetParent) { + left += parentElement.offsetLeft; + top += parentElement.offsetTop; + + left -= parentElement.scrollLeft; + top -= parentElement.scrollTop; } return { - top: curtop, - left: curleft + top: top, + left: left }; } |