Dav's Code

effects  1.0.0

Dav's Code > effects > sortable.js (source view)
Search:
 
Filters
/**
 * @description Sortable Lists.
 * @module sortablelists
 * @version 0.1
 * @namespace YAHOO.widget
 * @requires yahoo, dom, event
*/
/**
 * @description Sortable Lists.
 * @class SortableList
 * @param {String/HTMLElement} elm The element to convert into a sortable list
 */
YAHOO.widget.SortableList = function(elm, cfg) {
    this.elm = $(elm);
    this.drop = null;
    this.lastTarget = false;
    this._tagName = 'li';

    if (cfg) {
        if (cfg.tagname) {
            this._tagName = cfg.tagname;
        }
    }

    if (!this.elm) {
        return false;
    }
    /**
    * Custom Event
    * @type Object
    */
    this.onInit = new YAHOO.util.CustomEvent('oninit', this);
}
/**
* The init function to make the list sortable
* @method init
* @private
*/
YAHOO.widget.SortableList.prototype.init = function() {
    this._setupList();
    this.onInit.fire();
}
/**
* Sets up the list
* @method _setupList
* @private
*/
YAHOO.widget.SortableList.prototype._setupList = function() {
    this.lis = this.elm.getElementsByTagName(this._tagName);
    $D.generateId(this.lis, 'ysortable');
    for (var i = 0; i < this.lis.length; i++) {
        var ID = this.lis[i].id;
        this.lis[i]._yuiGroup = this.elm.id;
        new YAHOO.util.DDTarget(ID);
        var tmp = new YAHOO.util.DD(ID, this.elm.id);
        tmp.onDragDrop = this.onDragDrop;
        tmp.onDragOver = this.onDragOver;
        tmp.onMouseUp = this.onMouseUp;
        tmp.onDragEnter = this.onDragEnter;
    }
}
/**
* DragEnter event handler
* @method onDragEnter
* @private
*/
YAHOO.widget.SortableList.prototype.onDragEnter = function(ev, id) {
    if (!this.currentDrag) {
        //Find the parent Draggable object
        var tar = $E.getTarget(ev);
        var par = tar;
        if (par) {
            while (par.parentNode) {
                if (typeof par._yuiGroup != "undefined") {
                    this.currentDrag = par;
                    break;
                }
                par = par.parentNode;
            }
        }
    }
}
/**
* onDragDrop Event handler
* @method onDragDrop
* @private
*/
YAHOO.widget.SortableList.prototype.onDragDrop = function(ev, id) {
    var tar = this.currentDrag;
    //Find the parent Draggable object
    var par = $(id);
    var finalParent = par;
    if (par) {
        while (par.parentNode) {
            if (typeof par._yuiGroup != "undefined") {
                finalParent = par;
                break;
            }
            par = par.parentNode;
        }
    }
    var id = finalParent.id;
    if (this.lastTarget && (id === this.lastTarget) && (tar.id != id)) {
        $D.removeClass(this.lastTarget, 'yui-sortover');
        var tmp = $(id);
        if (tmp.previousSibling != tar) {
            tar.parentNode.removeChild(tar);
            tmp.parentNode.insertBefore(tar, tmp);
        } else {
            tar.parentNode.removeChild(tar);
            tmp.parentNode.insertBefore(tar, tmp.nextSibling);
        }
    }
}
/**
* onDragOver Event handler
* @method onDragOver
* @private
*/
YAHOO.widget.SortableList.prototype.onDragOver = function(ev, id) {
    if (this.lastTarget) {
        $D.removeClass(this.lastTarget, 'yui-sortover');
    }
    this.lastTarget = id;
    $D.addClass(id, 'yui-sortover');
}
/**
* onMouseUp Event handler
* @method onMouseUp
* @private
*/
YAHOO.widget.SortableList.prototype.onMouseUp = function(ev) {
    //var tar = $E.getTarget(ev);
    var tar = this.currentDrag;
    this.currentDrag = false;
    if (this.lastTarget) {
        $D.removeClass(this.lastTarget, 'yui-sortover');
    }
    $D.setStyle(tar, 'position', 'static');
    $D.setStyle(tar, 'top', '');
    $D.setStyle(tar, 'left', '');
}

Copyright © 2009 Dav Glass All rights reserved.