summaryrefslogtreecommitdiffstats
path: root/debian/missing-sources/leaflet.js/dom/DomEvent.DoubleTap.js
diff options
context:
space:
mode:
Diffstat (limited to 'debian/missing-sources/leaflet.js/dom/DomEvent.DoubleTap.js')
-rw-r--r--debian/missing-sources/leaflet.js/dom/DomEvent.DoubleTap.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/debian/missing-sources/leaflet.js/dom/DomEvent.DoubleTap.js b/debian/missing-sources/leaflet.js/dom/DomEvent.DoubleTap.js
new file mode 100644
index 0000000..a5fb25d
--- /dev/null
+++ b/debian/missing-sources/leaflet.js/dom/DomEvent.DoubleTap.js
@@ -0,0 +1,86 @@
+import * as Browser from '../core/Browser';
+import {_pointersCount} from './DomEvent.Pointer';
+
+/*
+ * Extends the event handling code with double tap support for mobile browsers.
+ */
+
+var _touchstart = Browser.msPointer ? 'MSPointerDown' : Browser.pointer ? 'pointerdown' : 'touchstart';
+var _touchend = Browser.msPointer ? 'MSPointerUp' : Browser.pointer ? 'pointerup' : 'touchend';
+var _pre = '_leaflet_';
+
+// inspired by Zepto touch code by Thomas Fuchs
+export function addDoubleTapListener(obj, handler, id) {
+ var last, touch,
+ doubleTap = false,
+ delay = 250;
+
+ function onTouchStart(e) {
+ var count;
+
+ if (Browser.pointer) {
+ if ((!Browser.edge) || e.pointerType === 'mouse') { return; }
+ count = _pointersCount;
+ } else {
+ count = e.touches.length;
+ }
+
+ if (count > 1) { return; }
+
+ var now = Date.now(),
+ delta = now - (last || now);
+
+ touch = e.touches ? e.touches[0] : e;
+ doubleTap = (delta > 0 && delta <= delay);
+ last = now;
+ }
+
+ function onTouchEnd(e) {
+ if (doubleTap && !touch.cancelBubble) {
+ if (Browser.pointer) {
+ if ((!Browser.edge) || e.pointerType === 'mouse') { return; }
+ // work around .type being readonly with MSPointer* events
+ var newTouch = {},
+ prop, i;
+
+ for (i in touch) {
+ prop = touch[i];
+ newTouch[i] = prop && prop.bind ? prop.bind(touch) : prop;
+ }
+ touch = newTouch;
+ }
+ touch.type = 'dblclick';
+ handler(touch);
+ last = null;
+ }
+ }
+
+ obj[_pre + _touchstart + id] = onTouchStart;
+ obj[_pre + _touchend + id] = onTouchEnd;
+ obj[_pre + 'dblclick' + id] = handler;
+
+ obj.addEventListener(_touchstart, onTouchStart, false);
+ obj.addEventListener(_touchend, onTouchEnd, false);
+
+ // On some platforms (notably, chrome<55 on win10 + touchscreen + mouse),
+ // the browser doesn't fire touchend/pointerup events but does fire
+ // native dblclicks. See #4127.
+ // Edge 14 also fires native dblclicks, but only for pointerType mouse, see #5180.
+ obj.addEventListener('dblclick', handler, false);
+
+ return this;
+}
+
+export function removeDoubleTapListener(obj, id) {
+ var touchstart = obj[_pre + _touchstart + id],
+ touchend = obj[_pre + _touchend + id],
+ dblclick = obj[_pre + 'dblclick' + id];
+
+ obj.removeEventListener(_touchstart, touchstart, false);
+ obj.removeEventListener(_touchend, touchend, false);
+ if (!Browser.edge) {
+ obj.removeEventListener('dblclick', dblclick, false);
+ }
+
+ return this;
+}