PageSourceSearch

https://varosgazda.hu/themes/custom/varosgazda/js/Leaflet.draw/ext/TouchEvents.js?v=11.4.8

js varosgazda.hu collected 2026-10-07 17:41:04 UTC 7,446 bytes, 272 lines download raw bytes

vendor: 7,446 bytes, lines 1-272
1L.Map.mergeOptions({
2	touchExtend: true
3});
4
5/**
6 * @class L.Map.TouchExtend
7 * @aka TouchExtend
8 */
9L.Map.TouchExtend = L.Handler.extend({
10
11	// @method initialize(): void
12	// Sets TouchExtend private accessor variables
13	initialize: function (map) {
14		this._map = map;
15		this._container = map._container;
16		this._pane = map._panes.overlayPane;
17	},
18
19	// @method addHooks(): void
20	// Adds dom listener events to the map container
21	addHooks: function () {
22		L.DomEvent.on(this._container, 'touchstart', this._onTouchStart, this);
23		L.DomEvent.on(this._container, 'touchend', this._onTouchEnd, this);
24		L.DomEvent.on(this._container, 'touchmove', this._onTouchMove, this);
25		if (this._detectIE()) {
26			L.DomEvent.on(this._container, 'MSPointerDown', this._onTouchStart, this);
27			L.DomEvent.on(this._container, 'MSPointerUp', this._onTouchEnd, this);
28			L.DomEvent.on(this._container, 'MSPointerMove', this._onTouchMove, this);
29			L.DomEvent.on(this._container, 'MSPointerCancel', this._onTouchCancel, this);
30
31		} else {
32			L.DomEvent.on(this._container, 'touchcancel', this._onTouchCancel, this);
33			L.DomEvent.on(this._container, 'touchleave', this._onTouchLeave, this);
34		}
35	},
36
37	// @method removeHooks(): void
38	// Removes dom listener events from the map container
39	removeHooks: function () {
40		L.DomEvent.off(this._container, 'touchstart', this._onTouchStart, this);
41		L.DomEvent.off(this._container, 'touchend', this._onTouchEnd, this);
42		L.DomEvent.off(this._container, 'touchmove', this._onTouchMove, this);
43		if (this._detectIE()) {
44			L.DomEvent.off(this._container, 'MSPointerDown', this._onTouchStart, this);
45			L.DomEvent.off(this._container, 'MSPointerUp', this._onTouchEnd, this);
46			L.DomEvent.off(this._container, 'MSPointerMove', this._onTouchMove, this);
47			L.DomEvent.off(this._container, 'MSPointerCancel', this._onTouchCancel, this);
48		} else {
49			L.DomEvent.off(this._container, 'touchcancel', this._onTouchCancel, this);
50			L.DomEvent.off(this._container, 'touchleave', this._onTouchLeave, this);
51		}
52	},
53
54	_touchEvent: function (e, type) {
55		// #TODO: fix the pageX error that is do a bug in Android where a single touch triggers two click events
56		// _filterClick is what leaflet uses as a workaround.
57		// This is a problem with more things than just android. Another problem is touchEnd has no touches in
58		// its touch list.
59		var touchEvent = {};
60		if (typeof e.touches !== 'undefined') {
61			if (!e.touches.length) {
62				return;
63			}
64			touchEvent = e.touches[0];
65		} else if (e.pointerType === 'touch') {
66			touchEvent = e;
67			if (!this._filterClick(e)) {
68				return;
69			}
70		} else {
71			return;
72		}
73
74		var containerPoint = this._map.mouseEventToContainerPoint(touchEvent),
75			layerPoint = this._map.mouseEventToLayerPoint(touchEvent),
76			latlng = this._map.layerPointToLatLng(layerPoint);
77
78		this._map.fire(type, {
79			latlng: latlng,
80			layerPoint: layerPoint,
81			containerPoint: containerPoint,
82			pageX: touchEvent.pageX,
83			pageY: touchEvent.pageY,
84			originalEvent: e
85		});
86	},
87
88	/** Borrowed from Leaflet and modified for bool ops **/
89	_filterClick: function (e) {
90		var timeStamp = (e.timeStamp || e.originalEvent.timeStamp),
91			elapsed = L.DomEvent._lastClick && (timeStamp - L.DomEvent._lastClick);
92
93		// are they closer together than 500ms yet more than 100ms?
94		// Android typically triggers them ~300ms apart while multiple listeners
95		// on the same event should be triggered far faster;
96		// or check if click is simulated on the element, and if it is, reject any non-simulated events
97		if ((elapsed && elapsed > 100 && elapsed < 500) || (e.target._simulatedClick && !e._simulated)) {
98			L.DomEvent.stop(e);
99			return false;
100		}
101		L.DomEvent._lastClick = timeStamp;
102		return true;
103	},
104
105	_onTouchStart: function (e) {
106		if (!this._map._loaded) {
107			return;
108		}
109
110		var type = 'touchstart';
111		this._touchEvent(e, type);
112
113	},
114
115	_onTouchEnd: function (e) {
116		if (!this._map._loaded) {
117			return;
118		}
119
120		var type = 'touchend';
121		this._touchEvent(e, type);
122	},
123
124	_onTouchCancel: function (e) {
125		if (!this._map._loaded) {
126			return;
127		}
128
129		var type = 'touchcancel';
130		if (this._detectIE()) {
131			type = 'pointercancel';
132		}
133		this._touchEvent(e, type);
134	},
135
136	_onTouchLeave: function (e) {
137		if (!this._map._loaded) {
138			return;
139		}
140
141		var type = 'touchleave';
142		this._touchEvent(e, type);
143	},
144
145	_onTouchMove: function (e) {
146		if (!this._map._loaded) {
147			return;
148		}
149
150		var type = 'touchmove';
151		this._touchEvent(e, type);
152	},
153
154	_detectIE: function () {
155		var ua = window.navigator.userAgent;
156
157		var msie = ua.indexOf('MSIE ');
158		if (msie > 0) {
159			// IE 10 or older => return version number
160			return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
161		}
162
163		var trident = ua.indexOf('Trident/');
164		if (trident > 0) {
165			// IE 11 => return version number
166			var rv = ua.indexOf('rv:');
167			return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
168		}
169
170		var edge = ua.indexOf('Edge/');
171		if (edge > 0) {
172			// IE 12 => return version number
173			return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
174		}
175
176		// other browser
177		return false;
178	}
179});
180
181L.Map.addInitHook('addHandler', 'touchExtend', L.Map.TouchExtend);
182
183
184/**
185 * @class L.Marker.Touch
186 * @aka Marker.Touch
187 *
188 * This isn't full Touch support. This is just to get markers to also support dom touch events after creation
189 * #TODO: find a better way of getting markers to support touch.
190 */
191L.Marker.Touch = L.Marker.extend({
192
193	_initInteraction: function () {
194		if (!this.addInteractiveTarget) {
195			// 0.7.x support
196			return this._initInteractionLegacy();
197		}
198		// TODO this may need be updated to re-add touch events for 1.0+
199		return L.Marker.prototype._initInteraction.apply(this);
200	},
201
202	// This is an exact copy of https://github.com/Leaflet/Leaflet/blob/v0.7/src/layer/marker/Marker.js
203	// with the addition of the touch events
204	_initInteractionLegacy: function () {
205
206		if (!this.options.clickable) {
207			return;
208		}
209
210		// TODO refactor into something shared with Map/Path/etc. to DRY it up
211
212		var icon = this._icon,
213			events = ['dblclick',
214				'mousedown',
215				'mouseover',
216				'mouseout',
217				'contextmenu',
218				'touchstart',
219				'touchend',
220				'touchmove'];
221		if (this._detectIE) {
222			events.concat(['MSPointerDown',
223				'MSPointerUp',
224				'MSPointerMove',
225				'MSPointerCancel']);
226		} else {
227			events.concat(['touchcancel']);
228		}
229
230		L.DomUtil.addClass(icon, 'leaflet-clickable');
231		L.DomEvent.on(icon, 'click', this._onMouseClick, this);
232		L.DomEvent.on(icon, 'keypress', this._onKeyPress, this);
233
234		for (var i = 0; i < events.length; i++) {
235			L.DomEvent.on(icon, events[i], this._fireMouseEvent, this);
236		}
237
238		if (L.Handler.MarkerDrag) {
239			this.dragging = new L.Handler.MarkerDrag(this);
240
241			if (this.options.draggable) {
242				this.dragging.enable();
243			}
244		}
245	},
246
247	_detectIE: function () {
248		var ua = window.navigator.userAgent;
249
250		var msie = ua.indexOf('MSIE ');
251		if (msie > 0) {
252			// IE 10 or older => return version number
253			return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
254		}
255
256		var trident = ua.indexOf('Trident/');
257		if (trident > 0) {
258			// IE 11 => return version number
259			var rv = ua.indexOf('rv:');
260			return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
261		}
262
263		var edge = ua.indexOf('Edge/');
264		if (edge > 0) {
265			// IE 12 => return version number
266			return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
267		}
268
269		// other browser
270		return false;
271	}
272});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.