mirror of
https://github.com/konvajs/konva.git
synced 2025-11-08 02:24:44 +08:00
refactored get() method
This commit is contained in:
6633
dist/kinetic-core.js
vendored
6633
dist/kinetic-core.js
vendored
File diff suppressed because it is too large
Load Diff
30
dist/kinetic-core.min.js
vendored
30
dist/kinetic-core.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -142,22 +142,45 @@ Kinetic.Container.prototype = {
|
||||
*/
|
||||
get: function(selector) {
|
||||
var stage = this.getStage();
|
||||
var arr;
|
||||
var key = selector.slice(1);
|
||||
if(selector.charAt(0) === '#') {
|
||||
arr = stage.ids[key] !== undefined ? [stage.ids[key]] : [];
|
||||
|
||||
// Node type selector
|
||||
if(selector === 'Shape' || selector === 'Group' || selector === 'Layer') {
|
||||
var retArr = new Kinetic.Collection();
|
||||
function traverse(cont) {
|
||||
var children = cont.getChildren();
|
||||
for(var n = 0; n < children.length; n++) {
|
||||
var child = children[n];
|
||||
if(child.nodeType === selector) {
|
||||
retArr.push(child);
|
||||
}
|
||||
else if(child.nodeType !== 'Shape') {
|
||||
traverse(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
traverse(this);
|
||||
return retArr;
|
||||
}
|
||||
// ID selector
|
||||
else if(selector.charAt(0) === '#') {
|
||||
var key = selector.slice(1);
|
||||
var arr = stage.ids[key] !== undefined ? [stage.ids[key]] : [];
|
||||
return this._getDescendants(arr);
|
||||
}
|
||||
// name selector
|
||||
else if(selector.charAt(0) === '.') {
|
||||
arr = stage.names[key] !== undefined ? stage.names[key] : [];
|
||||
}
|
||||
else if(selector === 'Shape' || selector === 'Group' || selector === 'Layer') {
|
||||
return this._getNodes(selector);
|
||||
var key = selector.slice(1);
|
||||
var arr = stage.names[key] || [];
|
||||
return this._getDescendants(arr);
|
||||
}
|
||||
// unrecognized selector
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
||||
var retArr = new Kinetic.Collection();
|
||||
},
|
||||
_getDescendants: function(arr) {
|
||||
var retArr = new Kinetic.Collection();
|
||||
for(var n = 0; n < arr.length; n++) {
|
||||
var node = arr[n];
|
||||
if(this.isAncestorOf(node)) {
|
||||
@@ -165,7 +188,7 @@ Kinetic.Container.prototype = {
|
||||
}
|
||||
}
|
||||
|
||||
return retArr;
|
||||
return retArr;
|
||||
},
|
||||
/**
|
||||
* determine if node is an ancestor
|
||||
@@ -198,7 +221,7 @@ Kinetic.Container.prototype = {
|
||||
clone: function(obj) {
|
||||
// call super method
|
||||
var node = Kinetic.Node.prototype.clone.call(this, obj)
|
||||
|
||||
|
||||
// perform deep clone on containers
|
||||
for(var key in this.children) {
|
||||
node.add(this.children[key].clone());
|
||||
@@ -225,27 +248,6 @@ Kinetic.Container.prototype = {
|
||||
|
||||
return arr;
|
||||
},
|
||||
/**
|
||||
* get all shapes inside container
|
||||
*/
|
||||
_getNodes: function(sel) {
|
||||
var arr = [];
|
||||
function traverse(cont) {
|
||||
var children = cont.getChildren();
|
||||
for(var n = 0; n < children.length; n++) {
|
||||
var child = children[n];
|
||||
if(child.nodeType === sel) {
|
||||
arr.push(child);
|
||||
}
|
||||
else if(child.nodeType !== 'Shape') {
|
||||
traverse(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
traverse(this);
|
||||
|
||||
return arr;
|
||||
},
|
||||
/**
|
||||
* set children indices
|
||||
*/
|
||||
|
||||
@@ -649,19 +649,63 @@ Test.prototype.tests = {
|
||||
layer.add(circle);
|
||||
layer.add(rect);
|
||||
stage.add(layer);
|
||||
|
||||
|
||||
var shapes = layer.get('.myShape');
|
||||
|
||||
|
||||
test(shapes.length === 2, 'shapes array should have 2 elements');
|
||||
|
||||
|
||||
shapes.apply('setX', 200);
|
||||
|
||||
|
||||
layer.draw();
|
||||
|
||||
|
||||
shapes.each(function() {
|
||||
test(this.getX() === 200, 'shape x should be 200');
|
||||
});
|
||||
},
|
||||
'SELECTOR - set fill on array by Shape-selector': function(containerId) {
|
||||
var stage = new Kinetic.Stage({
|
||||
container: containerId,
|
||||
width: 578,
|
||||
height: 200
|
||||
});
|
||||
var layer = new Kinetic.Layer();
|
||||
var circle = new Kinetic.Circle({
|
||||
x: stage.getWidth() / 2,
|
||||
y: stage.getHeight() / 2,
|
||||
radius: 70,
|
||||
fill: 'green',
|
||||
stroke: 'black',
|
||||
strokeWidth: 4,
|
||||
name: 'myShape'
|
||||
});
|
||||
|
||||
var rect = new Kinetic.Rect({
|
||||
x: 300,
|
||||
y: 100,
|
||||
width: 100,
|
||||
height: 50,
|
||||
fill: 'purple',
|
||||
stroke: 'black',
|
||||
strokeWidth: 4,
|
||||
name: 'myShape'
|
||||
});
|
||||
|
||||
layer.add(circle);
|
||||
layer.add(rect);
|
||||
stage.add(layer);
|
||||
|
||||
var shapes = layer.get('Shape');
|
||||
|
||||
test(shapes.length === 2, 'shapes array should have 2 elements');
|
||||
|
||||
shapes.apply('setFill', 'gray');
|
||||
|
||||
layer.draw();
|
||||
|
||||
shapes.each(function() {
|
||||
test(this.getFill() === 'gray', 'shape x should be 200');
|
||||
});
|
||||
},
|
||||
'SELECTOR - add listener to an array of nodes': function(containerId) {
|
||||
var stage = new Kinetic.Stage({
|
||||
container: containerId,
|
||||
|
||||
Reference in New Issue
Block a user