Side navigation
Ticket #3121: ui.droppable.js.patch
File ui.droppable.js.patch, 2.5 KB (added by jeffkretz, July 02, 2008 07:07PM UTC)
Possible patch for "exclusive" draggable.
Index: ui.droppable.js
===================================================================
--- ui.droppable.js (revision 393)
+++ ui.droppable.js (working copy)
@@ -64,6 +64,10 @@
if (this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) {
$.ui.plugin.call(this, 'over', [e, this.ui(draggable)]);
this.element.triggerHandler("dropover", [e, this.ui(draggable)], this.options.over);
+
+ // For an exclusive draggable, note which drop zone it is currently over.
+ if (draggable.options.exclusive)
+ draggable.options.isover = this;
}
},
@@ -75,6 +79,9 @@
if (this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) {
$.ui.plugin.call(this, 'out', [e, this.ui(draggable)]);
this.element.triggerHandler("dropout", [e, this.ui(draggable)], this.options.out);
+
+ // Add exclusive code.
+ draggable.options.isover = null;
}
},
@@ -188,12 +195,16 @@
},
drop: function(draggable, e) {
-
+
+ // Check if the draggable is set for exclusive and if it has already been flagged as over the first element.
+ var exclusive = draggable.options.exclusive;
+ var isover = draggable.options.isover;
+
var dropped = false;
$.each($.ui.ddmanager.droppables, function() {
if(!this.options) return;
- if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
+ if (!this.options.disabled && this.visible && (!exclusive || !isover || isover==this) && $.ui.intersect(draggable, this, this.options.tolerance))
dropped = this.drop.call(this, e);
if (!this.options.disabled && this.visible && this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) {
@@ -213,8 +224,12 @@
//Run through all droppables and check their positions based on specific tolerance options
$.each($.ui.ddmanager.droppables, function() {
+ // Check if the draggable is set for exclusive and if it has already been flagged as over the first element.
+ var exclusive = draggable.options.exclusive;
+ var isover = draggable.options.isover;
+
if(this.options.disabled || this.greedyChild || !this.visible) return;
- var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
+ var intersects = (!exclusive || !isover || isover==this) && $.ui.intersect(draggable, this, this.options.tolerance);
var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
if(!c) return;
Download in other formats:
Original Format
File ui.droppable.js.patch, 2.5 KB (added by jeffkretz, July 02, 2008 07:07PM UTC)
Possible patch for "exclusive" draggable.
Index: ui.droppable.js
===================================================================
--- ui.droppable.js (revision 393)
+++ ui.droppable.js (working copy)
@@ -64,6 +64,10 @@
if (this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) {
$.ui.plugin.call(this, 'over', [e, this.ui(draggable)]);
this.element.triggerHandler("dropover", [e, this.ui(draggable)], this.options.over);
+
+ // For an exclusive draggable, note which drop zone it is currently over.
+ if (draggable.options.exclusive)
+ draggable.options.isover = this;
}
},
@@ -75,6 +79,9 @@
if (this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) {
$.ui.plugin.call(this, 'out', [e, this.ui(draggable)]);
this.element.triggerHandler("dropout", [e, this.ui(draggable)], this.options.out);
+
+ // Add exclusive code.
+ draggable.options.isover = null;
}
},
@@ -188,12 +195,16 @@
},
drop: function(draggable, e) {
-
+
+ // Check if the draggable is set for exclusive and if it has already been flagged as over the first element.
+ var exclusive = draggable.options.exclusive;
+ var isover = draggable.options.isover;
+
var dropped = false;
$.each($.ui.ddmanager.droppables, function() {
if(!this.options) return;
- if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
+ if (!this.options.disabled && this.visible && (!exclusive || !isover || isover==this) && $.ui.intersect(draggable, this, this.options.tolerance))
dropped = this.drop.call(this, e);
if (!this.options.disabled && this.visible && this.options.accept.call(this.element,(draggable.currentItem || draggable.element))) {
@@ -213,8 +224,12 @@
//Run through all droppables and check their positions based on specific tolerance options
$.each($.ui.ddmanager.droppables, function() {
+ // Check if the draggable is set for exclusive and if it has already been flagged as over the first element.
+ var exclusive = draggable.options.exclusive;
+ var isover = draggable.options.isover;
+
if(this.options.disabled || this.greedyChild || !this.visible) return;
- var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
+ var intersects = (!exclusive || !isover || isover==this) && $.ui.intersect(draggable, this, this.options.tolerance);
var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
if(!c) return;