diff --git a/src/Container.js b/src/Container.js index 86687fa2..7a2b46ad 100644 --- a/src/Container.js +++ b/src/Container.js @@ -394,4 +394,6 @@ * // set clip height
* container.clipHeight(100); */ + + Kinetic.Collection.mapMethods(Kinetic.Container); })(); diff --git a/src/Group.js b/src/Group.js index 4e15273e..a877a4a4 100644 --- a/src/Group.js +++ b/src/Group.js @@ -13,4 +13,6 @@ } }); Kinetic.Util.extend(Kinetic.Group, Kinetic.Container); + + Kinetic.Collection.mapMethods(Kinetic.Group); })(); diff --git a/src/Layer.js b/src/Layer.js index dd6be4d4..21aad630 100644 --- a/src/Layer.js +++ b/src/Layer.js @@ -333,5 +333,5 @@ * layer.hitGraphEnabled(true); */ - Kinetic.Layer.prototype.isHitGraphEnabled = Kinetic.Layer.prototype.getHitGraphEnabled; + Kinetic.Collection.mapMethods(Kinetic.Layer); })(); diff --git a/src/Node.js b/src/Node.js index 8cd8bff4..c0dc1643 100644 --- a/src/Node.js +++ b/src/Node.js @@ -594,7 +594,7 @@ */ shouldDrawHit: function() { var layer = this.getLayer(); - return layer && layer.isHitGraphEnabled() && this.isListening() && this.isVisible() && !Kinetic.isDragging(); + return layer && layer.hitGraphEnabled() && this.isListening() && this.isVisible() && !Kinetic.isDragging(); }, /** * show node @@ -1934,21 +1934,5 @@ getRotationDeg: 'getRotation' }); - Kinetic.Collection.mapMethods([ - 'on', - 'off', - 'remove', - 'destroy', - 'show', - 'hide', - 'move', - 'rotate', - 'moveToTop', - 'moveUp', - 'moveDown', - 'moveToBottom', - 'moveTo', - 'fire', - 'draw' - ]); + Kinetic.Collection.mapMethods(Kinetic.Node); })(); diff --git a/src/Shape.js b/src/Shape.js index 327631c4..46287590 100644 --- a/src/Shape.js +++ b/src/Shape.js @@ -1420,4 +1420,6 @@ getDrawHitFunc: 'getHitFunc', setDrawHitFunc: 'setHitFunc' }); + + Kinetic.Collection.mapMethods(Kinetic.Shape); })(); diff --git a/src/Util.js b/src/Util.js index 531bb020..d9b21c94 100644 --- a/src/Util.js +++ b/src/Util.js @@ -64,24 +64,23 @@ return collection; }; - Kinetic.Collection.mapMethods = function(arr) { - var leng = arr.length, - n; + Kinetic.Collection.mapMethods = function(constructor) { + var prot = constructor.prototype, + key; - for(n = 0; n < leng; n++) { + for(key in prot) { // induce scope - (function(i) { - var method = arr[i]; - Kinetic.Collection.prototype[method] = function() { + (function(methodName) { + Kinetic.Collection.prototype[methodName] = function() { var len = this.length, i; args = [].slice.call(arguments); for(i = 0; i < len; i++) { - this[i][method].apply(this[i], args); + this[i][methodName].apply(this[i], args); } }; - })(n); + })(key); } }; diff --git a/src/plugins/Label.js b/src/plugins/Label.js index 2a528d8e..76bfb843 100644 --- a/src/plugins/Label.js +++ b/src/plugins/Label.js @@ -154,6 +154,8 @@ Kinetic.Util.extend(Kinetic.Label, Kinetic.Group); + Kinetic.Collection.mapMethods(Kinetic.Label); + /** * Tag constructor.  A Tag can be configured * to have a pointer element that points up, right, down, or left @@ -291,4 +293,6 @@ * @method * @memberof Kinetic.Tag.prototype */ + + Kinetic.Collection.mapMethods(Kinetic.Tag); })(); diff --git a/src/plugins/Path.js b/src/plugins/Path.js index 4ebfdddb..2711c8fe 100644 --- a/src/plugins/Path.js +++ b/src/plugins/Path.js @@ -599,4 +599,6 @@ * @method * @memberof Kinetic.Path.prototype */ + + Kinetic.Collection.mapMethods(Kinetic.Path); })(); diff --git a/src/plugins/RegularPolygon.js b/src/plugins/RegularPolygon.js index c8b59d8a..f68debce 100644 --- a/src/plugins/RegularPolygon.js +++ b/src/plugins/RegularPolygon.js @@ -84,4 +84,6 @@ * @method * @memberof Kinetic.RegularPolygon.prototype */ + + Kinetic.Collection.mapMethods(Kinetic.RegularPolygon); })(); diff --git a/src/plugins/Star.js b/src/plugins/Star.js index d9e5a0a9..661f7ddc 100644 --- a/src/plugins/Star.js +++ b/src/plugins/Star.js @@ -105,4 +105,6 @@ * @method * @memberof Kinetic.Star.prototype */ + + Kinetic.Collection.mapMethods(Kinetic.Star); })(); diff --git a/src/plugins/TextPath.js b/src/plugins/TextPath.js index fa302788..b736a677 100644 --- a/src/plugins/TextPath.js +++ b/src/plugins/TextPath.js @@ -375,4 +375,6 @@ * @method * @memberof Kinetic.TextPath.prototype */ + + Kinetic.Collection.mapMethods(Kinetic.TextPath); })(); diff --git a/src/shapes/Arc.js b/src/shapes/Arc.js index 482f12d4..2bf9cfd5 100644 --- a/src/shapes/Arc.js +++ b/src/shapes/Arc.js @@ -117,4 +117,6 @@ * // draw arc clockwise
* arc.clockwise(true); */ + + Kinetic.Collection.mapMethods(Kinetic.Arc); })(); diff --git a/src/shapes/Circle.js b/src/shapes/Circle.js index adce3efd..6de912f5 100644 --- a/src/shapes/Circle.js +++ b/src/shapes/Circle.js @@ -76,4 +76,6 @@ * // set radius
* circle.radius(10);
*/ + + Kinetic.Collection.mapMethods(Kinetic.Circle); })(); diff --git a/src/shapes/Ellipse.js b/src/shapes/Ellipse.js index 626254ea..7d1ceb6f 100644 --- a/src/shapes/Ellipse.js +++ b/src/shapes/Ellipse.js @@ -118,4 +118,6 @@ * ellipse.radiusY(200); */ + Kinetic.Collection.mapMethods(Kinetic.Ellipse); + })(); \ No newline at end of file diff --git a/src/shapes/Image.js b/src/shapes/Image.js index de5cfe15..4f4d46f0 100644 --- a/src/shapes/Image.js +++ b/src/shapes/Image.js @@ -196,4 +196,6 @@ * // set crop height
* image.cropHeight(20); */ + + Kinetic.Collection.mapMethods(Kinetic.Image); })(); diff --git a/src/shapes/Line.js b/src/shapes/Line.js index aa0c47fb..d57fd870 100644 --- a/src/shapes/Line.js +++ b/src/shapes/Line.js @@ -198,4 +198,6 @@ * // push a new point
* line.points(line.points().concat([70, 80])); */ + + Kinetic.Collection.mapMethods(Kinetic.Line); })(); \ No newline at end of file diff --git a/src/shapes/Rect.js b/src/shapes/Rect.js index 63e423aa..17293a92 100644 --- a/src/shapes/Rect.js +++ b/src/shapes/Rect.js @@ -73,4 +73,6 @@ * // set corner radius
* rect.cornerRadius(10); */ + + Kinetic.Collection.mapMethods(Kinetic.Rect); })(); diff --git a/src/shapes/Ring.js b/src/shapes/Ring.js index 0630194c..e4097e05 100644 --- a/src/shapes/Ring.js +++ b/src/shapes/Ring.js @@ -63,9 +63,7 @@ Kinetic.Util.extend(Kinetic.Ring, Kinetic.Shape); // add getters setters - Kinetic.Factory.addGetterSetter(Kinetic.Ring, 'innerRadius', function() { - return 0; - }); + Kinetic.Factory.addGetterSetter(Kinetic.Ring, 'innerRadius', 0); /** * get/set innerRadius @@ -82,9 +80,7 @@ * ring.innerRadius(20); */ - Kinetic.Factory.addGetterSetter(Kinetic.Ring, 'outerRadius', function() { - return 0; - }); + Kinetic.Factory.addGetterSetter(Kinetic.Ring, 'outerRadius', 0); /** * get/set outerRadius @@ -100,4 +96,6 @@ * // set outer radius
* ring.outerRadius(20); */ + + Kinetic.Collection.mapMethods(Kinetic.Ring); })(); diff --git a/src/shapes/Sprite.js b/src/shapes/Sprite.js index 1ab1fe39..93a4e43d 100644 --- a/src/shapes/Sprite.js +++ b/src/shapes/Sprite.js @@ -256,4 +256,6 @@ getIndex: 'getFrameIndex', setIndex: 'setFrameIndex' }); + + Kinetic.Collection.mapMethods(Kinetic.Sprite); })(); diff --git a/src/shapes/Text.js b/src/shapes/Text.js index 9dd96584..2b4ddf1d 100644 --- a/src/shapes/Text.js +++ b/src/shapes/Text.js @@ -450,4 +450,6 @@ * // set text
* text.text('Hello world!'); */ + + Kinetic.Collection.mapMethods(Kinetic.Text); })(); diff --git a/src/shapes/Wedge.js b/src/shapes/Wedge.js index f2539b1f..52eab420 100644 --- a/src/shapes/Wedge.js +++ b/src/shapes/Wedge.js @@ -101,4 +101,6 @@ getAngleDeg: 'getAngle', setAngleDeg: 'setAngle' }); + + Kinetic.Collection.mapMethods(Kinetic.Wedge); })(); diff --git a/test/runner.html b/test/runner.html index e2af1a58..645885c3 100644 --- a/test/runner.html +++ b/test/runner.html @@ -50,6 +50,7 @@ + diff --git a/test/unit/Collection-test.js b/test/unit/Collection-test.js new file mode 100644 index 00000000..811dc5f9 --- /dev/null +++ b/test/unit/Collection-test.js @@ -0,0 +1,57 @@ +suite('Collection', function(){ + var util; + + test('test collection method mapping', function(){ + // Node method + assert.notEqual(Kinetic.Collection.prototype.on, undefined); + + // Layer method + assert.notEqual(Kinetic.Collection.prototype.getContext, undefined); + + // Container method + assert.notEqual(Kinetic.Collection.prototype.hasChildren, undefined); + + // Shape method + assert.notEqual(Kinetic.Collection.prototype.strokeWidth, undefined); + }); + + test('add circle to stage', function(){ + var stage = addStage(); + var layer = new Kinetic.Layer(); + var circle1 = new Kinetic.Circle({ + x: 100, + y: 100, + radius: 70, + fill: 'green', + stroke: 'black', + strokeWidth: 4, + name: 'myCircle', + draggable: true + }); + + + var circle2 = new Kinetic.Circle({ + x:300, + y: 100, + radius: 70, + fill: 'red', + stroke: 'black', + strokeWidth: 4, + name: 'myCircle', + draggable: true + }); + + + layer.add(circle1).add(circle2); + stage.add(layer); + + layer.find('Circle').fill('blue'); + layer.draw(); + + //console.log(layer.getContext().getTrace()); + + assert.equal(layer.getContext().getTrace(),'clearRect(0,0,578,200);save();transform(1,0,0,1,100,100);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=green;fill();lineWidth=4;strokeStyle=black;stroke();restore();save();transform(1,0,0,1,300,100);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=red;fill();lineWidth=4;strokeStyle=black;stroke();restore();clearRect(0,0,578,200);save();transform(1,0,0,1,100,100);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=blue;fill();lineWidth=4;strokeStyle=black;stroke();restore();save();transform(1,0,0,1,300,100);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=blue;fill();lineWidth=4;strokeStyle=black;stroke();restore();'); + + + }); +}); \ No newline at end of file diff --git a/test/unit/Layer-test.js b/test/unit/Layer-test.js index 46e924a9..8bf8d55c 100644 --- a/test/unit/Layer-test.js +++ b/test/unit/Layer-test.js @@ -279,17 +279,17 @@ suite('Layer', function() { layer.add(circle); stage.add(layer); - assert.equal(layer.isHitGraphEnabled(), true); + assert.equal(layer.hitGraphEnabled(), true); assert.equal(layer.shouldDrawHit(), true); layer.disableHitGraph(); - assert.equal(layer.isHitGraphEnabled(), false); + assert.equal(layer.hitGraphEnabled(), false); assert.equal(layer.shouldDrawHit(), false); layer.enableHitGraph(); - assert.equal(layer.isHitGraphEnabled(), true); + assert.equal(layer.hitGraphEnabled(), true); assert.equal(layer.shouldDrawHit(), true); }); }); \ No newline at end of file