PageSourceSearch

https://rus-fishsoft.ru/assets/qaptcha/jquery/jquery.ui.touch.js

js rus-fishsoft.ru collected 2026-10-02 10:27:35 UTC 6,590 bytes, 224 lines download raw bytes

1/**
2* jQuery.UI.iPad plugin
3* Copyright (c) 2010 Stephen von Takach
4* licensed under MIT.
5* Date: 27/8/2010
6*
7* Project Home: 
8* http://code.google.com/p/jquery-ui-for-ipad-and-iphone/
9*/
10
11$(function() {
12	//
13	// Extend jQuery feature detection
14	//
15	$.extend($.support, {
16		touch: "ontouchend" in document
17	});
18	
19	//
20	// Hook up touch events
21	//
22	if ($.support.touch) {
23		var obj = document.getElementsByClassName('QapTcha');
24		for(i=0; i<obj.length;i++){
25		obj[i].addEventListener("touchstart", iPadTouchHandler, false);
26		obj[i].addEventListener("touchmove", iPadTouchHandler, false);
27		obj[i].addEventListener("touchend", iPadTouchHandler, false);
28		obj[i].addEventListener("touchcancel", iPadTouchHandler, false);
29	}}
30});
31
32
33var lastTap = null;			// Holds last tapped element (so we can compare for double tap)
34var tapValid = false;			// Are we still in the .6 second window where a double tap can occur
35var tapTimeout = null;			// The timeout reference
36
37function cancelTap() {
38	tapValid = false;
39}
40
41
42var rightClickPending = false;	// Is a right click still feasible
43var rightClickEvent = null;		// the original event
44var holdTimeout = null;			// timeout reference
45var cancelMouseUp = false;		// prevents a click from occuring as we want the context menu
46
47
48function cancelHold() {
49	if (rightClickPending) {
50		window.clearTimeout(holdTimeout);
51		rightClickPending = false;
52		rightClickEvent = null;
53	}
54}
55
56function startHold(event) {
57	if (rightClickPending)
58		return;
59
60	rightClickPending = true; // We could be performing a right click
61	rightClickEvent = (event.changedTouches)[0];
62	holdTimeout = window.setTimeout("doRightClick();", 800);
63}
64
65
66function doRightClick() {
67	rightClickPending = false;
68
69	//
70	// We need to mouse up (as we were down)
71	//
72	var first = rightClickEvent,
73		simulatedEvent = document.createEvent("MouseEvent");
74	simulatedEvent.initMouseEvent("mouseup", true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
75			false, false, false, false, 0, null);
76	first.target.dispatchEvent(simulatedEvent);
77
78	//
79	// emulate a right click
80	//
81	simulatedEvent = document.createEvent("MouseEvent");
82	simulatedEvent.initMouseEvent("mousedown", true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
83			false, false, false, false, 2, null);
84	first.target.dispatchEvent(simulatedEvent);
85
86	//
87	// Show a context menu
88	//
89	simulatedEvent = document.createEvent("MouseEvent");
90	simulatedEvent.initMouseEvent("contextmenu", true, true, window, 1, first.screenX + 50, first.screenY + 5, first.clientX + 50, first.clientY + 5,
91                                  false, false, false, false, 2, null);
92	first.target.dispatchEvent(simulatedEvent);
93
94
95	//
96	// Note:: I don't mouse up the right click here however feel free to add if required
97	//
98
99
100	cancelMouseUp = true;
101	rightClickEvent = null; // Release memory
102}
103
104
105//
106// mouse over event then mouse down
107//
108function iPadTouchStart(event) {
109	var touches = event.changedTouches,
110		first = touches[0],
111		type = "mouseover",
112		simulatedEvent = document.createEvent("MouseEvent");
113	//
114	// Mouse over first - I have live events attached on mouse over
115	//
116	simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
117                            false, false, false, false, 0, null);
118	first.target.dispatchEvent(simulatedEvent);
119
120	type = "mousedown";
121	simulatedEvent = document.createEvent("MouseEvent");
122
123	simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
124                            false, false, false, false, 0, null);
125	first.target.dispatchEvent(simulatedEvent);
126
127
128	if (!tapValid) {
129		lastTap = first.target;
130		tapValid = true;
131		tapTimeout = window.setTimeout("cancelTap();", 600);
132		startHold(event);
133	}
134	else {
135		window.clearTimeout(tapTimeout);
136
137		//
138		// If a double tap is still a possibility and the elements are the same
139		//	Then perform a double click
140		//
141		if (first.target == lastTap) {
142			lastTap = null;
143			tapValid = false;
144
145			type = "click";
146			simulatedEvent = document.createEvent("MouseEvent");
147
148			simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
149                         	false, false, false, false, 0/*left*/, null);
150			first.target.dispatchEvent(simulatedEvent);
151
152			type = "dblclick";
153			simulatedEvent = document.createEvent("MouseEvent");
154
155			simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
156                         	false, false, false, false, 0/*left*/, null);
157			first.target.dispatchEvent(simulatedEvent);
158		}
159		else {
160			lastTap = first.target;
161			tapValid = true;
162			tapTimeout = window.setTimeout("cancelTap();", 600);
163			startHold(event);
164		}
165	}
166}
167
168function iPadTouchHandler(event) {
169	var type = "",
170		button = 0; /*left*/
171
172	if (event.touches.length > 1)
173		return;
174
175	switch (event.type) {
176		case "touchstart":
177			if ($(event.changedTouches[0].target).is("select")) {
178				return;
179			}
180			iPadTouchStart(event); /*We need to trigger two events here to support one touch drag and drop*/
181			event.preventDefault();
182			return false;
183			break;
184
185		case "touchmove":
186			cancelHold();
187			type = "mousemove";
188			event.preventDefault();
189			break;
190
191		case "touchend":
192			if (cancelMouseUp) {
193				cancelMouseUp = false;
194				event.preventDefault();
195				return false;
196			}
197			cancelHold();
198			type = "mouseup";
199			break;
200
201		default:
202			return;
203	}
204
205	var touches = event.changedTouches,
206		first = touches[0],
207		simulatedEvent = document.createEvent("MouseEvent");
208
209	simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
210                            false, false, false, false, button, null);
211
212	first.target.dispatchEvent(simulatedEvent);
213
214	if (type == "mouseup" && tapValid && first.target == lastTap) {	// This actually emulates the ipads default behaviour (which we prevented)
215		simulatedEvent = document.createEvent("MouseEvent");		// This check avoids click being emulated on a double tap
216
217		simulatedEvent.initMouseEvent("click", true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
218                            false, false, false, false, button, null);
219
220		first.target.dispatchEvent(simulatedEvent);
221	}
222}
223
224

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.