From 29aa1048bc90526bfa2d68cbdaee8c6cc64dacfe Mon Sep 17 00:00:00 2001 From: John Guidry Date: Tue, 30 Sep 2014 23:10:23 -0500 Subject: [PATCH] Fix Set.animate callback --- src/set.js | 3 ++- test/set.js | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/set.js b/src/set.js index 76e41cf..e822587 100644 --- a/src/set.js +++ b/src/set.js @@ -127,8 +127,9 @@ Snap.plugin(function (Snap, Element, Paper, glob) { } }, cb = 0, + set = this, callbacker = callback && function () { - if (cb++ == this.length) { + if (++cb == set.length) { callback.call(this); } }; diff --git a/test/set.js b/test/set.js index f83c638..f63cb76 100644 --- a/test/set.js +++ b/test/set.js @@ -6,6 +6,60 @@ describe("Set methods", function () { afterEach(function () { s.remove(); }); + it("Set.animate", function(done) { + var circle = s.circle(10, 20, 30); + var square = s.rect(60, 60, 30, 30); + var set = Snap.set(circle, square); + var result = set.animate({opacity: .5}, 10); + setTimeout(function() { + result.forEach(function (el) { + var o = el.attr("opacity"); + expect(o).to.be("0.5"); + }); + done(); + }, 50); + expect(result).to.be(set); + }); + it("Set.animate - with callback", function(done) { + var circle = s.circle(10, 20, 30); + var square = s.rect(60, 60, 30, 30); + var set = Snap.set(circle, square); + var result = set.animate({opacity: .5}, 10, function() { + result.forEach(function (el) { + var o = el.attr("opacity"); + expect(o).to.be("0.5"); + }); + done(); + }); + expect(result).to.be(set); + }); + it("Set.animate - with easing", function(done) { + var circle = s.circle(10, 20, 30); + var square = s.rect(60, 60, 30, 30); + var set = Snap.set(circle, square); + var result = set.animate({opacity: .5}, 10, mina.easein); + setTimeout(function() { + result.forEach(function (el) { + var o = el.attr("opacity"); + expect(o).to.be("0.5"); + }); + done(); + }, 50); + expect(result).to.be(set); + }); + it("Set.animate - with callback & easing", function(done) { + var circle = s.circle(10, 20, 30); + var square = s.rect(60, 60, 30, 30); + var set = Snap.set(circle, square); + var result = set.animate({opacity: .5}, 10, mina.easeout, function() { + result.forEach(function (el) { + var o = el.attr("opacity"); + expect(o).to.be("0.5"); + }); + done(); + }); + expect(result).to.be(set); + }); it("Set.clear", function() { var rect1 = s.rect(10, 20, 30, 40); var rect2 = s.rect(10, 20, 30, 40);