jquery core: closes #3541. Added isArray.
[jquery.git] / src / fx.js
index b9ca81e..cbf067f 100644 (file)
--- a/src/fx.js
+++ b/src/fx.js
@@ -45,26 +45,6 @@ jQuery.fn.extend({
                                });
        },
 
-       slideDown: function(speed,callback){
-               return this.animate({height: "show"}, speed, callback);
-       },
-
-       slideUp: function(speed,callback){
-               return this.animate({height: "hide"}, speed, callback);
-       },
-
-       slideToggle: function(speed, callback){
-               return this.animate({height: "toggle"}, speed, callback);
-       },
-
-       fadeIn: function(speed, callback){
-               return this.animate({opacity: "show"}, speed, callback);
-       },
-
-       fadeOut: function(speed, callback){
-               return this.animate({opacity: "hide"}, speed, callback);
-       },
-
        fadeTo: function(speed,to,callback){
                return this.animate({opacity: to}, speed, callback);
        },
@@ -75,13 +55,14 @@ jQuery.fn.extend({
                return this[ optall.queue === false ? "each" : "queue" ](function(){
                
                        var opt = jQuery.extend({}, optall), p,
-                               hidden = this.nodeType != 1 ? false : jQuery(this).is(":hidden"), self = this;
+                               hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
+                               self = this;
        
                        for ( p in prop ) {
                                if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
                                        return opt.complete.call(this);
 
-                               if ( p == "height" || p == "width" ) {
+                               if ( ( p == "height" || p == "width" ) && this.style ) {
                                        // Store display property
                                        opt.display = jQuery.css(this, "display");
 
@@ -131,7 +112,7 @@ jQuery.fn.extend({
        },
 
        queue: function(type, fn){
-               if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) {
+               if ( jQuery.isFunction(type) || jQuery.isArray(type) ) {
                        fn = type;
                        type = "fx";
                }
@@ -140,7 +121,7 @@ jQuery.fn.extend({
                        return queue( this[0], type );
 
                return this.each(function(){
-                       if ( fn.constructor == Array )
+                       if ( jQuery.isArray(fn) )
                                queue(this, type, fn);
                        else {
                                queue(this, type).push( fn );
@@ -177,6 +158,19 @@ jQuery.fn.extend({
 
 });
 
+// Generate shortcuts for custom animations
+jQuery.each({
+       slideDown: { height:"show" },
+       slideUp: { height: "hide" },
+       slideToggle: { height: "toggle" },
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" }
+}, function( name, props ){
+       jQuery.fn[ name ] = function( speed, callback ){
+               return this.animate( props, speed, callback );
+       };
+});
+
 var queue = function( elem, type, array ) {
        if ( elem ){
 
@@ -214,9 +208,8 @@ jQuery.extend({
                        easing: fn && easing || easing && easing.constructor != Function && easing
                };
 
-               opt.duration = (opt.duration && opt.duration.constructor == Number ?
-                       opt.duration :
-                       jQuery.fx.speeds[opt.duration]) || jQuery.fx.speeds.def;
+               opt.duration = jQuery.fx.off ? 0 : typeof opt.duration == 'number' ? opt.duration :
+                       jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
 
                // Queueing
                opt.old = opt.complete;
@@ -263,7 +256,7 @@ jQuery.fx.prototype = {
                (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
 
                // Set display property to block for height/width animations
-               if ( this.prop == "height" || this.prop == "width" )
+               if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
                        this.elem.style.display = "block";
        },
 
@@ -284,7 +277,6 @@ jQuery.fx.prototype = {
                this.unit = unit || this.unit || "px";
                this.now = this.start;
                this.pos = this.state = 0;
-               this.update();
 
                var self = this;
                function t(gotoEnd){
@@ -295,7 +287,7 @@ jQuery.fx.prototype = {
 
                jQuery.timers.push(t);
 
-               if ( jQuery.timerId == null ) {
+               if ( t() && jQuery.timerId == null ) {
                        jQuery.timerId = setInterval(function(){
                                var timers = jQuery.timers;
 
@@ -343,7 +335,7 @@ jQuery.fx.prototype = {
        step: function(gotoEnd){
                var t = now();
 
-               if ( gotoEnd || t > this.options.duration + this.startTime ) {
+               if ( gotoEnd || t >= this.options.duration + this.startTime ) {
                        this.now = this.end;
                        this.pos = this.state = 1;
                        this.update();
@@ -403,23 +395,19 @@ jQuery.extend( jQuery.fx, {
                slow: 600,
                fast: 200,
                // Default speed
-               def: 400
+               _default: 400
        },
        step: {
-               scrollLeft: function(fx){
-                       fx.elem.scrollLeft = fx.now;
-               },
-
-               scrollTop: function(fx){
-                       fx.elem.scrollTop = fx.now;
-               },
 
                opacity: function(fx){
                        jQuery.attr(fx.elem.style, "opacity", fx.now);
                },
 
                _default: function(fx){
-                       ( fx.elem.style && ( fx.elem.style[ fx.prop ] = fx.now + fx.unit ) ) || ( fx.elem[ fx.prop ] = fx.now );
+                       if( fx.prop in fx.elem ) 
+                               fx.elem[ fx.prop ] = fx.now;
+                       else if( fx.elem.style )
+                               fx.elem.style[ fx.prop ] = fx.now + fx.unit;
                }
        }
 });