OpenAuth.Net/OpenAuth.Mvc/Content/dragsort/jquery.dragsort-0.5.1.min.js

3 lines
8.6 KiB
JavaScript

// jQuery List DragSort v0.5.1
// License: http://dragsort.codeplex.com/license
!function(a){a.fn.dragsort=function(b){var c,d,e,f,g;return"destroy"==b?(c=a(this.selector).length?a(this.selector):a(this),c.trigger("dragsort-uninit"),void 0):(d=a.extend({},a.fn.dragsort.defaults,b),e=[],f=null,g=null,this.each(function(b,c){a(c).is("table")&&1==a(c).children().size()&&a(c).children().is("tbody")&&(c=a(c).children().get(0));var h={draggedItem:null,placeHolderItem:null,pos:null,offset:null,offsetLimit:null,scroll:null,container:c,init:function(){var c=0==a(this.container).children().size()?"li":a(this.container).children(":first").get(0).tagName.toLowerCase();""==d.itemSelector&&(d.itemSelector=c),""==d.dragSelector&&(d.dragSelector=c),""==d.placeHolderTemplate&&(d.placeHolderTemplate="<"+c+">&nbsp;</"+c+">"),a(this.container).attr("data-listidx",b).mousedown(this.grabItem).bind("dragsort-uninit",this.uninit),this.styleDragHandlers(!0)},uninit:function(){var b=e[a(this).attr("data-listidx")];a(b.container).unbind("mousedown",b.grabItem).unbind("dragsort-uninit"),b.styleDragHandlers(!1)},getItems:function(){return a(this.container).children(d.itemSelector)},styleDragHandlers:function(b){this.getItems().map(function(){return a(this).is(d.dragSelector)?this:a(this).find(d.dragSelector).get()}).css("cursor",b?"pointer":"")},grabItem:function(b){var c,f,g,h;if(!(1!=b.which||a(b.target).is(d.dragSelectorExclude)||a(b.target).closest(d.dragSelectorExclude).size()>0||0==a(b.target).closest(d.itemSelector).size())){for(b.preventDefault(),c=b.target;!a(c).is(d.dragSelector);){if(c==this)return;c=c.parentNode}a(c).attr("data-cursor",a(c).css("cursor")),a(c).css("cursor","move"),f=e[a(this).attr("data-listidx")],g=this,h=function(){f.dragStart.call(g,b),a(f.container).unbind("mousemove",h)},a(f.container).mousemove(h).mouseup(function(){a(f.container).unbind("mousemove",h),a(c).css("cursor",a(c).attr("data-cursor"))})}},dragStart:function(b){var c,g,h,i,j,k,l;null!=f&&null!=f.draggedItem&&f.dropItem(),f=e[a(this).attr("data-listidx")],f.draggedItem=a(b.target).closest(d.itemSelector),f.draggedItem.attr("data-origpos",a(this).attr("data-listidx")+"-"+f.getItems().index(f.draggedItem)),c=parseInt(f.draggedItem.css("marginTop")),g=parseInt(f.draggedItem.css("marginLeft")),f.offset=f.draggedItem.offset(),f.offset.top=b.pageY-f.offset.top+(isNaN(c)?0:c)-1,f.offset.left=b.pageX-f.offset.left+(isNaN(g)?0:g)-1,d.dragBetween||(h=0==a(f.container).outerHeight()?Math.max(1,Math.round(.5+f.getItems().size()*f.draggedItem.outerWidth()/a(f.container).outerWidth()))*f.draggedItem.outerHeight():a(f.container).outerHeight(),f.offsetLimit=a(f.container).offset(),f.offsetLimit.right=f.offsetLimit.left+a(f.container).outerWidth()-f.draggedItem.outerWidth(),f.offsetLimit.bottom=f.offsetLimit.top+h-f.draggedItem.outerHeight()),i=f.draggedItem.height(),j=f.draggedItem.width(),"tr"==d.itemSelector?(f.draggedItem.children().each(function(){a(this).width(a(this).width())}),f.placeHolderItem=f.draggedItem.clone().attr("data-placeholder",!0),f.draggedItem.after(f.placeHolderItem),f.placeHolderItem.children().each(function(){a(this).css({borderWidth:0,width:a(this).width()+1,height:a(this).height()+1}).html("&nbsp;")})):(f.draggedItem.after(d.placeHolderTemplate),f.placeHolderItem=f.draggedItem.next().css({height:i,width:j}).attr("data-placeholder",!0)),"td"==d.itemSelector&&(k=f.draggedItem.closest("table").get(0),a("<table id='"+k.id+"' style='border-width: 0px;' class='dragSortItem "+k.className+"'><tr></tr></table>").appendTo("body").children().append(f.draggedItem)),l=f.draggedItem.attr("style"),f.draggedItem.attr("data-origstyle",l?l:""),f.draggedItem.css({position:"absolute",opacity:.8,"z-index":999,height:i,width:j}),f.scroll={moveX:0,moveY:0,maxX:a(document).width()-a(window).width(),maxY:a(document).height()-a(window).height()},f.scroll.scrollY=window.setInterval(function(){if(d.scrollContainer!=window)return a(d.scrollContainer).scrollTop(a(d.scrollContainer).scrollTop()+f.scroll.moveY),void 0;var b=a(d.scrollContainer).scrollTop();(f.scroll.moveY>0&&b<f.scroll.maxY||f.scroll.moveY<0&&b>0)&&(a(d.scrollContainer).scrollTop(b+f.scroll.moveY),f.draggedItem.css("top",f.draggedItem.offset().top+f.scroll.moveY+1))},10),f.scroll.scrollX=window.setInterval(function(){if(d.scrollContainer!=window)return a(d.scrollContainer).scrollLeft(a(d.scrollContainer).scrollLeft()+f.scroll.moveX),void 0;var b=a(d.scrollContainer).scrollLeft();(f.scroll.moveX>0&&b<f.scroll.maxX||f.scroll.moveX<0&&b>0)&&(a(d.scrollContainer).scrollLeft(b+f.scroll.moveX),f.draggedItem.css("left",f.draggedItem.offset().left+f.scroll.moveX+1))},10),a(e).each(function(a,b){b.createDropTargets(),b.buildPositionTable()}),f.setPos(b.pageX,b.pageY),a(document).bind("mousemove",f.swapItems),a(document).bind("mouseup",f.dropItem),d.scrollContainer!=window&&a(window).bind("DOMMouseScroll mousewheel",f.wheel)},setPos:function(b,c){var h,i,e=c-this.offset.top,g=b-this.offset.left;d.dragBetween||(e=Math.min(this.offsetLimit.bottom,Math.max(e,this.offsetLimit.top)),g=Math.min(this.offsetLimit.right,Math.max(g,this.offsetLimit.left))),this.draggedItem.parents().each(function(){if("static"!=a(this).css("position")&&(!a.browser.mozilla||"table"!=a(this).css("display"))){var b=a(this).offset();return e-=b.top,g-=b.left,!1}}),d.scrollContainer==window?(c-=a(window).scrollTop(),b-=a(window).scrollLeft(),c=Math.max(0,c-a(window).height()+5)+Math.min(0,c-5),b=Math.max(0,b-a(window).width()+5)+Math.min(0,b-5)):(h=a(d.scrollContainer),i=h.offset(),c=Math.max(0,c-h.height()-i.top)+Math.min(0,c-i.top),b=Math.max(0,b-h.width()-i.left)+Math.min(0,b-i.left)),f.scroll.moveX=0==b?0:b*d.scrollSpeed/Math.abs(b),f.scroll.moveY=0==c?0:c*d.scrollSpeed/Math.abs(c),this.draggedItem.css({top:e,left:g})},wheel:function(b){var c,e,g;(a.browser.safari||a.browser.mozilla)&&f&&d.scrollContainer!=window&&(c=a(d.scrollContainer),e=c.offset(),b.pageX>e.left&&b.pageX<e.left+c.width()&&b.pageY>e.top&&b.pageY<e.top+c.height()&&(g=b.detail?5*b.detail:b.wheelDelta/-2,c.scrollTop(c.scrollTop()+g),b.preventDefault()))},buildPositionTable:function(){var b=[];this.getItems().not([f.draggedItem[0],f.placeHolderItem[0]]).each(function(c){var d=a(this).offset();d.right=d.left+a(this).outerWidth(),d.bottom=d.top+a(this).outerHeight(),d.elm=this,b[c]=d}),this.pos=b},dropItem:function(){if(null!=f.draggedItem){var b=f.draggedItem.attr("data-origstyle");return f.draggedItem.attr("style",b),""==b&&f.draggedItem.removeAttr("style"),f.draggedItem.removeAttr("data-origstyle"),f.styleDragHandlers(!0),f.placeHolderItem.before(f.draggedItem),f.placeHolderItem.remove(),a("[data-droptarget], .dragSortItem").remove(),window.clearInterval(f.scroll.scrollY),window.clearInterval(f.scroll.scrollX),f.draggedItem.attr("data-origpos")!=a(e).index(f)+"-"+f.getItems().index(f.draggedItem)&&d.dragEnd.apply(f.draggedItem),f.draggedItem.removeAttr("data-origpos"),f.draggedItem=null,a(document).unbind("mousemove",f.swapItems),a(document).unbind("mouseup",f.dropItem),d.scrollContainer!=window&&a(window).unbind("DOMMouseScroll mousewheel",f.wheel),!1}},swapItems:function(b){var c,h,i,j,k;if(null==f.draggedItem)return!1;for(f.setPos(b.pageX,b.pageY),c=f.findPos(b.pageX,b.pageY),h=f,i=0;-1==c&&d.dragBetween&&i<e.length;i++)c=e[i].findPos(b.pageX,b.pageY),h=e[i];return-1==c?!1:(j=function(){return a(h.container).children().not(h.draggedItem)},k=j().not(d.itemSelector).each(function(){this.idx=j().index(this)}),null==g||g.top>f.draggedItem.offset().top||g.left>f.draggedItem.offset().left?a(h.pos[c].elm).before(f.placeHolderItem):a(h.pos[c].elm).after(f.placeHolderItem),k.each(function(){var b=j().eq(this.idx).get(0);this!=b&&j().index(this)<this.idx?a(this).insertAfter(b):this!=b&&a(this).insertBefore(b)}),a(e).each(function(a,b){b.createDropTargets(),b.buildPositionTable()}),g=f.draggedItem.offset(),!1)},findPos:function(a,b){for(var c=0;c<this.pos.length;c++)if(this.pos[c].left<a&&this.pos[c].right>a&&this.pos[c].top<b&&this.pos[c].bottom>b)return c;return-1},createDropTargets:function(){d.dragBetween&&a(e).each(function(){var b=a(this.container).find("[data-placeholder]"),c=a(this.container).find("[data-droptarget]");b.size()>0&&c.size()>0?c.remove():0==b.size()&&0==c.size()&&("td"==d.itemSelector?a(d.placeHolderTemplate).attr("data-droptarget",!0).appendTo(this.container):a(this.container).append(f.placeHolderItem.removeAttr("data-placeholder").clone().attr("data-droptarget",!0)),f.placeHolderItem.attr("data-placeholder",!0))})}};h.init(),e.push(h)}),this)},a.fn.dragsort.defaults={itemSelector:"",dragSelector:"",dragSelectorExclude:"input, textarea",dragEnd:function(){},dragBetween:!1,placeHolderTemplate:"",scrollContainer:window,scrollSpeed:5}}(jQuery);