Changeset 633

Show
Ignore:
Timestamp:
03/15/06 12:17:48 (3 years ago)
Author:
therve@gmail.com
Message:

Upgrade Sortable

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mochikit/branches/scriptaculous/MochiKit/DragAndDrop.js

    r618 r633  
    8888 
    8989    prepare: function (element) { 
    90         MochiKit.Iter.forEach(this.drops, function (drop) { 
     90        MochiKit.Base.map(function (drop) { 
    9191            if (drop.isAccepted(element)) { 
    9292                if (drop.options.activeclass) { 
     
    9898                } 
    9999            } 
    100         }); 
     100        }, this.drops); 
    101101    }, 
    102102 
     
    139139 
    140140    reset: function (element) { 
    141         MochiKit.Iter.forEach(this.drops, function (drop) { 
     141        MochiKit.Base.map(function (drop) { 
    142142            if (drop.options.activeclass) { 
    143143                MochiKit.DOM.removeElementClass(drop.element, 
     
    147147                drop.options.ondesactive(drop.element, element); 
    148148            } 
    149         }); 
     149        }, this.drops); 
    150150        if (this.last_active) { 
    151151            this.last_active.deactivate(); 
     
    185185            if ((typeof(containment) == 'object') && 
    186186                (containment.constructor == Array)) { 
    187                 MochiKit.Iter.forEach(containment, function (c) { 
     187                MochiKit.Base.map(MochiKit.Base.bind(function (c) { 
    188188                    this.options._containers.push(MochiKit.DOM.getElement(c)); 
    189                 }); 
     189                }, this), containment); 
    190190            } else { 
    191191                this.options._containers.push( 
     
    362362        // 'onStart', 'onEnd', 'onDrag' 
    363363        if (this[eventName + 'Count'] > 0) { 
    364             MochiKit.Iter.forEach(this.observers, function (o) { 
     364            MochiKit.Base.map(function (o) { 
    365365                if (o[eventName]) { 
    366366                    o[eventName](eventName, draggable, event); 
    367367                } 
    368             }); 
     368            }, this.observers); 
    369369        } 
    370370    }, 
    371371 
    372372    _cacheObserverCallbacks: function () { 
    373         MochiKit.Iter.forEach(['onStart', 'onEnd', 'onDrag'], 
    374         function (eventName) { 
     373        MochiKit.Base.map(function (eventName) { 
    375374            MochiKit.DragAndDrop.Draggables[eventName + 'Count'] = 
    376375            MochiKit.Base.filter(function (o) { 
    377376                return o[eventName]; 
    378377            }, MochiKit.DragAndDrop.Draggables.observers).length; 
    379         }); 
     378        }, ['onStart', 'onEnd', 'onDrag']); 
    380379    } 
    381380}; 
  • mochikit/branches/scriptaculous/MochiKit/Sortable.js

    r616 r633  
    66 
    77***/ 
    8 SortableObserver = function (element, observer) { 
     8 
     9if (typeof(dojo) != 'undefined') { 
     10    dojo.provide('MochiKit.DragAndDrop'); 
     11    dojo.require('MochiKit.Base'); 
     12    dojo.require('MochiKit.DOM'); 
     13    dojo.require('MochiKit.Iter'); 
     14
     15 
     16if (typeof(JSAN) != 'undefined') { 
     17    JSAN.use("MochiKit.Base", []); 
     18    JSAN.use("MochiKit.DOM", []); 
     19    JSAN.use("MochiKit.Iter", []); 
     20
     21 
     22try { 
     23    if (typeof(MochiKit.Base) == 'undefined' || 
     24        typeof(MochiKit.DOM) == 'undefined' || 
     25        typeof(MochiKit.Iter) == 'undefined') { 
     26        throw ""; 
     27    } 
     28} catch (e) { 
     29    throw "MochiKit.DragAndDrop depends on MochiKit.Base, MochiKit.DOM and MochiKit.Iter!"; 
     30
     31 
     32if (typeof(MochiKit.Sortable) == 'undefined') { 
     33    MochiKit.Sortable = {}; 
     34
     35 
     36MochiKit.Sortable.NAME = 'MochiKit.Sortable'; 
     37MochiKit.Sortable.VERSION = '1.3'; 
     38 
     39MochiKit.Sortable.__repr__ = function () { 
     40    return '[' + this.NAME + ' ' + this.VERSION + ']'; 
     41}; 
     42 
     43MochiKit.Sortable.toString = function () { 
     44    return this.__repr__(); 
     45}; 
     46 
     47MochiKit.Sortable.EXPORT = [ 
     48    "SortableObserver" 
     49]; 
     50 
     51MochiKit.DragAndDrop.EXPORT_OK = [ 
     52    "Sortable" 
     53]; 
     54 
     55MochiKit.Sortable.SortableObserver = function (element, observer) { 
    956    this.__init__(element, observer); 
    1057}; 
    1158 
    12 SortableObserver.prototype = { 
     59MochiKit.Sortable.SortableObserver.prototype = { 
    1360    /*** 
    1461 
     
    1966        this.element = MochiKit.DOM.getElement(element); 
    2067        this.observer = observer; 
    21         this.lastValue = Sortable.serialize(this.element); 
     68        this.lastValue = MochiKit.Sortable.Sortable.serialize(this.element); 
    2269    }, 
    2370 
    2471    onStart: function () { 
    25         this.lastValue = Sortable.serialize(this.element); 
     72        this.lastValue = MochiKit.Sortable.Sortable.serialize(this.element); 
    2673    }, 
    2774 
    2875    onEnd: function () { 
    29         Sortable.unmark(); 
    30         if (this.lastValue != Sortable.serialize(this.element)) { 
     76        MochiKit.Sortable.Sortable.unmark(); 
     77        if (this.lastValue != MochiKit.Sortable.Sortable.serialize(this.element)) { 
    3178            this.observer(this.element) 
    3279        } 
     
    3481}; 
    3582 
    36 var Sortable = { 
     83MochiKit.Sortable.Sortable = { 
    3784    /*** 
    3885 
     
    59106            return s.element == element; 
    60107        }, this.sortables); 
    61         MochiKit.Iter.forEach(toDestroy, function (s) { 
     108        MochiKit.Base.map(function (s) { 
    62109            MochiKit.DragAndDrop.Draggables.removeObserver(s.element); 
    63             MochiKit.Iter.forEach(s.droppables, function (d) { 
     110            MochiKit.Base.map(function (d) { 
    64111                MochiKit.DragAndDrop.Droppables.remove(d); 
    65             }); 
    66             MochiKit.Iter.forEach(s.draggables, function (d) { 
     112            }, s.droppables); 
     113            MochiKit.Base.map(function (d) { 
    67114                d.destroy(); 
    68             }); 
    69         }); 
     115            }, s.draggables); 
     116        }, toDestroy); 
    70117        this.sortables = MochiKit.Base.filter(function (s) { 
    71118            return s.element != element; 
     
    132179            containment: options.containment, 
    133180            hoverclass: options.hoverclass, 
    134             onhover: Sortable.onHover, 
     181            onhover: MochiKit.Sortable.Sortable.onHover, 
    135182            greedy: !options.dropOnEmpty 
    136183        } 
     
    148195            new MochiKit.DragAndDrop.Droppable(element, { 
    149196                containment: options.containment, 
    150                 onhover: Sortable.onEmptyHover, 
     197                onhover: MochiKit.Sortable.Sortable.onEmptyHover, 
    151198                greedy: false 
    152199            }); 
    153200            options.droppables.push(element); 
    154201        } 
    155         MochiKit.Iter.forEach((this.findElements(element, options) || []), 
    156         function (e) { 
     202        MochiKit.Base.map(function (e) { 
    157203            // handles are per-draggable 
    158204            var handle = options.handle ? 
     
    165211            new MochiKit.DragAndDrop.Droppable(e, options_for_droppable); 
    166212            options.droppables.push(e); 
    167         }); 
     213        }, (this.findElements(element, options) || [])); 
    168214 
    169215        // keep reference 
     
    172218        // for onupdate 
    173219        MochiKit.DragAndDrop.Draggables.addObserver( 
    174             new SortableObserver(element, options.onUpdate)); 
     220            new MochiKit.Sortable.SortableObserver(element, options.onUpdate)); 
    175221    }, 
    176222 
     
    181227        } 
    182228        var elements = []; 
    183         MochiKit.Iter.forEach(element.childNodes, function (e) { 
     229        MochiKit.Base.map(MochiKit.Base.bind(function (e) { 
    184230            if (e.tagName && 
    185231                e.tagName.toUpperCase() == options.tag.toUpperCase() && 
     
    194240                } 
    195241            } 
    196         }); 
     242        }, this), element.childNodes); 
    197243 
    198244        return (elements.length > 0 ? elements : null); 
     
    201247    onHover: function (element, dropon, overlap) { 
    202248        if (overlap > 0.5) { 
    203             Sortable.mark(dropon, 'before'); 
     249            MochiKit.Sortable.Sortable.mark(dropon, 'before'); 
    204250            if (dropon.previousSibling != element) { 
    205251                var oldParentNode = element.parentNode; 
     
    207253                dropon.parentNode.insertBefore(element, dropon); 
    208254                if (dropon.parentNode != oldParentNode) { 
    209                     Sortable.options(oldParentNode).onChange(element); 
     255                    MochiKit.Sortable.Sortable.options(oldParentNode).onChange(element); 
    210256                } 
    211                 Sortable.options(dropon.parentNode).onChange(element); 
     257                MochiKit.Sortable.Sortable.options(dropon.parentNode).onChange(element); 
    212258            } 
    213259        } else { 
    214             Sortable.mark(dropon, 'after'); 
     260            MochiKit.Sortable.Sortable.mark(dropon, 'after'); 
    215261            var nextElement = dropon.nextSibling || null; 
    216262            if (nextElement != element) { 
     
    219265                dropon.parentNode.insertBefore(element, nextElement); 
    220266                if (dropon.parentNode != oldParentNode) { 
    221                     Sortable.options(oldParentNode).onChange(element); 
     267                    MochiKit.Sortable.Sortable.options(oldParentNode).onChange(element); 
    222268                } 
    223                 Sortable.options(dropon.parentNode).onChange(element); 
     269                MochiKit.Sortable.Sortable.options(dropon.parentNode).onChange(element); 
    224270            } 
    225271        } 
     
    230276            var oldParentNode = element.parentNode; 
    231277            dropon.appendChild(element); 
    232             Sortable.options(oldParentNode).onChange(element); 
    233             Sortable.options(dropon).onChange(element); 
     278            MochiKit.Sortable.Sortable.options(oldParentNode).onChange(element); 
     279            MochiKit.Sortable.Sortable.options(dropon).onChange(element); 
    234280        } 
    235281    }, 
    236282 
    237283    unmark: function () { 
    238         if (Sortable._marker) { 
    239             MochiKit.DOM.hideElement(Sortable._marker); 
     284        if (MochiKit.Sortable.Sortable._marker) { 
     285            MochiKit.DOM.hideElement(MochiKit.Sortable.Sortable._marker); 
    240286        } 
    241287    }, 
     
    243289    mark: function (dropon, position) { 
    244290        // mark on ghosting only 
    245         var sortable = Sortable.options(dropon.parentNode); 
     291        var sortable = MochiKit.Sortable.Sortable.options(dropon.parentNode); 
    246292        if (sortable && !sortable.ghosting) { 
    247293            return; 
    248294        } 
    249295 
    250         if (!Sortable._marker) { 
    251             Sortable._marker = MochiKit.DOM.getElement('dropmarker') || 
     296        if (!MochiKit.Sortable.Sortable._marker) { 
     297            MochiKit.Sortable.Sortable._marker = MochiKit.DOM.getElement('dropmarker') || 
    252298                               document.createElement('DIV'); 
    253             MochiKit.DOM.hideElement(Sortable._marker); 
    254             MochiKit.DOM.addElementClass(Sortable._marker, 'dropmarker'); 
    255             Sortable._marker.style.position = 'absolute'; 
     299            MochiKit.DOM.hideElement(MochiKit.Sortable.Sortable._marker); 
     300            MochiKit.DOM.addElementClass(MochiKit.Sortable.Sortable._marker, 'dropmarker'); 
     301            MochiKit.Sortable.Sortable._marker.style.position = 'absolute'; 
    256302            document.getElementsByTagName('body').item(0).appendChild( 
    257                 Sortable._marker); 
     303                MochiKit.Sortable.Sortable._marker); 
    258304        } 
    259305        var offsets = MochiKit.Position.cumulativeOffset(dropon); 
    260         Sortable._marker.style.left = offsets[0] + 'px'; 
    261         Sortable._marker.style.top = offsets[1] + 'px'; 
     306        MochiKit.Sortable.Sortable._marker.style.left = offsets[0] + 'px'; 
     307        MochiKit.Sortable.Sortable._marker.style.top = offsets[1] + 'px'; 
    262308 
    263309        if (position == 'after') { 
    264310            if (sortable.overlap == 'horizontal') { 
    265                 Sortable._marker.style.left = (offsets[0] + 
     311                MochiKit.Sortable.Sortable._marker.style.left = (offsets[0] + 
    266312                                               dropon.clientWidth) + 'px'; 
    267313            } else { 
    268                 Sortable._marker.style.top = (offsets[1] + 
     314                MochiKit.Sortable.Sortable._marker.style.top = (offsets[1] + 
    269315                                              dropon.clientHeight) + 'px'; 
    270316            } 
    271317        } 
    272         MochiKit.DOM.showElement(Sortable._marker); 
     318        MochiKit.DOM.showElement(MochiKit.Sortable.Sortable._marker); 
    273319    }, 
    274320 
  • mochikit/branches/scriptaculous/examples/dnd_sortable/index.html

    r602 r633  
    3131        </p> 
    3232<script type="text/javascript"> 
    33 Sortable.create('dnd_sortable'); 
     33MochiKit.Sortable.Sortable.create('dnd_sortable'); 
    3434 
    3535validate = function () { 
     
    4242} 
    4343</script> 
    44  
     44<p> 
     45    <ul> 
     46        <li><a href="sortable_test.html">Test 1</a></li> 
     47        <li><a href="sortable2_test.html">Test 2</a></li> 
     48        <li><a href="sortable3_test.html">Test 3</a></li> 
     49        <li><a href="sortable4_test.html">Test 4</a></li> 
     50        <li><a href="sortable5_test.html">Test 5</a></li> 
     51    </ul> 
     52</p> 
    4553    </body> 
    4654</html> 
  • mochikit/branches/scriptaculous/examples/simple_dnd/dnd_full.html

    r618 r633  
    110110// <![CDATA[ 
    111111//  Sortable.create('thelist', {overlap: 'horizontal', constraint: false}); 
    112 Sortable.create('thelist'); 
    113 Sortable.create('thelist2'); 
     112MochiKit.Sortable.Sortable.create('thelist'); 
     113MochiKit.Sortable.Sortable.create('thelist2'); 
    114114 
    115115// ]]> 
  • mochikit/branches/scriptaculous/examples/simple_dnd/dnd_scroll.html

    r618 r633  
    8484//  Sortable.create('thelist', {overlap: 'horizontal', constraint: false}); 
    8585MochiKit.Position.includeScrollOffsets = true; 
    86 Sortable.create('thelist2', {scroll: 'scroll-container'}); 
     86MochiKit.Sortable.Sortable.create('thelist2', {scroll: 'scroll-container'}); 
    8787 
    8888// ]]>