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
5.0 KiB

11 years ago
/*! Sortable 0.1.0 - MIT | git://github.com/rubaxa/Sortable.git */
11 years ago
!function(a){"use strict";"function"==typeof define&&define.amd?define("Sortable",[],a):window.Sortable=a()}(function(){"use strict";function a(a,c){this.el=a,this.options=c=c||{},c.group=c.group||Math.random(),c.handle=c.handle||null,c.draggable=c.draggable||a.children[0]&&a.children[0].nodeName||"li",c.ghostClass=c.ghostClass||"sortable-ghost",c.onAdd=b(this,c.onAdd||y),c.onUpdate=b(this,c.onUpdate||y),c.onRemove=b(this,c.onRemove||y),a[t]=c.group;for(var d in this)"_"===d.charAt(0)&&(this[d]=b(this,this[d]));e(a,"add",c.onAdd),e(a,"update",c.onUpdate),e(a,"remove",c.onRemove),e(a,"mousedown",this._onTapStart),e(a,"touchstart",this._onTapStart),e(a,"dragover",this._onDragOver),e(a,"dragenter",this._onDragOver),A.push(this._onDragOver)}function b(a,b){var c=z.call(arguments,2);return b.bind?b.bind.apply(b,[a].concat(c)):function(){return b.apply(a,c.concat(z.call(arguments)))}}function c(a,b,c){if(a&&c){c=c||v,b=b.split(".");var d=b.shift().toUpperCase(),e=new RegExp("\\b("+b.join("|")+")\\b","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){if(a&&a.style){if(void 0===c)return v.defaultView&&v.defaultView.getComputedStyle?c=v.defaultView.getComputedStyle(a,""):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];a.style[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){return a.draggable=!1}var k,l,m,n,o,p,q,r,s,t="Sortable"+(new Date).getTime(),u=window,v=u.document,w=u.parseInt,x=u.CustomEvent,y=function(){},z=[].slice,A=[];return a.prototype={constructor:a,_applyEffects:function(){g(k,this.options.ghostClass,!0)},_onTapStart:function(a){var b=a.touches&&a.touches[0],f=(b||a).target,g=this.options;if(g.handle&&(f=c(f,g.handle,this.el)),f=c(f,g.draggable,this.el),f&&!k){r=a,f.draggable=!0,i(f,"a",j),i(f,"img",j),b&&(r={target:f,clientX:b.clientX,clientY:b.clientY},this._onDragStart(r,!0),a.preventDefault()),e(this.el,"dragstart",this._onDragStart),e(this.el,"dragend",this._onDrop),e(v,"dragover",d);try{v.selection?v.selection.empty():window.getSelection().removeAllRanges()}catch(h){}}},_emulateDragOver:function(){if(s){h(l,"display","none");var a=v.elementFromPoint(s.clientX,s.clientY),b=a,c=this.options.group,d=A.length;do if(b[t]===c){for(;d--;)A[d]({clientX:s.clientX,clientY:s.clientY,target:a,rootEl:b});break}while(b=b.parentNode);h(l,"display","")}},_onTouchMove:function(a){if(r){var b=a.touches[0],c=b.clientX-r.clientX,d=b.clientY-r.clientY;s=b,h(l,"webkitTransform","translate3d("+c+"px,"+d+"px,0)")}},_onDragStart:function(a,b){var c=a.target,d=a.dataTransfer;if(m=this.el,k=c,n=c.nextSibling,q=this.options.group,b){var f=c.getBoundingClientRect(),g=h(c);l=c.cloneNode(!0),h(l,"top",f.top-w(g.marginTop,10)),h(l,"left",f.left-w(g.marginLeft,10)),h(l,"width",f.right-f.left),h(l,"height",f.bottom-f.top),h(l,"opacity","0.8"),h(l,"position","fixed"),h(l,"zIndex","100000"),c.parentNode.insertBefore(l,c),e(v,"touchmove",this._onTouchMove),e(v,"touchend",this._onDrop),this._loopId=setInterval(this._emulateDragOver,100)}else d.effectAllowed="move",d.setData("Text",c.textContent),e(v,"drop",this._onDrop);setTimeout(this._applyEffects)},_onDragOver:function(a){if(q===this.options.group&&(void 0===a.rootEl||a.rootEl===this.el)){var b=this.el,d=c(a.target,this.options.draggable,b);if(0===b.children.length)b.appendChild(k);else if(d&&d!==k){o!==d&&(o=d,p=h(d));var e=d.getBoundingClientRect(),f=e.right-e.left,g=e.bottom-e.top,i=/left|right|inline/.test(p.cssFloat+p.display),j=!i&&(a.clientY-e.top)/g>.5||i&&(a.clientX-e.left)/f>.5,l=d.nextSibling;j&&!l?b.appendChild(k):d.pare