PageSourceSearch

https://www.republicofchocolate.com.tw/Scripts/Qaptcha/jquery.ui.touch.js

js republicofchocolate.com.tw collected 2026-10-06 15:26:10 UTC 6,814 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);
180 /*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.