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