UNPKG

dbweb-common

Version:

用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上

319 lines 26 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { ElementsService, CurrentService, ProjectService } from 'dbweb-core'; export class NavtreeService { // 图标 // get data(): NavItem[] { // console.log(this.dataChange.value); // return this.dataChange.value; // } /** * @param {?} eles * @param {?} project */ constructor(eles, project) { this.eles = eles; this.project = project; this.root = { children: [] }; // dataChange = new BehaviorSubject<NavItem[]>([]); this.icons = ['security', 'dns', 'gamepad']; // 图标 // this.initialize(); this.init(); for (let i = 0; i < Math.min(this.root.children.length, this.icons.length); i++) { this.root.children[i].iconName = this.icons[i]; } } /** * @return {?} */ init() { // 设置项目图标 if (this.project.categoryIcons && this.project.categoryIcons.length > 0) { this.icons = this.project.categoryIcons; } // 如果已经初始化过,则跳出 if (this.root.children.length > 0) { return; } this.eles.getElesAsArray().forEach((/** * @param {?} element * @return {?} */ element => { // 后端api或者子级工作元素的,不需要加入到node列表中 if (!element.NotMenu) { this.addElement(element, this.root, element.Category.split('/'), 0, null, element.Icon); } })); // console.log(this.root.children[0].iconName); // console.log(this.root); } /** * @private * @param {?} str * @return {?} */ clearText(str) { if (str.search(/[0-9]{2}\./) > -1) { return str.substr(3); } return str; } // 采用插入排序方法逐条插入 /** * @private * @param {?} ele * @param {?} parent * @param {?} paths * @param {?} level * @param {?} parents * @param {?} iconName * @return {?} */ addElement(ele, parent, paths, level, parents, iconName) { if (paths.length === 0) { // 实际插入的菜单项,也需要排序 /** @type {?} */ const idx = parent.children.findIndex((/** * @param {?} item * @return {?} */ item => (ele.Label || ele.Name).localeCompare(item.fullTitle || item.name) <= 0)); /** @type {?} */ const node = { name: ele.Name, fullTitle: ele.Label, title: this.clearText(ele.Label || ele.Name), url: this.eles.frontElementURL(ele.Name, decodeURI(ele.URL)), level: level, parent: parents, iconName: iconName }; if (idx === -1) { parent.children.push(node); } else { parent.children.splice(idx, 0, node); } return; } /** @type {?} */ const findIdx = parent.children.findIndex((/** * @param {?} item * @return {?} */ item => paths[0].localeCompare(item.name) <= 0)); /** @type {?} */ let categoryNode; if (findIdx !== -1 && parent.children[findIdx].name === paths[0]) { categoryNode = parent.children[findIdx]; } else { categoryNode = { name: paths[0], fullTitle: paths[0], title: this.clearText(paths[0]), level: level, parent: parents, iconName: iconName, children: [] }; // 如果找不到,则说明比里面任何一个都大,则是追加到最后一个 if (findIdx === -1) { parent.children.push(categoryNode); } else { parent.children.splice(findIdx, 0, categoryNode); } } this.addElement(ele, categoryNode, paths.slice(1), level + 1, categoryNode, iconName); } } NavtreeService.decorators = [ { type: Injectable } ]; /** @nocollapse */ NavtreeService.ctorParameters = () => [ { type: ElementsService }, { type: ProjectService } ]; if (false) { /** @type {?} */ NavtreeService.prototype.root; /** @type {?} */ NavtreeService.prototype.icons; /** * @type {?} * @private */ NavtreeService.prototype.eles; /** * @type {?} * @private */ NavtreeService.prototype.project; } export class NavHome { /** * @param {?} current * @param {?} database * @param {?} prj */ constructor(current, database, prj) { this.current = current; this.database = database; this.prj = prj; this.chatMessages = []; this.unread = null; // 未读信息数 // 未读信息数 this.openNodeCurrent = []; this.activeNode = []; this.subs = []; } /** * @param {?} node * @return {?} */ recursionFun(node) { if (node.level <= 0) { return this.openNodeCurrent.push(node); } if (node.level >= 1) { this.openNodeCurrent.push(node); this.recursionFun(node.parent); } } /** * @param {?} node * @return {?} */ recursionFuns(node) { if (node.level <= 0) { return this.activeNode.push(node); } if (node.level >= 1) { this.activeNode.push(node); this.recursionFuns(node.parent); } } /** * @param {?} node * @return {?} */ gradually(node) { if (this.activeNode.length !== 0) { this.activeNode.splice(0, this.activeNode.length); } this.recursionFuns(node); } /** * @param {?} node * @return {?} */ openNode(node) { /** @type {?} */ const openboolean = this.openNodeCurrent.includes(node); if (this.openNodeCurrent.length !== 0) { this.openNodeCurrent.splice(0, this.openNodeCurrent.length); } if (openboolean) { if (node.level >= 1) { this.recursionFun(node.parent); } if (node.level === 0) { this.recursionFun(this.database.root); } } else { this.recursionFun(node); } } /** * @return {?} */ messages() { /** @type {?} */ const chatData = JSON.parse(this.prj.loadData('chatdata')); if (chatData == null) { this.prj.saveData('chatdata', JSON.stringify(this.chatMessages)); } this.subs.push(this.current.wsChat.observable.subscribe((/** * @param {?} n * @return {?} */ n => { this.chatMessages.push(n); this.prj.saveData('chatdata', JSON.stringify(this.chatMessages)); if (n != null) { this.unread = this.unread + 1; } // console.log(JSON.parse(localStorage.getItem('chatdata'))); }), (/** * @param {?} err * @return {?} */ err => console.log(err)), (/** * @return {?} */ () => console.log('component')))); this.chatMessages = chatData; } /** * @param {?} item * @return {?} */ fromChildFunc(item) { if (this.activeNode.length !== 0) { this.activeNode.splice(0, this.activeNode.length); } this.recursionFuns(item); if (this.openNodeCurrent.length !== 0) { this.openNodeCurrent.splice(0, this.openNodeCurrent.length); } this.recursionFun(item); } } NavHome.decorators = [ { type: Injectable } ]; /** @nocollapse */ NavHome.ctorParameters = () => [ { type: CurrentService }, { type: NavtreeService }, { type: ProjectService } ]; if (false) { /** @type {?} */ NavHome.prototype.portraitURL; /** @type {?} */ NavHome.prototype.chatMessages; /** @type {?} */ NavHome.prototype.messageBody; /** @type {?} */ NavHome.prototype.unread; /** @type {?} */ NavHome.prototype.openNodeCurrent; /** @type {?} */ NavHome.prototype.activeNode; /** @type {?} */ NavHome.prototype.subs; /** * @type {?} * @private */ NavHome.prototype.current; /** * @type {?} * @private */ NavHome.prototype.database; /** * @type {?} * @private */ NavHome.prototype.prj; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2hvbWUvbmF2LWl0ZW1uL25hdnRyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQVksZUFBZSxFQUFlLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJcEcsTUFBTSxPQUFPLGNBQWM7Ozs7Ozs7Ozs7SUFVMUIsWUFBb0IsSUFBcUIsRUFBVSxPQUF1QjtRQUF0RCxTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBVDFFLFNBQUksR0FBWSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7UUFFakMsVUFBSyxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFRNUMscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9DO0lBQ0YsQ0FBQzs7OztJQUNELElBQUk7UUFDSCxTQUFTO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxF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SUFBRSwyQkFBZ0M7Ozs7O0lBQUUsc0JBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSUVsZW1lbnQsIEVsZW1lbnRzU2VydmljZSwgQ2hhdE1lc3NhZ2UsIEN1cnJlbnRTZXJ2aWNlLCBQcm9qZWN0U2VydmljZSB9IGZyb20gJ2Rid2ViLWNvcmUnO1xyXG5pbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSAnLi9uYXYtaXRlbSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOYXZ0cmVlU2VydmljZSB7XHJcblx0cm9vdDogTmF2SXRlbSA9IHsgY2hpbGRyZW46IFtdIH07XHJcblx0Ly8gZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TmF2SXRlbVtdPihbXSk7XHJcblx0aWNvbnMgPSBbJ3NlY3VyaXR5JywgJ2RucycsICdnYW1lcGFkJ107IC8vIOWbvuagh1xyXG5cclxuXHQvLyBnZXQgZGF0YSgpOiBOYXZJdGVtW10ge1xyXG5cdC8vIFx0Y29uc29sZS5sb2codGhpcy5kYXRhQ2hhbmdlLnZhbHVlKTtcclxuXHQvLyBcdHJldHVybiB0aGlzLmRhdGFDaGFuZ2UudmFsdWU7XHJcblx0Ly8gfVxyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZXM6IEVsZW1lbnRzU2VydmljZSwgcHJpdmF0ZSBwcm9qZWN0OiBQcm9qZWN0U2VydmljZSkge1xyXG5cdFx0Ly8gdGhpcy5pbml0aWFsaXplKCk7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4odGhpcy5yb290LmNoaWxkcmVuLmxlbmd0aCwgdGhpcy5pY29ucy5sZW5ndGgpOyBpKyspIHtcclxuXHRcdFx0dGhpcy5yb290LmNoaWxkcmVuW2ldLmljb25OYW1lID0gdGhpcy5pY29uc1tpXTtcclxuXHRcdH1cclxuXHR9XHJcblx0aW5pdCgpIHtcclxuXHRcdC8vIOiuvue9rumhueebruWbvuagh1xyXG5cdFx0aWYgKHRoaXMucHJvamVjdC5jYXRlZ29yeUljb25zICYmIHRoaXMucHJvamVjdC5jYXRlZ29yeUljb25zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0dGhpcy5pY29ucyA9IHRoaXMucHJvamVjdC5jYXRlZ29yeUljb25zO1xyXG5cdFx0fVxyXG5cdFx0Ly8g5aaC5p6c5bey57uP5Yid5aeL5YyW6L+H77yM5YiZ6Lez5Ye6XHJcblx0XHRpZiAodGhpcy5yb290LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5lbGVzLmdldEVsZXNBc0FycmF5KCkuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHRcdFx0Ly8g5ZCO56uvYXBp5oiW6ICF5a2Q57qn5bel5L2c5YWD57Sg55qE77yM5LiN6ZyA6KaB5Yqg5YWl5Yiwbm9kZeWIl+ihqOS4rVxyXG5cdFx0XHRpZiAoIWVsZW1lbnQuTm90TWVudSkge1xyXG5cdFx0XHRcdHRoaXMuYWRkRWxlbWVudChlbGVtZW50LCB0aGlzLnJvb3QsIGVsZW1lbnQuQ2F0ZWdvcnkuc3BsaXQoJy8nKSwgMCwgbnVsbCwgZWxlbWVudC5JY29uKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLnJvb3QuY2hpbGRyZW5bMF0uaWNvbk5hbWUpO1xyXG5cdFx0Ly8gY29uc29sZS5sb2codGhpcy5yb290KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjbGVhclRleHQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0aWYgKHN0ci5zZWFyY2goL1swLTldezJ9XFwuLykgPiAtMSkge1xyXG5cdFx0XHRyZXR1cm4gc3RyLnN1YnN0cigzKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBzdHI7XHJcblx0fVxyXG5cdC8vIOmHh+eUqOaPkuWFpeaOkuW6j+aWueazlemAkOadoeaPkuWFpVxyXG5cdHByaXZhdGUgYWRkRWxlbWVudChcclxuXHRcdGVsZTogSUVsZW1lbnQsXHJcblx0XHRwYXJlbnQ6IE5hdkl0ZW0sXHJcblx0XHRwYXRoczogc3RyaW5nW10sXHJcblx0XHRsZXZlbDogbnVtYmVyLFxyXG5cdFx0cGFyZW50czogTmF2SXRlbSxcclxuXHRcdGljb25OYW1lOiBzdHJpbmdcclxuXHQpIHtcclxuXHRcdGlmIChwYXRocy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0Ly8g5a6e6ZmF5o+S5YWl55qE6I+c5Y2V6aG577yM5Lmf6ZyA6KaB5o6S5bqPXHJcblx0XHRcdGNvbnN0IGlkeCA9IHBhcmVudC5jaGlsZHJlbi5maW5kSW5kZXgoXHJcblx0XHRcdFx0aXRlbSA9PiAoZWxlLkxhYmVsIHx8IGVsZS5OYW1lKS5sb2NhbGVDb21wYXJlKGl0ZW0uZnVsbFRpdGxlIHx8IGl0ZW0ubmFtZSkgPD0gMFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRjb25zdCBub2RlID0ge1xyXG5cdFx0XHRcdG5hbWU6IGVsZS5OYW1lLFxyXG5cdFx0XHRcdGZ1bGxUaXRsZTogZWxlLkxhYmVsLFxyXG5cdFx0XHRcdHRpdGxlOiB0aGlzLmNsZWFyVGV4dChlbGUuTGFiZWwgfHwgZWxlLk5hbWUpLFxyXG5cdFx0XHRcdHVybDogdGhpcy5lbGVzLmZyb250RWxlbWVudFVSTChlbGUuTmFtZSwgZGVjb2RlVVJJKGVsZS5VUkwpKSxcclxuXHRcdFx0XHRsZXZlbDogbGV2ZWwsXHJcblx0XHRcdFx0cGFyZW50OiBwYXJlbnRzLFxyXG5cdFx0XHRcdGljb25OYW1lOiBpY29uTmFtZVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRpZiAoaWR4ID09PSAtMSkge1xyXG5cdFx0XHRcdHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaWR4LCAwLCBub2RlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaW5kSWR4ID0gcGFyZW50LmNoaWxkcmVuLmZpbmRJbmRleChpdGVtID0+IHBhdGhzWzBdLmxvY2FsZUNvbXBhcmUoaXRlbS5uYW1lKSA8PSAwKTtcclxuXHRcdGxldCBjYXRlZ29yeU5vZGU6IE5hdkl0ZW07XHJcblx0XHRpZiAoZmluZElkeCAhPT0gLTEgJiYgcGFyZW50LmNoaWxkcmVuW2ZpbmRJZHhdLm5hbWUgPT09IHBhdGhzWzBdKSB7XHJcblx0XHRcdGNhdGVnb3J5Tm9kZSA9IHBhcmVudC5jaGlsZHJlbltmaW5kSWR4XTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNhdGVnb3J5Tm9kZSA9IHtcclxuXHRcdFx0XHRuYW1lOiBwYXRoc1swXSxcclxuXHRcdFx0XHRmdWxsVGl0bGU6IHBhdGhzWzBdLFxyXG5cdFx0XHRcdHRpdGxlOiB0aGlzLmNsZWFyVGV4dChwYXRoc1swXSksXHJcblx0XHRcdFx0bGV2ZWw6IGxldmVsLFxyXG5cdFx0XHRcdHBhcmVudDogcGFyZW50cyxcclxuXHRcdFx0XHRpY29uTmFtZTogaWNvbk5hbWUsXHJcblx0XHRcdFx0Y2hpbGRyZW46IFtdXHJcblx0XHRcdH07XHJcblx0XHRcdC8vIOWmguaenOaJvuS4jeWIsO+8jOWImeivtOaYjuavlOmHjOmdouS7u+S9leS4gOS4qumDveWkp++8jOWImeaYr+i/veWKoOWIsOacgOWQjuS4gOS4qlxyXG5cdFx0XHRpZiAoZmluZElkeCA9PT0gLTEpIHtcclxuXHRcdFx0XHRwYXJlbnQuY2hpbGRyZW4ucHVzaChjYXRlZ29yeU5vZGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoZmluZElkeCwgMCwgY2F0ZWdvcnlOb2RlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5hZGRFbGVtZW50KGVsZSwgY2F0ZWdvcnlOb2RlLCBwYXRocy5zbGljZSgxKSwgbGV2ZWwgKyAxLCBjYXRlZ29yeU5vZGUsIGljb25OYW1lKTtcclxuXHR9XHJcbn1cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTmF2SG9tZSB7XHJcblx0cG9ydHJhaXRVUkw6IHN0cmluZztcclxuXHRjaGF0TWVzc2FnZXM6IENoYXRNZXNzYWdlW10gPSBbXTtcclxuXHRtZXNzYWdlQm9keTogc3RyaW5nO1xyXG5cdHVucmVhZDogbnVtYmVyID0gbnVsbDsgLy8g5pyq6K+75L+h5oGv5pWwXHJcblx0b3Blbk5vZGVDdXJyZW50OiBOYXZJdGVtW10gPSBbXTtcclxuXHRhY3RpdmVOb2RlOiBOYXZJdGVtW10gPSBbXTtcclxuXHRzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgY3VycmVudDogQ3VycmVudFNlcnZpY2UsIHByaXZhdGUgZGF0YWJhc2U6IE5hdnRyZWVTZXJ2aWNlLCBwcml2YXRlIHByajogUHJvamVjdFNlcnZpY2UpIHt9XHJcblx0cmVjdXJzaW9uRnVuKG5vZGU6IE5hdkl0ZW0pIHtcclxuXHRcdGlmIChub2RlLmxldmVsIDw9IDApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3Blbk5vZGVDdXJyZW50LnB1c2gobm9kZSk7XHJcblx0XHR9XHJcblx0XHRpZiAobm9kZS5sZXZlbCA+PSAxKSB7XHJcblx0XHRcdHRoaXMub3Blbk5vZGVDdXJyZW50LnB1c2gobm9kZSk7XHJcblx0XHRcdHRoaXMucmVjdXJzaW9uRnVuKG5vZGUucGFyZW50KTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmVjdXJzaW9uRnVucyhub2RlOiBOYXZJdGVtKSB7XHJcblx0XHRpZiAobm9kZS5sZXZlbCA8PSAwKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmFjdGl2ZU5vZGUucHVzaChub2RlKTtcclxuXHRcdH1cclxuXHRcdGlmIChub2RlLmxldmVsID49IDEpIHtcclxuXHRcdFx0dGhpcy5hY3RpdmVOb2RlLnB1c2gobm9kZSk7XHJcblx0XHRcdHRoaXMucmVjdXJzaW9uRnVucyhub2RlLnBhcmVudCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGdyYWR1YWxseShub2RlOiBOYXZJdGVtKSB7XHJcblx0XHRpZiAodGhpcy5hY3RpdmVOb2RlLmxlbmd0aCAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLmFjdGl2ZU5vZGUuc3BsaWNlKDAsIHRoaXMuYWN0aXZlTm9kZS5sZW5ndGgpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5yZWN1cnNpb25GdW5zKG5vZGUpO1xyXG5cdH1cclxuXHRvcGVuTm9kZShub2RlOiBOYXZJdGVtKSB7XHJcblx0XHRjb25zdCBvcGVuYm9vbGVhbiA9IHRoaXMub3Blbk5vZGVDdXJyZW50LmluY2x1ZGVzKG5vZGUpO1xyXG5cdFx0aWYgKHRoaXMub3Blbk5vZGVDdXJyZW50Lmxlbmd0aCAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLm9wZW5Ob2RlQ3VycmVudC5zcGxpY2UoMCwgdGhpcy5vcGVuTm9kZUN1cnJlbnQubGVuZ3RoKTtcclxuXHRcdH1cclxuXHRcdGlmIChvcGVuYm9vbGVhbikge1xyXG5cdFx0XHRpZiAobm9kZS5sZXZlbCA+PSAxKSB7XHJcblx0XHRcdFx0dGhpcy5yZWN1cnNpb25GdW4obm9kZS5wYXJlbnQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChub2RlLmxldmVsID09PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5yZWN1cnNpb25GdW4odGhpcy5kYXRhYmFzZS5yb290KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5yZWN1cnNpb25GdW4obm9kZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdG1lc3NhZ2VzKCkge1xyXG5cdFx0Y29uc3QgY2hhdERhdGEgPSBKU09OLnBhcnNlKHRoaXMucHJqLmxvYWREYXRhKCdjaGF0ZGF0YScpKTtcclxuXHRcdGlmIChjaGF0RGF0YSA9PSBudWxsKSB7XHJcblx0XHRcdHRoaXMucHJqLnNhdmVEYXRhKCdjaGF0ZGF0YScsIEpTT04uc3RyaW5naWZ5KHRoaXMuY2hhdE1lc3NhZ2VzKSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnN1YnMucHVzaChcclxuXHRcdFx0dGhpcy5jdXJyZW50LndzQ2hhdC5vYnNlcnZhYmxlLnN1YnNjcmliZShcclxuXHRcdFx0XHRuID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuY2hhdE1lc3NhZ2VzLnB1c2gobik7XHJcblx0XHRcdFx0XHR0aGlzLnByai5zYXZlRGF0YSgnY2hhdGRhdGEnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmNoYXRNZXNzYWdlcykpO1xyXG5cdFx0XHRcdFx0aWYgKG4gIT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnVucmVhZCA9IHRoaXMudW5yZWFkICsgMTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NoYXRkYXRhJykpKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVyciA9PiBjb25zb2xlLmxvZyhlcnIpLFxyXG5cdFx0XHRcdCgpID0+IGNvbnNvbGUubG9nKCdjb21wb25lbnQnKVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5jaGF0TWVzc2FnZXMgPSBjaGF0RGF0YTtcclxuXHR9XHJcblx0ZnJvbUNoaWxkRnVuYyhpdGVtOiBOYXZJdGVtKSB7XHJcblx0XHRpZiAodGhpcy5hY3RpdmVOb2RlLmxlbmd0aCAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLmFjdGl2ZU5vZGUuc3BsaWNlKDAsIHRoaXMuYWN0aXZlTm9kZS5sZW5ndGgpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5yZWN1cnNpb25GdW5zKGl0ZW0pO1xyXG5cdFx0aWYgKHRoaXMub3Blbk5vZGVDdXJyZW50Lmxlbmd0aCAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLm9wZW5Ob2RlQ3VycmVudC5zcGxpY2UoMCwgdGhpcy5vcGVuTm9kZUN1cnJlbnQubGVuZ3RoKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmVjdXJzaW9uRnVuKGl0ZW0pO1xyXG5cdH1cclxufVxyXG4iXX0=