Template:Team:Leeds TouchSwipejs

From 2013.igem.org

Revision as of 15:17, 2 September 2013 by Parsley (Talk | contribs)

/*!

* To initialize the javascript within the wiki properly, use this url:
* https://2013.igem.org/Template:Team:Leeds_TouchSwipejs?action=raw&ctype=text/javascript
* to bypass the global wiki html and tags when referencing.
*/

(function (e) {

   var o = "left",
       n = "right",
       d = "up",
       v = "down",
       c = "in",
       w = "out",
       l = "none",
       r = "auto",
       k = "swipe",
       s = "pinch",
       x = "tap",
       i = "doubletap",
       b = "longtap",
       A = "horizontal",
       t = "vertical",
       h = "all",
       q = 10,
       f = "start",
       j = "move",
       g = "end",
       p = "cancel",
       a = "ontouchstart" in window,
       y = "TouchSwipe";
   var m = {
       fingers: 1,
       threshold: 75,
       cancelThreshold: null,
       pinchThreshold: 20,
       maxTimeThreshold: null,
       fingerReleaseThreshold: 250,
       longTapThreshold: 500,
       doubleTapThreshold: 200,
       swipe: null,
       swipeLeft: null,
       swipeRight: null,
       swipeUp: null,
       swipeDown: null,
       swipeStatus: null,
       pinchIn: null,
       pinchOut: null,
       pinchStatus: null,
       click: null,
       tap: null,
       doubleTap: null,
       longTap: null,
       triggerOnTouchEnd: true,
       triggerOnTouchLeave: false,
       allowPageScroll: "auto",
       fallbackToMouseEvents: true,
       excludedElements: "button, input, select, textarea, a, .noSwipe"
   };
   e.fn.swipe = function (D) {
       var C = e(this),
           B = C.data(y);
       if (B && typeof D === "string") {
           if (B[D]) {
               return B[D].apply(this, Array.prototype.slice.call(arguments, 1))
           } else {
               e.error("Method " + D + " does not exist on jQuery.swipe")
           }
       } else {
           if (!B && (typeof D === "object" || !D)) {
               return u.apply(this, arguments)
           }
       }
       return C
   };
   e.fn.swipe.defaults = m;
   e.fn.swipe.phases = {
       PHASE_START: f,
       PHASE_MOVE: j,
       PHASE_END: g,
       PHASE_CANCEL: p
   };
   e.fn.swipe.directions = {
       LEFT: o,
       RIGHT: n,
       UP: d,
       DOWN: v,
       IN: c,
       OUT: w
   };
   e.fn.swipe.pageScroll = {
       NONE: l,
       HORIZONTAL: A,
       VERTICAL: t,
       AUTO: r
   };
   e.fn.swipe.fingers = {
       ONE: 1,
       TWO: 2,
       THREE: 3,
       ALL: h
   };
   function u(B) {
       if (B && (B.allowPageScroll === undefined && (B.swipe !== undefined || B.swipeStatus !== undefined))) {
           B.allowPageScroll = l
       }
       if (B.click !== undefined && B.tap === undefined) {
           B.tap = B.click
       }
       if (!B) {
           B = {}
       }
       B = e.extend({}, e.fn.swipe.defaults, B);
       return this.each(function () {
           var D = e(this);
           var C = D.data(y);
           if (!C) {
               C = new z(this, B);
               D.data(y, C)
           }
       })
   }
   function z(a0, aq) {
       var av = (a || !aq.fallbackToMouseEvents),
           G = av ? "touchstart" : "mousedown",
           au = av ? "touchmove" : "mousemove",
           R = av ? "touchend" : "mouseup",
           P = av ? null : "mouseleave",
           az = "touchcancel";
       var ac = 0,
           aL = null,
           Y = 0,
           aX = 0,
           aV = 0,
           D = 1,
           am = 0,
           aF = 0,
           J = null;
       var aN = e(a0);
       var W = "start";
       var T = 0;
       var aM = null;
       var Q = 0,
           aY = 0,
           a1 = 0,
           aa = 0,
           K = 0;
       var aS = null;
       try {
           aN.bind(G, aJ);
           aN.bind(az, a5)
       } catch (ag) {
           e.error("events not supported " + G + "," + az + " on jQuery.swipe")
       }
       this.enable = function () {
           aN.bind(G, aJ);
           aN.bind(az, a5);
           return aN
       };
       this.disable = function () {
           aG();
           return aN
       };
       this.destroy = function () {
           aG();
           aN.data(y, null);
           return aN
       };
       this.option = function (a8, a7) {
           if (aq[a8] !== undefined) {
               if (a7 === undefined) {
                   return aq[a8]
               } else {
                   aq[a8] = a7
               }
           } else {
               e.error("Option " + a8 + " does not exist on jQuery.swipe.options")
           }
       };
       function aJ(a9) {
           if (ax()) {
               return
           }
           if (e(a9.target).closest(aq.excludedElements, aN).length > 0) {
               return
           }
           var ba = a9.originalEvent ? a9.originalEvent : a9;
           var a8, a7 = a ? ba.touches[0] : ba;
           W = f;
           if (a) {
               T = ba.touches.length
           } else {
               a9.preventDefault()
           }
           ac = 0;
           aL = null;
           aF = null;
           Y = 0;
           aX = 0;
           aV = 0;
           D = 1;
           am = 0;
           aM = af();
           J = X();
           O();
           if (!a || (T === aq.fingers || aq.fingers === h) || aT()) {
               ae(0, a7);
               Q = ao();
               if (T == 2) {
                   ae(1, ba.touches[1]);
                   aX = aV = ap(aM[0].start, aM[1].start)
               }
               if (aq.swipeStatus || aq.pinchStatus) {
                   a8 = L(ba, W)
               }
           } else {
               a8 = false
           } if (a8 === false) {
               W = p;
               L(ba, W);
               return a8
           } else {
               ak(true)
           }
       }
       function aZ(ba) {
           var bd = ba.originalEvent ? ba.originalEvent : ba;
           if (W === g || W === p || ai()) {
               return
           }
           var a9, a8 = a ? bd.touches[0] : bd;
           var bb = aD(a8);
           aY = ao();
           if (a) {
               T = bd.touches.length
           }
           W = j;
           if (T == 2) {
               if (aX == 0) {
                   ae(1, bd.touches[1]);
                   aX = aV = ap(aM[0].start, aM[1].start)
               } else {
                   aD(bd.touches[1]);
                   aV = ap(aM[0].end, aM[1].end);
                   aF = an(aM[0].end, aM[1].end)
               }
               D = a3(aX, aV);
               am = Math.abs(aX - aV)
           }
           if ((T === aq.fingers || aq.fingers === h) || !a || aT()) {
               aL = aH(bb.start, bb.end);
               ah(ba, aL);
               ac = aO(bb.start, bb.end);
               Y = aI();
               aE(aL, ac);
               if (aq.swipeStatus || aq.pinchStatus) {
                   a9 = L(bd, W)
               }
               if (!aq.triggerOnTouchEnd || aq.triggerOnTouchLeave) {
                   var a7 = true;
                   if (aq.triggerOnTouchLeave) {
                       var bc = aU(this);
                       a7 = B(bb.end, bc)
                   }
                   if (!aq.triggerOnTouchEnd && a7) {
                       W = ay(j)
                   } else {
                       if (aq.triggerOnTouchLeave && !a7) {
                           W = ay(g)
                       }
                   } if (W == p || W == g) {
                       L(bd, W)
                   }
               }
           } else {
               W = p;
               L(bd, W)
           } if (a9 === false) {
               W = p;
               L(bd, W)
           }
       }
       function I(a7) {
           var a8 = a7.originalEvent;
           if (a) {
               if (a8.touches.length > 0) {
                   C();
                   return true
               }
           }
           if (ai()) {
               T = aa
           }
           a7.preventDefault();
           aY = ao();
           Y = aI();
           if (a6()) {
               W = p;
               L(a8, W)
           } else {
               if (aq.triggerOnTouchEnd || (aq.triggerOnTouchEnd == false && W === j)) {
                   W = g;
                   L(a8, W)
               } else {
                   if (!aq.triggerOnTouchEnd && a2()) {
                       W = g;
                       aB(a8, W, x)
                   } else {
                       if (W === j) {
                           W = p;
                           L(a8, W)
                       }
                   }
               }
           }
           ak(false)
       }
       function a5() {
           T = 0;
           aY = 0;
           Q = 0;
           aX = 0;
           aV = 0;
           D = 1;
           O();
           ak(false)
       }
       function H(a7) {
           var a8 = a7.originalEvent;
           if (aq.triggerOnTouchLeave) {
               W = ay(g);
               L(a8, W)
           }
       }
       function aG() {
           aN.unbind(G, aJ);
           aN.unbind(az, a5);
           aN.unbind(au, aZ);
           aN.unbind(R, I);
           if (P) {
               aN.unbind(P, H)
           }
           ak(false)
       }
       function ay(bb) {
           var ba = bb;
           var a9 = aw();
           var a8 = aj();
           var a7 = a6();
           if (!a9 || a7) {
               ba = p
           } else {
               if (a8 && bb == j && (!aq.triggerOnTouchEnd || aq.triggerOnTouchLeave)) {
                   ba = g
               } else {
                   if (!a8 && bb == g && aq.triggerOnTouchLeave) {
                       ba = p
                   }
               }
           }
           return ba
       }
       function L(a9, a7) {
           var a8 = undefined;
           if (F() || S()) {
               a8 = aB(a9, a7, k)
           } else {
               if ((M() || aT()) && a8 !== false) {
                   a8 = aB(a9, a7, s)
               }
           } if (aC() && a8 !== false) {
               a8 = aB(a9, a7, i)
           } else {
               if (al() && a8 !== false) {
                   a8 = aB(a9, a7, b)
               } else {
                   if (ad() && a8 !== false) {
                       a8 = aB(a9, a7, x)
                   }
               }
           } if (a7 === p) {
               a5(a9)
           }
           if (a7 === g) {
               if (a) {
                   if (a9.touches.length == 0) {
                       a5(a9)
                   }
               } else {
                   a5(a9)
               }
           }
           return a8
       }
       function aB(ba, a7, a9) {
           var a8 = undefined;
           if (a9 == k) {
               aN.trigger("swipeStatus", [a7, aL || null, ac || 0, Y || 0, T]);
               if (aq.swipeStatus) {
                   a8 = aq.swipeStatus.call(aN, ba, a7, aL || null, ac || 0, Y || 0, T);
                   if (a8 === false) {
                       return false
                   }
               }
               if (a7 == g && aR()) {
                   aN.trigger("swipe", [aL, ac, Y, T]);
                   if (aq.swipe) {
                       a8 = aq.swipe.call(aN, ba, aL, ac, Y, T);
                       if (a8 === false) {
                           return false
                       }
                   }
                   switch (aL) {
                   case o:
                       aN.trigger("swipeLeft", [aL, ac, Y, T]);
                       if (aq.swipeLeft) {
                           a8 = aq.swipeLeft.call(aN, ba, aL, ac, Y, T)
                       }
                       break;
                   case n:
                       aN.trigger("swipeRight", [aL, ac, Y, T]);
                       if (aq.swipeRight) {
                           a8 = aq.swipeRight.call(aN, ba, aL, ac, Y, T)
                       }
                       break;
                   case d:
                       aN.trigger("swipeUp", [aL, ac, Y, T]);
                       if (aq.swipeUp) {
                           a8 = aq.swipeUp.call(aN, ba, aL, ac, Y, T)
                       }
                       break;
                   case v:
                       aN.trigger("swipeDown", [aL, ac, Y, T]);
                       if (aq.swipeDown) {
                           a8 = aq.swipeDown.call(aN, ba, aL, ac, Y, T)
                       }
                       break
                   }
               }
           }
           if (a9 == s) {
               aN.trigger("pinchStatus", [a7, aF || null, am || 0, Y || 0, T, D]);
               if (aq.pinchStatus) {
                   a8 = aq.pinchStatus.call(aN, ba, a7, aF || null, am || 0, Y || 0, T, D);
                   if (a8 === false) {
                       return false
                   }
               }
               if (a7 == g && a4()) {
                   switch (aF) {
                   case c:
                       aN.trigger("pinchIn", [aF || null, am || 0, Y || 0, T, D]);
                       if (aq.pinchIn) {
                           a8 = aq.pinchIn.call(aN, ba, aF || null, am || 0, Y || 0, T, D)
                       }
                       break;
                   case w:
                       aN.trigger("pinchOut", [aF || null, am || 0, Y || 0, T, D]);
                       if (aq.pinchOut) {
                           a8 = aq.pinchOut.call(aN, ba, aF || null, am || 0, Y || 0, T, D)
                       }
                       break
                   }
               }
           }
           if (a9 == x) {
               if (a7 === p || a7 === g) {
                   clearTimeout(aS);
                   if (V() && !E()) {
                       K = ao();
                       aS = setTimeout(e.proxy(function () {
                           K = null;
                           aN.trigger("tap", [ba.target]);
                           if (aq.tap) {
                               a8 = aq.tap.call(aN, ba, ba.target)
                           }
                       }, this), aq.doubleTapThreshold)
                   } else {
                       K = null;
                       aN.trigger("tap", [ba.target]);
                       if (aq.tap) {
                           a8 = aq.tap.call(aN, ba, ba.target)
                       }
                   }
               }
           } else {
               if (a9 == i) {
                   if (a7 === p || a7 === g) {
                       clearTimeout(aS);
                       K = null;
                       aN.trigger("doubletap", [ba.target]);
                       if (aq.doubleTap) {
                           a8 = aq.doubleTap.call(aN, ba, ba.target)
                       }
                   }
               } else {
                   if (a9 == b) {
                       if (a7 === p || a7 === g) {
                           clearTimeout(aS);
                           K = null;
                           aN.trigger("longtap", [ba.target]);
                           if (aq.longTap) {
                               a8 = aq.longTap.call(aN, ba, ba.target)
                           }
                       }
                   }
               }
           }
           return a8
       }
       function aj() {
           var a7 = true;
           if (aq.threshold !== null) {
               a7 = ac >= aq.threshold
           }
           return a7
       }
       function a6() {
           var a7 = false;
           if (aq.cancelThreshold !== null && aL !== null) {
               a7 = (aP(aL) - ac) >= aq.cancelThreshold
           }
           return a7
       }
       function ab() {
           if (aq.pinchThreshold !== null) {
               return am >= aq.pinchThreshold
           }
           return true
       }
       function aw() {
           var a7;
           if (aq.maxTimeThreshold) {
               if (Y >= aq.maxTimeThreshold) {
                   a7 = false
               } else {
                   a7 = true
               }
           } else {
               a7 = true
           }
           return a7
       }
       function ah(a7, a8) {
           if (aq.allowPageScroll === l || aT()) {
               a7.preventDefault()
           } else {
               var a9 = aq.allowPageScroll === r;
               switch (a8) {
               case o:
                   if ((aq.swipeLeft && a9) || (!a9 && aq.allowPageScroll != A)) {
                       a7.preventDefault()
                   }
                   break;
               case n:
                   if ((aq.swipeRight && a9) || (!a9 && aq.allowPageScroll != A)) {
                       a7.preventDefault()
                   }
                   break;
               case d:
                   if ((aq.swipeUp && a9) || (!a9 && aq.allowPageScroll != t)) {
                       a7.preventDefault()
                   }
                   break;
               case v:
                   if ((aq.swipeDown && a9) || (!a9 && aq.allowPageScroll != t)) {
                       a7.preventDefault()
                   }
                   break
               }
           }
       }
       function a4() {
           var a8 = aK();
           var a7 = U();
           var a9 = ab();
           return a8 && a7 && a9
       }
       function aT() {
           return !!(aq.pinchStatus || aq.pinchIn || aq.pinchOut)
       }
       function M() {
           return !!(a4() && aT())
       }
       function aR() {
           var ba = aw();
           var bc = aj();
           var a9 = aK();
           var a7 = U();
           var a8 = a6();
           var bb = !a8 && a7 && a9 && bc && ba;
           return bb
       }
       function S() {
           return !!(aq.swipe || aq.swipeStatus || aq.swipeLeft || aq.swipeRight || aq.swipeUp || aq.swipeDown)
       }
       function F() {
           return !!(aR() && S())
       }
       function aK() {
           return ((T === aq.fingers || aq.fingers === h) || !a)
       }
       function U() {
           return aM[0].end.x !== 0
       }
       function a2() {
           return !!(aq.tap)
       }
       function V() {
           return !!(aq.doubleTap)
       }
       function aQ() {
           return !!(aq.longTap)
       }
       function N() {
           if (K == null) {
               return false
           }
           var a7 = ao();
           return (V() && ((a7 - K) <= aq.doubleTapThreshold))
       }
       function E() {
           return N()
       }
       function at() {
           return ((T === 1 || !a) && (isNaN(ac) || ac === 0))
       }
       function aW() {
           return ((Y > aq.longTapThreshold) && (ac < q))
       }
       function ad() {
           return !!(at() && a2())
       }
       function aC() {
           return !!(N() && V())
       }
       function al() {
           return !!(aW() && aQ())
       }
       function C() {
           a1 = ao();
           aa = event.touches.length + 1
       }
       function O() {
           a1 = 0;
           aa = 0
       }
       function ai() {
           var a7 = false;
           if (a1) {
               var a8 = ao() - a1;
               if (a8 <= aq.fingerReleaseThreshold) {
                   a7 = true
               }
           }
           return a7
       }
       function ax() {
           return !!(aN.data(y + "_intouch") === true)
       }
       function ak(a7) {
           if (a7 === true) {
               aN.bind(au, aZ);
               aN.bind(R, I);
               if (P) {
                   aN.bind(P, H)
               }
           } else {
               aN.unbind(au, aZ, false);
               aN.unbind(R, I, false);
               if (P) {
                   aN.unbind(P, H, false)
               }
           }
           aN.data(y + "_intouch", a7 === true)
       }
       function ae(a8, a7) {
           var a9 = a7.identifier !== undefined ? a7.identifier : 0;
           aM[a8].identifier = a9;
           aM[a8].start.x = aM[a8].end.x = a7.pageX || a7.clientX;
           aM[a8].start.y = aM[a8].end.y = a7.pageY || a7.clientY;
           return aM[a8]
       }
       function aD(a7) {
           var a9 = a7.identifier !== undefined ? a7.identifier : 0;
           var a8 = Z(a9);
           a8.end.x = a7.pageX || a7.clientX;
           a8.end.y = a7.pageY || a7.clientY;
           return a8
       }
       function Z(a8) {
           for (var a7 = 0; a7 < aM.length; a7++) {
               if (aM[a7].identifier == a8) {
                   return aM[a7]
               }
           }
       }
       function af() {
           var a7 = [];
           for (var a8 = 0; a8 <= 5; a8++) {
               a7.push({
                   start: {
                       x: 0,
                       y: 0
                   },
                   end: {
                       x: 0,
                       y: 0
                   },
                   identifier: 0
               })
           }
           return a7
       }
       function aE(a7, a8) {
           a8 = Math.max(a8, aP(a7));
           J[a7].distance = a8
       }
       function aP(a7) {
           return J[a7].distance
       }
       function X() {
           var a7 = {};
           a7[o] = ar(o);
           a7[n] = ar(n);
           a7[d] = ar(d);
           a7[v] = ar(v);
           return a7
       }
       function ar(a7) {
           return {
               direction: a7,
               distance: 0
           }
       }
       function aI() {
           return aY - Q
       }
       function ap(ba, a9) {
           var a8 = Math.abs(ba.x - a9.x);
           var a7 = Math.abs(ba.y - a9.y);
           return Math.round(Math.sqrt(a8 * a8 + a7 * a7))
       }
       function a3(a7, a8) {
           var a9 = (a8 / a7) * 1;
           return a9.toFixed(2)
       }
       function an() {
           if (D < 1) {
               return w
           } else {
               return c
           }
       }
       function aO(a8, a7) {
           return Math.round(Math.sqrt(Math.pow(a7.x - a8.x, 2) + Math.pow(a7.y - a8.y, 2)))
       }
       function aA(ba, a8) {
           var a7 = ba.x - a8.x;
           var bc = a8.y - ba.y;
           var a9 = Math.atan2(bc, a7);
           var bb = Math.round(a9 * 180 / Math.PI);
           if (bb < 0) {
               bb = 360 - Math.abs(bb)
           }
           return bb
       }
       function aH(a8, a7) {
           var a9 = aA(a8, a7);
           if ((a9 <= 45) && (a9 >= 0)) {
               return o
           } else {
               if ((a9 <= 360) && (a9 >= 315)) {
                   return o
               } else {
                   if ((a9 >= 135) && (a9 <= 225)) {
                       return n
                   } else {
                       if ((a9 > 45) && (a9 < 135)) {
                           return v
                       } else {
                           return d
                       }
                   }
               }
           }
       }
       function ao() {
           var a7 = new Date();
           return a7.getTime()
       }
       function aU(a7) {
           a7 = e(a7);
           var a9 = a7.offset();
           var a8 = {
               left: a9.left,
               right: a9.left + a7.outerWidth(),
               top: a9.top,
               bottom: a9.top + a7.outerHeight()
           };
           return a8
       }
       function B(a7, a8) {
           return (a7.x > a8.left && a7.x < a8.right && a7.y > a8.top && a7.y < a8.bottom)
       }
   }

})(jQuery);