You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

2 lines
9.2 KiB

/*! Sortable 0.6.0 - 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,c){this.el=a,this.options=c=c||{};var d={group:Math.random(),sort:!0,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:a.children[0]&&a.children[0].nodeName||(/[uo]l/i.test(a.nodeName)?"li":"*"),ghostClass:"sortable-ghost",ignore:"a, img",filter:null,animation:0,setData:function(a,b){a.setData("Text",b.textContent)}};for(var f in d)!(f in c)&&(c[f]=d[f]);c.group.name||(c.group={name:c.group}),["pull","put"].forEach(function(a){a in c.group||(c.group[a]=!0)}),G.forEach(function(d){c[d]=b(this,c[d]||H),e(a,d.substr(2).toLowerCase(),c[d])},this),a[z]=c.group.name;for(var g in this)"_"===g.charAt(0)&&(this[g]=b(this,this[g]));e(a,"mousedown",this._onTapStart),e(a,"touchstart",this._onTapStart),D&&e(a,"selectstart",this._onTapStart),e(a,"dragover",this._onDragOver),e(a,"dragenter",this._onDragOver),K.push(this._onDragOver),c.store&&this.sort(c.store.get(this))}function b(a,b){var c=J.call(arguments,2);return b.bind?b.bind.apply(b,[a].concat(c)):function(){return b.apply(a,c.concat(J.call(arguments)))}}function c(a,b,c){if("*"===b)return a;if(a){c=c||B,b=b.split(".");var d=b.shift().toUpperCase(),e=new RegExp("\\s("+b.join("|")+")\\s","g");do if(!(""!==d&&a.nodeName!=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.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(/\s+/g," ").replace(" "+b+" ","");a.className=d+(c?" "+b:"")}}function h(a,b,c){var d=a&&a.style;if(d){if(void 0===c)return B.defaultView&&B.defaultView.getComputedStyle?c=B.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){a.draggable=!1}function k(){E=!1}function l(a,b){var c=a.lastElementChild,d=c.getBoundingClientRect();return b.clientY-(d.top+d.height)>5&&c}function m(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 n(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))}}var o,p,q,r,s,t,u,v,w,x,y,z="Sortable"+(new Date).getTime(),A=window,B=A.document,C=A.parseInt,D=!!B.createElement("div").dragDrop,E=!1,F=function(a,b,c,d){var e=B.createEvent("Event");e.initEvent(b,!0,!0),e.item=c||a,e.from=d||a,a.dispatchEvent(e)},G="onAdd onUpdate onRemove onStart onEnd onFilter onSort".split(" "),H=function(){},I=Math.abs,J=[].slice,K=[];return a.prototype={constructor:a,_applyEffects:function(){g(o,this.options.ghostClass,!0)},_onTapStart:function(a){var b=a.touches&&a.touches[0],f=(b||a).target,g=this.options,k=this.el,l=g.filter;if("mousedown"!==a.type||0===a.button){if("function"==typeof l){if(l.call(this,f,this))return F(k,"filter",f),void 0}else if(l&&(l=l.split(",").filter(function(a){return c(f,a.trim(),k)}),l.length))return F(k,"filter",f),void 0;if(g.handle&&(f=c(f,g.handle,k)),f=c(f,g.draggable,k),f&&"selectstart"==a.type&&"A"!=f.tagName&&"IMG"!=f.tagName&&f.dragDrop(),f&&!o&&f.parentNode===k){x=a,r=this.el,o=f,t=o.nextSibling,w=this.options.group,o.draggable=!0,g.ignore.split(",").forEach(function(a){i(f,a.trim(),j)}),b&&(x={target:f,clientX:b.clientX,clientY:b.clientY},this._onDragStart(x,!0),a.preventDefault()),e(B,"mouseup",this._onDrop),e(B,"touchend",this._onDrop),e(B,"touchcancel",this._onDrop),e(r,"dragstart",this._onDragStart),e(r,"dragend",this._onDrop),e(B,"dragover",d);try{B.selection?B.selection.empty():window.getSelection().removeAllRanges()}catch(m){}F(o,"start"),"clone"==w.pull&&(q=o.cloneNode(!0),h(q,"display","none"),r.insertBefore(q,o))}}},_emulateDragOver:function(){if(y){h(p,"display","none");var a=B.elementFromPoint(y.clientX,y.clientY),b=a,c=this.options.group.name,d=K.length;if(b)do{if(b[z]===c){for(;d--;)K[d]({clientX:y.clientX,clientY:y.clientY,target:a,rootEl:b});break}a=b}while(b=b.parentNode);h(p,"display","")}},_onTouchMove:function(a){if(x){var b=a.touches[0],c=b.clientX-x.clientX,d=b.clientY-x.clientY,e="translate3d("+c+"px,"+d+"px,0)";y=b,h(p,"webkitTransform",e),h(p,"mozTransform",e),h(p,"msTransform",e),h(p,"transform",e),a.preventDefault()}},_onDragStart:function(a,b){var c=a.dataTransfer,d=this.options;if(this._offUpEvents(),b){var f,g=o.getBoundingClientRect(),i=h(o);p=o.cloneNode(!0),h(p,"top",g.top-C(i.marginTop,10)),h(p,"left",g.left-C(i.marginLeft,10)),h(p,"width",g.width),h(p,"height",g.height),h(p,"opacity","0.8"),h(p,"position","fixed"),h(p,"zIndex","100000"),r.appendChild(p),f=p.getBoundingClientRect(),h(p,"width",2*g.width-f.width),h(p,"height",2*g.height-f.height),e(B,"touchmove",this._onTouchMove),e(B,"touchend",this._onDrop),e(B,"touchcancel",this._onDrop),this._loopId=setInterval(this._emulateDragOver,150)}else c.effectAllowed="move",d.setData&&d.setData.call(this,c,o),e(B,"drop",this._onDrop);if(setTimeout(this._applyEffects,0),s=d.scroll,s===!0){s=o;do if(s.offsetWidth<s.scrollWidth||s.offsetHeight<s.scrollHeight)break;while(s=s.parentNode)}},_onDrag:n(function(a){if(r&&this.options.scroll){var b=this.options,c=b.scrollSensitivity,d=b.scrollSpeed,e=r.getBoundingClientRect(),f=a.clientX,g=a.clientY,h=window.innerWidth,i=window.innerHeight,j=c>=h-f?e.right>h:-(e.left<0&&c>=f),k=c>=i-g?e.bottom>i:-(e.top<0&&c>=g);j||k?A.scrollTo(A.scrollX+j*d,A.scrollY+k*d):s&&(e=s.getBoundingClientRect(),j=(I(e.right-f)<=c)-(I(e.left-f)<=c),k=(I(e.bottom-g)<=c)-(I(e.top-g)<=c),k&&(s.scrollTop+=k*d),j&&(s.scrollLeft+=j*d))}},30),_onDragOver:function(a){var b,d,e,f=this.el,g=this.options,i=g.group,j=i.put,m=w===i;if(this._onDrag(a),!E&&(w.name===i.name||j&&j.indexOf&&j.indexOf(w.name)>-1)&&(m&&(g.sort||(e=!r.contains(o)))||j&&w.pull)&&(void 0===a.rootEl||a.rootEl===this.el)){if(b=c(a.target,g.draggable,f),d=o.getBoundingClientRect(),q&&q.state!==m&&(h(q,"display",m?"none":""),!m&&q.state&&r.insertBefore(q,o),q.state=m),e&&q)return r.insertBefore(o,q),void 0;if(0===f.children.length||f.children[0]===p||f===a.target&&(b=l(f,a))){if(b){if(b.animated)return;s=b.getBoundingClientRect()}f.appendChild(o),this._animate(d,o),b&&this._animate(s,b)}else if(b&&!b.animated&&b!==o&&void 0!==b.parentNode[z]){u!==b&&(u=b,v=h(b));var n,s=b.getBoundingClientRect(),t=s.right-s.left,x=s.bottom-s.top,y=/left|right|inline/.test(v.cssFloat+v.display),A=b.offsetWidth>o.offsetWidth,B=b.offsetHeight>o.offsetHeight,C=(y?(a.clientX-s.left)/t:(a.clientY-s.top)/x)>.5,D=b.nextElementSibling;E=!0,setTimeout(k,30),n=y?b.previousElementSibling===o&&!A||C&&A:D!==o&&!B||C&&B,n&&!D?f.appendChild(o):b.parentNode.insertBefore(o,n?D:b),this._animate(d,o),this._animate(s,b)}}},_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",""),b.animated=!1},c)}},_offUpEvents:function(){f(B,"mouseup",this._onDrop),f(B,"touchmove",this._onTouchMove),f(B,"touchend",this._onDrop),f(B,"touchcancel",this._onDrop)},_onDrop:function(a){clearInterval(this._loopId),f(B,"drop",this._onDrop),f(B,"dragover",d),f(r,"dragend",this._onDrop),f(r,"dragstart",this._onDragStart),f(r,"selectstart",this._onTapStart),this._offUpEvents(),a&&(a.preventDefault(),a.stopPropagation(),p&&p.parentNode.removeChild(p),o&&(j(o),g(o,this.options.ghostClass,!1),r.contains(o)?o.nextSibling!==t&&(F(o,"update"),F(o,"sort"),q&&q.parentNode.removeChild(q)):(F(o,"sort"),F(r,"sort"),F(o,"add",o,r),F(r,"remove",o)),F(r,"end")),r=o=p=t=q=x=y=u=v=w=null,this.options.store&&this.options.store.set(this))},toArray:function(){for(var a,b=[],d=this.el.children,e=0,f=d.length;f>e;e++)a=d[e],c(a,this.options.draggable,this.el)&&b.push(a.getAttribute("data-id")||m(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]))})},closest:function(a,b){return c(a,b||this.options.draggable,this.el)},destroy:function(){var a=this.el,b=this.options;G.forEach(function(c){f(a,c.substr(2).toLowerCase(),b[c])}),f(a,"mousedown",this._onTapStart),f(a,"touchstart",this._onTapStart),f(a,"selectstart",this._onTapStart),f(a,"dragover",this._onDragOver),f(a,"dragenter",this._onDragOver),Array.prototype.forEach.call(a.querySelectorAll("[draggable]"),function(a){a.removeAttribute("draggable")}),K.splice(K.indexOf(this._onDragOver),1),this._onDrop(),this.el=null}},a.utils={on:e,off:f,css:h,find:i,bind:b,throttle:n,closest:c,toggleClass:g,dispatchEvent:F},a.version="0.6.0",a.create=function(b,c){return new a(b,c)},a});