diff --git a/debug/tests/rtl.html b/debug/tests/rtl.html new file mode 100644 index 00000000..6a32ed77 --- /dev/null +++ b/debug/tests/rtl.html @@ -0,0 +1,43 @@ + + + + Leaflet debug page + + + + + + + + + + + + + + +

Click the map to place a popup at the mouse location

+
+ + + + diff --git a/debug/tests/rtl2.html b/debug/tests/rtl2.html new file mode 100644 index 00000000..28f8623a --- /dev/null +++ b/debug/tests/rtl2.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/spec/suites/dom/DomUtilSpec.js b/spec/suites/dom/DomUtilSpec.js index 7b3d2003..df3ebd93 100644 --- a/spec/suites/dom/DomUtilSpec.js +++ b/spec/suites/dom/DomUtilSpec.js @@ -53,13 +53,6 @@ describe('DomUtil', function() { }); }); - describe('#documentIsLtr', function () { - it('returns true if doc direction is ltr', function () { - expect(L.DomUtil.documentIsLtr()).to.eql(true); - expect(L.DomUtil.documentIsLtr()).to.eql(true); // cached - }); - }); - describe('#getViewportOffset', function () { it('calculates the viewport offset of an element', function () { var div = document.createElement('div'); diff --git a/src/core/Browser.js b/src/core/Browser.js index 02571c54..dda8a076 100644 --- a/src/core/Browser.js +++ b/src/core/Browser.js @@ -16,6 +16,7 @@ phantomjs = ua.indexOf('phantom') !== -1, android = ua.indexOf('android') !== -1, android23 = ua.search('android [23]') !== -1, + gecko = ua.indexOf('gecko') !== -1, mobile = typeof orientation !== undefined + '', msPointer = window.navigator && window.navigator.msPointerEnabled && @@ -72,6 +73,7 @@ ie7: ie7, ielt9: ielt9, webkit: webkit, + gecko: gecko && !webkit && !window.opera && !ie, android: android, android23: android23, diff --git a/src/dom/DomEvent.js b/src/dom/DomEvent.js index ccad2015..6a0a5884 100644 --- a/src/dom/DomEvent.js +++ b/src/dom/DomEvent.js @@ -143,11 +143,14 @@ L.DomEvent = { }, getMousePosition: function (e, container) { - - var ie7 = L.Browser.ie7, - body = document.body, + var body = document.body, docEl = document.documentElement, - x = e.pageX ? e.pageX - body.scrollLeft - docEl.scrollLeft: e.clientX, + //gecko makes scrollLeft more negative as you scroll in rtl, other browsers don't + //ref: https://code.google.com/p/closure-library/source/browse/closure/goog/style/bidi.js + x = L.DomUtil.documentIsLtr() ? + (e.pageX ? e.pageX - body.scrollLeft - docEl.scrollLeft : e.clientX) : + (L.Browser.gecko ? e.pageX - body.scrollLeft - docEl.scrollLeft : + e.pageX ? e.pageX - body.scrollLeft + docEl.scrollLeft : e.clientX), y = e.pageY ? e.pageY - body.scrollTop - docEl.scrollTop: e.clientY, pos = new L.Point(x, y); @@ -159,19 +162,6 @@ L.DomEvent = { 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 pos._subtract(new L.Point(left, top)); }, diff --git a/src/dom/DomUtil.js b/src/dom/DomUtil.js index 59012168..6874a6cf 100644 --- a/src/dom/DomUtil.js +++ b/src/dom/DomUtil.js @@ -30,8 +30,7 @@ L.DomUtil = { el = element, docBody = document.body, docEl = document.documentElement, - pos, - ie7 = L.Browser.ie7; + pos; do { top += el.offsetTop || 0; @@ -78,19 +77,6 @@ L.DomUtil = { top -= el.scrollTop || 0; left -= el.scrollLeft || 0; - // 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 += el.scrollWidth - el.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(el, 'overflow-y') !== 'hidden' && - L.DomUtil.getStyle(el, 'overflow') !== 'hidden') { - left += 17; - } - } - el = el.parentNode; } while (el);