Jump to content

MediaWiki:Common.js/shuffle.js: Difference between revisions

From MidsouthMakers - Memphis Area Hackerpace
m 1 revision
 
(No difference)

Latest revision as of 20:48, 18 November 2010

/**
 * Shuffle objects around for fairness.  Searches for a DOM 
 * branch like this:
 *   <div class="shuffle">
 *     <div class="shuffle-item">One</div>
 *     <div class="shuffle-item">One</div>
 *     ...
 *   </div>
 * Any content that's not in a "shuffle-item" tag will end up
 * at the top of the "shuffle" element.
 * Maintainers: Happy-melon
 */
if( getElementsByClassName(document, "*", "shuffle").length > 0 ){ addOnloadHook( function() { 
    var area = getElementsByClassName(document, "*", "shuffle")[0];
    var divs = getElementsByClassName( area, '*', 'shuffle-item' );

    var rand = [];
    for ( var i=0; i<divs.length; i++ ) {
        rand[i] = Math.random();
    }
    
    var sorted = [];
    //Insertion sort
    for( var i=0; i<divs.length; i++ ){
        var n = 0;
        var x = 99;
        for( var j=0; j<divs.length; j++ ){
            if( rand[j] < x ){
                n = j;
                x = rand[j];
            }
        }
        sorted[i] = divs[n];
        rand[n] = 100;
    }

    for( var i=0; i<sorted.length; i++ ){
        area.appendChild( sorted[i] );
    }
})}