Fixed #1450 by returning 1223 as success. Couldn't normalize the status since jquery...
[jquery.git] / src / fx.js
index d75f3d0..9bfe999 100644 (file)
--- a/src/fx.js
+++ b/src/fx.js
@@ -66,10 +66,10 @@ jQuery.fn.extend({
        },
        
        animate: function( prop, speed, easing, callback ) {
-               var opt = jQuery.speed(speed, easing, callback);
+               var optall = jQuery.speed(speed, easing, callback);
 
-               return this[ opt.queue === false ? "each" : "queue" ](function(){
-                       opt = jQuery.extend({}, opt);
+               return this[ optall.queue === false ? "each" : "queue" ](function(){
+                       var opt = jQuery.extend({}, optall);
                        var hidden = jQuery(this).is(":hidden"), self = this;
                        
                        for ( var p in prop ) {
@@ -105,8 +105,8 @@ jQuery.fn.extend({
 
                                                // We need to compute starting value
                                                if ( unit != "px" ) {
-                                                       self.style[ name ] = end + unit;
-                                                       start = (end / e.cur(true)) * start;
+                                                       self.style[ name ] = (end || 1) + unit;
+                                                       start = ((end || 1) / e.cur(true)) * start;
                                                        self.style[ name ] = start + unit;
                                                }
 
@@ -126,7 +126,7 @@ jQuery.fn.extend({
        },
        
        queue: function(type, fn){
-               if ( jQuery.isFunction(type) ) {
+               if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) {
                        fn = type;
                        type = "fx";
                }
@@ -162,6 +162,8 @@ var queue = function( elem, type, array ) {
        if ( !elem )
                return;
 
+       type = type || "fx";
+
        var q = jQuery.data( elem, type + "queue" );
 
        if ( !q || array )
@@ -201,7 +203,8 @@ jQuery.extend({
                // Queueing
                opt.old = opt.complete;
                opt.complete = function(){
-                       jQuery(this).dequeue();
+                       if ( opt.queue !== false )
+                               jQuery(this).dequeue();
                        if ( jQuery.isFunction( opt.old ) )
                                opt.old.apply( this );
                };
@@ -219,6 +222,7 @@ jQuery.extend({
        },
        
        timers: [],
+       timerId: null,
 
        fx: function( elem, options, prop ){
                this.options = options;
@@ -250,8 +254,8 @@ jQuery.fx.prototype = {
                if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null )
                        return this.elem[ this.prop ];
 
-               var r = parseFloat(jQuery.curCSS(this.elem, this.prop, force));
-               return r && r > -10000 ? r : parseFloat(jQuery.css(this.elem, this.prop)) || 0;
+               var r = parseFloat(jQuery.css(this.elem, this.prop, force));
+               return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
        },
 
        // Start an animation from one number to another
@@ -273,16 +277,18 @@ jQuery.fx.prototype = {
 
                jQuery.timers.push(t);
 
-               if ( jQuery.timers.length == 1 ) {
-                       var timer = setInterval(function(){
+               if ( jQuery.timerId == null ) {
+                       jQuery.timerId = setInterval(function(){
                                var timers = jQuery.timers;
                                
                                for ( var i = 0; i < timers.length; i++ )
                                        if ( !timers[i]() )
                                                timers.splice(i--, 1);
 
-                               if ( !timers.length )
-                                       clearInterval( timer );
+                               if ( !timers.length ) {
+                                       clearInterval( jQuery.timerId );
+                                       jQuery.timerId = null;
+                               }
                        }, 13);
                }
        },