X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Ffx.js;h=626119bc95b8706e773d8c1d576b83cf31e61b34;hb=67ded9a36a89c5fa1b1061c283dad078a59bec8e;hp=cbf067f37f09c6228b1c59f0f3dea9e7670a57d6;hpb=325755d4b38e87b13f9c24a4c2991ec497552aad;p=jquery.git diff --git a/src/fx.js b/src/fx.js index cbf067f..626119b 100644 --- a/src/fx.js +++ b/src/fx.js @@ -1,33 +1,56 @@ +var elemdisplay = {}; + jQuery.fn.extend({ show: function(speed,callback){ - return speed ? - this.animate({ + if ( speed ) { + return this.animate({ height: "show", width: "show", opacity: "show" - }, speed, callback) : - - this.filter(":hidden").each(function(){ - this.style.display = this.oldblock || ""; - if ( jQuery.css(this,"display") == "none" ) { - var elem = jQuery("<" + this.tagName + " />").appendTo("body"); - this.style.display = elem.css("display"); - // handle an edge condition where css is - div { display:none; } or similar - if (this.style.display == "none") - this.style.display = "block"; - elem.remove(); + }, speed, callback); + } else { + for ( var i = 0, l = this.length; i < l; i++ ){ + var old = jQuery.data(this[i], "olddisplay"); + + this[i].style.display = old || ""; + + if ( jQuery.css(this[i], "display") === "none" ) { + var tagName = this[i].tagName, display; + + if ( elemdisplay[ tagName ] ) { + display = elemdisplay[ tagName ]; + } else { + var elem = jQuery("<" + this[i].tagName + " />").appendTo("body"); + + display = elem.css("display"); + if ( display === "none" ) + display = "block"; + + elem.remove(); + + elemdisplay[ this[i].tagName ] = display; + } + + this[i].style.display = jQuery.data(this[i], "olddisplay", display); } - }).end(); + } + + return this; + } }, hide: function(speed,callback){ - return speed ? - this.animate({ + if ( speed ) { + return this.animate({ height: "hide", width: "hide", opacity: "hide" - }, speed, callback) : - - this.filter(":visible").each(function(){ - this.oldblock = this.oldblock || jQuery.css(this,"display"); - this.style.display = "none"; - }).end(); + }, speed, callback); + } else { + for ( var i = 0, l = this.length; i < l; i++ ){ + var old = jQuery.data(this[i], "olddisplay"); + if ( !old && old !== "none" ) + jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display")); + this[i].style.display = "none"; + } + return this; + } }, // Save the old toggle function @@ -117,7 +140,7 @@ jQuery.fn.extend({ type = "fx"; } - if ( !type || (typeof type == "string" && !fn) ) + if ( !type || (typeof type === "string" && !fn) ) return queue( this[0], type ); return this.each(function(){ @@ -201,14 +224,14 @@ jQuery.fn.dequeue = function(type){ jQuery.extend({ speed: function(speed, easing, fn) { - var opt = speed && speed.constructor == Object ? speed : { + var opt = typeof speed === "object" ? speed : { complete: fn || !fn && easing || jQuery.isFunction( speed ) && speed, duration: speed, - easing: fn && easing || easing && easing.constructor != Function && easing + easing: fn && easing || easing && !jQuery.isFunction(easing) && easing }; - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration == 'number' ? opt.duration : + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default; // Queueing