1(function(doc, win) { 2 'use strict'; 3 if (typeof doc.createEvent !== 'function') return false; // no tap events here 4 // helpers 5 var useJquery = typeof jQuery !== 'undefined', 6 msPointerEnabled = !!navigator.pointerEnabled || navigator.msPointerEnabled, 7 isTouch = (!!('ontouchstart' in win) && navigator.userAgent.indexOf('PhantomJS') < 0) || msPointerEnabled, 8 msEventType = function(type) { 9 var lo = type.toLowerCase(), 10 ms = 'MS' + type; 11 return navigator.msPointerEnabled ? ms : lo; 12 }, 13 touchevents = { 14 touchstart: msEventType('PointerDown') + ' touchstart', 15 touchend: msEventType('PointerUp') + ' touchend', 16 touchmove: msEventType('PointerMove') + ' touchmove' 17 }, 18 setListener = function(elm, events, callback) { 19 var eventsArray = events.split(' '), 20 i = eventsArray.length; 21 while (i--) { 22 elm.addEventListener(eventsArray[i], callback, false); 23 } 24 }, 25 getPointerEvent = function(event) { 26 return event.targetTouches ? event.targetTouches[0] : event; 27 }, 28 getTimestamp = function () { 29 return new Date().getTime(); 30 }, 31 sendEvent = function(elm, eventName, originalEvent, data) { 32 33 34 35 var customEvent = doc.createEvent('Event'); 36 data = data || {}; 37 data.x = currX; 38 data.y = currY; 39 data.distance = data.distance; 40 if (useJquery){ 41 jQuery(elm).trigger(eventName, data); 42 } 43 else { 44 customEvent.originalEvent = originalEvent; 45 for (var key in data) { 46 customEvent[key] = data[key]; 47 } 48 customEvent.initEvent(eventName, true, true); 49 elm.dispatchEvent(customEvent); 50 } 51 }, 52 53 onTouchStart = function(e) { 54 $(e.target).on('dragstart',function(e){e.preventDefault()}); 55 var pointer = getPointerEvent(e); 56 cachedX = currX = pointer.pageX; 57 cachedY = currY = pointer.pageY; 58 59 timestamp = getTimestamp(); 60 tapNum++; 61 62 sendEvent(e.target, 'swipstart', e, { 63 distance: { 64 x: Math.abs(currX), 65 y: Math.abs(currY) 66 } 67 }); 68 69 70 }, 71 onTouchEnd = function(e) { 72 //e.preventDefault(); 73 74 75 76 var eventsArr = [], 77 deltaY = cachedY - currY, 78 deltaX = cachedX - currX; 79 80 // clear the previous timer in case it was set 81 clearTimeout(tapTimer); 82 83 84 85 if (deltaX <= -swipeThreshold) 86 eventsArr.push('swiperight'); 87 88 if (deltaX >= swipeThreshold) 89 eventsArr.push('swipeleft'); 90 91 if (deltaY <= -swipeThreshold) 92 eventsArr.push('swipedown'); 93 94 if (deltaY >= swipeThreshold) 95 eventsArr.push('swipeup'); 96 97 98 99 if (eventsArr.length) { 100 for (var i = 0; i < eventsArr.length; i++) { 101 var eventName = eventsArr[i]; 102 sendEvent(e.target, eventName, e, { 103 distance: { 104 x: Math.abs(deltaX), 105 y: Math.abs(deltaY) 106 } 107 }); 108 } 109 } else { 110 111 //console.log(timestamp + tapThreshold-getTimestamp()); 112 //console.log(getTimestamp()); 113 114 if ( 115 (timestamp + tapThreshold) - getTimestamp() >= 0 && 116 cachedX >= currX - tapPrecision && 117 cachedX <= currX + tapPrecision && 118 cachedY >= currY - tapPrecision && 119 cachedY <= currY + tapPrecision 120 ) { 121 122 sendEvent(e.target, (tapNum === 2) ? 'dbltap' : 'tap', e); 123 } 124 125 tapTimer = setTimeout(function() { 126 tapNum = 0; 127 }, dbltapThreshold); 128 129 } 130 131 tapNum = 0; 132 133 //e.preventDefault(); 134 //return false; 135 136 }, 137 onTouchMove = function(e) { 138 139 //e.preventDefault(); 140 141 if(tapNum == 0) return false; 142 143 144 145 var pointer = getPointerEvent(e); 146 currX = pointer.pageX; 147 currY = pointer.pageY; 148 var deltaY = cachedY - currY, 149 deltaX = cachedX - currX; 150 151 sendEvent(e.target, 'swipemove', e, { 152 distance: { 153 x: Math.abs(currX), 154 y: Math.abs(currY), 155 dX : deltaX, 156 dY : deltaY, 157 } 158 }); 159 160 }, 161 swipeThreshold = win.SWIPE_THRESHOLD || 10, 162 tapThreshold = win.TAP_THRESHOLD || 200, // range of time where a tap event could be detected 163 dbltapThreshold = win.DBL_TAP_THRESHOLD || 200, // delay needed to detect a double tap 164 tapPrecision = win.TAP_PRECISION / 2 || 20 / 2, // touch events boundaries ( 60px by default ) 165 //justTouchEvents = win.JUST_ON_TOUCH_DEVICES || isTouch, 166 justTouchEvents = false, 167 tapNum = 0, 168 currX, currY, cachedX, cachedY, tapTimer, timestamp; 169 170 setListener(doc, touchevents.touchstart + (justTouchEvents ? '' : ' mousedown'), onTouchStart); 171 setListener(doc, touchevents.touchend + (justTouchEvents ? '' : ' mouseup'), onTouchEnd); 172 setListener(doc, touchevents.touchmove + (justTouchEvents ? '' : ' mousemove'), onTouchMove); 173 174 //console.log(win.TAP_THRESHOLD); 175 176}(document, window)); 177 178var isTouch = true;
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.