180 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
		
			
		
	
	
			180 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
| 
								 | 
							
								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;
							 |