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