pages/scripts/touchswipe.js

484 lines
14 KiB
JavaScript

(function(a) {
typeof define === "function" && define.amd && define.amd.jQuery ? define(["jquery"], a) : a(jQuery)
})(function(a) {
function b(b) {
if (b && b.allowPageScroll === void 0 && (b.swipe !== void 0 || b.swipeStatus !== void 0)) b.allowPageScroll = i;
if (b.click !== void 0 && b.tap === void 0) b.tap = b.click;
b || (b = {});
b = a.extend({}, a.fn.swipe.defaults, b);
return this.each(function() {
var g = a(this),
d = g.data(R);
d || (d = new c(this, b), g.data(R, d))
})
}
function c(b, c) {
function ha(b) {
if (t.data(R + "_intouch") !== !0 && !(a(b.target).closest(c.excludedElements,
t).length > 0)) {
var g = b.originalEvent ? b.originalEvent : b,
d, k = r ? g.touches[0] : g;
A = F;
r ? B = g.touches.length : b.preventDefault();
G = 0;
K = H = null;
N = O = D = 0;
I = 1;
L = 0;
w = Ba();
Y = Ca();
Z = V = 0;
if (!r || B === c.fingers || c.fingers === x || W()) {
if (ia(0, k), aa = P(), B == 2 && (ia(1, g.touches[1]), O = N = ja(w[0].start, w[1].start)), c.swipeStatus || c.pinchStatus) d = J(g, A)
} else d = !1;
if (d === !1) return A = z, J(g, A), d;
else c.hold && (ka = setTimeout(a.proxy(function() {
t.trigger("hold", [g.target]);
c.hold && (d = c.hold.call(t, g, g.target))
}, this), c.longTapThreshold)),
ba(!0);
return null
}
}
function la(b) {
var o = b.originalEvent ? b.originalEvent : b;
if (!(A === C || A === z || ta())) {
var p, q = ua(r ? o.touches[0] : o);
X = P();
if (r) B = o.touches.length;
c.hold && clearTimeout(ka);
A = u;
B == 2 && (O == 0 ? (ia(1, o.touches[1]), O = N = ja(w[0].start, w[1].start)) : (ua(o.touches[1]), N = ja(w[0].end, w[1].end), K = I < 1 ? j : h), I = (N / O * 1).toFixed(2), L = Math.abs(O - N));
if (B === c.fingers || c.fingers === x || !r || W()) {
var n;
n = q.start;
var m = q.end;
n = Math.round(Math.atan2(m.y - n.y, n.x - m.x) * 180 / Math.PI);
n < 0 && (n = 360 - Math.abs(n));
n = H = n <= 45 &&
n >= 0 ? d : n <= 360 && n >= 315 ? d : n >= 135 && n <= 225 ? f : n > 45 && n < 135 ? k : g;
if (c.allowPageScroll === i || W()) b.preventDefault();
else switch (m = c.allowPageScroll === l, n) {
case d:
(c.swipeLeft && m || !m && c.allowPageScroll != s) && b.preventDefault();
break;
case f:
(c.swipeRight && m || !m && c.allowPageScroll != s) && b.preventDefault();
break;
case g:
(c.swipeUp && m || !m && c.allowPageScroll != v) && b.preventDefault();
break;
case k:
(c.swipeDown && m || !m && c.allowPageScroll != v) && b.preventDefault()
}
G = Math.round(Math.sqrt(Math.pow(q.end.x - q.start.x, 2) + Math.pow(q.end.y -
q.start.y, 2)));
D = X - aa;
b = H;
n = G;
n = Math.max(n, va(b));
Y[b].distance = n;
if (c.swipeStatus || c.pinchStatus) p = J(o, A);
if (!c.triggerOnTouchEnd || c.triggerOnTouchLeave) b = !0, c.triggerOnTouchLeave && (b = a(this), n = b.offset(), b = {
left: n.left,
right: n.left + b.outerWidth(),
top: n.top,
bottom: n.top + b.outerHeight()
}, b = q.end.x > b.left && q.end.x < b.right && q.end.y > b.top && q.end.y < b.bottom), !c.triggerOnTouchEnd && b ? A = ma(u) : c.triggerOnTouchLeave && !b && (A = ma(C)), (A == z || A == C) && J(o, A)
} else A = z, J(o, A);
p === !1 && (A = z, J(o, A))
}
}
function na(a) {
var b =
a.originalEvent;
if (r && b.touches.length > 0) return V = P(), Z = event.touches.length + 1, !0;
ta() && (B = Z);
X = P();
D = X - aa;
oa() || !pa() ? (A = z, J(b, A)) : c.triggerOnTouchEnd || c.triggerOnTouchEnd == !1 && A === u ? (a.preventDefault(), A = C, J(b, A)) : !c.triggerOnTouchEnd && c.tap ? (A = C, S(b, A, q)) : A === u && (A = z, J(b, A));
ba(!1);
return null
}
function T() {
N = O = aa = X = B = 0;
I = 1;
Z = V = 0;
ba(!1)
}
function qa(a) {
a = a.originalEvent;
c.triggerOnTouchLeave && (A = ma(C), J(a, A))
}
function wa() {
t.unbind(ca, ha);
t.unbind(da, T);
t.unbind(ra, la);
t.unbind(sa, na);
U && t.unbind(U,
qa);
ba(!1)
}
function ma(a) {
var b = a,
g = c.maxTimeThreshold ? D >= c.maxTimeThreshold ? !1 : !0 : !0,
d = pa(),
k = oa();
!g || k ? b = z : d && a == u && (!c.triggerOnTouchEnd || c.triggerOnTouchLeave) ? b = C : !d && a == C && c.triggerOnTouchLeave && (b = z);
return b
}
function J(a, b) {
var g = void 0;
if (xa() && ya() || ya()) g = S(a, b, m);
else if ((za() && W() || W()) && g !== !1) g = S(a, b, o);
Aa() && c.doubleTap && g !== !1 ? g = S(a, b, p) : D > c.longTapThreshold && G < y && c.longTap && g !== !1 ? g = S(a, b, n) : (B === 1 || !r) && (isNaN(G) || G < c.threshold) && c.tap && g !== !1 && (g = S(a, b, q));
b === z && T(a);
b === C &&
(r ? a.touches.length == 0 && T(a) : T(a));
return g
}
function S(b, i, l) {
var s = void 0;
if (l == m) {
t.trigger("swipeStatus", [i, H || null, G || 0, D || 0, B, w]);
if (c.swipeStatus && (s = c.swipeStatus.call(t, b, i, H || null, G || 0, D || 0, B, w), s === !1)) return !1;
if (i == C && xa()) {
t.trigger("swipe", [H, G, D, B, w]);
if (c.swipe && (s = c.swipe.call(t, b, H, G, D, B, w), s === !1)) return !1;
switch (H) {
case d:
t.trigger("swipeLeft", [H, G, D, B, w]);
c.swipeLeft && (s = c.swipeLeft.call(t, b, H, G, D, B, w));
break;
case f:
t.trigger("swipeRight", [H, G, D, B, w]);
c.swipeRight && (s = c.swipeRight.call(t,
b, H, G, D, B, w));
break;
case g:
t.trigger("swipeUp", [H, G, D, B, w]);
c.swipeUp && (s = c.swipeUp.call(t, b, H, G, D, B, w));
break;
case k:
t.trigger("swipeDown", [H, G, D, B, w]), c.swipeDown && (s = c.swipeDown.call(t, b, H, G, D, B, w))
}
}
}
if (l == o) {
t.trigger("pinchStatus", [i, K || null, L || 0, D || 0, B, I, w]);
if (c.pinchStatus && (s = c.pinchStatus.call(t, b, i, K || null, L || 0, D || 0, B, I, w), s === !1)) return !1;
if (i == C && za()) switch (K) {
case h:
t.trigger("pinchIn", [K || null, L || 0, D || 0, B, I, w]);
c.pinchIn && (s = c.pinchIn.call(t, b, K || null, L || 0, D || 0, B, I, w));
break;
case j:
t.trigger("pinchOut", [K || null, L || 0, D || 0, B, I, w]), c.pinchOut && (s = c.pinchOut.call(t, b, K || null, L || 0, D || 0, B, I, w))
}
}
if (l == q) {
if (i === z || i === C) clearTimeout(ea), clearTimeout(ka), c.doubleTap && !Aa() ? (Q = P(), ea = setTimeout(a.proxy(function() {
Q = null;
t.trigger("tap", [b.target]);
c.tap && (s = c.tap.call(t, b, b.target))
}, this), c.doubleTapThreshold)) : (Q = null, t.trigger("tap", [b.target]), c.tap && (s = c.tap.call(t, b, b.target)))
} else if (l == p) {
if (i === z || i === C) clearTimeout(ea), Q = null, t.trigger("doubletap", [b.target]), c.doubleTap && (s = c.doubleTap.call(t,
b, b.target))
} else if (l == n && (i === z || i === C)) clearTimeout(ea), Q = null, t.trigger("longtap", [b.target]), c.longTap && (s = c.longTap.call(t, b, b.target));
return s
}
function pa() {
var a = !0;
c.threshold !== null && (a = G >= c.threshold);
return a
}
function oa() {
var a = !1;
c.cancelThreshold !== null && H !== null && (a = va(H) - G >= c.cancelThreshold);
return a
}
function za() {
var a = B === c.fingers || c.fingers === x || !r,
b = w[0].end.x !== 0,
g;
g = c.pinchThreshold !== null ? L >= c.pinchThreshold : !0;
return a && b && g
}
function W() {
return !(!c.pinchStatus && !c.pinchIn &&
!c.pinchOut)
}
function xa() {
var a = c.maxTimeThreshold ? D >= c.maxTimeThreshold ? !1 : !0 : !0,
b = pa(),
g = B === c.fingers || c.fingers === x || !r,
d = w[0].end.x !== 0;
return !oa() && d && g && b && a
}
function ya() {
return !(!c.swipe && !c.swipeStatus && !c.swipeLeft && !c.swipeRight && !c.swipeUp && !c.swipeDown)
}
function Aa() {
if (Q == null) return !1;
var a = P();
return !!c.doubleTap && a - Q <= c.doubleTapThreshold
}
function ta() {
var a = !1;
V && P() - V <= c.fingerReleaseThreshold && (a = !0);
return a
}
function ba(a) {
a === !0 ? (t.bind(ra, la), t.bind(sa, na), U && t.bind(U, qa)) :
(t.unbind(ra, la, !1), t.unbind(sa, na, !1), U && t.unbind(U, qa, !1));
t.data(R + "_intouch", a === !0)
}
function ia(a, b) {
w[a].identifier = b.identifier !== void 0 ? b.identifier : 0;
w[a].start.x = w[a].end.x = b.pageX || b.clientX;
w[a].start.y = w[a].end.y = b.pageY || b.clientY;
return w[a]
}
function ua(a) {
var b;
a: {
for (b = 0; b < w.length; b++)
if (w[b].identifier == (a.identifier !== void 0 ? a.identifier : 0)) {
b = w[b];
break a
}
b = void 0
}
b.end.x = a.pageX || a.clientX;
b.end.y = a.pageY || a.clientY;
return b
}
function Ba() {
for (var a = [], b = 0; b <= 5; b++) a.push({
start: {
x: 0,
y: 0
},
end: {
x: 0,
y: 0
},
identifier: 0
});
return a
}
function va(a) {
if (Y[a]) return Y[a].distance
}
function Ca() {
var a = {};
a[d] = fa(d);
a[f] = fa(f);
a[g] = fa(g);
a[k] = fa(k);
return a
}
function fa(a) {
return {
direction: a,
distance: 0
}
}
function ja(a, b) {
var c = Math.abs(a.x - b.x),
g = Math.abs(a.y - b.y);
return Math.round(Math.sqrt(c * c + g * g))
}
function P() {
return (new Date).getTime()
}
var ga = r || M || !c.fallbackToMouseEvents,
ca = ga ? M ? E ? "MSPointerDown" : "pointerdown" : "touchstart" : "mousedown",
ra = ga ? M ? E ? "MSPointerMove" : "pointermove" : "touchmove" :
"mousemove",
sa = ga ? M ? E ? "MSPointerUp" : "pointerup" : "touchend" : "mouseup",
U = ga ? null : "mouseleave",
da = M ? E ? "MSPointerCancel" : "pointercancel" : "touchcancel",
G = 0,
H = null,
D = 0,
O = 0,
N = 0,
I = 1,
L = 0,
K = 0,
Y = null,
t = a(b),
A = "start",
B = 0,
w = null,
aa = 0,
X = 0,
V = 0,
Z = 0,
Q = 0,
ea = null,
ka = null;
try {
t.bind(ca, ha), t.bind(da, T)
} catch (Da) {
a.error("events not supported " + ca + "," + da + " on jQuery.swipe")
}
this.enable = function() {
t.bind(ca, ha);
t.bind(da, T);
return t
};
this.disable = function() {
wa();
return t
};
this.destroy = function() {
wa();
t.data(R, null);
return t
};
this.option = function(b, g) {
if (c[b] !== void 0)
if (g === void 0) return c[b];
else c[b] = g;
else a.error("Option " + b + " does not exist on jQuery.swipe.options");
return null
}
}
var d = "left",
f = "right",
g = "up",
k = "down",
h = "in",
j = "out",
i = "none",
l = "auto",
m = "swipe",
o = "pinch",
q = "tap",
p = "doubletap",
n = "longtap",
s = "horizontal",
v = "vertical",
x = "all",
y = 10,
F = "start",
u = "move",
C = "end",
z = "cancel",
r = "ontouchstart" in window,
E = window.navigator.msPointerEnabled && !window.navigator.pointerEnabled,
M = window.navigator.pointerEnabled || window.navigator.msPointerEnabled,
R = "TouchSwipe";
a.fn.swipe = function(c) {
var g = a(this),
d = g.data(R);
if (d && typeof c === "string")
if (d[c]) return d[c].apply(this, Array.prototype.slice.call(arguments, 1));
else a.error("Method " + c + " does not exist on jQuery.swipe");
else if (!d && (typeof c === "object" || !c)) return b.apply(this, arguments);
return g
};
a.fn.swipe.defaults = {
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,
hold: null,
triggerOnTouchEnd: !0,
triggerOnTouchLeave: !1,
allowPageScroll: "auto",
fallbackToMouseEvents: !0,
excludedElements: "label, button, input, select, textarea, a, .noSwipe"
};
a.fn.swipe.phases = {
PHASE_START: F,
PHASE_MOVE: u,
PHASE_END: C,
PHASE_CANCEL: z
};
a.fn.swipe.directions = {
LEFT: d,
RIGHT: f,
UP: g,
DOWN: k,
IN: h,
OUT: j
};
a.fn.swipe.pageScroll = {
NONE: i,
HORIZONTAL: s,
VERTICAL: v,
AUTO: l
};
a.fn.swipe.fingers = {
ONE: 1,
TWO: 2,
THREE: 3,
ALL: x
}
});;
(function() {
if (!("undefined" == typeof Muse || "undefined" == typeof Muse.assets)) {
var a = function(a, b) {
for (var c = 0, d = a.length; c < d; c++)
if (a[c] == b) return c;
return -1
}(Muse.assets.required, "touchswipe.js");
if (-1 != a) {
Muse.assets.required.splice(a, 1);
for (var a = document.getElementsByTagName("meta"), b = 0, c = a.length; b < c; b++) {
var d = a[b];
if ("generator" == d.getAttribute("name")) {
"2014.2.0.284" != d.getAttribute("content") && Muse.assets.outOfDate.push("touchswipe.js");
break
}
}
}
}
})();