1 2(function() { 3 if ( ! window.Symbol ) { 4 return; 5 } 6 7 // jQuery.event.swipe 8// 0.5 9// Stephen Band 10 11// Dependencies 12// jQuery.event.move 1.2 13 14// One of swipeleft, swiperight, swipeup or swipedown is triggered on 15// moveend, when the move has covered a threshold ratio of the dimension 16// of the target node, or has gone really fast. Threshold and velocity 17// sensitivity changed with: 18// 19// jQuery.event.special.swipe.settings.threshold 20// jQuery.event.special.swipe.settings.sensitivity 21 22(function (thisModule) { 23 if (typeof define === 'function' && define.amd) { 24 // AMD. Register as an anonymous module. 25 define(['jquery', undefined, 'jquery.event.move'], thisModule); 26 } else if ((typeof module !== "undefined" && module !== null) && module.exports) { 27 module.exports = thisModule; 28 } else { 29 // Browser globals 30 thisModule(jQuery); 31 } 32})(function(jQuery, undefined){ 33 var add = jQuery.event.add, 34 35 remove = jQuery.event.remove, 36 37 // Just sugar, so we can have arguments in the same order as 38 // add and remove. 39 trigger = function(node, type, data) { 40 jQuery.event.trigger(type, data, node); 41 }, 42 43 settings = { 44 // Ratio of distance over target finger must travel to be 45 // considered a swipe. 46 threshold: 0.4, 47 // Faster fingers can travel shorter distances to be considered 48 // swipes. 'sensitivity' controls how much. Bigger is shorter. 49 sensitivity: 6 50 }; 51 52 function moveend(e) { 53 var w, h, event; 54 55 w = e.currentTarget.offsetWidth; 56 h = e.currentTarget.offsetHeight; 57 58 // Copy over some useful properties from the move event 59 event = { 60 distX: e.distX, 61 distY: e.distY, 62 velocityX: e.velocityX, 63 velocityY: e.velocityY, 64 finger: e.finger 65 }; 66 67 // Find out which of the four directions was swiped 68 if (e.distX > e.distY) { 69 if (e.distX > -e.distY) { 70 if (e.distX/w > settings.threshold || e.velocityX * e.distX/w * settings.sensitivity > 1) { 71 event.type = 'swiperight'; 72 trigger(e.currentTarget, event); 73 } 74 } 75 else { 76 if (-e.distY/h > settings.threshold || e.velocityY * e.distY/w * settings.sensitivity > 1) { 77 event.type = 'swipeup'; 78 trigger(e.currentTarget, event); 79 } 80 } 81 } 82 else { 83 if (e.distX > -e.distY) { 84 if (e.distY/h > settings.threshold || e.velocityY * e.distY/w * settings.sensitivity > 1) { 85 event.type = 'swipedown'; 86 trigger(e.currentTarget, event); 87 } 88 } 89 else { 90 if (-e.distX/w > settings.threshold || e.velocityX * e.distX/w * settings.sensitivity > 1) { 91 event.type = 'swipeleft'; 92 trigger(e.currentTarget, event); 93 } 94 } 95 } 96 } 97 98 function getData(node) { 99 var data = jQuery.data(node, 'event_swipe'); 100 101 if (!data) { 102 data = { count: 0 }; 103 jQuery.data(node, 'event_swipe', data); 104 } 105 106 return data; 107 } 108 109 jQuery.event.special.swipe = 110 jQuery.event.special.swipeleft = 111 jQuery.event.special.swiperight = 112 jQuery.event.special.swipeup = 113 jQuery.event.special.swipedown = { 114 setup: function( data, namespaces, eventHandle ) { 115 var data = getData(this); 116 117 // If another swipe event is already setup, don't setup again. 118 if (data.count++ > 0) { return; } 119 120 add(this, 'moveend', moveend); 121 122 return true; 123 }, 124 125 teardown: function() { 126 var data = getData(this); 127 128 // If another swipe event is still setup, don't teardown. 129 if (--data.count > 0) { return; } 130 131 remove(this, 'moveend', moveend); 132 133 return true; 134 }, 135 136 settings: settings 137 }; 138}); 139 140 141})()
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.