]> source.dussan.org Git - jquery-ui.git/commitdiff
sortable: fixed a items issue caused the items of the container itself to be doubled...
authorPaul Bakaus <paul.bakaus@googlemail.com>
Sat, 19 Jul 2008 15:05:37 +0000 (15:05 +0000)
committerPaul Bakaus <paul.bakaus@googlemail.com>
Sat, 19 Jul 2008 15:05:37 +0000 (15:05 +0000)
ui/ui.sortable.js

index b1b29cba25414409143e808edeb169c3a749110a..803531f43e37cd0e477714532be56a88c0c27c58 100644 (file)
@@ -58,32 +58,36 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                        sender: inst ? inst.element : null
                };              
        },
+       
        propagate: function(n,e,inst, noPropagation) {
                $.ui.plugin.call(this, n, [e, this.ui(inst)]);
                if(!noPropagation) this.element.triggerHandler(n == "sort" ? n : "sort"+n, [e, this.ui(inst)], this.options[n]);
        },
+       
        serialize: function(o) {
 
-               var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper'); //Only the items of the sortable itself
+               var items = this.getItemsAsjQuery(o && o.connected);
                var str = []; o = o || {};
                
-               items.each(function() {
-                       var res = ($(this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
+               $(items).each(function() {
+                       var res = ($(this.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
                        if(res) str.push((o.key || res[1])+'[]='+(o.key && o.expression ? res[1] : res[2]));
                });
                
                return str.join('&');
                
        },
+       
        toArray: function(attr) {
                
-               var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper'); //Only the items of the sortable itself
+               var items = this.getItemsAsjQuery(o && o.connected);
                var ret = [];
 
                items.each(function() { ret.push($(this).attr(attr || 'id')); });
                return ret;
                
        },
+       
        /* Be careful with the following core functions */
        intersectsWith: function(item) {
                var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width,
@@ -105,6 +109,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                
                }
        },
+       
        intersectsWithEdge: function(item) {    
                var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width,
                        y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height;
@@ -147,10 +152,42 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                return false;
                
        },
+       
        refresh: function() {
                this.refreshItems();
                this.refreshPositions();
        },
+       
+       getItemsAsjQuery: function(connected) {
+               
+               var self = this;
+               var items = [];
+               var queries = [];
+       
+               if(this.options.connectWith && connected) {
+                       for (var i = this.options.connectWith.length - 1; i >= 0; i--){
+                               var cur = $(this.options.connectWith[i]);
+                               for (var j = cur.length - 1; j >= 0; j--){
+                                       var inst = $.data(cur[j], 'sortable');
+                                       if(inst && inst != this && !inst.options.disabled) {
+                                               queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper"), inst]);
+                                       }
+                               };
+                       };
+               }
+               
+               queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper"), this]);
+
+               for (var i = queries.length - 1; i >= 0; i--){
+                       queries[i][0].each(function() {
+                               items.push(this);
+                       });
+               };
+               
+               return $(items);
+               
+       },
+       
        refreshItems: function() {
                
                this.items = [];
@@ -164,7 +201,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                                var cur = $(this.options.connectWith[i]);
                                for (var j = cur.length - 1; j >= 0; j--){
                                        var inst = $.data(cur[j], 'sortable');
-                                       if(inst && !inst.options.disabled) {
+                                       if(inst && inst != this && !inst.options.disabled) {
                                                queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element), inst]);
                                                this.containers.push(inst);
                                        }
@@ -185,6 +222,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                };
 
        },
+       
        refreshPositions: function(fast) {
 
                //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
@@ -225,6 +263,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                }
 
        },
+       
        destroy: function() {
                this.element
                        .removeClass("ui-sortable ui-sortable-disabled")
@@ -235,6 +274,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                for ( var i = this.items.length - 1; i >= 0; i-- )
                        this.items[i].item.removeData("sortable-item");
        },
+       
        createPlaceholder: function(that) {
                
                var self = that || this, o = self.options;
@@ -260,6 +300,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                o.placeholder.update(self, self.placeholder);
 
        },
+       
        contactContainers: function(e) {
                for (var i = this.containers.length - 1; i >= 0; i--){
 
@@ -304,6 +345,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                        
                };                      
        },
+       
        mouseCapture: function(e, overrideHandle) {
        
                if(this.options.disabled || this.options.type == 'static') return false;
@@ -332,6 +374,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                return true;    
                        
        },
+       
        mouseStart: function(e, overrideHandle, noActivation) {
 
                var o = this.options;
@@ -446,6 +489,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
 
 
        },
+       
        convertPositionTo: function(d, pos) {
                if(!pos) pos = this.position;
                var mod = d == "absolute" ? 1 : -1;
@@ -464,6 +508,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                        )
                };
        },
+       
        generatePosition: function(e) {
                
                var o = this.options;
@@ -505,6 +550,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                
                return position;
        },
+       
        mouseDrag: function(e) {
 
                //Compute the helpers position
@@ -553,6 +599,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                return false;
                
        },
+       
        rearrange: function(e, i, a, hardRefresh) {
 
                a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
@@ -570,6 +617,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                },0);
 
        },
+       
        mouseStop: function(e, noPropagation) {
 
                //If we are using droppables, inform the manager about the drop
@@ -593,6 +641,7 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
                return false;
                
        },
+       
        clear: function(e, noPropagation) {
 
                //We first have to update the dom position of the actual currentItem