Skip to content

Commit

Permalink
removed apply() Collection method. Added new mapMethods() Collection …
Browse files Browse the repository at this point in the history
…method, which is used internally to map node methods to collection methods
  • Loading branch information
ericdrowell committed Mar 26, 2013
1 parent dc107a0 commit 793e43b
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 39 deletions.
16 changes: 2 additions & 14 deletions src/Node.js
Original file line number Diff line number Diff line change
Expand Up @@ -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']);
})();
39 changes: 22 additions & 17 deletions src/util/Collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}
};
})();
16 changes: 10 additions & 6 deletions tests/js/unit/containerTests.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down
8 changes: 6 additions & 2 deletions tests/js/unit/nodeTests.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -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';
Expand Down

0 comments on commit 793e43b

Please sign in to comment.