Fix #10754. Have jQuery.swap() return the value of its callback.

This commit is contained in:
Mike Sherov 2011-12-06 16:23:22 -05:00 committed by Dave Methvin
parent 0fcfac7568
commit 2c1d2b1a4d

View File

@ -140,20 +140,23 @@ jQuery.extend({
// A method for quickly swapping in/out CSS properties to get correct calculations // A method for quickly swapping in/out CSS properties to get correct calculations
swap: function( elem, options, callback ) { swap: function( elem, options, callback ) {
var old = {}; var old = {},
ret, name;
// Remember the old values, and insert the new ones // Remember the old values, and insert the new ones
for ( var name in options ) { for ( name in options ) {
old[ name ] = elem.style[ name ]; old[ name ] = elem.style[ name ];
elem.style[ name ] = options[ name ]; elem.style[ name ] = options[ name ];
} }
callback.call( elem ); ret = callback.call( elem );
// Revert the old values // Revert the old values
for ( name in options ) { for ( name in options ) {
elem.style[ name ] = old[ name ]; elem.style[ name ] = old[ name ];
} }
return ret;
} }
}); });
@ -163,18 +166,14 @@ jQuery.curCSS = jQuery.css;
jQuery.each(["height", "width"], function( i, name ) { jQuery.each(["height", "width"], function( i, name ) {
jQuery.cssHooks[ name ] = { jQuery.cssHooks[ name ] = {
get: function( elem, computed, extra ) { get: function( elem, computed, extra ) {
var val;
if ( computed ) { if ( computed ) {
if ( elem.offsetWidth !== 0 ) { if ( elem.offsetWidth !== 0 ) {
return getWH( elem, name, extra ); return getWH( elem, name, extra );
} else { } else {
jQuery.swap( elem, cssShow, function() { return jQuery.swap( elem, cssShow, function() {
val = getWH( elem, name, extra ); return getWH( elem, name, extra );
}); });
} }
return val;
} }
}, },
@ -243,15 +242,13 @@ jQuery(function() {
get: function( elem, computed ) { get: function( elem, computed ) {
// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
// Work around by temporarily setting element display to inline-block // Work around by temporarily setting element display to inline-block
var ret; return jQuery.swap( elem, { "display": "inline-block" }, function() {
jQuery.swap( elem, { "display": "inline-block" }, function() {
if ( computed ) { if ( computed ) {
ret = curCSS( elem, "margin-right", "marginRight" ); return curCSS( elem, "margin-right", "marginRight" );
} else { } else {
ret = elem.style.marginRight; return elem.style.marginRight;
} }
}); });
return ret;
} }
}; };
} }