From 793e43b0db7668a1f7a263f4ffb0b52f76417f00 Mon Sep 17 00:00:00 2001 From: Eric Rowell Date: Mon, 25 Mar 2013 22:43:35 -0700 Subject: [PATCH] removed apply() Collection method. Added new mapMethods() Collection method, which is used internally to map node methods to collection methods --- src/Node.js | 16 ++------------ src/util/Collection.js | 39 +++++++++++++++++++-------------- tests/js/unit/containerTests.js | 16 +++++++++----- tests/js/unit/nodeTests.js | 8 +++++-- 4 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/Node.js b/src/Node.js index 2f493692..3d3950ac 100644 --- a/src/Node.js +++ b/src/Node.js @@ -1316,18 +1316,6 @@ * @methodOf Kinetic.Node.prototype */ Kinetic.Node.prototype.isVisible = Kinetic.Node.prototype.getVisible; - - // collection mappings - var collectionMappings = [ON, OFF]; - for(var n = 0; n < 2; n++) { - // induce scope - (function(i) { - var method = collectionMappings[i]; - Kinetic.Collection.prototype[method] = function() { - var args = [].slice.call(arguments); - args.unshift(method); - this.apply.apply(this, args); - }; - })(n); - } + + Kinetic.Collection.mapMethods(['on', 'off']); })(); diff --git a/src/util/Collection.js b/src/util/Collection.js index 660516e6..8db59b4c 100644 --- a/src/util/Collection.js +++ b/src/util/Collection.js @@ -14,22 +14,6 @@ return this; } Kinetic.Collection.prototype = new Array(); - /** - * apply a method to all nodes in the array - * @name apply - * @methodOf Kinetic.Collection.prototype - * @param {String} method - * @param val - */ - Kinetic.Collection.prototype.apply = function(method) { - args = [].slice.call(arguments); - args.shift(); - for(var n = 0; n < this.length; n++) { - if(Kinetic.Type._isFunction(this[n][method])) { - this[n][method].apply(this[n], args); - } - } - }; /** * iterate through node array * @name each @@ -38,7 +22,28 @@ */ Kinetic.Collection.prototype.each = function(func) { for(var n = 0; n < this.length; n++) { - func.call(this[n], n, this[n]); + func(this[n], n); + } + }; + + Kinetic.Collection.mapMethods = function(arr) { + var leng = arr.length, + n; + + for(n = 0; n < leng; n++) { + // induce scope + (function(i) { + var method = arr[i]; + Kinetic.Collection.prototype[method] = function() { + var len = this.length, + i; + + args = [].slice.call(arguments); + for(i = 0; i < len; i++) { + this[i][method].apply(this[i], args); + } + }; + })(n); } }; })(); diff --git a/tests/js/unit/containerTests.js b/tests/js/unit/containerTests.js index a519c37a..c1c87aa0 100644 --- a/tests/js/unit/containerTests.js +++ b/tests/js/unit/containerTests.js @@ -156,12 +156,14 @@ Test.Modules.CONTAINER = { test(shapes.length === 2, 'shapes array should have 2 elements'); - shapes.apply('setX', 200); + shapes.each(function(node) { + node.setX(200); + }); layer.draw(); - shapes.each(function() { - test(this.getX() === 200, 'shape x should be 200'); + shapes.each(function(node) { + test(node.getX() === 200, 'shape x should be 200'); }); }, 'set fill on array by Shape-selector': function(containerId) { @@ -200,12 +202,14 @@ Test.Modules.CONTAINER = { test(shapes.length === 2, 'shapes array should have 2 elements'); - shapes.apply('setFill', 'gray'); + shapes.each(function(node) { + node.setFill('gray'); + }); layer.draw(); - shapes.each(function() { - test(this.getFill() === 'gray', 'shape x should be 200'); + shapes.each(function(node) { + test(node.getFill() === 'gray', 'shape x should be 200'); }); }, 'add listener to an array of nodes': function(containerId) { diff --git a/tests/js/unit/nodeTests.js b/tests/js/unit/nodeTests.js index 6f162653..81b3e743 100644 --- a/tests/js/unit/nodeTests.js +++ b/tests/js/unit/nodeTests.js @@ -2116,7 +2116,9 @@ Test.Modules.NODE = { var stage = Kinetic.Node.create(json, containerId); - stage.get('#myTriangle').apply('setDrawFunc', drawTriangle); + stage.get('#myTriangle').each(function(node) { + node.setDrawFunc(drawTriangle); + }); stage.draw(); @@ -2157,7 +2159,9 @@ Test.Modules.NODE = { var stage = Kinetic.Node.create(json, containerId); testJSON(stage.toJSON(), json, 'problem loading stage json with image'); - stage.get('#darth').apply('setImage', imageObj); + stage.get('#darth').each(function(node) { + node.setImage(imageObj); + }); stage.draw(); }; imageObj.src = '../assets/darth-vader.jpg';