UNPKG

tsioc

Version:

tsioc is AOP, Ioc container, via typescript decorator

161 lines (159 loc) 4.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var types_1 = require("../types"); var NullComponent_1 = require("./NullComponent"); var index_1 = require("../utils/index"); /** * compoiste. * * @export * @class Composite * @implements {IComponent} */ var Composite = /** @class */ (function () { function Composite(name) { this.name = name; this.children = []; } Composite.prototype.add = function (node) { node.parent = this; this.children.push(node); return this; }; Composite.prototype.remove = function (node) { var component; if (index_1.isString(node)) { component = this.find(function (cmp) { return index_1.isString(node) ? cmp.name === node : cmp.equals(node); }); } else if (node) { component = node; } else { component = this; } if (!component.parent) { return this; } else if (this.equals(component.parent)) { this.children.splice(this.children.indexOf(component), 1); component.parent = null; return this; } else { component.parent.remove(component); return this; } }; Composite.prototype.find = function (express, mode) { var component; this.each(function (item) { if (component) { return false; } var isFinded = index_1.isFunction(express) ? express(item) : express === item; if (isFinded) { component = item; return false; } return true; }, mode); return (component || this.empty()); }; Composite.prototype.filter = function (express, mode) { var nodes = []; this.each(function (item) { if (express(item)) { nodes.push(item); } }, mode); return nodes; }; Composite.prototype.each = function (express, mode) { mode = mode || types_1.Mode.traverse; var r; switch (mode) { case types_1.Mode.route: r = this.routeUp(express); break; case types_1.Mode.children: r = this.eachChildren(express); break; case types_1.Mode.traverse: r = this.trans(express); break; case types_1.Mode.traverseLast: r = this.transAfter(express); break; default: r = this.trans(express); break; } return r; }; Composite.prototype.eachChildren = function (express) { (this.children || []).forEach(function (item) { return express(item); }); }; /** *do express work in routing. * *@param {Express<T, void | boolean>} express * *@memberOf IComponent */ Composite.prototype.routeUp = function (express) { if (express(this) === false) { return false; } ; if (this.parent && this.parent.routeUp) { return this.parent.routeUp(express); } }; /** *translate all sub context to do express work. * *@param {Express<IComponent, void | boolean>} express * *@memberOf IComponent */ Composite.prototype.trans = function (express) { if (express(this) === false) { return false; } var children = this.children || []; for (var i = 0; i < children.length; i++) { var result = children[i].trans(express); if (result === false) { return result; } } return true; }; Composite.prototype.transAfter = function (express) { var children = this.children || []; for (var i = 0; i < children.length; i++) { var result = children[i].transAfter(express); if (result === false) { return false; } } if (express(this) === false) { return false; } return true; }; Composite.prototype.equals = function (node) { return this === node; }; Composite.prototype.empty = function () { return NullComponent_1.NullNode; }; Composite.prototype.isEmpty = function () { return this.equals(this.empty()); }; return Composite; }()); exports.Composite = Composite; //# sourceMappingURL=../sourcemaps/components/Composite.js.map