UNPKG

dbweb-common

Version:

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

259 lines 25.6 kB
/** * @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=