From 914807c621059624bfb73a10caabe893b2b97ee8 Mon Sep 17 00:00:00 2001 From: Scooter Wadsworth Date: Wed, 3 Jul 2013 22:42:10 -0600 Subject: [PATCH] attempt to address regressions from #1684, #1745 --- src/dom/DomEvent.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/dom/DomEvent.js b/src/dom/DomEvent.js index edb0f9fd563..2966f1154ca 100644 --- a/src/dom/DomEvent.js +++ b/src/dom/DomEvent.js @@ -132,13 +132,30 @@ L.DomEvent = { getMousePosition: function (e, container) { - var body = document.body, + var ie7 = L.Browser.ie7, + body = document.body, docEl = document.documentElement, x = e.pageX ? e.pageX : e.clientX + body.scrollLeft + docEl.scrollLeft, y = e.pageY ? e.pageY : e.clientY + body.scrollTop + docEl.scrollTop, - pos = new L.Point(x, y); + pos = new L.Point(x, y), + rect = container.getBoundingClientRect(), + left = rect.left - container.clientLeft, + top = rect.top - container.clientTop; + + // webkit (and ie <= 7) handles RTL scrollLeft different to everyone else + // https://code.google.com/p/closure-library/source/browse/trunk/closure/goog/style/bidi.js + if (!L.DomUtil.documentIsLtr() && (L.Browser.webkit || ie7)) { + left += container.scrollWidth - container.clientWidth; + + // ie7 shows the scrollbar by default and provides clientWidth counting it, so we + // need to add it back in if it is visible; scrollbar is on the left as we are RTL + if (ie7 && L.DomUtil.getStyle(container, 'overflow-y') !== 'hidden' && + L.DomUtil.getStyle(container, 'overflow') !== 'hidden') { + left += 17; + } + } - return (container ? pos._subtract(L.DomUtil.getViewportOffset(container)) : pos); + return pos._subtract(new L.Point(left, top)); }, getWheelDelta: function (e) {