dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
259 lines • 25.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, HostBinding, ElementRef } from '@angular/core';
import { ElementsService } from 'dbweb-core';
import { IndexService } from '../index.service';
import { FormControl } from '@angular/forms';
import { startWith, map } from 'rxjs/operators';
import { Router } from '@angular/router';
export class NavigationComponent {
/**
* @param {?} svr
* @param {?} eles
* @param {?} router
* @param {?} eRef
*/
constructor(svr, eles, router, eRef) {
this.svr = svr;
this.eles = eles;
this.router = router;
this.eRef = eRef;
this.hostClass = true;
this.formControl = new FormControl();
this.validElement = false;
this.displayElements = [];
this.MaxElementNumber = 8;
this.handleNav = false;
this.navName = 'navigation';
this.navSize = this.svr.userSetting.Cards.find((/**
* @param {?} x
* @return {?}
*/
x => x.Type === this.navName)).Size;
// console.log(this.navSize);
}
/**
* @return {?}
*/
ngOnInit() {
this.allEles = Object.values(this.eles.getEles()).filter((/**
* @param {?} e
* @return {?}
*/
e => !e.NotMenu));
this.filterElements = this.formControl.valueChanges.pipe(startWith(''), map((/**
* @param {?} v
* @return {?}
*/
v => {
/** @type {?} */
const arr = this.allEles.filter((/**
* @param {?} e
* @return {?}
*/
e => this.formatElementDisplayLabel(e).toLowerCase().includes(v.toLowerCase())));
return arr.sort((/**
* @param {?} a
* @param {?} b
* @return {?}
*/
(a, b) => a.title().localeCompare(b.title())));
})));
this.formControl.valueChanges.subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
this.validElement = !!this.allEles.find((/**
* @param {?} e
* @return {?}
*/
e => this.formatElementDisplayLabel(e) === v));
}));
this.refreshDisplayElements();
}
/**
* @param {?} ele
* @return {?}
*/
formatElementDisplayLabel(ele) {
return `${ele.title()}(${ele.Name})`;
}
/**
* @return {?}
*/
refreshDisplayElements() {
this.displayElements = this.svr.userSetting.NavigationElements
.filter((/**
* @param {?} v
* @return {?}
*/
v => this.eles.get(v)))
.map((/**
* @param {?} v
* @return {?}
*/
v => this.eles.get(v)));
// console.log('----', this.displayElements);
}
/**
* @param {?} val
* @return {?}
*/
change(val) {
console.log(val);
}
/**
* @return {?}
*/
add() {
/** @type {?} */
const ele = this.allEles.find((/**
* @param {?} v
* @return {?}
*/
v => this.formatElementDisplayLabel(v) === this.formControl.value));
// console.log(ele);
if (!this.svr.userSetting.NavigationElements.includes(ele.Name)) {
this.svr.userSetting.NavigationElements.push(ele.Name);
this.svr.updateSetting().subscribe((/**
* @return {?}
*/
() => {
this.refreshDisplayElements();
}));
}
}
/**
* @return {?}
*/
execute() {
/** @type {?} */
const ele = this.allEles.find((/**
* @param {?} v
* @return {?}
*/
v => this.formatElementDisplayLabel(v) === this.formControl.value));
this.router.navigateByUrl(this.eles.frontElementURL(ele.Name, decodeURI(ele.URL)));
}
/**
* @param {?} ele
* @return {?}
*/
routerLink(ele) {
return this.eles.frontElementURL(ele.Name, decodeURI(ele.URL));
}
// ↓ 浮窗删除选择源元素
/**
* @param {?} i
* @return {?}
*/
removeEle(i) {
this.svr.userSetting.NavigationElements.splice(i, 1);
this.svr.updateSetting().subscribe((/**
* @return {?}
*/
() => {
this.refreshDisplayElements();
}));
}
/**
* @param {?} cardName
* @return {?}
*/
removeCard(cardName) {
/** @type {?} */
const arr = this.svr.userSetting.Cards;
this.svr.userSetting.Cards = arr.filter((/**
* @param {?} item
* @return {?}
*/
(item) => item.Type !== cardName));
}
/**
* @return {?}
*/
hasEles() {
/** @type {?} */
const ele = this.allEles.find((/**
* @param {?} v
* @return {?}
*/
v => this.formatElementDisplayLabel(v) === this.formControl.value));
return this.svr.userSetting.NavigationElements.includes(ele.Name);
}
/**
* @param {?} sz
* @return {?}
*/
changeSize(sz) {
this.navSize = sz;
this.svr.userSetting.Cards.find((/**
* @param {?} x
* @return {?}
*/
x => x.Type === 'navigation')).Size = this.navSize;
this.svr.updateSetting().subscribe((/**
* @return {?}
*/
() => {
console.log(this.svr.userSetting.Cards);
}));
}
}
NavigationComponent.decorators = [
{ type: Component, args: [{
selector: 'common-navigation',
template: "<div class=\"nav-main\">\r\n\t<!-- 1. \u4E0A\u534A\u90E8\u5206 -->\r\n\t<div class=\"part-A mat-elevation-z2\">\r\n\t\t<div class=\"a-title\">\r\n\t\t\t<div class=\"title-left\">\r\n\t\t\t\t<mat-icon class=\"apps\" svgIcon=\"apps\"></mat-icon>\r\n\t\t\t\t<span>\u5FEB\u901F\u64CD\u4F5C\u680F</span>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"title-right\">\r\n\t\t\t\t<common-more-vert disShow=\"true\" [disElements]=\"displayElements\" [typeName]=\"navName\" [theNavSize]=\"navSize\" (subMenuClick)=\"removeEle($event)\">\r\n\t\t\t\t</common-more-vert>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"a-main\">\r\n\t\t\t<div class=\"ele-icon\" *ngFor=\"let ele of displayElements\"\r\n\t\t\t\t[routerLink]=\"routerLink(ele)\" matTooltip=\"{{ ele.title() }}\">\r\n\t\t\t\t<div class=\"icon\">\r\n\t\t\t\t\t<mat-icon class=\"mini-icon\" [svgIcon]=\"ele.Icon || 'dns'\">\r\n\t\t\t\t\t</mat-icon>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"icon-text\">\r\n\t\t\t\t\t{{ ele.title() }}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<!-- 2. \u4E0B\u534A\u90E8\u5206 -->\r\n\t<div class=\"part-B mat-elevation-z2\">\r\n\t\t<!-- 2.1 \u5DE6\u4FA7input -->\r\n\t\t<div class=\"b-left\">\r\n\t\t\t<input #inputHaveLength class=\"b-input\" type=\"text\"\r\n\t\t\t\t[matAutocomplete]=\"auto\" [formControl]=\"formControl\"\r\n\t\t\t\tplaceholder=\"\u641C\u7D22\u83DC\u5355\u9879\" />\r\n\t\t\t<mat-autocomplete #auto=\"matAutocomplete\">\r\n\t\t\t\t<mat-option class=\"option-title\"\r\n\t\t\t\t\t*ngFor=\"let ele of filterElements | async\"\r\n\t\t\t\t\t[value]=\"formatElementDisplayLabel(ele)\">\r\n\t\t\t\t\t{{ ele.title() }}\r\n\t\t\t\t\t<span class=\"option-text\">({{ ele.Name }})</span>\r\n\t\t\t\t</mat-option>\r\n\t\t\t</mat-autocomplete>\r\n\t\t</div>\r\n\r\n\t\t<!-- 2.2 \u53F3\u4FA7\u56FE\u6807 -->\r\n\t\t<div class=\"b-right\">\r\n\t\t\t<div *ngIf=\"!inputHaveLength.value.length\">\r\n\t\t\t\t<button mat-button disabled>\r\n\t\t\t\t\t<mat-icon svgIcon=\"search\"></mat-icon>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"inputLength\" *ngIf=\"inputHaveLength.value.length\">\r\n\t\t\t\t<div matTooltip=\"\u589E\u52A0\">\r\n\t\t\t\t\t<button mat-button color=\"primary\"\r\n\t\t\t\t\t\t[disabled]=\"hasEles() || !validElement || svr.userSetting.NavigationElements.length >= MaxElementNumber\"\r\n\t\t\t\t\t\t(click)=\"add()\">\r\n\t\t\t\t\t\t<mat-icon svgIcon=\"add_circle\"></mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<button color=\"primary\" mat-button matTooltip=\"\u6267\u884C\"\r\n\t\t\t\t\t[disabled]=\"!validElement\" (click)=\"execute()\">\r\n\t\t\t\t\t<!-- \u5224\u65AD\u6267\u884C\u7ED3\u679C\uFF0C\u8FD9\u884C\u5E2E\u6211\u7559\u7740\u5427 -->\r\n\t\t\t\t\t<!-- {{validElement}} -->\r\n\t\t\t\t\t<mat-icon svgIcon=\"keyboard_arrow_right\"></mat-icon>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<!-- <mat-menu #dot=\"matMenu\" class=\"dotDot\">\r\n\t\t<button mat-menu-item [matMenuTriggerFor]=\"optionSelect\">\r\n\t\t\t<mat-icon svgIcon=\"spellcheck\"></mat-icon>\u9009\u62E9\u6E90\r\n\t\t</button>\r\n\t\t<button mat-menu-item [matMenuTriggerFor]=\"optionSize\">\r\n\t\t\t<mat-icon svgIcon=\"arrow_expand\"></mat-icon>\u5C3A\u5BF8\r\n\t\t</button>\r\n\t\t<button mat-menu-item (click)=\"removeCard('navigation')\">\r\n\t\t\t<mat-icon svgIcon=\"delete_outline\"></mat-icon>\u79FB\u9664\u6A21\u5757\r\n\t\t</button>\r\n\r\n\t</mat-menu>\r\n\r\n\t<mat-menu #optionSelect=\"matMenu\">\r\n\t\t<button mat-menu-item *ngFor=\"let ele of displayElements;let i = index\">\r\n\t\t\t<mat-icon color=\"warn\" class=\"remove-circle\" svgIcon=\"remove_circle\"\r\n\t\t\t\t(click)=\"removeEle(i)\">\r\n\t\t\t</mat-icon>\r\n\t\t\t<span>{{ele.title()}}</span>\r\n\t\t</button>\r\n\t</mat-menu>\r\n\r\n\t<mat-menu #optionSize=\"matMenu\">\r\n\t\t<button mat-menu-item [ngClass]=\"navSize === 'lg' ? 'pitched' : ''\"\r\n\t\t\t(click)=\"changeSize('lg')\">\r\n\t\t\t<mat-icon [svgIcon]=\"navSize === 'lg' ? 'done' : ''\">\r\n\t\t\t</mat-icon>\r\n\t\t\t<span>100%\u5BBD</span>\r\n\t\t</button>\r\n\t\t<button mat-menu-item\r\n\t\t\t[ngClass]=\"navSize === 'md' ? 'pitched' : ''\"\r\n\t\t\t(click)=\"changeSize('md')\">\r\n\t\t\t<mat-icon [svgIcon]=\"navSize === 'md' ? 'done' : ''\">\r\n\t\t\t</mat-icon>\r\n\t\t\t<span>2/3\u5BBD</span>\r\n\t\t</button>\r\n\t\t<button mat-menu-item\r\n\t\t\t[ngClass]=\"navSize === 'sm' ? 'pitched' : ''\"\r\n\t\t\t(click)=\"changeSize('sm')\">\r\n\t\t\t<mat-icon [svgIcon]=\"navSize === 'sm' ? 'done' : ''\">\r\n\t\t\t</mat-icon>\r\n\t\t\t<span>1/3\u5BBD</span>\r\n\t\t</button>\r\n\t</mat-menu> -->\r\n\r\n\r\n</div>",
styles: ["@charset \"UTF-8\";.nav-main{position:relative;width:100%;height:100%}.part-A{width:100%;height:200px;box-sizing:border-box;padding:8px 8px 0;border-radius:4px;overflow:hidden}.a-title{display:flex;justify-content:space-between;align-items:center;width:100%;height:24px;box-sizing:border-box;margin-bottom:20px;color:#61ccc4}.a-title .title-left,.a-title .title-right{align-items:center}.a-title .title-left{display:flex}.a-title .title-right{display:none}.a-title span{padding-left:8px;font:16px bold}.nav-main:hover .title-right{display:flex;justify-content:center;width:40px}.a-main{display:flex;flex-wrap:wrap;width:100%;height:144px;box-sizing:border-box;padding-left:4px;padding-right:4px;overflow:auto}.ele-icon{min-width:72px;height:56px;box-sizing:border-box;margin-left:4px;margin-right:4px;margin-bottom:16px;text-align:center;cursor:pointer}.icon{display:flex;justify-content:center;width:24px;height:24px;margin:0 auto 8px}.mini-icon{width:24px;height:24px}.icon-text{max-width:80px;margin:0 auto;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12px}.part-B{display:flex;justify-content:space-between;position:relative;align-items:center;width:100%;height:64px;box-sizing:border-box;margin-top:13px;border-radius:4px}.b-left{width:100%;height:40px}.b-input{width:100%;height:40px;line-height:40px;box-sizing:border-box;border:none;padding:0 24px;outline:0;font-size:14px;background-color:transparent}.option-title{box-sizing:border-box;padding-left:24px;padding-right:24px;font-size:14px}.option-text{font-size:12px}.b-right{position:absolute;right:24px;text-align:right;width:80px;height:40px}.b-right button{min-width:40px;height:40px;padding-left:0;padding-right:0}.b-right ::ng-deep .mat-button{background-color:none;min-width:0}.b-right ::ng-deep .mat-button-focus-overlay{background-color:transparent}.b-right ::ng-deep .mat-button-active-overlay{background-color:transparent}.inputLength{display:flex;justify-content:space-between}"]
}] }
];
/** @nocollapse */
NavigationComponent.ctorParameters = () => [
{ type: IndexService },
{ type: ElementsService },
{ type: Router },
{ type: ElementRef }
];
NavigationComponent.propDecorators = {
hostClass: [{ type: HostBinding, args: ['class.c-index-navigation',] }]
};
if (false) {
/** @type {?} */
NavigationComponent.prototype.hostClass;
/** @type {?} */
NavigationComponent.prototype.filterElements;
/** @type {?} */
NavigationComponent.prototype.formControl;
/** @type {?} */
NavigationComponent.prototype.validElement;
/** @type {?} */
NavigationComponent.prototype.allEles;
/** @type {?} */
NavigationComponent.prototype.displayElements;
/** @type {?} */
NavigationComponent.prototype.MaxElementNumber;
/** @type {?} */
NavigationComponent.prototype.handleNav;
/** @type {?} */
NavigationComponent.prototype.navSize;
/** @type {?} */
NavigationComponent.prototype.navName;
/** @type {?} */
NavigationComponent.prototype.svr;
/** @type {?} */
NavigationComponent.prototype.eles;
/**
* @type {?}
* @private
*/
NavigationComponent.prototype.router;
/**
* @type {?}
* @private
*/
NavigationComponent.prototype.eRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYndlYi1jb21tb24vIiwic291cmNlcyI6WyJsaWIvaW5kZXgvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQXdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQVcsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQXNCLE1BQU0sa0JBQWtCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUXpDLE1BQU0sT0FBTyxtQkFBbUI7Ozs7Ozs7SUFhL0IsWUFDUSxHQUFpQixFQUNqQixJQUFxQixFQUNwQixNQUFjLEVBQ2QsSUFBZ0I7UUFIakIsUUFBRyxHQUFILEdBQUcsQ0FBYztRQUNqQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsU0FBSSxHQUFKLElBQUksQ0FBWTtRQWhCZ0IsY0FBUyxHQUFHLElBQUksQ0FBQztRQUcxRCxnQkFBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckIsb0JBQWUsR0FBYyxFQUFFLENBQUM7UUFDdkIscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsWUFBTyxHQUFHLFlBQVksQ0FBQztRQVF0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJ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Qjs7SUFDckIsc0NBQW1COztJQUNuQiw4Q0FBZ0M7O0lBQ2hDLCtDQUE4Qjs7SUFDOUIsd0NBQWtCOztJQUNsQixzQ0FBa0I7O0lBQ2xCLHNDQUF1Qjs7SUFHdEIsa0NBQXdCOztJQUN4QixtQ0FBNEI7Ozs7O0lBQzVCLHFDQUFzQjs7Ozs7SUFDdEIsbUNBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgT25Jbml0LCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRWxlbWVudCwgRWxlbWVudHNTZXJ2aWNlIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IEluZGV4U2VydmljZSwgQ2FyZFNpemUsIENhcmRUeXBlIH0gZnJvbSAnLi4vaW5kZXguc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBzdGFydFdpdGgsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyB0cnVuY2F0ZSB9IGZyb20gJ2ZzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY29tbW9uLW5hdmlnYXRpb24nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9uYXZpZ2F0aW9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBIb3N0QmluZGluZygnY2xhc3MuYy1pbmRleC1uYXZpZ2F0aW9uJykgaG9zdENsYXNzID0gdHJ1ZTtcclxuXHJcblx0ZmlsdGVyRWxlbWVudHM6IE9ic2VydmFibGU8RWxlbWVudFtdPjtcclxuXHRmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG5cdHZhbGlkRWxlbWVudCA9IGZhbHNlO1xyXG5cdGFsbEVsZXM6IEVsZW1lbnRbXTtcclxuXHRkaXNwbGF5RWxlbWVudHM6IEVsZW1lbnRbXSA9IFtdO1xyXG5cdHJlYWRvbmx5IE1heEVsZW1lbnROdW1iZXIgPSA4O1xyXG5cdGhhbmRsZU5hdiA9IGZhbHNlO1xyXG5cdG5hdlNpemU6IENhcmRTaXplO1xyXG5cdG5hdk5hbWUgPSAnbmF2aWdhdGlvbic7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHN2cjogSW5kZXhTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGVsZXM6IEVsZW1lbnRzU2VydmljZSxcclxuXHRcdHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcblx0XHRwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWZcclxuXHQpIHtcclxuXHRcdHRoaXMubmF2U2l6ZSA9IHRoaXMuc3ZyLnVzZXJTZXR0aW5nLkNhcmRzLmZpbmQoeCA9PiB4LlR5cGUgPT09IHRoaXMubmF2TmFtZSkuU2l6ZTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKHRoaXMubmF2U2l6ZSk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuYWxsRWxlcyA9IE9iamVjdC52YWx1ZXModGhpcy5lbGVzLmdldEVsZXMoKSkuZmlsdGVyKGUgPT4gIWUuTm90TWVudSk7XHJcblx0XHR0aGlzLmZpbHRlckVsZW1lbnRzID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0c3RhcnRXaXRoKCcnKSxcclxuXHRcdFx0bWFwKHYgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGFyciA9IHRoaXMuYWxsRWxlcy5maWx0ZXIoZSA9PlxyXG5cdFx0XHRcdFx0dGhpcy5mb3JtYXRFbGVtZW50RGlzcGxheUxhYmVsKGUpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModi50b0xvd2VyQ2FzZSgpKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0cmV0dXJuIGFyci5zb3J0KChhLCBiKSA9PiBhLnRpdGxlKCkubG9jYWxlQ29tcGFyZShiLnRpdGxlKCkpKTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodiA9PiB7XHJcblx0XHRcdHRoaXMudmFsaWRFbGVtZW50ID0gISF0aGlzLmFsbEVsZXMuZmluZChlID0+IHRoaXMuZm9ybWF0RWxlbWVudERpc3BsYXlMYWJlbChlKSA9PT0gdik7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMucmVmcmVzaERpc3BsYXlFbGVtZW50cygpO1xyXG5cdH1cclxuXHRmb3JtYXRFbGVtZW50RGlzcGxheUxhYmVsKGVsZTogRWxlbWVudCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCR7ZWxlLnRpdGxlKCl9KCR7ZWxlLk5hbWV9KWA7XHJcblx0fVxyXG5cdHJlZnJlc2hEaXNwbGF5RWxlbWVudHMoKSB7XHJcblx0XHR0aGlzLmRpc3BsYXlFbGVtZW50cyA9IHRoaXMuc3ZyLnVzZXJTZXR0aW5nLk5hdmlnYXRpb25FbGVtZW50c1xyXG5cdFx0XHQuZmlsdGVyKHYgPT4gdGhpcy5lbGVzLmdldCh2KSlcclxuXHRcdFx0Lm1hcCh2ID0+IHRoaXMuZWxlcy5nZXQodikpO1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJy0tLS0nLCB0aGlzLmRpc3BsYXlFbGVtZW50cyk7XHJcblx0fVxyXG5cdGNoYW5nZSh2YWw6IHN0cmluZykge1xyXG5cdFx0Y29uc29sZS5sb2codmFsKTtcclxuXHR9XHJcblx0YWRkKCkge1xyXG5cdFx0Y29uc3QgZWxlID0gdGhpcy5hbGxFbGVzLmZpbmQodiA9PiB0aGlzLmZvcm1hdEVsZW1lbnREaXNwbGF5TGFiZWwodikgPT09IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpO1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZWxlKTtcclxuXHRcdGlmICghdGhpcy5zdnIudXNlclNldHRpbmcuTmF2aWdhdGlvbkVsZW1lbnRzLmluY2x1ZGVzKGVsZS5OYW1lKSkge1xyXG5cdFx0XHR0aGlzLnN2ci51c2VyU2V0dGluZy5OYXZpZ2F0aW9uRWxlbWVudHMucHVzaChlbGUuTmFtZSk7XHJcblx0XHRcdHRoaXMuc3ZyLnVwZGF0ZVNldHRpbmcoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVmcmVzaERpc3BsYXlFbGVtZW50cygpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZXhlY3V0ZSgpIHtcclxuXHRcdGNvbnN0IGVsZSA9IHRoaXMuYWxsRWxlcy5maW5kKHYgPT4gdGhpcy5mb3JtYXRFbGVtZW50RGlzcGxheUxhYmVsKHYpID09PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKTtcclxuXHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZWxlcy5mcm9udEVsZW1lbnRVUkwoZWxlLk5hbWUsIGRlY29kZVVSSShlbGUuVVJMKSkpO1xyXG5cdH1cclxuXHRyb3V0ZXJMaW5rKGVsZTogRWxlbWVudCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWxlcy5mcm9udEVsZW1lbnRVUkwoZWxlLk5hbWUsIGRlY29kZVVSSShlbGUuVVJMKSk7XHJcblx0fVxyXG5cclxuXHQvLyDihpMg5rWu56qX5Yig6Zmk6YCJ5oup5rqQ5YWD57SgXHJcblx0cmVtb3ZlRWxlKGk6IG51bWJlcikge1xyXG5cdFx0dGhpcy5zdnIudXNlclNldHRpbmcuTmF2aWdhdGlvbkVsZW1lbnRzLnNwbGljZShpLCAxKTtcclxuXHRcdHRoaXMuc3ZyLnVwZGF0ZVNldHRpbmcoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnJlZnJlc2hEaXNwbGF5RWxlbWVudHMoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlQ2FyZChjYXJkTmFtZTogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBhcnIgPSB0aGlzLnN2ci51c2VyU2V0dGluZy5DYXJkcztcclxuXHRcdHRoaXMuc3ZyLnVzZXJTZXR0aW5nLkNhcmRzID0gYXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLlR5cGUgIT09IGNhcmROYW1lKTtcclxuXHR9XHJcblx0aGFzRWxlcygpIHtcclxuXHRcdGNvbnN0IGVsZSA9IHRoaXMuYWxsRWxlcy5maW5kKHYgPT4gdGhpcy5mb3JtYXRFbGVtZW50RGlzcGxheUxhYmVsKHYpID09PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKTtcclxuXHRcdHJldHVybiB0aGlzLnN2ci51c2VyU2V0dGluZy5OYXZpZ2F0aW9uRWxlbWVudHMuaW5jbHVkZXMoZWxlLk5hbWUpO1xyXG5cdH1cclxuXHJcblx0Y2hhbmdlU2l6ZShzejogQ2FyZFNpemUpIHtcclxuXHRcdHRoaXMubmF2U2l6ZSA9IHN6O1xyXG5cdFx0dGhpcy5zdnIudXNlclNldHRpbmcuQ2FyZHMuZmluZCh4ID0+IHguVHlwZSA9PT0gJ25hdmlnYXRpb24nKS5TaXplID0gdGhpcy5uYXZTaXplO1xyXG5cdFx0dGhpcy5zdnIudXBkYXRlU2V0dGluZygpLnN1YnNjcmliZSgoKSA9PiB7XHJcblx0XHRcdGNvbnNvbGUubG9nKHRoaXMuc3ZyLnVzZXJTZXR0aW5nLkNhcmRzKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iXX0=