Title: [101656] trunk/Source/WebCore
Revision
101656
Author
[email protected]
Date
2011-12-01 04:10:48 -0800 (Thu, 01 Dec 2011)

Log Message

Web Inspector: totalOffsetLeft and totalOffsetTop should take scroll into account.
https://bugs.webkit.org/show_bug.cgi?id=73443

Reviewed by Pavel Feldman.

* inspector/front-end/TextPrompt.js:
(WebInspector.TextPrompt.prototype._boxForAnchorAtStart):
(WebInspector.TextPrompt.SuggestBox):
* inspector/front-end/utilities.js:
(Element.prototype.totalOffsetLeft):
(Element.prototype.totalOffsetTop):
(Element.prototype.boxInWindow):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (101655 => 101656)


--- trunk/Source/WebCore/ChangeLog	2011-12-01 12:04:19 UTC (rev 101655)
+++ trunk/Source/WebCore/ChangeLog	2011-12-01 12:10:48 UTC (rev 101656)
@@ -1,3 +1,18 @@
+2011-11-30  Vsevolod Vlasov  <[email protected]>
+
+        Web Inspector: totalOffsetLeft and totalOffsetTop should take scroll into account.
+        https://bugs.webkit.org/show_bug.cgi?id=73443
+
+        Reviewed by Pavel Feldman.
+
+        * inspector/front-end/TextPrompt.js:
+        (WebInspector.TextPrompt.prototype._boxForAnchorAtStart):
+        (WebInspector.TextPrompt.SuggestBox):
+        * inspector/front-end/utilities.js:
+        (Element.prototype.totalOffsetLeft):
+        (Element.prototype.totalOffsetTop):
+        (Element.prototype.boxInWindow):
+
 2011-12-01  Pavel Feldman  <[email protected]>
 
         Web Inspector: query backend for capabilities explicitly.

Modified: trunk/Source/WebCore/inspector/front-end/TextPrompt.js (101655 => 101656)


--- trunk/Source/WebCore/inspector/front-end/TextPrompt.js	2011-12-01 12:04:19 UTC (rev 101655)
+++ trunk/Source/WebCore/inspector/front-end/TextPrompt.js	2011-12-01 12:10:48 UTC (rev 101656)
@@ -374,7 +374,7 @@
         var anchorElement = document.createElement("span");
         anchorElement.textContent = "\u200B";
         textRange.insertNode(anchorElement);
-        var box = anchorElement.boxInWindow(window, this._suggestBox._parentElement);
+        var box = anchorElement.boxInWindow(window);
         anchorElement.parentElement.removeChild(anchorElement);
         selection.removeAllRanges();
         selection.addRange(rangeCopy);
@@ -844,7 +844,6 @@
 WebInspector.TextPrompt.SuggestBox = function(textPrompt, inputElement, className)
 {
     this._textPrompt = textPrompt;
-    this._parentElement = inputElement.ownerDocument.body;
     this._inputElement = inputElement;
     this._selectedElement = null;
     this._boundOnScroll = this._onscrollresize.bind(this, true);
@@ -852,7 +851,8 @@
     window.addEventListener("scroll", this._boundOnScroll, true);
     window.addEventListener("resize", this._boundOnResize, true);
 
-    this._element = this._parentElement.createChild("div", "suggest-box " + (className || ""));
+    var bodyElement = inputElement.ownerDocument.body;
+    this._element = bodyElement.createChild("div", "suggest-box " + (className || ""));
     this._element.addEventListener("mousedown", this._onboxmousedown.bind(this), true);
     this.containerElement = this._element.createChild("div", "container");
     this.contentElement = this.containerElement.createChild("div", "content");

Modified: trunk/Source/WebCore/inspector/front-end/utilities.js (101655 => 101656)


--- trunk/Source/WebCore/inspector/front-end/utilities.js	2011-12-01 12:04:19 UTC (rev 101655)
+++ trunk/Source/WebCore/inspector/front-end/utilities.js	2011-12-01 12:10:48 UTC (rev 101656)
@@ -265,19 +265,33 @@
 
 DocumentFragment.prototype.createChild = Element.prototype.createChild;
 
+/**
+ * @return {number}
+ */
 Element.prototype.totalOffsetLeft = function()
 {
     var total = 0;
-    for (var element = this; element; element = element.offsetParent)
-        total += element.offsetLeft + (this !== element ? element.clientLeft : 0);
+    for (var element = this; element; element = element.offsetParent) {
+        total += element.offsetLeft 
+        if (this !== element)
+            total += element.clientLeft - element.scrollLeft;
+    }
+        
     return total;
 }
 
+/**
+ * @return {number}
+ */
 Element.prototype.totalOffsetTop = function()
 {
     var total = 0;
-    for (var element = this; element; element = element.offsetParent)
-        total += element.offsetTop + (this !== element ? element.clientTop : 0);
+    for (var element = this; element; element = element.offsetParent) {
+        total += element.offsetTop 
+        if (this !== element)
+            total += element.clientTop - element.scrollTop;
+    }
+        
     return total;
 }
 
@@ -297,6 +311,7 @@
 }
 
 /**
+ * @param {DOMWindow} targetWindow
  * @return {AnchorBox}
  */
 Element.prototype.offsetRelativeToWindow = function(targetWindow)
@@ -318,33 +333,23 @@
 }
 
 /**
+ * @param {DOMWindow} targetWindow
  * @return {AnchorBox}
  */
-Element.prototype.boxInWindow = function(targetWindow, relativeParent)
+Element.prototype.boxInWindow = function(targetWindow)
 {
     targetWindow = targetWindow || this.ownerDocument.defaultView;
-    var bodyElement = this.ownerDocument.body;
-    relativeParent = relativeParent || bodyElement;
 
     var anchorBox = this.offsetRelativeToWindow(window);
     anchorBox.width = this.offsetWidth;
     anchorBox.height = this.offsetHeight;
 
-    var anchorElement = this;
-    while (anchorElement && anchorElement !== relativeParent && anchorElement !== bodyElement) {
-        if (anchorElement.scrollLeft)
-            anchorBox.x -= anchorElement.scrollLeft;
-        if (anchorElement.scrollTop)
-            anchorBox.y -= anchorElement.scrollTop;
-        anchorElement = anchorElement.parentElement;
-    }
-
-    var parentOffset = relativeParent.offsetRelativeToWindow(window);
-    anchorBox.x -= parentOffset.x;
-    anchorBox.y -= parentOffset.y;
     return anchorBox;
 }
 
+/**
+ * @param {string} text
+ */
 Element.prototype.setTextAndTitle = function(text)
 {
     this.textContent = text;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to