]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix animation bug. Helpers.findNextWhere no longer returned the index of the item... 2129/head
authorEvert Timberg <evert.timberg@gmail.com>
Sun, 13 Mar 2016 16:24:33 +0000 (12:24 -0400)
committerEvert Timberg <evert.timberg@gmail.com>
Sun, 13 Mar 2016 16:24:33 +0000 (12:24 -0400)
src/core/core.animation.js
src/core/core.helpers.js

index 5e3dfa54770c84a7f67efeb67173e9b9ab7d00b5..6ab5f6c639729eb4534d4594279059435106ecb5 100644 (file)
@@ -52,11 +52,11 @@ module.exports = function(Chart) {
                },
                // Cancel the animation for a given chart instance
                cancelAnimation: function(chartInstance) {
-                       var index = helpers.findNextWhere(this.animations, function(animationWrapper) {
+                       var index = helpers.findIndex(this.animations, function(animationWrapper) {
                                return animationWrapper.chartInstance === chartInstance;
                        });
 
-                       if (index) {
+                       if (index !== -1) {
                                this.animations.splice(index, 1);
                                chartInstance.animating = false;
                        }
@@ -75,7 +75,8 @@ module.exports = function(Chart) {
                                this.dropFrames = this.dropFrames % 1;
                        }
 
-                       for (var i = 0; i < this.animations.length; i++) {
+                       var i = 0;
+                       while (i < this.animations.length) {
                                if (this.animations[i].animationObject.currentStep === null) {
                                        this.animations[i].animationObject.currentStep = 0;
                                }
@@ -98,9 +99,10 @@ module.exports = function(Chart) {
 
                                        // executed the last frame. Remove the animation.
                                        this.animations[i].chartInstance.animating = false;
+
                                        this.animations.splice(i, 1);
-                                       // Keep the index in place to offset the splice
-                                       i--;
+                               } else {
+                                       ++i;
                                }
                        }
 
index c5f884e9e02b114b8c11f965289d0ac6aa93dfab..37355f00ac3681a7e785470f04892c67b27f36b7 100644 (file)
@@ -201,6 +201,23 @@ module.exports = function(Chart) {
 
                return filtered;
        };
+       helpers.findIndex = function(arrayToSearch, callback, thisArg) {
+               var index = -1;
+               if (Array.prototype.findIndex) {
+                       index = arrayToSearch.findIndex(callback, thisArg);
+               } else {
+                       for (var i = 0; i < arrayToSearch.length; ++i) {
+                               thisArg = thisArg !== undefined ? thisArg : arrayToSearch;
+
+                               if (callback.call(thisArg, arrayToSearch[i], i, arrayToSearch)) {
+                                       index = i;
+                                       break;
+                               }
+                       }
+               }
+
+               return index;
+       };
        helpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {
                // Default to start of the array
                if (startIndex === undefined || startIndex === null) {