+++ /dev/null
-(function($) {\r
-\r
- //Make nodes selectable by expression\r
- $.extend($.expr[':'], { draggable: "(' '+a.className+' ').indexOf(' ui-draggable ')" });\r
-\r
-\r
- //Macros for external methods that support chaining\r
- var methods = "destroy,enable,disable".split(",");\r
- for(var i=0;i<methods.length;i++) {\r
- var cur = methods[i], f;\r
- eval('f = function() { var a = arguments; return this.each(function() { if(jQuery(this).is(".ui-draggable")) jQuery.data(this, "ui-draggable")["'+cur+'"](a); }); }');\r
- $.fn["draggable"+cur.substr(0,1).toUpperCase()+cur.substr(1)] = f;\r
- };\r
- \r
- //get instance method\r
- $.fn.draggableInstance = function() {\r
- if($(this[0]).is(".ui-draggable")) return $.data(this[0], "ui-draggable");\r
- return false;\r
- };\r
-\r
- $.fn.draggable = function(o) {\r
- return this.each(function() {\r
- new $.ui.draggable(this, o);\r
- });\r
- }\r
- \r
- $.ui.ddmanager = {\r
- current: null,\r
- droppables: [],\r
- prepareOffsets: function(t, e) {\r
- var dropTop = $.ui.ddmanager.dropTop = [];\r
- var dropLeft = $.ui.ddmanager.dropLeft;\r
- var m = $.ui.ddmanager.droppables;\r
- for (var i = 0; i < m.length; i++) {\r
- if(m[i].item.disabled) continue;\r
- m[i].offset = $(m[i].item.element).offset();\r
- if (t && m[i].item.options.accept(t.element)) //Activate the droppable if used directly from draggables\r
- m[i].item.activate.call(m[i].item, e);\r
- }\r
- },\r
- fire: function(oDrag, e) {\r
- \r
- var oDrops = $.ui.ddmanager.droppables;\r
- var oOvers = $.grep(oDrops, function(oDrop) {\r
- \r
- if (!oDrop.item.disabled && $.ui.intersect(oDrag, oDrop, oDrop.item.options.tolerance))\r
- oDrop.item.drop.call(oDrop.item, e);\r
- });\r
- $.each(oDrops, function(i, oDrop) {\r
- if (!oDrop.item.disabled && oDrop.item.options.accept(oDrag.element)) {\r
- oDrop.out = 1; oDrop.over = 0;\r
- oDrop.item.deactivate.call(oDrop.item, e);\r
- }\r
- });\r
- },\r
- update: function(oDrag, e) {\r
- \r
- if(oDrag.options.refreshPositions) $.ui.ddmanager.prepareOffsets();\r
- \r
- var oDrops = $.ui.ddmanager.droppables;\r
- var oOvers = $.grep(oDrops, function(oDrop) {\r
- if(oDrop.item.disabled) return false; \r
- var isOver = $.ui.intersect(oDrag, oDrop, oDrop.item.options.tolerance)\r
- if (!isOver && oDrop.over == 1) {\r
- oDrop.out = 1; oDrop.over = 0;\r
- oDrop.item.out.call(oDrop.item, e);\r
- }\r
- return isOver;\r
- });\r
- $.each(oOvers, function(i, oOver) {\r
- if (oOver.over == 0) {\r
- oOver.out = 0; oOver.over = 1;\r
- oOver.item.over.call(oOver.item, e);\r
- }\r
- });\r
- }\r
- };\r
- \r
- $.ui.draggable = function(el, o) {\r
- \r
- var options = {};\r
- $.extend(options, o);\r
- var self = this;\r
- $.extend(options, {\r
- _start: function(h, p, c, t, e) {\r
- self.start.apply(t, [self, e]); // Trigger the start callback \r
- },\r
- _beforeStop: function(h, p, c, t, e) {\r
- self.stop.apply(t, [self, e]); // Trigger the start callback\r
- },\r
- _drag: function(h, p, c, t, e) {\r
- self.drag.apply(t, [self, e]); // Trigger the start callback\r
- },\r
- startCondition: function(e) {\r
- return !(e.target.className.indexOf("ui-resizable-handle") != -1 || self.disabled); \r
- } \r
- });\r
- \r
- $.data(el, "ui-draggable", this);\r
- \r
- if (options.ghosting == true) options.helper = 'clone'; //legacy option check\r
- $(el).addClass("ui-draggable");\r
- this.interaction = new $.ui.mouseInteraction(el, options);\r
- \r
- }\r
- \r
- $.extend($.ui.draggable.prototype, {\r
- plugins: {},\r
- currentTarget: null,\r
- lastTarget: null,\r
- destroy: function() {\r
- $(this.interaction.element).removeClass("ui-draggable").removeClass("ui-draggable-disabled");\r
- this.interaction.destroy();\r
- },\r
- enable: function() {\r
- $(this.interaction.element).removeClass("ui-draggable-disabled");\r
- this.disabled = false;\r
- },\r
- disable: function() {\r
- $(this.interaction.element).addClass("ui-draggable-disabled");\r
- this.disabled = true;\r
- },\r
- prepareCallbackObj: function(self) {\r
- return {\r
- helper: self.helper,\r
- position: { left: self.pos[0], top: self.pos[1] },\r
- offset: self.options.cursorAt,\r
- draggable: self,\r
- options: self.options \r
- } \r
- },\r
- start: function(that, e) {\r
- \r
- var o = this.options;\r
- $.ui.ddmanager.current = this;\r
- \r
- $.ui.plugin.call(that, 'start', [e, that.prepareCallbackObj(this)]);\r
- $(this.element).triggerHandler("dragstart", [e, that.prepareCallbackObj(this)], o.start);\r
- \r
- if (this.slowMode && $.ui.droppable && !o.dropBehaviour)\r
- $.ui.ddmanager.prepareOffsets(this, e);\r
- \r
- return false;\r
- \r
- },\r
- stop: function(that, e) { \r
- \r
- var o = this.options;\r
- \r
- $.ui.plugin.call(that, 'stop', [e, that.prepareCallbackObj(this)]);\r
- $(this.element).triggerHandler("dragstop", [e, that.prepareCallbackObj(this)], o.stop);\r
-\r
- if (this.slowMode && $.ui.droppable && !o.dropBehaviour) //If cursorAt is within the helper, we must use our drop manager\r
- $.ui.ddmanager.fire(this, e);\r
-\r
- $.ui.ddmanager.current = null;\r
- $.ui.ddmanager.last = this;\r
-\r
- return false;\r
- \r
- },\r
- drag: function(that, e) {\r
-\r
- var o = this.options;\r
-\r
- $.ui.ddmanager.update(this, e);\r
-\r
- this.pos = [this.pos[0]-o.cursorAt.left, this.pos[1]-o.cursorAt.top];\r
-\r
- $.ui.plugin.call(that, 'drag', [e, that.prepareCallbackObj(this)]);\r
- var nv = $(this.element).triggerHandler("drag", [e, that.prepareCallbackObj(this)], o.drag);\r
-\r
- var nl = (nv && nv.left) ? nv.left : this.pos[0];\r
- var nt = (nv && nv.top) ? nv.top : this.pos[1];\r
- \r
- $(this.helper).css('left', nl+'px').css('top', nt+'px'); // Stick the helper to the cursor\r
- return false;\r
- \r
- }\r
- });\r
-\r
-})($);\r