Bug Tracker

Changeset 4502

Show
Ignore:
Timestamp:
01/21/08 17:41:11 (1 year ago)
Author:
paul.bakaus
Message:

- added serialization
- added new API methods (enable,disable,change)
- fixed many issues

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/ui/current/ui.sortable.js

    r4396 r4502  
    1010    $.extend($.expr[':'], { sortable: "(' '+a.className+' ').indexOf(' ui-sortable ')" }); 
    1111 
    12     $.fn.sortable = function(o) { 
    13         return this.each(function() { 
    14             new $.ui.sortable(this,o);   
    15         }); 
    16     }; 
     12    $.fn.extend({ 
     13        makeSortable: function(o) { 
     14            return this.each(function() { 
     15                if(!$.data(this, "ui-sortable")) new $.ui.sortable(this,o);  
     16            }); 
     17        }, 
     18        removeSortable: function() { 
     19            return this.each(function() { if($.data(this, "ui-sortable")) $.data(this, "ui-sortable").destroy(); }); 
     20        }, 
     21        changeSortable: function(key,value) { 
     22            var ret = null; 
     23            this.each(function() { 
     24                if($.data(this, "ui-sortable")) ret = $.data(this, "ui-sortable")[key](value); 
     25            }); 
     26            return ret || this; 
     27        }, 
     28        enableSortable: function() { 
     29            return this.each(function() { if($.data(this, "ui-sortable")) $.data(this, "ui-sortable").enable(); }); 
     30        }, 
     31        disableSortable: function() { 
     32            return this.each(function() { if($.data(this, "ui-sortable")) $.data(this, "ui-sortable").disable(); }); 
     33        } 
     34    }); 
     35 
    1736     
    1837    $.ui.sortable = function(element,options) { 
     
    87106            this.element.triggerHandler(n == "sort" ? n : "sort"+n, [e, this.ui()], this.options[n]); 
    88107        }, 
     108        serialize: function(o) { 
     109             
     110            var items = $(this.options.items, this.element); //Only the items of the sortable itself 
     111            var str = ''; 
     112            o = o || {}; 
     113             
     114            $(this.options.items, this.element).each(function() { 
     115                var res = (this.getAttribute(o.attribute || 'id') || '').match(o.expression || /(.+)[-=_](.+)/); 
     116                if(res) str += res[1]+'='+res[2];                
     117            }); 
     118             
     119            return str; 
     120             
     121        }, 
    89122        intersectsWith: function(item) { 
    90123             
     
    93126            var l = item.left, r = l + item.width,  
    94127                t = item.top,  b = t + item.height; 
    95  
     128             
    96129            return (   l < x1 + (this.helperProportions.width  / 2)        // Right Half 
    97130                &&     x2 - (this.helperProportions.width  / 2) < r    // Left Half 
     
    101134        }, 
    102135        refresh: function() { 
     136             
    103137            this.items = []; 
    104138            var items = this.items; 
     
    108142                for (var i = this.options.connectWith.length - 1; i >= 0; i--){ 
    109143                    var inst = $.data($(this.options.connectWith[i])[0], 'ui-sortable'); 
    110                     if(inst) { 
    111                         queries.push($(inst.options.items, inst.element)); 
    112                     } 
     144                    if(inst) queries.push($(inst.options.items, inst.element)); 
    113145                }; 
    114146            } 
     
    136168        }, 
    137169        destroy: function() { 
     170             
    138171            this.element.removeClass("ui-sortable ui-sortable-disabled"); 
    139172            this.element.removeMouseInteraction(); 
     173             
     174            for (var i = this.items.length - 1; i >= 0; i--) { 
     175                $.data(this.items[i].item[0], 'ui-sortable-item', null); 
     176            }; 
     177             
     178            $.data(this.element[0], 'ui-sortable', null); 
     179             
    140180        }, 
    141181        enable: function() { 
     
    150190             
    151191            var o = this.options; 
     192 
     193            //Refresh the droppable items 
     194            this.refresh(); this.refreshPositions(); 
    152195 
    153196            //Create and append the visible helper 
     
    193236            //Set the original element visibility to hidden to still fill out the white space    
    194237            $(this.currentItem).css('visibility', 'hidden'); 
    195              
    196             //Refresh the droppable positions 
    197             this.refreshPositions(); 
    198238 
    199239            return false;