corrade-http-templates – Rev 42

Subversion Repositories:
Rev:
/*!
 * jQuery UI Effects Explode 1.12.1
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */

//>>label: Explode Effect
//>>group: Effects
// jscs:disable maximumLineLength
//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.
// jscs:enable maximumLineLength
//>>docs: http://api.jqueryui.com/explode-effect/
//>>demos: http://jqueryui.com/effect/

( function( factory ) {
        if ( typeof define === "function" && define.amd ) {

                // AMD. Register as an anonymous module.
                define( [
                        "jquery",
                        "../version",
                        "../effect"
                ], factory );
        } else {

                // Browser globals
                factory( jQuery );
        }
}( function( $ ) {

return $.effects.define( "explode", "hide", function( options, done ) {

        var i, j, left, top, mx, my,
                rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,
                cells = rows,
                element = $( this ),
                mode = options.mode,
                show = mode === "show",

                // Show and then visibility:hidden the element before calculating offset
                offset = element.show().css( "visibility", "hidden" ).offset(),

                // Width and height of a piece
                width = Math.ceil( element.outerWidth() / cells ),
                height = Math.ceil( element.outerHeight() / rows ),
                pieces = [];

        // Children animate complete:
        function childComplete() {
                pieces.push( this );
                if ( pieces.length === rows * cells ) {
                        animComplete();
                }
        }

        // Clone the element for each row and cell.
        for ( i = 0; i < rows; i++ ) { // ===>
                top = offset.top + i * height;
                my = i - ( rows - 1 ) / 2;

                for ( j = 0; j < cells; j++ ) { // |||
                        left = offset.left + j * width;
                        mx = j - ( cells - 1 ) / 2;

                        // Create a clone of the now hidden main element that will be absolute positioned
                        // within a wrapper div off the -left and -top equal to size of our pieces
                        element
                                .clone()
                                .appendTo( "body" )
                                .wrap( "<div></div>" )
                                .css( {
                                        position: "absolute",
                                        visibility: "visible",
                                        left: -j * width,
                                        top: -i * height
                                } )

                                // Select the wrapper - make it overflow: hidden and absolute positioned based on
                                // where the original was located +left and +top equal to the size of pieces
                                .parent()
                                        .addClass( "ui-effects-explode" )
                                        .css( {
                                                position: "absolute",
                                                overflow: "hidden",
                                                width: width,
                                                height: height,
                                                left: left + ( show ? mx * width : 0 ),
                                                top: top + ( show ? my * height : 0 ),
                                                opacity: show ? 0 : 1
                                        } )
                                        .animate( {
                                                left: left + ( show ? 0 : mx * width ),
                                                top: top + ( show ? 0 : my * height ),
                                                opacity: show ? 1 : 0
                                        }, options.duration || 500, options.easing, childComplete );
                }
        }

        function animComplete() {
                element.css( {
                        visibility: "visible"
                } );
                $( pieces ).remove();
                done();
        }
} );

} ) );