mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
6 lines
5.1 KiB
JavaScript
6 lines
5.1 KiB
JavaScript
/*
|
|
* jquery.event.drag - v 2.1.0
|
|
* Copyright (c) 2010 Three Dub Media - http://threedubmedia.com
|
|
* Open Source MIT License - http://threedubmedia.com/code/license
|
|
*/
|
|
(function(d){d.fn.drag=function(j,f,i){var h=typeof j=="string"?j:"",g=d.isFunction(j)?j:d.isFunction(f)?f:null;if(h.indexOf("drag")!==0){h="drag"+h}i=(j==g?f:i)||{};return g?this.bind(h,i,g):this.trigger(h)};var b=d.event,a=b.special,c=a.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:false,drop:true,click:false},datakey:"dragdata",add:function(h){var g=d.data(this,c.datakey),f=h.data||{};g.related+=1;d.each(c.defaults,function(i,j){if(f[i]!==undefined){g[i]=f[i]}})},remove:function(){d.data(this,c.datakey).related-=1},setup:function(){if(d.data(this,c.datakey)){return}var f=d.extend({related:0},c.defaults);d.data(this,c.datakey,f);b.add(this,"touchstart mousedown",c.init,f);if(this.attachEvent){this.attachEvent("ondragstart",c.dontstart)}},teardown:function(){var f=d.data(this,c.datakey)||{};if(f.related){return}d.removeData(this,c.datakey);b.remove(this,"touchstart mousedown",c.init);c.textselect(true);if(this.detachEvent){this.detachEvent("ondragstart",c.dontstart)}},init:function(h){if(c.touched){return}var f=h.data,g;if(h.which!=0&&f.which>0&&h.which!=f.which){return}if(d(h.target).is(f.not)){return}if(f.handle&&!d(h.target).closest(f.handle,h.currentTarget).length){return}if(h.type=="touchstart"){c.touched=this;c.touchFix(h,f)}f.propagates=1;f.mousedown=this;f.interactions=[c.interaction(this,f)];f.target=h.target;f.pageX=h.pageX;f.pageY=h.pageY;f.dragging=null;g=c.hijack(h,"draginit",f);if(!f.propagates){return}g=c.flatten(g);if(g&&g.length){f.interactions=[];d.each(g,function(){f.interactions.push(c.interaction(this,f))})}f.propagates=f.interactions.length;if(f.drop!==false&&a.drop){a.drop.handler(h,f)}c.textselect(false);if(c.touched){b.add(c.touched,"touchmove touchend",c.handler,f)}else{b.add(document,"mousemove mouseup",c.handler,f)}if(!c.touched||f.live){return false}},touchFix:function(h,f){var j=h.originalEvent,g=0;if(j&&j.changedTouches){h.pageX=j.changedTouches[0].pageX;h.pageY=j.changedTouches[0].pageY}},interaction:function(g,f){var h=d(g)[f.relative?"position":"offset"]()||{top:0,left:0};return{drag:g,callback:new c.callback(),droppable:[],offset:h}},handler:function(g){var f=g.data;if(c.touched){c.touchFix(g,f)}switch(g.type){case !f.dragging&&"touchmove":g.preventDefault();case !f.dragging&&"mousemove":if(Math.pow(g.pageX-f.pageX,2)+Math.pow(g.pageY-f.pageY,2)<Math.pow(f.distance,2)){break}g.target=f.target;c.hijack(g,"dragstart",f);if(f.propagates){f.dragging=true}case"touchmove":g.preventDefault();case"mousemove":if(f.dragging){c.hijack(g,"drag",f);if(f.propagates){if(f.drop!==false&&a.drop){a.drop.handler(g,f)}break}g.type="mouseup"}case"touchend":case"mouseup":if(c.touched){b.remove(c.touched,"touchmove touchend",c.handler)}else{b.remove(document,"mousemove mouseup",c.handler)}if(f.dragging){if(f.drop!==false&&a.drop){a.drop.handler(g,f)}c.hijack(g,"dragend",f)}else{c.hijack(g,"dragclickonly",f)}c.textselect(true);if(f.click===false&&f.dragging){d.data(f.mousedown,"suppress.click",new Date().getTime()+5)}f.dragging=c.touched=false;break}},hijack:function(g,n,q,o,j){if(!q){return}var p={event:g.originalEvent,type:g.type},l=n.indexOf("drop")?"drag":"drop",s,k=o||0,h,f,r,m=!isNaN(o)?o:q.interactions.length;g.type=n;g.originalEvent=null;q.results=[];do{if(h=q.interactions[k]){if(n!=="dragend"&&h.cancelled){continue}r=c.properties(g,q,h);h.results=[];d(j||h[l]||q.droppable).each(function(t,i){r.target=i;s=i?b.handle.call(i,g,r):null;if(s===false){if(l=="drag"){h.cancelled=true;q.propagates-=1}if(n=="drop"){h[l][t]=null}}else{if(n=="dropinit"){h.droppable.push(c.element(s)||i)}}if(n=="dragstart"){h.proxy=d(c.element(s)||h.drag)[0]}h.results.push(s);delete g.result;if(n!=="dropinit"){return s}});q.results[k]=c.flatten(h.results);if(n=="dropinit"){h.droppable=c.flatten(h.droppable)}if(n=="dragstart"&&!h.cancelled){r.update()}}}while(++k<m);g.type=p.type;g.originalEvent=p.event;return c.flatten(q.results)},properties:function(h,f,g){var i=g.callback;i.drag=g.drag;i.proxy=g.proxy||g.drag;i.startX=f.pageX;i.startY=f.pageY;i.deltaX=h.pageX-f.pageX;i.deltaY=h.pageY-f.pageY;i.originalX=g.offset.left;i.originalY=g.offset.top;i.offsetX=i.originalX+i.deltaX;i.offsetY=i.originalY+i.deltaY;i.drop=c.flatten((g.drop||[]).slice());i.available=c.flatten((g.droppable||[]).slice());return i},element:function(f){if(f&&(f.jquery||f.nodeType==1)){return f}},flatten:function(f){return d.map(f,function(g){return g&&g.jquery?d.makeArray(g):g&&g.length?c.flatten(g):g})},textselect:function(f){d(document)[f?"unbind":"bind"]("selectstart",c.dontstart).css("MozUserSelect",f?"":"none");document.unselectable=f?"off":"on"},dontstart:function(){return false},callback:function(){}};c.callback.prototype={update:function(){if(a.drop&&this.available.length){d.each(this.available,function(f){a.drop.locate(this,f)})}}};var e=b.handle;b.handle=function(f){if(d.data(this,"suppress."+f.type)-new Date().getTime()>0){d.removeData(this,"suppress."+f.type);return}return e.apply(this,arguments)};a.draginit=a.dragstart=a.dragend=c})(jQuery); |