summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortwiz@chromium.org <twiz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-26 19:41:37 +0000
committertwiz@chromium.org <twiz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-26 19:41:37 +0000
commit653ef2074f280de4fe765f4e0f4136e7516eea37 (patch)
treec595183d444999b7a49e5a6d8f8cec9a9afb85bb
parente72b11f7fa92b7233bde9e75170499e768f4dbb4 (diff)
downloadchromium_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.js31
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
};
}