Commit 1878885f authored by timmywil's avatar timmywil

Animation state is tracked on toggled/stopped animations using the private...

Animation state is tracked on toggled/stopped animations using the private data cache. Fixes #8685. See full commit message for more. Fixes #6641.

- Example: http://jsfiddle.net/timmywil/gqZL5/24/

- http://bugs.jquery.com/ticket/8685

- Check the completed timer has not been removed already so other timers do not get accidentally removed. Fixes #6641.

- Style edits, code reductions, and optimizations for the effects module
parent 92405d4f
This diff is collapsed.
...@@ -4,15 +4,15 @@ function handleQueueMarkDefer( elem, type, src ) { ...@@ -4,15 +4,15 @@ function handleQueueMarkDefer( elem, type, src ) {
var deferDataKey = type + "defer", var deferDataKey = type + "defer",
queueDataKey = type + "queue", queueDataKey = type + "queue",
markDataKey = type + "mark", markDataKey = type + "mark",
defer = jQuery.data( elem, deferDataKey, undefined, true ); defer = jQuery._data( elem, deferDataKey );
if ( defer && if ( defer &&
( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) && ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) { ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
// Give room for hard-coded callbacks to fire first // Give room for hard-coded callbacks to fire first
// and eventually mark/queue something else on the element // and eventually mark/queue something else on the element
setTimeout( function() { setTimeout( function() {
if ( !jQuery.data( elem, queueDataKey, undefined, true ) && if ( !jQuery._data( elem, queueDataKey ) &&
!jQuery.data( elem, markDataKey, undefined, true ) ) { !jQuery._data( elem, markDataKey ) ) {
jQuery.removeData( elem, deferDataKey, true ); jQuery.removeData( elem, deferDataKey, true );
defer.resolve(); defer.resolve();
} }
...@@ -25,7 +25,7 @@ jQuery.extend({ ...@@ -25,7 +25,7 @@ jQuery.extend({
_mark: function( elem, type ) { _mark: function( elem, type ) {
if ( elem ) { if ( elem ) {
type = (type || "fx") + "mark"; type = (type || "fx") + "mark";
jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true ); jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
} }
}, },
...@@ -38,9 +38,9 @@ jQuery.extend({ ...@@ -38,9 +38,9 @@ jQuery.extend({
if ( elem ) { if ( elem ) {
type = type || "fx"; type = type || "fx";
var key = type + "mark", var key = type + "mark",
count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 ); count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
if ( count ) { if ( count ) {
jQuery.data( elem, key, count, true ); jQuery._data( elem, key, count );
} else { } else {
jQuery.removeData( elem, key, true ); jQuery.removeData( elem, key, true );
handleQueueMarkDefer( elem, type, "mark" ); handleQueueMarkDefer( elem, type, "mark" );
...@@ -49,13 +49,15 @@ jQuery.extend({ ...@@ -49,13 +49,15 @@ jQuery.extend({
}, },
queue: function( elem, type, data ) { queue: function( elem, type, data ) {
var q;
if ( elem ) { if ( elem ) {
type = (type || "fx") + "queue"; type = (type || "fx") + "queue";
var q = jQuery.data( elem, type, undefined, true ); q = jQuery._data( elem, type );
// Speed up dequeue by getting out quickly if this is just a lookup // Speed up dequeue by getting out quickly if this is just a lookup
if ( data ) { if ( data ) {
if ( !q || jQuery.isArray(data) ) { if ( !q || jQuery.isArray(data) ) {
q = jQuery.data( elem, type, jQuery.makeArray(data), true ); q = jQuery._data( elem, type, jQuery.makeArray(data) );
} else { } else {
q.push( data ); q.push( data );
} }
...@@ -68,8 +70,7 @@ jQuery.extend({ ...@@ -68,8 +70,7 @@ jQuery.extend({
type = type || "fx"; type = type || "fx";
var queue = jQuery.queue( elem, type ), var queue = jQuery.queue( elem, type ),
fn = queue.shift(), fn = queue.shift();
defer;
// If the fx queue is dequeued, always remove the progress sentinel // If the fx queue is dequeued, always remove the progress sentinel
if ( fn === "inprogress" ) { if ( fn === "inprogress" ) {
...@@ -84,7 +85,7 @@ jQuery.extend({ ...@@ -84,7 +85,7 @@ jQuery.extend({
} }
fn.call(elem, function() { fn.call(elem, function() {
jQuery.dequeue(elem, type); jQuery.dequeue( elem, type );
}); });
} }
...@@ -121,7 +122,7 @@ jQuery.fn.extend({ ...@@ -121,7 +122,7 @@ jQuery.fn.extend({
// Based off of the plugin by Clint Helfers, with permission. // Based off of the plugin by Clint Helfers, with permission.
// http://blindsignals.com/index.php/2009/07/jquery-delay/ // http://blindsignals.com/index.php/2009/07/jquery-delay/
delay: function( time, type ) { delay: function( time, type ) {
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
type = type || "fx"; type = type || "fx";
return this.queue( type, function() { return this.queue( type, function() {
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment