UNPKG

dbweb-common

Version:

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

325 lines 27 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; 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 var RouterTab = /** @class */ (function () { function RouterTab(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 = function () { return [ { type: MatTab }, { type: RouterLink } ]; }; RouterTab.propDecorators = { routerLinkActiveOptions: [{ type: Input }] }; return RouterTab; }()); export { RouterTab }; 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 var RouterTabItem = /** @class */ (function () { function 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 }] }; return RouterTabItem; }()); export { RouterTabItem }; 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 var RouterTabComponent = /** @class */ (function () { function RouterTabComponent(router, tabs) { this.router = router; this.tabs = tabs; this.subscription = new Subscription(); } /** * @param {?} event * @param {?} index * @return {?} */ RouterTabComponent.prototype.dragStart = /** * @param {?} event * @param {?} index * @return {?} */ function (event, index) { this.tabBool = index; this.oldTab = this.tabs.active; }; /** * @param {?} event * @return {?} */ RouterTabComponent.prototype.dragEnded = /** * @param {?} event * @return {?} */ function (event) { this.tabBool = null; }; /** * @param {?} event * @return {?} */ RouterTabComponent.prototype.drop = /** * @param {?} event * @return {?} */ function (event) { var _this = this; // tslint:disable-next-line:radix /** @type {?} */ var previousIndex = parseInt(event.previousContainer.id.replace('list-', '')); // tslint:disable-next-line:radix /** @type {?} */ var 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 {?} */ function (v) { return v === _this.oldTab; })); }; /** * @param {?} index * @return {?} */ RouterTabComponent.prototype.getAllListConnections = /** * @param {?} index * @return {?} */ function (index) { /** @type {?} */ var connections = []; for (var i = 0; i < this.tabs.tabs.length; i++) { if (i !== index) { connections.push('list-' + i); } } return connections; }; /** * @return {?} */ RouterTabComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { // Remove tab click event this.matTabGroup._handleClick = (/** * @return {?} */ function () { }); // 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 {?} */ RouterTabComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subscription.unsubscribe(); }; /** * @param {?} u * @return {?} */ RouterTabComponent.prototype.getURLPath = /** * @param {?} u * @return {?} */ function (u) { return tslib_1.__spread(['/'], u.root.children['primary'].segments.map((/** * @param {?} v * @return {?} */ function (v) { return v.path; }))); }; /** * @param {?} event * @param {?} index * @return {?} */ RouterTabComponent.prototype.onTabsClick = /** * @param {?} event * @param {?} index * @return {?} */ function (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 {?} */ RouterTabComponent.prototype.removeClick = /** * @param {?} e * @param {?} index * @return {?} */ function (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 // Set current selected tab depending on navigation /** * @private * @return {?} */ RouterTabComponent.prototype.setIndex = // Set current selected tab depending on navigation /** * @private * @return {?} */ function () { var _this = this; this.routerTabs.find((/** * @param {?} tab * @param {?} i * @return {?} */ function (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 = function () { return [ { 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 }] }; return RouterTabComponent; }()); export { RouterTabComponent }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYndlYi1jb21tb24vIiwic291cmNlcyI6WyJsaWIvaG9tZS9yb3V0ZXItdGFiL3JvdXRlci10YWIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFlLGVBQWUsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRyxPQUFPLEVBRU4sU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBaUIsTUFBTSxFQUFFLFVBQVUsRUFBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLFdBQVcsRUFBTyxNQUFNLGlCQUFpQixDQUFDOztBQUduRDtJQVdDLG1CQUFtQixHQUFXLEVBQVMsVUFBc0I7UUFBMUMsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUFTLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDOztnQkFYakUsU0FBUyxTQUFDOztvQkFFVixRQUFRLEVBQUUscUJBQXFCO2lCQUMvQjs7OztnQkFWUSxNQUFNO2dCQUNpQixVQUFVOzs7MENBWXhDLEtBQUs7O0lBTVAsZ0JBQUM7Q0FBQSxBQVpELElBWUM7U0FQWSxTQUFTOzs7SUFDckIsNENBR0U7O0lBRVUsd0JBQWtCOztJQUFFLCtCQUE2Qjs7OztBQU05RDtJQUFBO0lBaUJBLENBQUM7O2dCQWpCQSxTQUFTLFNBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUU7Ozs2QkFHNUMsS0FBSzswQ0FFTCxLQUFLOzBCQUlMLEtBQUs7MkJBR0wsS0FBSyxTQUFDLFVB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LENBQUMsSUFBSTs7Ozs7UUFBQyxVQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQ0MsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDcEIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQ3RCLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUN2RSxFQUNBO2dCQUNELE9BQU8sS0FBSyxDQUFDO2FBQ2I7WUFDRCwyQkFBMkI7WUFDM0IsS0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLHNDQUFzQztZQUN0QyxPQUFPLElBQUksQ0FBQztRQUNiLENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7Z0JBckhELFNBQVMsU0FBQzs7b0JBRVYsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsMmdFQUEwQztvQkFFMUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2lCQUNyQzs7OztnQkFqRHVCLE1BQU07Z0JBR3JCLFdBQVc7Ozs4QkFnRGxCLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2lDQUV6QyxlQUFlLFNBQUMsYUFBYTs2QkFHN0IsWUFBWSxTQUFDLFNBQVM7eUJBTXRCLEtBQUs7O0lBbUdQLHlCQUFDO0NBQUEsQUF0SEQsSUFzSEM7U0EvR1ksa0JBQWtCOzs7SUFDOUIseUNBQ2dDOztJQUNoQyw0Q0FDaUQ7O0lBRWpELHdDQUN3Qzs7SUFFeEMsc0NBQWlCOztJQUNqQixxQ0FBZ0I7O0lBQ2hCLG9DQUFZOztJQUNaLG9DQUE4Qjs7Ozs7SUFDOUIsMENBQTBDOzs7OztJQW9DOUIsb0NBQXNCOztJQUFFLGtDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXksIENka0RyYWdTdGFydCwgQ2RrRHJhZ0VuZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQge1xyXG5cdEFmdGVyVmlld0luaXQsXHJcblx0Q29tcG9uZW50LFxyXG5cdENvbnRlbnRDaGlsZHJlbixcclxuXHREaXJlY3RpdmUsXHJcblx0SW5wdXQsXHJcblx0T25EZXN0cm95LFxyXG5cdFF1ZXJ5TGlzdCxcclxuXHRWaWV3Q2hpbGQsXHJcblx0Vmlld0NoaWxkcmVuLFxyXG5cdFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJMaW5rLCBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3JvdXRlci1zdGF0ZSc7XHJcbmltcG9ydCB7IFRhYnNTZXJ2aWNlLCBUYWIgfSBmcm9tICcuLi90YWJzLnNlcnZpY2UnO1xyXG5cclxuLy8gRGlyZWN0aXZlIHRvIHJldHJpZXZlIG1hdC10YWIgb3B0aW9ucyBmcm9tIHJvdXRlci10YWIuY29tcG9uZW50Lmh0bWxcclxuQERpcmVjdGl2ZSh7XHJcblx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxyXG5cdHNlbGVjdG9yOiAnbWF0LXRhYltyb3V0ZXJMaW5rXSdcclxufSlcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGNsYXNzIFJvdXRlclRhYiB7XHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcm91dGVyTGlua0FjdGl2ZU9wdGlvbnM6IHtcclxuXHRcdGV4YWN0OiBib29sZWFuO1xyXG5cdH07XHJcblxyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB0YWI6IE1hdFRhYiwgcHVibGljIHJvdXRlckxpbms6IFJvdXRlckxpbmspIHt9XHJcbn1cclxuXHJcbi8vIERpcmVjdGl2ZSB0byBzZXQgdGFicyB3aXRoaW4gYXBwLXJvdXRlci10YWJcclxuXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnYXBwLXJvdXRlci10YWItaXRlbScgfSlcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGNsYXNzIFJvdXRlclRhYkl0ZW0ge1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHJvdXRlckxpbms6IFJvdXRlckxpbms7XHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcm91dGVyTGlua0FjdGl2ZU9wdGlvbnM6IHtcclxuXHRcdGV4YWN0OiBib29sZWFuO1xyXG5cdH07XHJcblx0QElucHV0KCkgYWN0aXZlczogSVJvdXRlclN0YXRlO1xyXG5cclxuXHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXHJcblx0QElucHV0KCdkaXNhYmxlZCcpXHJcblx0cHVibGljIGRpc2FibGVkOiBib29sZWFuO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG4vLyBSb3V0ZXJUYWIgY29tcG9uZW50IHdpdGggdGhlIHNhbWUgYmVoYXZpb3IgdGhhbiBtYXQtdGFiLW5hdi1iYXJcclxuQENvbXBvbmVudCh7XHJcblx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxyXG5cdHNlbGVjdG9yOiAnYXBwLXJvdXRlci10YWInLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9yb3V0ZXItdGFiLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9yb3V0ZXItdGFiLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUm91dGVyVGFiQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHRAVmlld0NoaWxkKCdtYXRUYWJHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcblx0cHVibGljIG1hdFRhYkdyb3VwOiBNYXRUYWJHcm91cDtcclxuXHRAQ29udGVudENoaWxkcmVuKFJvdXRlclRhYkl0ZW0pXHJcblx0cHVibGljIHJvdXRlclRhYkl0ZW1zITogUXVlcnlMaXN0PFJvdXRlclRhYkl0ZW0+O1xyXG5cclxuXHRAVmlld0NoaWxkcmVuKFJvdXRlclRhYilcclxuXHRwdWJsaWMgcm91dGVyVGFiczogUXVlcnlMaXN0PFJvdXRlclRhYj47XHJcblxyXG5cdHRhYnBhaXh1OiBOdW1iZXI7XHJcblx0dGFiQm9vbDogbnVtYmVyO1xyXG5cdG9sZFRhYjogVGFiO1xyXG5cdEBJbnB1dCgpIGFjdGl2ZTogSVJvdXRlclN0YXRlO1xyXG5cdHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cdGRyYWdTdGFydChldmVudDogQ2RrRHJhZ1N0YXJ0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHR0aGlzLnRhYkJvb2wgPSBpbmRleDtcclxuXHRcdHRoaXMub2xkVGFiID0gdGhpcy50YWJzLmFjdGl2ZTtcclxuXHR9XHJcblx0ZHJhZ0VuZGVkKGV2ZW50OiBDZGtEcmFnRW5kKSB7XHJcblx0XHR0aGlzLnRhYkJvb2wgPSBudWxsO1xyXG5cdH1cclxuXHRkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpyYWRpeFxyXG5cdFx0Y29uc3QgcHJldmlvdXNJbmRleCA9IHBhcnNlSW50KGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkLnJlcGxhY2UoJ2xpc3QtJywgJycpKTtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpyYWRpeFxyXG5cdFx0Y29uc3QgY3VycmVudEluZGV4ID0gcGFyc2VJbnQoZXZlbnQuY29udGFpbmVyLmlkLnJlcGxhY2UoJ2xpc3QtJywgJycpKTtcclxuXHRcdGlmIChcclxuXHRcdFx0cHJldmlvdXNJbmRleCAhPT0gTmFOICYmXHJcblx0XHRcdGN1cnJlbnRJbmRleCAhPT0gTmFOICYmXHJcblx0XHRcdHByZXZpb3VzSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG5cdFx0XHRjdXJyZW50SW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG5cdFx0XHRwcmV2aW91c0luZGV4ICE9PSBjdXJyZW50SW5kZXhcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBEbyBzdHVmZlxyXG5cdFx0XHQvLyB0aGlzLnRhYkJvb2wgPSBudWxsO1xyXG5cdFx0XHQvLyBFTkQgU3R1ZmZcclxuXHRcdFx0bW92ZUl0ZW1JbkFycmF5KHRoaXMudGFicy50YWJzLCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy50YWJzLmFjdGl2ZUluZGV4ID0gdGhpcy50YWJzLnRhYnMuZmluZEluZGV4KHYgPT4gdiA9PT0gdGhpcy5vbGRUYWIpO1xyXG5cdH1cclxuXHRnZXRBbGxMaXN0Q29ubmVjdGlvbnMoaW5kZXg6IE51bWJlcikge1xyXG5cdFx0Y29uc3QgY29ubmVjdGlvbnMgPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJzLnRhYnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgIT09IGluZGV4KSB7XHJcblx0XHRcdFx0Y29ubmVjdGlvbnMucHVzaCgnbGlzdC0nICsgaSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBjb25uZWN0aW9ucztcclxuXHR9XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHVibGljIHRhYnM6IFRhYnNTZXJ2aWNlKSB7fVxyXG5cclxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XHJcblx0XHQvLyBSZW1vdmUgdGFiIGNsaWNrIGV2ZW50XHJcblx0XHR0aGlzLm1hdFRhYkdyb3VwLl9oYW5kbGVDbGljayA9ICgpID0+IHt9O1xyXG5cdFx0Ly8gU2VsZWN0IGN1cnJlbnQgdGFiIGRlcGVuZGluZyBvbiB1cmxcclxuXHRcdHRoaXMuc2V0SW5kZXgoKTtcclxuXHRcdC8vIFN1YnNjcmlwdGlvbiB0byBuYXZpZ2F0aW9uIGNoYW5nZVxyXG5cdFx0Ly8gdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxyXG5cdFx0Ly8gXHR0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGUgPT4ge1xyXG5cdFx0Ly8gXHRcdGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xyXG5cdFx0Ly8gXHRcdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEluZGV4KCksIDApO1xyXG5cdFx0Ly8gXHRcdH1cclxuXHRcdC8vIFx0fSlcclxuXHRcdC8vICk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cdGdldFVSTFBhdGgodTogVXJsVHJlZSkge1xyXG5cdFx0cmV0dXJuIFsnLycsIC4uLnUucm9vdC5jaGlsZHJlblsncHJpbWFyeSddLnNlZ21lbnRzLm1hcCh2ID0+IHYucGF0aCldO1xyXG5cdH1cclxuXHRvblRhYnNDbGljayhldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlcikge1xyXG5cdFx0aWYgKHRoaXMudGFicy5hY3RpdmVJbmRleCAhPT0gaW5kZXgpIHtcclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnRhYnMudGFic1tpbmRleF0udXJsLCB7XHJcblx0XHRcdFx0c3RhdGU6IHRoaXMudGFicy50YWJzW2luZGV4XS5kYXRhKClcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJlbW92ZUNsaWNrKGU6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLnRhYnMucmVtb3ZlVGFiKGluZGV4KSkge1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMudGFicy5hY3RpdmUudXJsLCB7XHJcblx0XHRcdFx0c3RhdGU6IHRoaXMudGFicy5hY3RpdmUuZGF0YSgpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGUgJiYgZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuXHRcdFx0Ly8g5Zug5q2k5a6D5pSv5oyBVzND55qEc3RvcFByb3BhZ2F0aW9uKCnmlrnms5VcclxuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIOWQpuWIme+8jOaIkeS7rOmcgOimgeS9v+eUqElF55qE5pa55byP5p2l5Y+W5raI5LqL5Lu25YaS5rOhXHJcblx0XHRcdHdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHQvLyBTZXQgY3VycmVudCBzZWxlY3RlZCB0YWIgZGVwZW5kaW5nIG9uIG5hdmlnYXRpb25cclxuXHRwcml2YXRlIHNldEluZGV4KCkge1xyXG5cdFx0dGhpcy5yb3V0ZXJUYWJzLmZpbmQoKHRhYiwgaSkgPT4ge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0IXRoaXMucm91dGVyLmlzQWN0aXZlKFxyXG5cdFx0XHRcdFx0dGFiLnJvdXRlckxpbmsudXJsVHJlZSxcclxuXHRcdFx0XHRcdHRhYi5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyA/IHRhYi5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucy5leGFjdCA6IGZhbHNlXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gdGFiLnRhYi5pc0FjdGl2ZSA9IHRydWU7XHJcblx0XHRcdHRoaXMudGFicy5hY3RpdmVJbmRleCA9IGk7XHJcblx0XHRcdC8vIHRoaXMubWF0VGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9IGk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==