This commit is contained in:
MaxGraey 2018-03-25 11:01:52 +03:00
parent 2a3cca8efa
commit a027c0ddf5
2 changed files with 69 additions and 22 deletions

View File

@ -2,7 +2,7 @@
* Konva JavaScript Framework v2.0.2 * Konva JavaScript Framework v2.0.2
* http://konvajs.github.io/ * http://konvajs.github.io/
* Licensed under the MIT * Licensed under the MIT
* Date: Wed Mar 21 2018 * Date: Sun Mar 25 2018
* *
* Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS) * Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS)
* Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva) * Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva)
@ -7771,14 +7771,18 @@
return this; return this;
}, },
/** /**
* return a {@link Konva.Collection} of nodes that match the selector. Use '#' for id selections * return a {@link Konva.Collection} of nodes that match the selector.
* and '.' for name selections. You can also select by type or class name. Pass multiple selectors * You can provide a string with '#' for id selections and '.' for name selections.
* Or a function that will return true/false when a node is passed through. See example below.
* With strings you can also select by type or class name. Pass multiple selectors
* separated by a space. * separated by a space.
* @method * @method
* @memberof Konva.Container.prototype * @memberof Konva.Container.prototype
* @param {String} selector * @param {String | Function} selector
* @returns {Collection} * @returns {Collection}
* @example * @example
*
* Passing a string as a selector
* // select node with id foo * // select node with id foo
* var node = stage.find('#foo'); * var node = stage.find('#foo');
* *
@ -7793,8 +7797,47 @@
* *
* // select node with an id of foo or a name of bar inside layer * // select node with an id of foo or a name of bar inside layer
* var nodes = layer.find('#foo, .bar'); * var nodes = layer.find('#foo, .bar');
*
* Passing a function as a selector
*
* // get all Groups
* var groups = stage.find(node => {
* return node.getType() === 'Group';
* });
*
* // get only Nodes with partial opacity
* var alphaNodes = layer.find(node => {
* return node.getType() === 'Node' && node.getAbsoluteOpacity() < 1;
* });
*/ */
find: function(selector) { find: function(selector) {
var retArr = [];
if (typeof selector === 'string') {
retArr = this._findByString(selector);
} else if (typeof selector === 'function') {
retArr = this._findByFunction(selector);
}
return Konva.Collection.toCollection(retArr);
},
/**
* return a first node from `find` method
* @method
* @memberof Konva.Container.prototype
* @param {String} selector
* @returns {Konva.Node}
* @example
* // select node with id foo
* var node = stage.findOne('#foo');
*
* // select node with name bar inside layer
* var nodes = layer.findOne('.bar');
*/
findOne: function(selector) {
return this.find(selector)[0];
},
_findByString: function(selector) {
var retArr = [], var retArr = [],
selectorArr = selector.replace(/ /g, '').split(','), selectorArr = selector.replace(/ /g, '').split(','),
len = selectorArr.length, len = selectorArr.length,
@ -7839,23 +7882,27 @@
} }
} }
return Konva.Collection.toCollection(retArr); return retArr;
}, },
/** _findByFunction: function(fn) {
* return a first node from `find` method var retArr = [];
* @method
* @memberof Konva.Container.prototype var addItems = function(el) {
* @param {String} selector var children = el.getChildren();
* @returns {Konva.Node} var clen = children.length;
* @example
* // select node with id foo if (fn(el)) {
* var node = stage.findOne('#foo'); retArr = retArr.concat(el);
* }
* // select node with name bar inside layer
* var nodes = layer.findOne('.bar'); for (var i = 0; i < clen; i++) {
*/ addItems(children[i]);
findOne: function(selector) { }
return this.find(selector)[0]; };
addItems(this);
return retArr;
}, },
_getNodeById: function(key) { _getNodeById: function(key) {
var node = Konva.ids[key]; var node = Konva.ids[key];

4
konva.min.js vendored

File diff suppressed because one or more lines are too long