mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-28 02:58:18 +08:00
6 lines
4.9 KiB
JavaScript
6 lines
4.9 KiB
JavaScript
/*
|
|
* jquery.event.drag - v 2.0.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(i,e,h){var g=typeof i=="string"?i:"",f=d.isFunction(i)?i:d.isFunction(e)?e:null;if(g.indexOf("drag")!==0){g="drag"+g}h=(i==f?e:h)||{};return f?this.bind(g,h,f):this.trigger(g)};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",livekey:"livedrag",add:function(g){var f=d.data(this,c.datakey),e=g.data||{};f.related+=1;if(!f.live&&g.selector){f.live=true;b.add(this,"draginit."+c.livekey,c.delegate)}d.each(c.defaults,function(h,i){if(e[h]!==undefined){f[h]=e[h]}})},remove:function(){d.data(this,c.datakey).related-=1},setup:function(){if(d.data(this,c.datakey)){return}var e=d.extend({related:0},c.defaults);d.data(this,c.datakey,e);b.add(this,"mousedown",c.init,e);if(this.attachEvent){this.attachEvent("ondragstart",c.dontstart)}},teardown:function(){if(d.data(this,c.datakey).related){return}d.removeData(this,c.datakey);b.remove(this,"mousedown",c.init);b.remove(this,"draginit",c.delegate);c.textselect(true);if(this.detachEvent){this.detachEvent("ondragstart",c.dontstart)}},init:function(g){var e=g.data,f;if(e.which>0&&g.which!=e.which){return}if(d(g.target).is(e.not)){return}if(e.handle&&!d(g.target).closest(e.handle,g.currentTarget).length){return}e.propagates=1;e.interactions=[c.interaction(this,e)];e.target=g.target;e.pageX=g.pageX;e.pageY=g.pageY;e.dragging=null;f=c.hijack(g,"draginit",e);if(!e.propagates){return}f=c.flatten(f);if(f&&f.length){e.interactions=[];d.each(f,function(){e.interactions.push(c.interaction(this,e))})}e.propagates=e.interactions.length;if(e.drop!==false&&a.drop){a.drop.handler(g,e)}c.textselect(false);b.add(document,"mousemove mouseup",c.handler,e);return false},interaction:function(f,e){return{drag:f,callback:new c.callback(),droppable:[],offset:d(f)[e.relative?"position":"offset"]()||{top:0,left:0}}},handler:function(f){var e=f.data;switch(f.type){case !e.dragging&&"mousemove":if(Math.pow(f.pageX-e.pageX,2)+Math.pow(f.pageY-e.pageY,2)<Math.pow(e.distance,2)){break}f.target=e.target;c.hijack(f,"dragstart",e);if(e.propagates){e.dragging=true}case"mousemove":if(e.dragging){c.hijack(f,"drag",e);if(e.propagates){if(e.drop!==false&&a.drop){a.drop.handler(f,e)}break}f.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",c.handler);if(e.dragging){if(e.drop!==false&&a.drop){a.drop.handler(f,e)}c.hijack(f,"dragend",e)}else{c.hijack(f,"dragclickonly",e)}c.textselect(true);if(e.click===false&&e.dragging){jQuery.event.triggered=true;setTimeout(function(){jQuery.event.triggered=false},20);e.dragging=false}break}},delegate:function(g){var e=[],h,f=d.data(this,"events")||{};d.each(f.live||[],function(j,k){if(k.preType.indexOf("drag")!==0){return}h=d(g.target).closest(k.selector,g.currentTarget)[0];if(!h){return}b.add(h,k.origType+"."+c.livekey,k.origHandler,k.data);if(d.inArray(h,e)<0){e.push(h)}});if(!e.length){return false}return d(e).bind("dragend."+c.livekey,function(){b.remove(this,"."+c.livekey)})},hijack:function(f,m,p,n,h){if(!p){return}var o={event:f.originalEvent,type:f.type},k=m.indexOf("drop")?"drag":"drop",r,j=n||0,g,e,q,l=!isNaN(n)?n:p.interactions.length;f.type=m;f.originalEvent=null;p.results=[];do{if(g=p.interactions[j]){if(m!=="dragend"&&g.cancelled){continue}q=c.properties(f,p,g);g.results=[];d(h||g[k]||p.droppable).each(function(s,i){q.target=i;r=i?b.handle.call(i,f,q):null;if(r===false){if(k=="drag"){g.cancelled=true;p.propagates-=1}if(m=="drop"){g[k][s]=null}}else{if(m=="dropinit"){g.droppable.push(c.element(r)||i)}}if(m=="dragstart"){g.proxy=d(c.element(r)||g.drag)[0]}g.results.push(r);delete f.result;if(m!=="dropinit"){return r}});p.results[j]=c.flatten(g.results);if(m=="dropinit"){g.droppable=c.flatten(g.droppable)}if(m=="dragstart"&&!g.cancelled){q.update()}}}while(++j<l);f.type=o.type;f.originalEvent=o.event;return c.flatten(p.results)},properties:function(g,e,f){var h=f.callback;h.drag=f.drag;h.proxy=f.proxy||f.drag;h.startX=e.pageX;h.startY=e.pageY;h.deltaX=g.pageX-e.pageX;h.deltaY=g.pageY-e.pageY;h.originalX=f.offset.left;h.originalY=f.offset.top;h.offsetX=g.pageX-(e.pageX-h.originalX);h.offsetY=g.pageY-(e.pageY-h.originalY);h.drop=c.flatten((f.drop||[]).slice());h.available=c.flatten((f.droppable||[]).slice());return h},element:function(e){if(e&&(e.jquery||e.nodeType==1)){return e}},flatten:function(e){return d.map(e,function(f){return f&&f.jquery?d.makeArray(f):f&&f.length?c.flatten(f):f})},textselect:function(e){d(document)[e?"unbind":"bind"]("selectstart",c.dontstart).attr("unselectable",e?"off":"on").css("MozUserSelect",e?"":"none")},dontstart:function(){return false},callback:function(){}};c.callback.prototype={update:function(){if(a.drop&&this.available.length){d.each(this.available,function(e){a.drop.locate(this,e)})}}};a.draginit=a.dragstart=a.dragend=c})(jQuery); |