Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: shesek/jquery
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: master
Choose a base ref
...
head repository: shesek/jquery
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 1.7/enhancement_8685
Choose a head ref
  • 7 commits
  • 3 files changed
  • 2 contributors

Commits on Jul 13, 2011

  1. Copy the full SHA
    fa0a33a View commit details
  2. Animation state is tracked on toggled/stopped animations using the pr…

    …ivate data cache. Tests added. Fixes #8685.
    
    - Example: http://jsfiddle.net/timmywil/gqZL5/17/
    
    - http://bugs.jquery.com/ticket/8685
    timmywil authored and timmywil committed Jul 13, 2011
    Copy the full SHA
    0a2181d View commit details
  3. Remove unnecessary var in queue.js

    timmywil authored and timmywil committed Jul 13, 2011
    Copy the full SHA
    a693892 View commit details
  4. Remove unnecessary var in effects

    timmywil authored and timmywil committed Jul 13, 2011
    Copy the full SHA
    c3dd4b2 View commit details
  5. Show an element before starting an animation to account for duration …

    …0 or fx.off animations. Fixes #8892.
    timmywil committed Jul 13, 2011
    Copy the full SHA
    19b949c View commit details
  6. Check the completed timer has not been removed already so other timer…

    …s do not get accidentally removed. Fixes #6641.
    timmywil committed Jul 13, 2011
    Copy the full SHA
    9aa1572 View commit details

Commits on Jul 18, 2011

  1. Revert "Show an element before starting an animation to account for d…

    …uration 0 or fx.off animations. Fixes #8892."
    
    This reverts commit 19b949c.
    
    - Show needs to be called after the first tick to avoid flashes.
    timmywil committed Jul 18, 2011
    Copy the full SHA
    bfc1262 View commit details
Showing with 248 additions and 162 deletions.
  1. +87 −57 src/effects.js
  2. +15 −14 src/queue.js
  3. +146 −91 test/unit/effects.js
144 changes: 87 additions & 57 deletions src/effects.js
Original file line number Diff line number Diff line change
@@ -120,7 +120,7 @@ jQuery.fn.extend({
},

animate: function( prop, speed, easing, callback ) {
var optall = jQuery.speed(speed, easing, callback);
var optall = jQuery.speed( speed, easing, callback );

if ( jQuery.isEmptyObject( prop ) ) {
return this.each( optall.complete, [ false ] );
@@ -140,9 +140,9 @@ jQuery.fn.extend({
var opt = jQuery.extend( {}, optall ),
isElement = this.nodeType === 1,
hidden = isElement && jQuery(this).is(":hidden"),
name, val, p,
display, e,
parts, start, end, unit;
name, val, p, e,
parts, start, end, unit,
method;

// will store per property easing and be used to determine when an animation is complete
opt.animatedProperties = {};
@@ -178,25 +178,17 @@ jQuery.fn.extend({
opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];

// Set display property to inline-block for height/width
// animations on inline elements that are having width/height
// animated
// animations on inline elements that are having width/height animated
if ( jQuery.css( this, "display" ) === "inline" &&
jQuery.css( this, "float" ) === "none" ) {
if ( !jQuery.support.inlineBlockNeedsLayout ) {

// inline-level elements accept inline-block;
// block-level elements need to be inline with layout
if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
this.style.display = "inline-block";

} else {
display = defaultDisplay( this.nodeName );

// inline-level elements accept inline-block;
// block-level elements need to be inline with layout
if ( display === "inline" ) {
this.style.display = "inline-block";

} else {
this.style.display = "inline";
this.style.zoom = 1;
}
this.style.zoom = 1;
}
}
}
@@ -210,8 +202,16 @@ jQuery.fn.extend({
e = new jQuery.fx( this, opt, p );
val = prop[ p ];

if ( rfxtypes.test(val) ) {
e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
if ( rfxtypes.test( val ) ) {
// Tracks whether to show or hide based on private
// data attached to the element
method = jQuery._data( this, "toggle" + p ) || (val === "toggle" ? hidden ? "show" : "hide" : 0);
if ( method ) {
jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
e[ method ]();
} else {
e[ val ]();
}

} else {
parts = rfxnum.exec( val );
@@ -254,18 +254,21 @@ jQuery.fn.extend({
this.each(function() {
var timers = jQuery.timers,
i = timers.length;

// clear marker counters if we know they won't be
if ( !gotoEnd ) {
jQuery._unmark( true, this );
}
while ( i-- ) {
if ( timers[i].elem === this ) {
if (gotoEnd) {
if ( timers[ i ].elem === this ) {
if ( gotoEnd ) {
// force the next step to be the last
timers[i](true);
timers[ i ]( true );
} else {
timers[ i ].saveState();
}

timers.splice(i, 1);
timers.splice( i, 1 );
}
}
});
@@ -294,7 +297,7 @@ function clearFxNow() {
function genFx( type, num ) {
var obj = {};

jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
obj[ this ] = type;
});

@@ -303,9 +306,9 @@ function genFx( type, num ) {

// Generate shortcuts for custom animations
jQuery.each({
slideDown: genFx("show", 1),
slideUp: genFx("hide", 1),
slideToggle: genFx("toggle", 1),
slideDown: genFx( "show", 1 ),
slideUp: genFx( "hide", 1 ),
slideToggle: genFx( "toggle", 1 ),
fadeIn: { opacity: "show" },
fadeOut: { opacity: "hide" },
fadeToggle: { opacity: "toggle" }
@@ -317,15 +320,15 @@ jQuery.each({

jQuery.extend({
speed: function( speed, easing, fn ) {
var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
complete: fn || !fn && easing ||
jQuery.isFunction( speed ) && speed,
duration: speed,
easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
};

opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;

// Queueing
opt.old = opt.complete;
@@ -372,12 +375,12 @@ jQuery.fx.prototype = {
this.options.step.call( this.elem, this.now, this );
}

(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
(jQuery.fx.step[ this.prop ] || jQuery.fx.step._default)( this );
},

// Get the current size
cur: function() {
if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
return this.elem[ this.prop ];
}

@@ -396,17 +399,21 @@ jQuery.fx.prototype = {
raf;

this.startTime = fxNow || createFxNow();
this.start = from;
this.end = to;
this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
this.now = this.start;
this.now = this.start = from;
this.pos = this.state = 0;
this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );

function t( gotoEnd ) {
return self.step(gotoEnd);
return self.step( gotoEnd );
}

t.elem = this.elem;
t.saveState = function() {
if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
jQuery._data( self.elem, "fxshow" + self.prop, self.start );
}
};

if ( t() && jQuery.timers.push(t) && !timerId ) {
// Use requestAnimationFrame instead of setInterval if available
@@ -428,14 +435,20 @@ jQuery.fx.prototype = {

// Simple 'show' function
show: function() {
var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );

// Remember where we started, so that we can go back to it later
this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
this.options.show = true;

// Begin the animation
// Make sure that we start at a small width/height to avoid any
// flash of content
this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
// Make sure that we start at a small width/height to avoid any flash of content
if ( dataShow !== undefined ) {
// This show is picking up where a previous hide or show left off
this.custom( this.cur(), dataShow );
} else {
this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
}

// Start by showing the element
jQuery( this.elem ).show();
@@ -444,11 +457,11 @@ jQuery.fx.prototype = {
// Simple 'hide' function
hide: function() {
// Remember where we started, so that we can go back to it later
this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
this.options.hide = true;

// Begin the animation
this.custom(this.cur(), 0);
this.custom( this.cur(), 0 );
},

// Each step of an animation
@@ -457,7 +470,7 @@ jQuery.fx.prototype = {
done = true,
elem = this.elem,
options = this.options,
i, n;
p, n;

if ( gotoEnd || t >= options.duration + this.startTime ) {
this.now = this.end;
@@ -466,8 +479,8 @@ jQuery.fx.prototype = {

options.animatedProperties[ this.prop ] = true;

for ( i in options.animatedProperties ) {
if ( options.animatedProperties[i] !== true ) {
for ( p in options.animatedProperties ) {
if ( options.animatedProperties[ p ] !== true ) {
done = false;
}
}
@@ -476,20 +489,23 @@ jQuery.fx.prototype = {
// Reset the overflow
if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {

jQuery.each( [ "", "X", "Y" ], function (index, value) {
elem.style[ "overflow" + value ] = options.overflow[index];
jQuery.each( [ "", "X", "Y" ], function( index, value ) {
elem.style[ "overflow" + value ] = options.overflow[ index ];
});
}

// Hide the element if the "hide" operation was done
if ( options.hide ) {
jQuery(elem).hide();
jQuery( elem ).hide();
}

// Reset the properties, if the item has been hidden or shown
if ( options.hide || options.show ) {
for ( var p in options.animatedProperties ) {
jQuery.style( elem, p, options.orig[p] );
for ( p in options.animatedProperties ) {
jQuery.style( elem, p, options.orig[ p ] );
jQuery.removeData( elem, "fxshow" + p, true );
// Toggle data is no longer needed
jQuery.removeData( elem, "toggle" + p, true );
}
}

@@ -508,8 +524,8 @@ jQuery.fx.prototype = {
this.state = n / options.duration;

// Perform the easing function, defaults to swing
this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
this.now = this.start + ((this.end - this.start) * this.pos);
this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
this.now = this.start + ( (this.end - this.start) * this.pos );
}
// Perform the next step of the animation
this.update();
@@ -521,9 +537,15 @@ jQuery.fx.prototype = {

jQuery.extend( jQuery.fx, {
tick: function() {
for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
if ( !timers[i]() ) {
timers.splice(i--, 1);
var timer,
timers = jQuery.timers,
i = 0;

for ( ; i < timers.length; i++ ) {
timer = timers[ i ];
// Checks the timer has not already been removed
if ( !timer() && timers[ i ] === timer ) {
timers.splice( i--, 1 );
}
}

@@ -553,14 +575,22 @@ jQuery.extend( jQuery.fx, {

_default: function( fx ) {
if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
fx.elem.style[ fx.prop ] = fx.now + fx.unit;
} else {
fx.elem[ fx.prop ] = fx.now;
}
}
}
});

// Adds width/height step functions
// Do not set anything below 0
jQuery.each([ "width", "height" ], function( i, prop ) {
jQuery.fx.step[ prop ] = function( fx ) {
jQuery.style( fx.elem, prop, Math.max(0, fx.now) );
};
});

if ( jQuery.expr && jQuery.expr.filters ) {
jQuery.expr.filters.animated = function( elem ) {
return jQuery.grep(jQuery.timers, function( fn ) {
Loading