jellyfish-web/dashboard-ui/bower_components/Sortable/Sortable.min.js
2018-10-23 01:05:09 +03:00

393 lines
No EOL
19 KiB
JavaScript

/*! Sortable 1.4.2 - MIT | git://github.com/rubaxa/Sortable.git */ ! function(a) {
"use strict";
"function" == typeof define && define.amd ? define(a) : "undefined" != typeof module && "undefined" != typeof module.exports ? module.exports = a() : "undefined" != typeof Package ? Sortable = a() : window.Sortable = a()
}(function() {
"use strict";
function a(a, b) {
if (!a || !a.nodeType || 1 !== a.nodeType) throw "Sortable: `el` must be HTMLElement, and not " + {}.toString.call(a);
this.el = a, this.options = b = r({}, b), a[L] = this;
var c = {
group: Math.random(),
sort: !0,
disabled: !1,
store: null,
handle: null,
scroll: !0,
scrollSensitivity: 30,
scrollSpeed: 10,
draggable: /[uo]l/i.test(a.nodeName) ? "li" : ">*",
ghostClass: "sortable-ghost",
chosenClass: "sortable-chosen",
ignore: "a, img",
filter: null,
animation: 0,
setData: function(a, b) {
a.setData("Text", b.textContent)
},
dropBubble: !1,
dragoverBubble: !1,
dataIdAttr: "data-id",
delay: 0,
forceFallback: !1,
fallbackClass: "sortable-fallback",
fallbackOnBody: !1
};
for (var d in c) !(d in b) && (b[d] = c[d]);
V(b);
for (var f in this) "_" === f.charAt(0) && (this[f] = this[f].bind(this));
this.nativeDraggable = b.forceFallback ? !1 : P, e(a, "mousedown", this._onTapStart), e(a, "touchstart", this._onTapStart), this.nativeDraggable && (e(a, "dragover", this), e(a, "dragenter", this)), T.push(this._onDragOver), b.store && this.sort(b.store.get(this))
}
function b(a) {
v && v.state !== a && (h(v, "display", a ? "none" : ""), !a && v.state && w.insertBefore(v, s), v.state = a)
}
function c(a, b, c) {
if (a) {
c = c || N, b = b.split(".");
var d = b.shift().toUpperCase(),
e = new RegExp("\\s(" + b.join("|") + ")(?=\\s)", "g");
do
if (">*" === d && a.parentNode === c || ("" === d || a.nodeName.toUpperCase() == d) && (!b.length || ((" " + a.className + " ").match(e) || []).length == b.length)) return a; while (a !== c && (a = a.parentNode))
}
return null
}
function d(a) {
a.dataTransfer && (a.dataTransfer.dropEffect = "move"), a.preventDefault()
}
function e(a, b, c) {
a.addEventListener(b, c, !1)
}
function f(a, b, c) {
a.removeEventListener(b, c, !1)
}
function g(a, b, c) {
if (a)
if (a.classList) a.classList[c ? "add" : "remove"](b);
else {
var d = (" " + a.className + " ").replace(K, " ").replace(" " + b + " ", " ");
a.className = (d + (c ? " " + b : "")).replace(K, " ")
}
}
function h(a, b, c) {
var d = a && a.style;
if (d) {
if (void 0 === c) return N.defaultView && N.defaultView.getComputedStyle ? c = N.defaultView.getComputedStyle(a, "") : a.currentStyle && (c = a.currentStyle), void 0 === b ? c : c[b];
b in d || (b = "-webkit-" + b), d[b] = c + ("string" == typeof c ? "" : "px")
}
}
function i(a, b, c) {
if (a) {
var d = a.getElementsByTagName(b),
e = 0,
f = d.length;
if (c)
for (; f > e; e++) c(d[e], e);
return d
}
return []
}
function j(a, b, c, d, e, f, g) {
var h = N.createEvent("Event"),
i = (a || b[L]).options,
j = "on" + c.charAt(0).toUpperCase() + c.substr(1);
h.initEvent(c, !0, !0), h.to = b, h.from = e || b, h.item = d || b, h.clone = v, h.oldIndex = f, h.newIndex = g, b.dispatchEvent(h), i[j] && i[j].call(a, h)
}
function k(a, b, c, d, e, f) {
var g, h, i = a[L],
j = i.options.onMove;
return g = N.createEvent("Event"), g.initEvent("move", !0, !0), g.to = b, g.from = a, g.dragged = c, g.draggedRect = d, g.related = e || b, g.relatedRect = f || b.getBoundingClientRect(), a.dispatchEvent(g), j && (h = j.call(i, g)), h
}
function l(a) {
a.draggable = !1
}
function m() {
R = !1
}
function n(a, b) {
var c = a.lastElementChild,
d = c.getBoundingClientRect();
return (b.clientY - (d.top + d.height) > 5 || b.clientX - (d.right + d.width) > 5) && c
}
function o(a) {
for (var b = a.tagName + a.className + a.src + a.href + a.textContent, c = b.length, d = 0; c--;) d += b.charCodeAt(c);
return d.toString(36)
}
function p(a) {
var b = 0;
if (!a || !a.parentNode) return -1;
for (; a && (a = a.previousElementSibling);) "TEMPLATE" !== a.nodeName.toUpperCase() && b++;
return b
}
function q(a, b) {
var c, d;
return function() {
void 0 === c && (c = arguments, d = this, setTimeout(function() {
1 === c.length ? a.call(d, c[0]) : a.apply(d, c), c = void 0
}, b))
}
}
function r(a, b) {
if (a && b)
for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c]);
return a
}
var s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J = {},
K = /\s+/g,
L = "Sortable" + (new Date).getTime(),
M = window,
N = M.document,
O = M.parseInt,
P = !!("draggable" in N.createElement("div")),
Q = function(a) {
return a = N.createElement("x"), a.style.cssText = "pointer-events:auto", "auto" === a.style.pointerEvents
}(),
R = !1,
S = Math.abs,
T = ([].slice, []),
U = q(function(a, b, c) {
if (c && b.scroll) {
var d, e, f, g, h = b.scrollSensitivity,
i = b.scrollSpeed,
j = a.clientX,
k = a.clientY,
l = window.innerWidth,
m = window.innerHeight;
if (z !== c && (y = b.scroll, z = c, y === !0)) {
y = c;
do
if (y.offsetWidth < y.scrollWidth || y.offsetHeight < y.scrollHeight) break; while (y = y.parentNode)
}
y && (d = y, e = y.getBoundingClientRect(), f = (S(e.right - j) <= h) - (S(e.left - j) <= h), g = (S(e.bottom - k) <= h) - (S(e.top - k) <= h)), f || g || (f = (h >= l - j) - (h >= j), g = (h >= m - k) - (h >= k), (f || g) && (d = M)), (J.vx !== f || J.vy !== g || J.el !== d) && (J.el = d, J.vx = f, J.vy = g, clearInterval(J.pid), d && (J.pid = setInterval(function() {
d === M ? M.scrollTo(M.pageXOffset + f * i, M.pageYOffset + g * i) : (g && (d.scrollTop += g * i), f && (d.scrollLeft += f * i))
}, 24)))
}
}, 30),
V = function(a) {
var b = a.group;
b && "object" == typeof b || (b = a.group = {
name: b
}), ["pull", "put"].forEach(function(a) {
a in b || (b[a] = !0)
}), a.groups = " " + b.name + (b.put.join ? " " + b.put.join(" ") : "") + " "
};
return a.prototype = {
constructor: a,
_onTapStart: function(a) {
var b = this,
d = this.el,
e = this.options,
f = a.type,
g = a.touches && a.touches[0],
h = (g || a).target,
i = h,
k = e.filter;
if (!("mousedown" === f && 0 !== a.button || e.disabled) && (h = c(h, e.draggable, d))) {
if (D = p(h), "function" == typeof k) {
if (k.call(this, a, h, this)) return j(b, i, "filter", h, d, D), void a.preventDefault()
} else if (k && (k = k.split(",").some(function(a) {
return a = c(i, a.trim(), d), a ? (j(b, a, "filter", h, d, D), !0) : void 0
}))) return void a.preventDefault();
(!e.handle || c(i, e.handle, d)) && this._prepareDragStart(a, g, h)
}
},
_prepareDragStart: function(a, b, c) {
var d, f = this,
h = f.el,
j = f.options,
k = h.ownerDocument;
c && !s && c.parentNode === h && (G = a, w = h, s = c, t = s.parentNode, x = s.nextSibling, F = j.group, d = function() {
f._disableDelayedDrag(), s.draggable = !0, g(s, f.options.chosenClass, !0), f._triggerDragStart(b)
}, j.ignore.split(",").forEach(function(a) {
i(s, a.trim(), l)
}), e(k, "mouseup", f._onDrop), e(k, "touchend", f._onDrop), e(k, "touchcancel", f._onDrop), j.delay ? (e(k, "mouseup", f._disableDelayedDrag), e(k, "touchend", f._disableDelayedDrag), e(k, "touchcancel", f._disableDelayedDrag), e(k, "mousemove", f._disableDelayedDrag), e(k, "touchmove", f._disableDelayedDrag), f._dragStartTimer = setTimeout(d, j.delay)) : d())
},
_disableDelayedDrag: function() {
var a = this.el.ownerDocument;
clearTimeout(this._dragStartTimer), f(a, "mouseup", this._disableDelayedDrag), f(a, "touchend", this._disableDelayedDrag), f(a, "touchcancel", this._disableDelayedDrag), f(a, "mousemove", this._disableDelayedDrag), f(a, "touchmove", this._disableDelayedDrag)
},
_triggerDragStart: function(a) {
a ? (G = {
target: s,
clientX: a.clientX,
clientY: a.clientY
}, this._onDragStart(G, "touch")) : this.nativeDraggable ? (e(s, "dragend", this), e(w, "dragstart", this._onDragStart)) : this._onDragStart(G, !0);
try {
N.selection ? N.selection.empty() : window.getSelection().removeAllRanges()
} catch (b) {}
},
_dragStarted: function() {
w && s && (g(s, this.options.ghostClass, !0), a.active = this, j(this, w, "start", s, w, D))
},
_emulateDragOver: function() {
if (H) {
if (this._lastX === H.clientX && this._lastY === H.clientY) return;
this._lastX = H.clientX, this._lastY = H.clientY, Q || h(u, "display", "none");
var a = N.elementFromPoint(H.clientX, H.clientY),
b = a,
c = " " + this.options.group.name,
d = T.length;
if (b)
do {
if (b[L] && b[L].options.groups.indexOf(c) > -1) {
for (; d--;) T[d]({
clientX: H.clientX,
clientY: H.clientY,
target: a,
rootEl: b
});
break
}
a = b
} while (b = b.parentNode);
Q || h(u, "display", "")
}
},
_onTouchMove: function(b) {
if (G) {
a.active || this._dragStarted(), this._appendGhost();
var c = b.touches ? b.touches[0] : b,
d = c.clientX - G.clientX,
e = c.clientY - G.clientY,
f = b.touches ? "translate3d(" + d + "px," + e + "px,0)" : "translate(" + d + "px," + e + "px)";
I = !0, H = c, h(u, "webkitTransform", f), h(u, "mozTransform", f), h(u, "msTransform", f), h(u, "transform", f), b.preventDefault()
}
},
_appendGhost: function() {
if (!u) {
var a, b = s.getBoundingClientRect(),
c = h(s),
d = this.options;
u = s.cloneNode(!0), g(u, d.ghostClass, !1), g(u, d.fallbackClass, !0), h(u, "top", b.top - O(c.marginTop, 10)), h(u, "left", b.left - O(c.marginLeft, 10)), h(u, "width", b.width), h(u, "height", b.height), h(u, "opacity", "0.8"), h(u, "position", "fixed"), h(u, "zIndex", "100000"), h(u, "pointerEvents", "none"), d.fallbackOnBody && N.body.appendChild(u) || w.appendChild(u), a = u.getBoundingClientRect(), h(u, "width", 2 * b.width - a.width), h(u, "height", 2 * b.height - a.height)
}
},
_onDragStart: function(a, b) {
var c = a.dataTransfer,
d = this.options;
this._offUpEvents(), "clone" == F.pull && (v = s.cloneNode(!0), h(v, "display", "none"), w.insertBefore(v, s)), b ? ("touch" === b ? (e(N, "touchmove", this._onTouchMove), e(N, "touchend", this._onDrop), e(N, "touchcancel", this._onDrop)) : (e(N, "mousemove", this._onTouchMove), e(N, "mouseup", this._onDrop)), this._loopId = setInterval(this._emulateDragOver, 50)) : (c && (c.effectAllowed = "move", d.setData && d.setData.call(this, c, s)), e(N, "drop", this), setTimeout(this._dragStarted, 0))
},
_onDragOver: function(a) {
var d, e, f, g = this.el,
i = this.options,
j = i.group,
l = j.put,
o = F === j,
p = i.sort;
if (void 0 !== a.preventDefault && (a.preventDefault(), !i.dragoverBubble && a.stopPropagation()), I = !0, F && !i.disabled && (o ? p || (f = !w.contains(s)) : F.pull && l && (F.name === j.name || l.indexOf && ~l.indexOf(F.name))) && (void 0 === a.rootEl || a.rootEl === this.el)) {
if (U(a, i, this.el), R) return;
if (d = c(a.target, i.draggable, g), e = s.getBoundingClientRect(), f) return b(!0), void(v || x ? w.insertBefore(s, v || x) : p || w.appendChild(s));
if (0 === g.children.length || g.children[0] === u || g === a.target && (d = n(g, a))) {
if (d) {
if (d.animated) return;
r = d.getBoundingClientRect()
}
b(o), k(w, g, s, e, d, r) !== !1 && (s.contains(g) || (g.appendChild(s), t = g), this._animate(e, s), d && this._animate(r, d))
} else if (d && !d.animated && d !== s && void 0 !== d.parentNode[L]) {
A !== d && (A = d, B = h(d), C = h(d.parentNode));
var q, r = d.getBoundingClientRect(),
y = r.right - r.left,
z = r.bottom - r.top,
D = /left|right|inline/.test(B.cssFloat + B.display) || "flex" == C.display && 0 === C["flex-direction"].indexOf("row"),
E = d.offsetWidth > s.offsetWidth,
G = d.offsetHeight > s.offsetHeight,
H = (D ? (a.clientX - r.left) / y : (a.clientY - r.top) / z) > .5,
J = d.nextElementSibling,
K = k(w, g, s, e, d, r);
if (K !== !1) {
if (R = !0, setTimeout(m, 30), b(o), 1 === K || -1 === K) q = 1 === K;
else if (D) {
var M = s.offsetTop,
N = d.offsetTop;
q = M === N ? d.previousElementSibling === s && !E || H && E : N > M
} else q = J !== s && !G || H && G;
s.contains(g) || (q && !J ? g.appendChild(s) : d.parentNode.insertBefore(s, q ? J : d)), t = s.parentNode, this._animate(e, s), this._animate(r, d)
}
}
}
},
_animate: function(a, b) {
var c = this.options.animation;
if (c) {
var d = b.getBoundingClientRect();
h(b, "transition", "none"), h(b, "transform", "translate3d(" + (a.left - d.left) + "px," + (a.top - d.top) + "px,0)"), b.offsetWidth, h(b, "transition", "all " + c + "ms"), h(b, "transform", "translate3d(0,0,0)"), clearTimeout(b.animated), b.animated = setTimeout(function() {
h(b, "transition", ""), h(b, "transform", ""), b.animated = !1
}, c)
}
},
_offUpEvents: function() {
var a = this.el.ownerDocument;
f(N, "touchmove", this._onTouchMove), f(a, "mouseup", this._onDrop), f(a, "touchend", this._onDrop), f(a, "touchcancel", this._onDrop)
},
_onDrop: function(b) {
var c = this.el,
d = this.options;
clearInterval(this._loopId), clearInterval(J.pid), clearTimeout(this._dragStartTimer), f(N, "mousemove", this._onTouchMove), this.nativeDraggable && (f(N, "drop", this), f(c, "dragstart", this._onDragStart)), this._offUpEvents(), b && (I && (b.preventDefault(), !d.dropBubble && b.stopPropagation()), u && u.parentNode.removeChild(u), s && (this.nativeDraggable && f(s, "dragend", this), l(s), g(s, this.options.ghostClass, !1), g(s, this.options.chosenClass, !1), w !== t ? (E = p(s), E >= 0 && (j(null, t, "sort", s, w, D, E), j(this, w, "sort", s, w, D, E), j(null, t, "add", s, w, D, E), j(this, w, "remove", s, w, D, E))) : (v && v.parentNode.removeChild(v), s.nextSibling !== x && (E = p(s), E >= 0 && (j(this, w, "update", s, w, D, E), j(this, w, "sort", s, w, D, E)))), a.active && ((null === E || -1 === E) && (E = D), j(this, w, "end", s, w, D, E), this.save())), w = s = t = u = x = v = y = z = G = H = I = E = A = B = F = a.active = null)
},
handleEvent: function(a) {
var b = a.type;
"dragover" === b || "dragenter" === b ? s && (this._onDragOver(a), d(a)) : ("drop" === b || "dragend" === b) && this._onDrop(a)
},
toArray: function() {
for (var a, b = [], d = this.el.children, e = 0, f = d.length, g = this.options; f > e; e++) a = d[e], c(a, g.draggable, this.el) && b.push(a.getAttribute(g.dataIdAttr) || o(a));
return b
},
sort: function(a) {
var b = {},
d = this.el;
this.toArray().forEach(function(a, e) {
var f = d.children[e];
c(f, this.options.draggable, d) && (b[a] = f)
}, this), a.forEach(function(a) {
b[a] && (d.removeChild(b[a]), d.appendChild(b[a]))
})
},
save: function() {
var a = this.options.store;
a && a.set(this)
},
closest: function(a, b) {
return c(a, b || this.options.draggable, this.el)
},
option: function(a, b) {
var c = this.options;
return void 0 === b ? c[a] : (c[a] = b, void("group" === a && V(c)))
},
destroy: function() {
var a = this.el;
a[L] = null, f(a, "mousedown", this._onTapStart), f(a, "touchstart", this._onTapStart), this.nativeDraggable && (f(a, "dragover", this), f(a, "dragenter", this)), Array.prototype.forEach.call(a.querySelectorAll("[draggable]"), function(a) {
a.removeAttribute("draggable")
}), T.splice(T.indexOf(this._onDragOver), 1), this._onDrop(), this.el = a = null
}
}, a.utils = {
on: e,
off: f,
css: h,
find: i,
is: function(a, b) {
return !!c(a, b, a)
},
extend: r,
throttle: q,
closest: c,
toggleClass: g,
index: p
}, a.create = function(b, c) {
return new a(b, c)
}, a.version = "1.4.2", a
});