aboutsummaryrefslogtreecommitdiffstats
path: root/extlib/leaflet/src/dom/DomEvent.js
diff options
context:
space:
mode:
Diffstat (limited to 'extlib/leaflet/src/dom/DomEvent.js')
-rw-r--r--extlib/leaflet/src/dom/DomEvent.js132
1 files changed, 132 insertions, 0 deletions
diff --git a/extlib/leaflet/src/dom/DomEvent.js b/extlib/leaflet/src/dom/DomEvent.js
new file mode 100644
index 00000000..bcabebc2
--- /dev/null
+++ b/extlib/leaflet/src/dom/DomEvent.js
@@ -0,0 +1,132 @@
+/*
+ * L.DomEvent contains functions for working with DOM events.
+ */
+
+L.DomEvent = {
+ /* inpired by John Resig, Dean Edwards and YUI addEvent implementations */
+ addListener: function(/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn, /*Object*/ context) {
+ var id = L.Util.stamp(fn);
+
+ function handler(e) {
+ return fn.call(context || obj, e || L.DomEvent._getEvent());
+ }
+
+ if (L.Browser.touch && (type == 'dblclick') && this.addDoubleTapListener) {
+ this.addDoubleTapListener(obj, handler, id);
+ } else if ('addEventListener' in obj) {
+ if (type == 'mousewheel') {
+ obj.addEventListener('DOMMouseScroll', handler, false);
+ obj.addEventListener(type, handler, false);
+ } else if ((type == 'mouseenter') || (type == 'mouseleave')) {
+ var originalHandler = handler,
+ newType = (type == 'mouseenter' ? 'mouseover' : 'mouseout');
+ handler = function(e) {
+ if (!L.DomEvent._checkMouse(obj, e)) return;
+ return originalHandler(e);
+ };
+ obj.addEventListener(newType, handler, false);
+ } else {
+ obj.addEventListener(type, handler, false);
+ }
+ } else if ('attachEvent' in obj) {
+ obj.attachEvent("on" + type, handler);
+ }
+
+ obj['_leaflet_' + type + id] = handler;
+ },
+
+ removeListener: function(/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn) {
+ var id = L.Util.stamp(fn),
+ key = '_leaflet_' + type + id;
+ handler = obj[key];
+
+ if (L.Browser.mobileWebkit && (type == 'dblclick') && this.removeDoubleTapListener) {
+ this.removeDoubleTapListener(obj, id);
+ } else if ('removeEventListener' in obj) {
+ if (type == 'mousewheel') {
+ obj.removeEventListener('DOMMouseScroll', handler, false);
+ obj.removeEventListener(type, handler, false);
+ } else if ((type == 'mouseenter') || (type == 'mouseleave')) {
+ obj.removeEventListener((type == 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
+ } else {
+ obj.removeEventListener(type, handler, false);
+ }
+ } else if ('detachEvent' in obj) {
+ obj.detachEvent("on" + type, handler);
+ }
+ obj[key] = null;
+ },
+
+ _checkMouse: function(el, e) {
+ var related = e.relatedTarget;
+
+ if (!related) return true;
+
+ try {
+ while (related && (related != el)) {
+ related = related.parentNode;
+ }
+ } catch(err) { return false; }
+
+ return (related != el);
+ },
+
+ _getEvent: function()/*->Event*/ {
+ var e = window.event;
+ if (!e) {
+ var caller = arguments.callee.caller;
+ while (caller) {
+ e = caller['arguments'][0];
+ if (e && Event == e.constructor) { break; }
+ caller = caller.caller;
+ }
+ }
+ return e;
+ },
+
+ stopPropagation: function(/*Event*/ e) {
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ } else {
+ e.cancelBubble = true;
+ }
+ },
+
+ disableClickPropagation: function(/*HTMLElement*/ el) {
+ L.DomEvent.addListener(el, 'mousedown', L.DomEvent.stopPropagation);
+ L.DomEvent.addListener(el, 'click', L.DomEvent.stopPropagation);
+ L.DomEvent.addListener(el, 'dblclick', L.DomEvent.stopPropagation);
+ },
+
+ preventDefault: function(/*Event*/ e) {
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ e.returnValue = false;
+ }
+ },
+
+ stop: function(e) {
+ L.DomEvent.preventDefault(e);
+ L.DomEvent.stopPropagation(e);
+ },
+
+ getMousePosition: function(e, container) {
+ var x = e.pageX ? e.pageX : e.clientX +
+ document.body.scrollLeft + document.documentElement.scrollLeft,
+ y = e.pageY ? e.pageY : e.clientY +
+ document.body.scrollTop + document.documentElement.scrollTop,
+ pos = new L.Point(x, y);
+
+ return (container ?
+ pos.subtract(L.DomUtil.getCumulativeOffset(container)) : pos);
+ },
+
+ getWheelDelta: function(e) {
+ var delta = 0;
+ if (e.wheelDelta) { delta = e.wheelDelta/120; }
+ if (e.detail) { delta = -e.detail/3; }
+ return delta;
+ }
+};
+