corrade-http-templates – Rev 62

Subversion Repositories:
Rev:
define( [
        "../core",
        "../var/rcssNum"
], function( jQuery, rcssNum ) {

"use strict";

function adjustCSS( elem, prop, valueParts, tween ) {
        var adjusted, scale,
                maxIterations = 20,
                currentValue = tween ?
                        function() {
                                return tween.cur();
                        } :
                        function() {
                                return jQuery.css( elem, prop, "" );
                        },
                initial = currentValue(),
                unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),

                // Starting value computation is required for potential unit mismatches
                initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
                        rcssNum.exec( jQuery.css( elem, prop ) );

        if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {

                // Support: Firefox <=54
                // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
                initial = initial / 2;

                // Trust units reported by jQuery.css
                unit = unit || initialInUnit[ 3 ];

                // Iteratively approximate from a nonzero starting point
                initialInUnit = +initial || 1;

                while ( maxIterations-- ) {

                        // Evaluate and update our best guess (doubling guesses that zero out).
                        // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
                        jQuery.style( elem, prop, initialInUnit + unit );
                        if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
                                maxIterations = 0;
                        }
                        initialInUnit = initialInUnit / scale;

                }

                initialInUnit = initialInUnit * 2;
                jQuery.style( elem, prop, initialInUnit + unit );

                // Make sure we update the tween properties later on
                valueParts = valueParts || [];
        }

        if ( valueParts ) {
                initialInUnit = +initialInUnit || +initial || 0;

                // Apply relative offset (+=/-=) if specified
                adjusted = valueParts[ 1 ] ?
                        initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
                        +valueParts[ 2 ];
                if ( tween ) {
                        tween.unit = unit;
                        tween.start = initialInUnit;
                        tween.end = adjusted;
                }
        }
        return adjusted;
}

return adjustCSS;
} );