You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
5.7 KiB
180 lines
5.7 KiB
4 weeks ago
|
import { __extends } from "tslib";
|
||
|
import * as zrUtil from '../core/util.js';
|
||
|
import Element from '../Element.js';
|
||
|
import BoundingRect from '../core/BoundingRect.js';
|
||
|
var Group = (function (_super) {
|
||
|
__extends(Group, _super);
|
||
|
function Group(opts) {
|
||
|
var _this = _super.call(this) || this;
|
||
|
_this.isGroup = true;
|
||
|
_this._children = [];
|
||
|
_this.attr(opts);
|
||
|
return _this;
|
||
|
}
|
||
|
Group.prototype.childrenRef = function () {
|
||
|
return this._children;
|
||
|
};
|
||
|
Group.prototype.children = function () {
|
||
|
return this._children.slice();
|
||
|
};
|
||
|
Group.prototype.childAt = function (idx) {
|
||
|
return this._children[idx];
|
||
|
};
|
||
|
Group.prototype.childOfName = function (name) {
|
||
|
var children = this._children;
|
||
|
for (var i = 0; i < children.length; i++) {
|
||
|
if (children[i].name === name) {
|
||
|
return children[i];
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
Group.prototype.childCount = function () {
|
||
|
return this._children.length;
|
||
|
};
|
||
|
Group.prototype.add = function (child) {
|
||
|
if (child) {
|
||
|
if (child !== this && child.parent !== this) {
|
||
|
this._children.push(child);
|
||
|
this._doAdd(child);
|
||
|
}
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
if (child.__hostTarget) {
|
||
|
throw 'This elemenet has been used as an attachment';
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return this;
|
||
|
};
|
||
|
Group.prototype.addBefore = function (child, nextSibling) {
|
||
|
if (child && child !== this && child.parent !== this
|
||
|
&& nextSibling && nextSibling.parent === this) {
|
||
|
var children = this._children;
|
||
|
var idx = children.indexOf(nextSibling);
|
||
|
if (idx >= 0) {
|
||
|
children.splice(idx, 0, child);
|
||
|
this._doAdd(child);
|
||
|
}
|
||
|
}
|
||
|
return this;
|
||
|
};
|
||
|
Group.prototype.replace = function (oldChild, newChild) {
|
||
|
var idx = zrUtil.indexOf(this._children, oldChild);
|
||
|
if (idx >= 0) {
|
||
|
this.replaceAt(newChild, idx);
|
||
|
}
|
||
|
return this;
|
||
|
};
|
||
|
Group.prototype.replaceAt = function (child, index) {
|
||
|
var children = this._children;
|
||
|
var old = children[index];
|
||
|
if (child && child !== this && child.parent !== this && child !== old) {
|
||
|
children[index] = child;
|
||
|
old.parent = null;
|
||
|
var zr = this.__zr;
|
||
|
if (zr) {
|
||
|
old.removeSelfFromZr(zr);
|
||
|
}
|
||
|
this._doAdd(child);
|
||
|
}
|
||
|
return this;
|
||
|
};
|
||
|
Group.prototype._doAdd = function (child) {
|
||
|
if (child.parent) {
|
||
|
child.parent.remove(child);
|
||
|
}
|
||
|
child.parent = this;
|
||
|
var zr = this.__zr;
|
||
|
if (zr && zr !== child.__zr) {
|
||
|
child.addSelfToZr(zr);
|
||
|
}
|
||
|
zr && zr.refresh();
|
||
|
};
|
||
|
Group.prototype.remove = function (child) {
|
||
|
var zr = this.__zr;
|
||
|
var children = this._children;
|
||
|
var idx = zrUtil.indexOf(children, child);
|
||
|
if (idx < 0) {
|
||
|
return this;
|
||
|
}
|
||
|
children.splice(idx, 1);
|
||
|
child.parent = null;
|
||
|
if (zr) {
|
||
|
child.removeSelfFromZr(zr);
|
||
|
}
|
||
|
zr && zr.refresh();
|
||
|
return this;
|
||
|
};
|
||
|
Group.prototype.removeAll = function () {
|
||
|
var children = this._children;
|
||
|
var zr = this.__zr;
|
||
|
for (var i = 0; i < children.length; i++) {
|
||
|
var child = children[i];
|
||
|
if (zr) {
|
||
|
child.removeSelfFromZr(zr);
|
||
|
}
|
||
|
child.parent = null;
|
||
|
}
|
||
|
children.length = 0;
|
||
|
return this;
|
||
|
};
|
||
|
Group.prototype.eachChild = function (cb, context) {
|
||
|
var children = this._children;
|
||
|
for (var i = 0; i < children.length; i++) {
|
||
|
var child = children[i];
|
||
|
cb.call(context, child, i);
|
||
|
}
|
||
|
return this;
|
||
|
};
|
||
|
Group.prototype.traverse = function (cb, context) {
|
||
|
for (var i = 0; i < this._children.length; i++) {
|
||
|
var child = this._children[i];
|
||
|
var stopped = cb.call(context, child);
|
||
|
if (child.isGroup && !stopped) {
|
||
|
child.traverse(cb, context);
|
||
|
}
|
||
|
}
|
||
|
return this;
|
||
|
};
|
||
|
Group.prototype.addSelfToZr = function (zr) {
|
||
|
_super.prototype.addSelfToZr.call(this, zr);
|
||
|
for (var i = 0; i < this._children.length; i++) {
|
||
|
var child = this._children[i];
|
||
|
child.addSelfToZr(zr);
|
||
|
}
|
||
|
};
|
||
|
Group.prototype.removeSelfFromZr = function (zr) {
|
||
|
_super.prototype.removeSelfFromZr.call(this, zr);
|
||
|
for (var i = 0; i < this._children.length; i++) {
|
||
|
var child = this._children[i];
|
||
|
child.removeSelfFromZr(zr);
|
||
|
}
|
||
|
};
|
||
|
Group.prototype.getBoundingRect = function (includeChildren) {
|
||
|
var tmpRect = new BoundingRect(0, 0, 0, 0);
|
||
|
var children = includeChildren || this._children;
|
||
|
var tmpMat = [];
|
||
|
var rect = null;
|
||
|
for (var i = 0; i < children.length; i++) {
|
||
|
var child = children[i];
|
||
|
if (child.ignore || child.invisible) {
|
||
|
continue;
|
||
|
}
|
||
|
var childRect = child.getBoundingRect();
|
||
|
var transform = child.getLocalTransform(tmpMat);
|
||
|
if (transform) {
|
||
|
BoundingRect.applyTransform(tmpRect, childRect, transform);
|
||
|
rect = rect || tmpRect.clone();
|
||
|
rect.union(tmpRect);
|
||
|
}
|
||
|
else {
|
||
|
rect = rect || childRect.clone();
|
||
|
rect.union(childRect);
|
||
|
}
|
||
|
}
|
||
|
return rect || tmpRect;
|
||
|
};
|
||
|
return Group;
|
||
|
}(Element));
|
||
|
Group.prototype.type = 'group';
|
||
|
export default Group;
|