From ed5bda3020bd418ad8edb477ad2b1fd8b313cc04 Mon Sep 17 00:00:00 2001 From: John Resig Date: Sun, 14 Jan 2007 06:22:20 +0000 Subject: [PATCH] Added in jQuery.isFunction(). --- src/ajax/ajax.js | 6 +++--- src/event/event.js | 2 +- src/fx/fx.js | 34 +++++++++++++++++----------------- src/jquery/jquery.js | 10 +++++++--- src/selector/selector.js | 2 +- 5 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/ajax/ajax.js b/src/ajax/ajax.js index c1ad22ef..66519036 100644 --- a/src/ajax/ajax.js +++ b/src/ajax/ajax.js @@ -44,7 +44,7 @@ jQuery.fn.extend({ * @cat Ajax */ load: function( url, params, callback, ifModified ) { - if ( url.constructor == Function ) + if ( jQuery.isFunction( url ) ) return this.bind("load", url); callback = callback || function(){}; @@ -55,7 +55,7 @@ jQuery.fn.extend({ // If the second parameter was provided if ( params ) // If it's a function - if ( params.constructor == Function ) { + if ( jQuery.isFunction( params.constructor ) ) { // We assume that it's the callback callback = params; params = null; @@ -273,7 +273,7 @@ jQuery.extend({ */ get: function( url, data, callback, type, ifModified ) { // shift arguments if data argument was ommited - if ( data && data.constructor == Function ) { + if ( jQuery.isFunction( data ) ) { callback = data; data = null; } diff --git a/src/event/event.js b/src/event/event.js index 702c4d33..63a8a7cb 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -88,7 +88,7 @@ jQuery.event = { // Trigger the event var val = element["on" + type].apply( element, data ); - if ( val !== false && element[ type ] && element[ type ].constructor == Function ) + if ( val !== false && jQuery.isFunction( element[ type ] ) ) element[ type ](); } }, diff --git a/src/fx/fx.js b/src/fx/fx.js index ece0cea8..e39ea7b3 100644 --- a/src/fx/fx.js +++ b/src/fx/fx.js @@ -34,7 +34,7 @@ jQuery.fn.extend({ */ show: function(speed,callback){ var hidden = this.filter(":hidden"); - speed ? + return speed ? hidden.animate({ height: "show", width: "show", opacity: "show" }, speed, callback) : @@ -44,7 +44,6 @@ jQuery.fn.extend({ if ( jQuery.css(this,"display") == "none" ) this.style.display = "block"; }); - return this; }, /** @@ -81,7 +80,7 @@ jQuery.fn.extend({ */ hide: function(speed,callback){ var visible = this.filter(":visible"); - speed ? + return speed ? visible.animate({ height: "hide", width: "hide", opacity: "hide" }, speed, callback) : @@ -92,7 +91,6 @@ jQuery.fn.extend({ this.oldblock = "block"; this.style.display = "none"; }); - return this; }, // Save the old toggle function @@ -113,7 +111,7 @@ jQuery.fn.extend({ */ toggle: function( fn, fn2 ){ var args = arguments; - return fn && fn.constructor == Function && fn2 && fn2.constructor == Function ? + return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ? this._toggle( fn, fn2 ) : this.each(function(){ jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ] @@ -359,7 +357,7 @@ jQuery.extend({ speed: function(speed, easing, fn) { var opt = speed && speed.constructor == Object ? speed : { complete: fn || !fn && easing || - speed && speed.constructor == Function && speed, + jQuery.isFunction( speed ) && speed, duration: speed, easing: fn && easing || easing && easing.constructor != Function && easing }; @@ -369,11 +367,11 @@ jQuery.extend({ { slow: 600, fast: 200 }[opt.duration]) || 400; // Queueing - opt.oldComplete = opt.complete; + opt.old = opt.complete; opt.complete = function(){ jQuery.dequeue(this, "fx"); - if ( opt.oldComplete && opt.oldComplete.constructor == Function ) - opt.oldComplete.apply( this ); + if ( jQuery.isFunction( opt.old ) ) + opt.old.apply( this ); }; return opt; @@ -411,9 +409,11 @@ jQuery.extend({ var y = elem.style; // Store display property - var oldDisplay = jQuery.css(elem, 'display'); + var oldDisplay = jQuery.css(elem, "display"); + // Set display property to block for animation y.display = "block"; + // Make sure that nothing sneaks out y.overflow = "hidden"; @@ -487,7 +487,7 @@ jQuery.extend({ // Remember where we started, so that we can go back to it later elem.orig[prop] = this.cur(); - if(oldDisplay == 'none') { + if(oldDisplay == "none") { options.show = true; // Stupid IE, look what you made me do @@ -525,16 +525,16 @@ jQuery.extend({ if ( done ) { // Reset the overflow - y.overflow = ''; + y.overflow = ""; // Reset the display y.display = oldDisplay; - if (jQuery.css(elem, 'display') == 'none') - y.display = 'block'; + if (jQuery.css(elem, "display") == "none") + y.display = "block"; // Hide the element if the "hide" operation was done if ( options.hide ) - y.display = 'none'; + y.display = "none"; // Reset the properties, if the item has been hidden or shown if ( options.hide || options.show ) @@ -542,11 +542,11 @@ jQuery.extend({ if (p == "opacity") jQuery.attr(y, p, elem.orig[p]); else - y[p] = ''; + y[p] = ""; } // If a callback was provided, execute it - if ( done && options.complete && options.complete.constructor == Function ) + if ( done && jQuery.isFunction( options.complete ) ) // Execute the complete function options.complete.apply( elem ); } else { diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 6d1fb2f9..db65cfb0 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -33,7 +33,7 @@ var jQuery = function(a,c) { // HANDLE: $(function) // Shortcut for document ready // Safari reports typeof on DOM NodeLists as a function - if ( typeof a == "function" && !a.nodeType && a[0] == undefined ) + if ( isFunction(a) && !a.nodeType && a[0] == undefined ) return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a ); // Handle HTML strings @@ -864,7 +864,7 @@ jQuery.fn = jQuery.prototype = { */ filter: function(t) { return this.pushStack( - t.constructor == Function && + isFunction( t.constructor ) && jQuery.grep(this, function(el, index){ return t.apply(el, [index]) }) || @@ -1212,6 +1212,10 @@ jQuery.extend({ $ = jQuery._$; }, + isFunction: function( fn ) { + return fn && typeof fn == "function"; + }, + /** * A generic iterator function, which can be used to seemlessly * iterate over both objects and arrays. This function is not the same @@ -1253,7 +1257,7 @@ jQuery.extend({ prop: function(elem, value, type){ // Handle executable functions - if ( value.constructor == Function ) + if ( isFunction( value ) ) return value.call( elem ); // Handle passing in a number to a CSS property diff --git a/src/selector/selector.js b/src/selector/selector.js index 08b64066..867bc4ef 100644 --- a/src/selector/selector.js +++ b/src/selector/selector.js @@ -172,7 +172,7 @@ jQuery.extend({ // If the token match was found if ( m ) { // Map it against the token's handler - r = ret = jQuery.map( ret, jQuery.token[i+1].constructor == Function ? + r = ret = jQuery.map( ret, jQuery.isFunction( jQuery.token[i+1] ) ? jQuery.token[i+1] : function(a){ return eval(jQuery.token[i+1]); });