dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
319 lines • 26 kB
JavaScript
/**
* @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=