From d857315967a1cc07b73924bbdf2eb12f4f910c45 Mon Sep 17 00:00:00 2001 From: Yehuda Katz Date: Sun, 12 Jul 2009 15:14:01 +0000 Subject: [PATCH] Add clearQueue for clearing non-fx queues --- src/data.js | 5 ++- test/unit/data.js | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 101 insertions(+), 2 deletions(-) diff --git a/src/data.js b/src/data.js index e429c0d..8c79c21 100644 --- a/src/data.js +++ b/src/data.js @@ -93,7 +93,7 @@ jQuery.extend({ if( fn !== undefined ) fn.call(elem, function() { jQuery(elem).dequeue(type); }); - } + }, }); jQuery.fn.extend({ @@ -141,5 +141,8 @@ jQuery.fn.extend({ return this.each(function(){ jQuery.dequeue( this, type ); }); + }, + clearQueue: function(type){ + return this.queue( type, [] ); } }); \ No newline at end of file diff --git a/test/unit/data.js b/test/unit/data.js index 3389ef3..5d390e1 100644 --- a/test/unit/data.js +++ b/test/unit/data.js @@ -159,7 +159,7 @@ test("queue() with other types",function() { $div.removeData(); }); -test("queue() passes in the next item in the queue as a parameter", function() { +test("queue(name) passes in the next item in the queue as a parameter", function() { expect(2); var div = jQuery({}); @@ -178,4 +178,100 @@ test("queue() passes in the next item in the queue as a parameter", function() { div.dequeue("foo"); div.removeData(); +}); + + expect(1); + + var div = jQuery({}); + var counter = 0; + + div.queue("foo", function(next) { + counter++; + jQuery(this).clearQueue("foo"); + next(); + }).queue("foo", function(next) { + counter++; + }); + + div.dequeue("foo"); + + equals(counter, 1, "the queue was cleared"); +test("queue(name) passes in the next item in the queue as a parameter", function() { + expect(2); + + var div = jQuery({}); + var counter = 0; + + div.queue("foo", function(next) { + equals(++counter, 1, "Dequeueing"); + next(); + }).queue("foo", function(next) { + equals(++counter, 2, "Next was called"); + next(); + }).queue("bar", function() { + equals(++counter, 3, "Other queues are not triggered by next()") + }); + + div.dequeue("foo"); + + div.removeData(); +}); + +test("queue() passes in the next item in the queue as a parameter to fx queues", function() { + expect(2); + + var div = jQuery({}); + var counter = 0; + + div.queue(function(next) { + equals(++counter, 1, "Dequeueing"); + next(); + }).queue(function(next) { + equals(++counter, 2, "Next was called"); + next(); + }).queue(function() { + equals(++counter, 3, "Other queues are not triggered by next()") + }); + + div.dequeue(); + + div.removeData(); +}); + +test("clearQueue(name) clears the queue", function() { + expect(1); + + var div = jQuery({}); + var counter = 0; + + div.queue("foo", function(next) { + counter++; + jQuery(this).clearQueue("foo"); + next(); + }).queue("foo", function(next) { + counter++; + }); + + div.dequeue("foo"); + + equals(counter, 1, "the queue was cleared"); +}); + +test("clearQueue() clears the fx queue", function() { + expect(1); + + var div = jQuery({}); + var counter = 0; + + div.queue(function(next) { + counter++; + jQuery(this).clearQueue(); + next(); + }).queue(function(next) { + counter++; + }); + + div.dequeue(); + + equals(counter, 1, "the queue was cleared"); }) -- 1.7.10.4