UNPKG

dbweb-common

Version:

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

280 lines 25.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { moveItemInArray } from '@angular/cdk/drag-drop'; import { Component, ContentChildren, Directive, Input, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core'; import { MatTab, MatTabGroup } from '@angular/material/tabs'; import { Router, RouterLink } from '@angular/router'; import { Subscription } from 'rxjs'; import { TabsService } from '../tabs.service'; // Directive to retrieve mat-tab options from router-tab.component.html // tslint:disable-next-line:directive-class-suffix export class RouterTab { /** * @param {?} tab * @param {?} routerLink */ constructor(tab, routerLink) { this.tab = tab; this.routerLink = routerLink; } } RouterTab.decorators = [ { type: Directive, args: [{ // tslint:disable-next-line:directive-selector selector: 'mat-tab[routerLink]' },] } ]; /** @nocollapse */ RouterTab.ctorParameters = () => [ { type: MatTab }, { type: RouterLink } ]; RouterTab.propDecorators = { routerLinkActiveOptions: [{ type: Input }] }; if (false) { /** @type {?} */ RouterTab.prototype.routerLinkActiveOptions; /** @type {?} */ RouterTab.prototype.tab; /** @type {?} */ RouterTab.prototype.routerLink; } // Directive to set tabs within app-router-tab // tslint:disable-next-line:directive-selector // tslint:disable-next-line:directive-class-suffix export class RouterTabItem { } RouterTabItem.decorators = [ { type: Directive, args: [{ selector: 'app-router-tab-item' },] } ]; RouterTabItem.propDecorators = { routerLink: [{ type: Input }], routerLinkActiveOptions: [{ type: Input }], actives: [{ type: Input }], disabled: [{ type: Input, args: ['disabled',] }], label: [{ type: Input }] }; if (false) { /** @type {?} */ RouterTabItem.prototype.routerLink; /** @type {?} */ RouterTabItem.prototype.routerLinkActiveOptions; /** @type {?} */ RouterTabItem.prototype.actives; /** @type {?} */ RouterTabItem.prototype.disabled; /** @type {?} */ RouterTabItem.prototype.label; } // RouterTab component with the same behavior than mat-tab-nav-bar export class RouterTabComponent { /** * @param {?} router * @param {?} tabs */ constructor(router, tabs) { this.router = router; this.tabs = tabs; this.subscription = new Subscription(); } /** * @param {?} event * @param {?} index * @return {?} */ dragStart(event, index) { this.tabBool = index; this.oldTab = this.tabs.active; } /** * @param {?} event * @return {?} */ dragEnded(event) { this.tabBool = null; } /** * @param {?} event * @return {?} */ drop(event) { // tslint:disable-next-line:radix /** @type {?} */ const previousIndex = parseInt(event.previousContainer.id.replace('list-', '')); // tslint:disable-next-line:radix /** @type {?} */ const currentIndex = parseInt(event.container.id.replace('list-', '')); if (previousIndex !== NaN && currentIndex !== NaN && previousIndex !== undefined && currentIndex !== undefined && previousIndex !== currentIndex) { // Do stuff // this.tabBool = null; // END Stuff moveItemInArray(this.tabs.tabs, previousIndex, currentIndex); } this.tabs.activeIndex = this.tabs.tabs.findIndex((/** * @param {?} v * @return {?} */ v => v === this.oldTab)); } /** * @param {?} index * @return {?} */ getAllListConnections(index) { /** @type {?} */ const connections = []; for (let i = 0; i < this.tabs.tabs.length; i++) { if (i !== index) { connections.push('list-' + i); } } return connections; } /** * @return {?} */ ngAfterViewInit() { // Remove tab click event this.matTabGroup._handleClick = (/** * @return {?} */ () => { }); // Select current tab depending on url this.setIndex(); // Subscription to navigation change // this.subscription.add( // this.router.events.subscribe(e => { // if (e instanceof NavigationEnd) { // setTimeout(() => this.setIndex(), 0); // } // }) // ); } /** * @return {?} */ ngOnDestroy() { this.subscription.unsubscribe(); } /** * @param {?} u * @return {?} */ getURLPath(u) { return ['/', ...u.root.children['primary'].segments.map((/** * @param {?} v * @return {?} */ v => v.path))]; } /** * @param {?} event * @param {?} index * @return {?} */ onTabsClick(event, index) { if (this.tabs.activeIndex !== index) { this.router.navigateByUrl(this.tabs.tabs[index].url, { state: this.tabs.tabs[index].data() }); } } /** * @param {?} e * @param {?} index * @return {?} */ removeClick(e, index) { if (this.tabs.removeTab(index)) { this.router.navigateByUrl(this.tabs.active.url, { state: this.tabs.active.data() }); } if (e && e.stopPropagation) { // 因此它支持W3C的stopPropagation()方法 e.stopPropagation(); } else { // 否则,我们需要使用IE的方式来取消事件冒泡 window.event.cancelBubble = true; } return false; } // Set current selected tab depending on navigation /** * @private * @return {?} */ setIndex() { this.routerTabs.find((/** * @param {?} tab * @param {?} i * @return {?} */ (tab, i) => { if (!this.router.isActive(tab.routerLink.urlTree, tab.routerLinkActiveOptions ? tab.routerLinkActiveOptions.exact : false)) { return false; } // tab.tab.isActive = true; this.tabs.activeIndex = i; // this.matTabGroup.selectedIndex = i; return true; })); } } RouterTabComponent.decorators = [ { type: Component, args: [{ // tslint:disable-next-line:component-selector selector: 'app-router-tab', template: "<mat-tab-group #matTabGroup class=\"hide-tab-wrapper\" [selectedIndex]=\"tabs.activeIndex\">\r\n\t<mat-tab\r\n\t\t*ngFor=\"let tab of tabs.tabs; let index = index\"\r\n\t\t[routerLink]=\"getURLPath(tab.url)\"\r\n\t\t[queryParams]=\"tab.url.queryParams\"\r\n\t>\r\n\t\t<ng-template mat-tab-label>\r\n\t\t\t<div\r\n\t\t\t\t[id]=\"'list-' + index\"\r\n\t\t\t\tclass=\"example-list router-tab-link\"\r\n\t\t\t\tcdkDropList\r\n\t\t\t\t(cdkDropListDropped)=\"drop($event)\"\r\n\t\t\t\t[cdkDropListConnectedTo]=\"getAllListConnections(index)\"\r\n\t\t\t>\r\n\t\t\t\t<a\r\n\t\t\t\t\tclass=\"example-box\"\r\n\t\t\t\t\t(click)=\"onTabsClick($event, index)\"\r\n\t\t\t\t\t(cdkDragStarted)=\"dragStart($event, index)\"\r\n\t\t\t\t\t(cdkDragEnded)=\"dragEnded($event)\"\r\n\t\t\t\t\tcdkDrag\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"example-custom-placeholder\" *cdkDragPlaceholder></span>\r\n\t\t\t\t\t<span [class.hide-tab]=\"index === matTabGroup.selectedIndex\" class=\"tabspan\">{{\r\n\t\t\t\t\t\ttab.titleObservable | async\r\n\t\t\t\t\t}}</span>\r\n\t\t\t\t\t<button (click)=\"removeClick($event, index)\" mat-icon-button class=\"tabButton\">\r\n\t\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t\tsvgIcon=\"close\"\r\n\t\t\t\t\t\t\t[class.hide-tab]=\"index === matTabGroup.selectedIndex\"\r\n\t\t\t\t\t\t\tclass=\"example-tab-icon\"\r\n\t\t\t\t\t\t></mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</a>\r\n\t\t\t\t<a *ngIf=\"tabBool === index\" class=\"example-box drag-source\" cdkDrag>\r\n\t\t\t\t\t<span class=\"example-custom-placeholder\" *cdkDragPlaceholder></span>\r\n\t\t\t\t\t<span [class.hide-tab]=\"index === matTabGroup.selectedIndex\" class=\"tabspan\">{{ tab.titleObservable | async }}</span>\r\n\t\t\t\t\t<button mat-icon-button class=\"tabButton\">\r\n\t\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t\tsvgIcon=\"close\"\r\n\t\t\t\t\t\t\t(click)=\"removeClick($event, index)\"\r\n\t\t\t\t\t\t\tclass=\"example-tab-icon\"\r\n\t\t\t\t\t\t></mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</a>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</mat-tab>\r\n</mat-tab-group>\r\n", encapsulation: ViewEncapsulation.None, styles: [".hide-tab-wrapper .mat-tab-body-wrapper{display:none!important}.mat-tab-label{height:30px!important;min-width:160px!important;line-height:30px;text-align:left;font-size:12px;display:block;opacity:1!important;padding:0!important;position:relative}.mat-tab-label .tabButton{position:absolute;right:0;top:-3px;height:30px;width:30px;line-height:30px}.mat-tab-label .tabButton .example-tab-icon{width:16px;height:16px}.router-tab-link{height:30px;min-width:160px}.example-list{background:#fff;border-radius:4px;overflow:hidden;display:block}.example-box{min-width:160px;height:30px;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:content-box}.drag-source{opacity:.5}.cdk-drag-preview{width:100%;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);opacity:.5;font-size:12px}.cdk-drag-preview .mat-button-wrapper{width:16px!important;height:16px!important}.cdk-drag-preview .mat-button-wrapper .example-tab-icon{width:16px;height:16px}.cdk-drag-placeholder{opacity:0}.tabspan{padding:0 30px 0 6px}.cdk-drag-animating{transition:transform 250ms cubic-bezier(0,0,.2,1);transition:transform 250ms cubic-bezier(0,0,.2,1),-webkit-transform 250ms cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging a{-webkit-transform:translate3d(0,0,0)!important;transform:translate3d(0,0,0)!important}.example-custom-placeholder{width:100%;height:100%;-webkit-transform:translateX(-100%);transform:translateX(-100%);transition:transform 250ms cubic-bezier(0,0,.2,1);transition:transform 250ms cubic-bezier(0,0,.2,1),-webkit-transform 250ms cubic-bezier(0,0,.2,1)}"] }] } ]; /** @nocollapse */ RouterTabComponent.ctorParameters = () => [ { type: Router }, { type: TabsService } ]; RouterTabComponent.propDecorators = { matTabGroup: [{ type: ViewChild, args: ['matTabGroup', { static: true },] }], routerTabItems: [{ type: ContentChildren, args: [RouterTabItem,] }], routerTabs: [{ type: ViewChildren, args: [RouterTab,] }], active: [{ type: Input }] }; if (false) { /** @type {?} */ RouterTabComponent.prototype.matTabGroup; /** @type {?} */ RouterTabComponent.prototype.routerTabItems; /** @type {?} */ RouterTabComponent.prototype.routerTabs; /** @type {?} */ RouterTabComponent.prototype.tabpaixu; /** @type {?} */ RouterTabComponent.prototype.tabBool; /** @type {?} */ RouterTabComponent.prototype.oldTab; /** @type {?} */ RouterTabComponent.prototype.active; /** * @type {?} * @private */ RouterTabComponent.prototype.subscription; /** * @type {?} * @private */ RouterTabComponent.prototype.router; /** @type {?} */ RouterTabComponent.prototype.tabs; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYndlYi1jb21tb24vIiwic291cmNlcyI6WyJsaWIvaG9tZS9yb3V0ZXItdGFiL3JvdXRlci10YWIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQWUsZUFBZSxFQUE0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hHLE9BQU8sRUFFTixTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixNQUFNLEVBQUUsVUFBVSxFQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsV0FBVyxFQUFPLE1BQU0saUJBQWlCLENBQUM7O0FBT25ELGtEQUFrRDtBQUNsRCxNQUFNLE9BQU8sU0FBUzs7Ozs7SUFNckIsWUFBbUIsR0FBVyxFQUFTLFVBQXNCO1FBQTFDLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBUyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQzs7O1lBWGpFLFNBQVMsU0FBQzs7Z0JBRVYsUUFBUSxFQUFFLHFCQUFxQjthQUMvQjs7OztZQVZRLE1BQU07WUFDaUIsVUFBVTs7O3NDQVl4QyxLQUFLOzs7O0lBQU4sNENBR0U7O0lBRVUsd0JBQWtCOztJQUFFLCtCQUE2Qjs7OztBQU85RCxrREFBa0Q7QUFDbEQsTUFBTSxPQUFPLGFBQWE7OztZQUZ6QixTQUFTLFNBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUU7Ozt5QkFHNUMsS0FBSztzQ0FFTCxLQUFLO3NCQUlMLEtBQUs7dUJBR0wsS0FBSyxTQUFD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Q0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUN2RSxFQUNBO2dCQUNELE9BQU8sS0FBSyxDQUFDO2FBQ2I7WUFDRCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLHNDQUFzQztZQUN0QyxPQUFPLElBQUksQ0FBQztRQUNiLENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7O1lBckhELFNBQVMsU0FBQzs7Z0JBRVYsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsMmdFQUEwQztnQkFFMUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2FBQ3JDOzs7O1lBakR1QixNQUFNO1lBR3JCLFdBQVc7OzswQkFnRGxCLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzZCQUV6QyxlQUFlLFNBQUMsYUFBYTt5QkFHN0IsWUFBWSxTQUFDLFNBQVM7cUJBTXRCLEtBQUs7Ozs7SUFYTix5Q0FDZ0M7O0lBQ2hDLDRDQUNpRDs7SUFFakQsd0NBQ3dDOztJQUV4QyxzQ0FBaUI7O0lBQ2pCLHFDQUFnQjs7SUFDaEIsb0NBQVk7O0lBQ1osb0NBQThCOzs7OztJQUM5QiwwQ0FBMEM7Ozs7O0lBb0M5QixvQ0FBc0I7O0lBQUUsa0NBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcmFnRW5kIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDb21wb25lbnQsXHJcblx0Q29udGVudENoaWxkcmVuLFxyXG5cdERpcmVjdGl2ZSxcclxuXHRJbnB1dCxcclxuXHRPbkRlc3Ryb3ksXHJcblx0UXVlcnlMaXN0LFxyXG5cdFZpZXdDaGlsZCxcclxuXHRWaWV3Q2hpbGRyZW4sXHJcblx0Vmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFiLCBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlckxpbmssIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSVJvdXRlclN0YXRlIH0gZnJvbSAnLi4vLi4vcm91dGVyLXN0YXRlJztcclxuaW1wb3J0IHsgVGFic1NlcnZpY2UsIFRhYiB9IGZyb20gJy4uL3RhYnMuc2VydmljZSc7XHJcblxyXG4vLyBEaXJlY3RpdmUgdG8gcmV0cmlldmUgbWF0LXRhYiBvcHRpb25zIGZyb20gcm91dGVyLXRhYi5jb21wb25lbnQuaHRtbFxyXG5ARGlyZWN0aXZlKHtcclxuXHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXHJcblx0c2VsZWN0b3I6ICdtYXQtdGFiW3JvdXRlckxpbmtdJ1xyXG59KVxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgY2xhc3MgUm91dGVyVGFiIHtcclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyByb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoge1xyXG5cdFx0ZXhhY3Q6IGJvb2xlYW47XHJcblx0fTtcclxuXHJcblx0Y29uc3RydWN0b3IocHVibGljIHRhYjogTWF0VGFiLCBwdWJsaWMgcm91dGVyTGluazogUm91dGVyTGluaykge31cclxufVxyXG5cclxuLy8gRGlyZWN0aXZlIHRvIHNldCB0YWJzIHdpdGhpbiBhcHAtcm91dGVyLXRhYlxyXG5cclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdhcHAtcm91dGVyLXRhYi1pdGVtJyB9KVxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgY2xhc3MgUm91dGVyVGFiSXRlbSB7XHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcm91dGVyTGluazogUm91dGVyTGluaztcclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyByb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoge1xyXG5cdFx0ZXhhY3Q6IGJvb2xlYW47XHJcblx0fTtcclxuXHRASW5wdXQoKSBhY3RpdmVzOiBJUm91dGVyU3RhdGU7XHJcblxyXG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcclxuXHRASW5wdXQoJ2Rpc2FibGVkJylcclxuXHRwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vIFJvdXRlclRhYiBjb21wb25lbnQgd2l0aCB0aGUgc2FtZSBiZWhhdmlvciB0aGFuIG1hdC10YWItbmF2LWJhclxyXG5AQ29tcG9uZW50KHtcclxuXHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXHJcblx0c2VsZWN0b3I6ICdhcHAtcm91dGVyLXRhYicsXHJcblx0dGVtcGxhdGVVcmw6ICcuL3JvdXRlci10YWIuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL3JvdXRlci10YWIuY29tcG9uZW50LnNjc3MnXSxcclxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb3V0ZXJUYWJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cdEBWaWV3Q2hpbGQoJ21hdFRhYkdyb3VwJywgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgbWF0VGFiR3JvdXA6IE1hdFRhYkdyb3VwO1xyXG5cdEBDb250ZW50Q2hpbGRyZW4oUm91dGVyVGFiSXRlbSlcclxuXHRwdWJsaWMgcm91dGVyVGFiSXRlbXMhOiBRdWVyeUxpc3Q8Um91dGVyVGFiSXRlbT47XHJcblxyXG5cdEBWaWV3Q2hpbGRyZW4oUm91dGVyVGFiKVxyXG5cdHB1YmxpYyByb3V0ZXJUYWJzOiBRdWVyeUxpc3Q8Um91dGVyVGFiPjtcclxuXHJcblx0dGFicGFpeHU6IE51bWJlcjtcclxuXHR0YWJCb29sOiBudW1iZXI7XHJcblx0b2xkVGFiOiBUYWI7XHJcblx0QElucHV0KCkgYWN0aXZlOiBJUm91dGVyU3RhdGU7XHJcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblx0ZHJhZ1N0YXJ0KGV2ZW50OiBDZGtEcmFnU3RhcnQsIGluZGV4OiBudW1iZXIpIHtcclxuXHRcdHRoaXMudGFiQm9vbCA9IGluZGV4O1xyXG5cdFx0dGhpcy5vbGRUYWIgPSB0aGlzLnRhYnMuYWN0aXZlO1xyXG5cdH1cclxuXHRkcmFnRW5kZWQoZXZlbnQ6IENka0RyYWdFbmQpIHtcclxuXHRcdHRoaXMudGFiQm9vbCA9IG51bGw7XHJcblx0fVxyXG5cdGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnJhZGl4XHJcblx0XHRjb25zdCBwcmV2aW91c0luZGV4ID0gcGFyc2VJbnQoZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQucmVwbGFjZSgnbGlzdC0nLCAnJykpO1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnJhZGl4XHJcblx0XHRjb25zdCBjdXJyZW50SW5kZXggPSBwYXJzZUludChldmVudC5jb250YWluZXIuaWQucmVwbGFjZSgnbGlzdC0nLCAnJykpO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRwcmV2aW91c0luZGV4ICE9PSBOYU4gJiZcclxuXHRcdFx0Y3VycmVudEluZGV4ICE9PSBOYU4gJiZcclxuXHRcdFx0cHJldmlvdXNJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdGN1cnJlbnRJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdHByZXZpb3VzSW5kZXggIT09IGN1cnJlbnRJbmRleFxyXG5cdFx0KSB7XHJcblx0XHRcdC8vIERvIHN0dWZmXHJcblx0XHRcdC8vIHRoaXMudGFiQm9vbCA9IG51bGw7XHJcblx0XHRcdC8vIEVORCBTdHVmZlxyXG5cdFx0XHRtb3ZlSXRlbUluQXJyYXkodGhpcy50YWJzLnRhYnMsIHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnRhYnMuYWN0aXZlSW5kZXggPSB0aGlzLnRhYnMudGFicy5maW5kSW5kZXgodiA9PiB2ID09PSB0aGlzLm9sZFRhYik7XHJcblx0fVxyXG5cdGdldEFsbExpc3RDb25uZWN0aW9ucyhpbmRleDogTnVtYmVyKSB7XHJcblx0XHRjb25zdCBjb25uZWN0aW9ucyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYnMudGFicy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZiAoaSAhPT0gaW5kZXgpIHtcclxuXHRcdFx0XHRjb25uZWN0aW9ucy5wdXNoKCdsaXN0LScgKyBpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvbm5lY3Rpb25zO1xyXG5cdH1cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwdWJsaWMgdGFiczogVGFic1NlcnZpY2UpIHt9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHRcdC8vIFJlbW92ZSB0YWIgY2xpY2sgZXZlbnRcclxuXHRcdHRoaXMubWF0VGFiR3JvdXAuX2hhbmRsZUNsaWNrID0gKCkgPT4ge307XHJcblx0XHQvLyBTZWxlY3QgY3VycmVudCB0YWIgZGVwZW5kaW5nIG9uIHVybFxyXG5cdFx0dGhpcy5zZXRJbmRleCgpO1xyXG5cdFx0Ly8gU3Vic2NyaXB0aW9uIHRvIG5hdmlnYXRpb24gY2hhbmdlXHJcblx0XHQvLyB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXHJcblx0XHQvLyBcdHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZSA9PiB7XHJcblx0XHQvLyBcdFx0aWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XHJcblx0XHQvLyBcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0SW5kZXgoKSwgMCk7XHJcblx0XHQvLyBcdFx0fVxyXG5cdFx0Ly8gXHR9KVxyXG5cdFx0Ly8gKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHR9XHJcblx0Z2V0VVJMUGF0aCh1OiBVcmxUcmVlKSB7XHJcblx0XHRyZXR1cm4gWycvJywgLi4udS5yb290LmNoaWxkcmVuWydwcmltYXJ5J10uc2VnbWVudHMubWFwKHYgPT4gdi5wYXRoKV07XHJcblx0fVxyXG5cdG9uVGFic0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy50YWJzLmFjdGl2ZUluZGV4ICE9PSBpbmRleCkge1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMudGFicy50YWJzW2luZGV4XS51cmwsIHtcclxuXHRcdFx0XHRzdGF0ZTogdGhpcy50YWJzLnRhYnNbaW5kZXhdLmRhdGEoKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmVtb3ZlQ2xpY2soZTogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlcikge1xyXG5cdFx0aWYgKHRoaXMudGFicy5yZW1vdmVUYWIoaW5kZXgpKSB7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy50YWJzLmFjdGl2ZS51cmwsIHtcclxuXHRcdFx0XHRzdGF0ZTogdGhpcy50YWJzLmFjdGl2ZS5kYXRhKClcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRpZiAoZSAmJiBlLnN0b3BQcm9wYWdhdGlvbikge1xyXG5cdFx0XHQvLyDlm6DmraTlroPmlK/mjIFXM0PnmoRzdG9wUHJvcGFnYXRpb24oKeaWueazlVxyXG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8g5ZCm5YiZ77yM5oiR5Lus6ZyA6KaB5L2/55SoSUXnmoTmlrnlvI/mnaXlj5bmtojkuovku7blhpLms6FcclxuXHRcdFx0d2luZG93LmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cdC8vIFNldCBjdXJyZW50IHNlbGVjdGVkIHRhYiBkZXBlbmRpbmcgb24gbmF2aWdhdGlvblxyXG5cdHByaXZhdGUgc2V0SW5kZXgoKSB7XHJcblx0XHR0aGlzLnJvdXRlclRhYnMuZmluZCgodGFiLCBpKSA9PiB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQhdGhpcy5yb3V0ZXIuaXNBY3RpdmUoXHJcblx0XHRcdFx0XHR0YWIucm91dGVyTGluay51cmxUcmVlLFxyXG5cdFx0XHRcdFx0dGFiLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zID8gdGFiLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zLmV4YWN0IDogZmFsc2VcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyB0YWIudGFiLmlzQWN0aXZlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy50YWJzLmFjdGl2ZUluZGV4ID0gaTtcclxuXHRcdFx0Ly8gdGhpcy5tYXRUYWJHcm91cC5zZWxlY3RlZEluZGV4ID0gaTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19