aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorlouisremi <louisremi@louisremi-laptop.(none)>2011-04-15 14:44:55 +0200
committerlouisremi <louisremi@louisremi-laptop.(none)>2011-04-15 14:44:55 +0200
commiteccf15be6cfee8b567785ba29cc8841b1b0c2ef1 (patch)
tree6b09ee23caabfd8bffb903d95db26bea751723ea /src
parent7dc707042692398392bd910b01f3a6aab81a90a0 (diff)
parent8e1467f97eb8facb6677663794eb159eb8fedaab (diff)
downloadjquery-eccf15be6cfee8b567785ba29cc8841b1b0c2ef1.tar.gz
jquery-eccf15be6cfee8b567785ba29cc8841b1b0c2ef1.zip
- merge master
- move private functions at the bottom - remove duplicate code - move more var at the top of their scope - rewrite a loop to be more efficient
Diffstat (limited to 'src')
-rw-r--r--src/css.js46
-rw-r--r--src/effects.js137
2 files changed, 116 insertions, 67 deletions
diff --git a/src/css.js b/src/css.js
index c5c01ecac..9db659967 100644
--- a/src/css.js
+++ b/src/css.js
@@ -9,6 +9,7 @@ var ralpha = /alpha\([^)]*\)/i,
rnum = /^-?\d/,
rrelNum = /^[+\-]=/,
rrelNumFilter = /[^+\-\.\de]+/g,
+ rinputbutton = /input|button/i,
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
cssWidth = [ "Left", "Right" ],
@@ -338,24 +339,45 @@ curCSS = getComputedStyle || currentStyle;
function getWH( elem, name, extra ) {
var which = name === "width" ? cssWidth : cssHeight,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+ cur = curCSS( elem, name ),
+
+ // We're addressing the way Firefox handles certain inputs and buttons,
+ // offsetWidth/height actually returns a normal width/height
+ boxSizing = rinputbutton.test( elem.nodeName ) &&
+ ( curCSS( elem, "-moz-box-sizing" ) === "border-box" ||
+ curCSS( elem, "box-sizing" ) === "border-box" );
+
+ // IE will return auto if we try to grab a width/height that is not set
+ if ( boxSizing || cur === "auto" ) {
+ cur = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+ }
- if ( extra === "border" ) {
- return val;
+ // Make sure that IE7 returns the correct computed value for display
+ if ( name === "height" ) {
+ elem.offsetHeight;
}
+
+ var val = parseFloat( cur ) || 0;
- jQuery.each( which, function() {
- if ( !extra ) {
- val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
- }
+ if ( extra ) {
+ for ( var i = 0, len = which.length; i < len ; i++ ) {
+ var dir = which[i];
- if ( extra === "margin" ) {
- val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
+ // outerWidth/height
+ if ( extra === "border" || extra === "margin" ) {
+ val += parseFloat(jQuery.css( elem, "border" + dir + "Width" )) || 0;
+ val += parseFloat(jQuery.css( elem, "padding" + dir )) || 0;
- } else {
- val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
+ if ( extra == "margin" ) {
+ val += parseFloat(jQuery.css( elem, "margin" + dir )) || 0;
+ }
+
+ // innerWidth/height
+ } else {
+ val += parseFloat(jQuery.css( elem, "padding" + dir )) || 0;
+ }
}
- });
+ }
return val;
}
diff --git a/src/effects.js b/src/effects.js
index d19f8f61f..80391d89c 100644
--- a/src/effects.js
+++ b/src/effects.js
@@ -1,6 +1,8 @@
(function( jQuery ) {
var elemdisplay = {},
+ iframe = null,
+ iframeDoc = null,
rfxtypes = /^(?:toggle|show|hide)$/,
rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
timerId,
@@ -17,46 +19,6 @@ var elemdisplay = {},
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame;
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout( clearFxNow, 0 );
- return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
- fxNow = undefined;
-}
-
-// Try to restore the default display value of an element
-// fails if a display rule has been set for this element, e.g. div { display: inline; }
-function defaultDisplay( nodeName ) {
- if ( !elemdisplay[ nodeName ] ) {
- var elem = jQuery("<" + nodeName + ">").appendTo("body"),
- display = elem.css("display");
-
- elem.remove();
-
- if ( display === "none" || display === "" ) {
- display = "block";
- }
-
- elemdisplay[ nodeName ] = display;
- }
-
- return elemdisplay[ nodeName ];
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
- var obj = {};
-
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
- obj[ this ] = type;
- });
-
- return obj;
-}
-
jQuery.fn.extend({
show: function( speed, easing, callback ) {
var elem, display;
@@ -166,7 +128,6 @@ jQuery.fn.extend({
var opt = jQuery.extend({}, optall),
isElement = this.nodeType === 1,
hidden = isElement && jQuery(this).is(":hidden"),
- self = this,
name, val, p,
easing, display, e,
parts, start, end, unit;
@@ -187,10 +148,6 @@ jQuery.fn.extend({
val = prop[p];
if ( val === "hide" && hidden || val === "show" && !hidden ) {
- return opt.complete.call(self);
- }
-
- if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
return opt.complete.call(this);
}
@@ -240,7 +197,7 @@ jQuery.fn.extend({
}
for ( p in prop ) {
- e = new jQuery.fx( self, opt, p );
+ e = new jQuery.fx( this, opt, p );
val = prop[p];
@@ -257,9 +214,9 @@ jQuery.fn.extend({
// We need to compute starting value
if ( unit !== "px" ) {
- jQuery.style( self, p, (end || 1) + unit);
+ jQuery.style( this, p, (end || 1) + unit);
start = ((end || 1) / e.cur()) * start;
- jQuery.style( self, p, start + unit);
+ jQuery.style( this, p, start + unit);
}
// If a +=/-= token was provided, we're doing a relative animation
@@ -470,7 +427,8 @@ jQuery.fx.prototype = {
var t = fxNow || createFxNow(),
done = true,
elem = this.elem,
- options = this.options;
+ options = this.options,
+ i, n;
if ( gotoEnd || t >= options.duration + this.startTime ) {
this.now = this.end;
@@ -479,7 +437,7 @@ jQuery.fx.prototype = {
options.animatedProperties[ this.prop ] = true;
- for ( var i in options.animatedProperties ) {
+ for ( i in options.animatedProperties ) {
if ( options.animatedProperties[i] !== true ) {
done = false;
}
@@ -517,7 +475,7 @@ jQuery.fx.prototype = {
if ( options.duration == Infinity ) {
this.now = t;
} else {
- var n = t - this.startTime;
+ n = t - this.startTime;
this.state = n / options.duration;
// Perform the easing function, defaults to swing
@@ -534,11 +492,11 @@ jQuery.fx.prototype = {
jQuery.extend( jQuery.fx, {
tick: function() {
- var timers = jQuery.timers;
-
- for ( var i = 0; i < timers.length; i++ ) {
+ var timers = jQuery.timers,
+ i = timers.length;
+ while ( i-- ) {
if ( !timers[i]() ) {
- timers.splice(i--, 1);
+ timers.splice(i, 1);
}
}
@@ -584,4 +542,73 @@ if ( jQuery.expr && jQuery.expr.filters ) {
};
}
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+ if ( !elemdisplay[ nodeName ] ) {
+
+ var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
+ display = elem.css( "display" );
+
+ elem.remove();
+
+ if ( display === "none" || display === "" ) {
+
+ // Get element's real default display by attaching it to a temp iframe
+ // Conritbutions from Louis Remi and Julian Aurbourg
+ // based on recommendation by Louis Remi
+
+ // No iframe to use yet, so create it
+ if ( !iframe ) {
+ iframe = document.createElement( "iframe" );
+ iframe.frameBorder = iframe.width = iframe.height = 0;
+ }
+
+ document.body.appendChild( iframe );
+
+ // Create a cacheable copy of the iframe document on first call.
+ // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
+ // document to it, Webkit & Firefox won't allow reusing the iframe document
+ if ( !iframeDoc || !iframe.createElement ) {
+ iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+ iframeDoc.write( "<!doctype><html><body></body></html>" );
+ }
+
+ elem = iframeDoc.createElement( nodeName );
+
+ iframeDoc.body.appendChild( elem );
+
+ display = jQuery.css( elem, "display" );
+
+ document.body.removeChild( iframe );
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return elemdisplay[ nodeName ];
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout( clearFxNow, 0 );
+ return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+ fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+ var obj = {};
+
+ jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+ obj[ this ] = type;
+ });
+
+ return obj;
+}
+
})( jQuery );