+++ /dev/null
-(function($) {\r
-\r
- //Make nodes selectable by expression\r
- $.extend($.expr[':'], { droppable: "(' '+a.className+' ').indexOf(' ui-droppable ')" });\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-droppable")) jQuery.data(this, "ui-droppable")["'+cur+'"](a); }); }');\r
- $.fn["droppable"+cur.substr(0,1).toUpperCase()+cur.substr(1)] = f;\r
- };\r
- \r
- //get instance method\r
- $.fn.droppableInstance = function() {\r
- if($(this[0]).is(".ui-droppable")) return $.data(this[0], "ui-droppable");\r
- return false;\r
- };\r
-\r
- $.fn.droppable = function(o) {\r
- return this.each(function() {\r
- new $.ui.droppable(this,o);\r
- });\r
- }\r
- \r
- $.ui.droppable = function(el,o) {\r
-\r
- if(!o) var o = {}; \r
- this.element = el; if($.browser.msie) el.droppable = 1;\r
- $.data(el, "ui-droppable", this);\r
- \r
- this.options = {};\r
- $.extend(this.options, o);\r
- \r
- var accept = o.accept;\r
- $.extend(this.options, {\r
- accept: o.accept && o.accept.constructor == Function ? o.accept : function(d) {\r
- return $(d).is(accept); \r
- },\r
- tolerance: o.tolerance || 'intersect'\r
- });\r
- o = this.options;\r
- var self = this;\r
- \r
- this.mouseBindings = [function(e) { return self.move.apply(self, [e]); },function(e) { return self.drop.apply(self, [e]); }];\r
- $(this.element).bind("mousemove", this.mouseBindings[0]);\r
- $(this.element).bind("mouseup", this.mouseBindings[1]);\r
- \r
- $.ui.ddmanager.droppables.push({ item: this, over: 0, out: 1 }); // Add the reference and positions to the manager\r
- $(this.element).addClass("ui-droppable");\r
- \r
- };\r
- \r
- $.extend($.ui.droppable.prototype, {\r
- plugins: {},\r
- prepareCallbackObj: function(c) {\r
- return {\r
- draggable: c,\r
- droppable: this,\r
- element: c.element,\r
- helper: c.helper,\r
- options: this.options \r
- } \r
- },\r
- destroy: function() {\r
- $(this.element).removeClass("ui-droppable").removeClass("ui-droppable-disabled");\r
- $(this.element).unbind("mousemove", this.mouseBindings[0]);\r
- $(this.element).unbind("mouseup", this.mouseBindings[1]);\r
- \r
- for(var i=0;i<$.ui.ddmanager.droppables.length;i++) {\r
- if($.ui.ddmanager.droppables[i].item == this) $.ui.ddmanager.droppables.splice(i,1);\r
- }\r
- },\r
- enable: function() {\r
- $(this.element).removeClass("ui-droppable-disabled");\r
- this.disabled = false;\r
- },\r
- disable: function() {\r
- $(this.element).addClass("ui-droppable-disabled");\r
- this.disabled = true;\r
- },\r
- move: function(e) {\r
-\r
- if(!$.ui.ddmanager.current) return;\r
-\r
- var o = this.options;\r
- var c = $.ui.ddmanager.current;\r
- \r
- /* Save current target, if no last target given */\r
- var findCurrentTarget = function(e) {\r
- if(e.currentTarget) return e.currentTarget;\r
- var el = e.srcElement; \r
- do { if(el.droppable) return el; el = el.parentNode; } while (el); //This is only used in IE! references in DOM are evil!\r
- }\r
- if(c && o.accept(c.element)) c.currentTarget = findCurrentTarget(e);\r
- \r
- c.drag.apply(c, [e]);\r
- e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\r
- \r
- },\r
- over: function(e) {\r
-\r
- var c = $.ui.ddmanager.current;\r
- if (!c || c.element == this.element) return; // Bail if draggable and droppable are same element\r
- \r
- var o = this.options;\r
- if (o.accept(c.element)) {\r
- $.ui.plugin.call(this, 'over', [e, this.prepareCallbackObj(c)]);\r
- $(this.element).triggerHandler("dropover", [e, this.prepareCallbackObj(c)], o.over);\r
- }\r
- \r
- },\r
- out: function(e) {\r
-\r
- var c = $.ui.ddmanager.current;\r
- if (!c || c.element == this.element) return; // Bail if draggable and droppable are same element\r
-\r
- var o = this.options;\r
- if (o.accept(c.element)) {\r
- $.ui.plugin.call(this, 'out', [e, this.prepareCallbackObj(c)]);\r
- $(this.element).triggerHandler("dropout", [e, this.prepareCallbackObj(c)], o.out);\r
- }\r
- \r
- },\r
- drop: function(e) {\r
-\r
- var c = $.ui.ddmanager.current;\r
- if (!c || c.element == this.element) return; // Bail if draggable and droppable are same element\r
- \r
- var o = this.options;\r
- if(o.accept(c.element)) { // Fire callback\r
- if(o.greedy && !c.slowMode) {\r
- if(c.currentTarget == this.element) {\r
- $.ui.plugin.call(this, 'drop', [e, {\r
- draggable: c,\r
- droppable: this,\r
- element: c.element,\r
- helper: c.helper \r
- }]);\r
- $(this.element).triggerHandler("drop", [e, {\r
- draggable: c,\r
- droppable: this,\r
- element: c.element,\r
- helper: c.helper \r
- }], o.drop);\r
- }\r
- } else {\r
- $.ui.plugin.call(this, 'drop', [e, this.prepareCallbackObj(c)]);\r
- $(this.element).triggerHandler("drop", [e, this.prepareCallbackObj(c)], o.drop);\r
- }\r
- }\r
- \r
- },\r
- activate: function(e) {\r
- var c = $.ui.ddmanager.current;\r
- $.ui.plugin.call(this, 'activate', [e, this.prepareCallbackObj(c)]);\r
- if(c) $(this.element).triggerHandler("dropactivate", [e, this.prepareCallbackObj(c)], this.options.activate); \r
- },\r
- deactivate: function(e) {\r
- var c = $.ui.ddmanager.current;\r
- $.ui.plugin.call(this, 'deactivate', [e, this.prepareCallbackObj(c)]);\r
- if(c) $(this.element).triggerHandler("dropdeactivate", [e, this.prepareCallbackObj(c)], this.options.deactivate);\r
- }\r
- });\r
- \r
- $.ui.intersect = function(oDrag, oDrop, toleranceMode) {\r
- if (!oDrop.offset)\r
- return false;\r
- var x1 = oDrag.rpos[0] - oDrag.options.cursorAt.left + oDrag.options.margins.left, x2 = x1 + oDrag.helperSize.width,\r
- y1 = oDrag.rpos[1] - oDrag.options.cursorAt.top + oDrag.options.margins.top, y2 = y1 + oDrag.helperSize.height;\r
- var l = oDrop.offset.left, r = l + oDrop.item.element.offsetWidth, \r
- t = oDrop.offset.top, b = t + oDrop.item.element.offsetHeight;\r
- switch (toleranceMode) {\r
- case 'fit':\r
- return ( l < x1 && x2 < r\r
- && t < y1 && y2 < b);\r
- break;\r
- case 'intersect':\r
- return ( l < x1 + (oDrag.helperSize.width / 2) // Right Half\r
- && x2 - (oDrag.helperSize.width / 2) < r // Left Half\r
- && t < y1 + (oDrag.helperSize.height / 2) // Bottom Half\r
- && y2 - (oDrag.helperSize.height / 2) < b ); // Top Half\r
- break;\r
- case 'pointer':\r
- return ( l < oDrag.rpos[0] && oDrag.rpos[0] < r\r
- && t < oDrag.rpos[1] && oDrag.rpos[1] < b);\r
- break;\r
- case 'touch':\r
- return ( (l < x1 && x1 < r && t < y1 && y1 < b) // Top-Left Corner\r
- || (l < x1 && x1 < r && t < y2 && y2 < b) // Bottom-Left Corner\r
- || (l < x2 && x2 < r && t < y1 && y1 < b) // Top-Right Corner\r
- || (l < x2 && x2 < r && t < y2 && y2 < b) ); // Bottom-Right Corner\r
- break;\r
- default:\r
- return false;\r
- break;\r
- }\r
- }\r
- \r
-})($);\r
-\r