172 lines
5.5 KiB
JavaScript
172 lines
5.5 KiB
JavaScript
"use strict";
|
|
exports.__esModule = true;
|
|
var tslib_1 = require("tslib");
|
|
var zrUtil = require("../core/util");
|
|
var Element_1 = require("../Element");
|
|
var BoundingRect_1 = require("../core/BoundingRect");
|
|
var Group = (function (_super) {
|
|
tslib_1.__extends(Group, _super);
|
|
function Group(opts) {
|
|
var _this = _super.call(this) || this;
|
|
_this.isGroup = true;
|
|
_this.type = 'group';
|
|
_this._children = [];
|
|
_this.attr(opts);
|
|
return _this;
|
|
}
|
|
Group.prototype.children = function () {
|
|
return this._children;
|
|
};
|
|
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 && child !== this && child.parent !== this) {
|
|
this._children.push(child);
|
|
this._doAdd(child);
|
|
}
|
|
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._doAdd = function (child) {
|
|
if (child.parent) {
|
|
child.parent.remove(child);
|
|
}
|
|
child.parent = this;
|
|
var storage = this.__storage;
|
|
var zr = this.__zr;
|
|
if (storage && storage !== child.__storage) {
|
|
storage.addToStorage(child);
|
|
if (child instanceof Group) {
|
|
child.addChildrenToStorage(storage);
|
|
}
|
|
}
|
|
zr && zr.refresh();
|
|
};
|
|
Group.prototype.remove = function (child) {
|
|
var zr = this.__zr;
|
|
var storage = this.__storage;
|
|
var children = this._children;
|
|
var idx = zrUtil.indexOf(children, child);
|
|
if (idx < 0) {
|
|
return this;
|
|
}
|
|
children.splice(idx, 1);
|
|
child.parent = null;
|
|
if (storage) {
|
|
storage.delFromStorage(child);
|
|
if (child instanceof Group) {
|
|
child.delChildrenFromStorage(storage);
|
|
}
|
|
}
|
|
zr && zr.refresh();
|
|
return this;
|
|
};
|
|
Group.prototype.removeAll = function () {
|
|
var children = this._children;
|
|
var storage = this.__storage;
|
|
for (var i = 0; i < children.length; i++) {
|
|
var child = children[i];
|
|
if (storage) {
|
|
storage.delFromStorage(child);
|
|
if (child instanceof Group) {
|
|
child.delChildrenFromStorage(storage);
|
|
}
|
|
}
|
|
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];
|
|
cb.call(context, child);
|
|
if (child.type === 'group') {
|
|
child.traverse(cb, context);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
Group.prototype.addChildrenToStorage = function (storage) {
|
|
for (var i = 0; i < this._children.length; i++) {
|
|
var child = this._children[i];
|
|
storage.addToStorage(child);
|
|
if (child instanceof Group) {
|
|
child.addChildrenToStorage(storage);
|
|
}
|
|
}
|
|
};
|
|
Group.prototype.delChildrenFromStorage = function (storage) {
|
|
for (var i = 0; i < this._children.length; i++) {
|
|
var child = this._children[i];
|
|
storage.delFromStorage(child);
|
|
if (child instanceof Group) {
|
|
child.delChildrenFromStorage(storage);
|
|
}
|
|
}
|
|
};
|
|
Group.prototype.dirty = function () {
|
|
this.__dirty = true;
|
|
this.__zr && this.__zr.refresh();
|
|
return this;
|
|
};
|
|
Group.prototype.getBoundingRect = function (includeChildren) {
|
|
var tmpRect = new BoundingRect_1["default"](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) {
|
|
tmpRect.copy(childRect);
|
|
tmpRect.applyTransform(transform);
|
|
rect = rect || tmpRect.clone();
|
|
rect.union(tmpRect);
|
|
}
|
|
else {
|
|
rect = rect || childRect.clone();
|
|
rect.union(childRect);
|
|
}
|
|
}
|
|
return rect || tmpRect;
|
|
};
|
|
return Group;
|
|
}(Element_1["default"]));
|
|
exports["default"] = Group;
|
|
//# sourceMappingURL=Group.js.map
|