UNPKG

ng-devui

Version:

DevUI components based on Angular

173 lines 21.2 kB
import { __decorate, __metadata } from "tslib"; import { ComponentFactoryResolver, Directive, ElementRef, HostListener, Input, } from '@angular/core'; import { OverlayContainerRef } from 'ng-devui/overlay-container'; import { DevConfigService, WithConfig } from 'ng-devui/utils'; import { Subject, fromEvent } from 'rxjs'; import { debounceTime, filter, map, takeUntil } from 'rxjs/operators'; import { TooltipComponent } from './tooltip.component'; import * as i0 from "@angular/core"; import * as i1 from "ng-devui/overlay-container"; import * as i2 from "ng-devui/utils"; export class TooltipDirective { /** * @deprecated Use showAnimation to replace. */ set showAnimate(isShowAnimate) { this.showAnimation = isShowAnimate; } constructor(triggerElementRef, overlayContainerRef, componentFactoryResolver, devConfigService) { this.triggerElementRef = triggerElementRef; this.overlayContainerRef = overlayContainerRef; this.componentFactoryResolver = componentFactoryResolver; this.devConfigService = devConfigService; this.position = 'top'; this.showAnimation = true; // 防止每次鼠标不小心经过目标元素就会显示出Tooltip的内容,所以增加适当的延迟。 this.mouseEnterDelay = 150; // 因为鼠标移出之后如果立刻消失会很突然,所以增加略小一些的延迟,使得既不突然也反应灵敏 this.mouseLeaveDelay = 100; this.unsubscribe$ = new Subject(); this.unsubscribeT$ = new Subject(); } onFocus() { this.show(); } onBlur() { this.hide(); } createTooltip() { this.tooltipComponentRef = this.overlayContainerRef.createComponent(this.componentFactoryResolver.resolveComponentFactory(TooltipComponent)); this.instanceAssignValue(['content', 'position', 'showAnimation', 'triggerElementRef']); // 对创建的ToolTip组件添加鼠标移入和移出的监听事件 if (this.tooltipComponentRef.instance.tooltip.nativeElement) { this.bindMouseEvent(this.tooltipComponentRef.instance.tooltip.nativeElement, this.unsubscribeT$); } } bindMouseEvent(eventTarget, unsubscribe$) { fromEvent(eventTarget, 'mouseenter') .pipe(map((event) => { this.isEnter = true; return event; }), debounceTime(this.mouseEnterDelay), filter((event) => this.isEnter), takeUntil(unsubscribe$)) .subscribe(() => { if (!this.tooltipComponentRef) { this.show(); } }); fromEvent(eventTarget, 'mouseleave') .pipe(map((event) => { this.isEnter = false; return event; }), debounceTime(this.mouseLeaveDelay), filter((event) => !this.isEnter), takeUntil(unsubscribe$)) .subscribe(() => { this.hide(); }); } show() { if (!this.content) { return; } if (this.tooltipComponentRef) { this.destroy(); } this.createTooltip(); this.tooltipComponentRef.instance.onShow(); } destroy() { if (this.tooltipComponentRef) { this.tooltipComponentRef.destroy(); this.tooltipComponentRef = null; } if (this.unsubscribeT$) { this.unsubscribeT$.next(); this.unsubscribeT$.complete(); } } hide() { if (this.tooltipComponentRef) { this.tooltipComponentRef.instance.onHide(); if (!this.showAnimation) { this.destroy(); return; } this.tooltipComponentRef.instance.onHidden = () => { this.destroy(); }; } if (this.unsubscribeT$) { this.unsubscribeT$.next(); this.unsubscribeT$.complete(); } } instanceAssignValue(key) { const keyArr = typeof key === 'string' ? [key] : key; const obj = {}; keyArr.forEach((item) => { obj[item] = this[item]; }); Object.assign(this.tooltipComponentRef.instance, obj); } ngOnChanges(changes) { if (this.tooltipComponentRef) { const { content, position, showAnimation } = changes; if (!content.currentValue) { this.hide(); } if (content) { this.instanceAssignValue('content'); } if (position) { this.instanceAssignValue('position'); } if (showAnimation) { this.instanceAssignValue('showAnimation'); } } } ngAfterViewInit() { if (this.triggerElementRef.nativeElement) { this.bindMouseEvent(this.triggerElementRef.nativeElement, this.unsubscribe$); } } ngOnDestroy() { if (this.unsubscribeT$) { this.unsubscribeT$.next(); this.unsubscribeT$.complete(); } this.unsubscribe$.next(); this.unsubscribe$.complete(); this.destroy(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i1.OverlayContainerRef }, { token: i0.ComponentFactoryResolver }, { token: i2.DevConfigService }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TooltipDirective, selector: "[dTooltip]", inputs: { content: "content", position: "position", showAnimation: "showAnimation", showAnimate: "showAnimate", mouseEnterDelay: "mouseEnterDelay", mouseLeaveDelay: "mouseLeaveDelay" }, host: { listeners: { "focus": "onFocus()", "blur": "onBlur()" } }, exportAs: ["dTooltip"], usesOnChanges: true, ngImport: i0 }); } } __decorate([ WithConfig(), __metadata("design:type", Object) ], TooltipDirective.prototype, "showAnimation", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TooltipDirective, decorators: [{ type: Directive, args: [{ selector: '[dTooltip]', exportAs: 'dTooltip', }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.OverlayContainerRef }, { type: i0.ComponentFactoryResolver }, { type: i2.DevConfigService }], propDecorators: { content: [{ type: Input }], position: [{ type: Input }], showAnimation: [{ type: Input }], showAnimate: [{ type: Input }], mouseEnterDelay: [{ type: Input }], mouseLeaveDelay: [{ type: Input }], onFocus: [{ type: HostListener, args: ['focus'] }], onBlur: [{ type: HostListener, args: ['blur'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsd0JBQXdCLEVBRXhCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssR0FJTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBT3ZELE1BQU0sT0FBTyxnQkFBZ0I7SUFJM0I7O09BRUc7SUFDSCxJQUFhLFdBQVcsQ0FBQyxhQUFrQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBU0QsWUFDVSxpQkFBNkIsRUFDN0IsbUJBQXdDLEVBQ3hDLHdCQUFrRCxFQUNsRCxnQkFBa0M7UUFIbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFZO1FBQzdCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBcEJuQyxhQUFRLEdBQWtDLEtBQUssQ0FBQztRQUNsQyxrQkFBYSxHQUFHLElBQUksQ0FBQztRQU81Qyw0Q0FBNEM7UUFDbkMsb0JBQWUsR0FBRyxHQUFHLENBQUM7UUFDL0IsNkNBQTZDO1FBQ3BDLG9CQUFlLEdBQUcsR0FBRyxDQUFDO1FBRS9CLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNuQyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFPakMsQ0FBQztJQUVtQixPQUFPO1FBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFcUIsTUFBTTtRQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUNqRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsQ0FDeEUsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUV4Riw4QkFBOEI7UUFDOUIsSUFBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUF3QixFQUFFLFlBQThCO1FBQ3JFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO2FBQ2pDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDbEMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQy9CLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FDeEI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxTQUFTLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQzthQUNqQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQ2xDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQ2hDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FDeEI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLENBQUMsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxHQUFzQjtRQUN4QyxNQUFNLE1BQU0sR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNyRCxNQUFNLEdBQUcsR0FBUSxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztZQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0UsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7K0dBL0pVLGdCQUFnQjttR0FBaEIsZ0JBQWdCOztBQUdKO0lBQWIsVUFBVSxFQUFFOzt1REFBc0I7NEZBSGpDLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFVBQVU7aUJBQ3JCO3VMQUVVLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNpQixhQUFhO3NCQUFuQyxLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQVlpQixPQUFPO3NCQUE3QixZQUFZO3VCQUFDLE9BQU87Z0JBSUMsTUFBTTtzQkFBM0IsWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3ZlcmxheUNvbnRhaW5lclJlZiB9IGZyb20gJ25nLWRldnVpL292ZXJsYXktY29udGFpbmVyJztcclxuaW1wb3J0IHsgRGV2Q29uZmlnU2VydmljZSwgV2l0aENvbmZpZyB9IGZyb20gJ25nLWRldnVpL3V0aWxzJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4vdG9vbHRpcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQb3NpdGlvblR5cGUgfSBmcm9tICcuL3Rvb2x0aXAudHlwZXMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZFRvb2x0aXBdJyxcclxuICBleHBvcnRBczogJ2RUb29sdGlwJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRvb2x0aXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBvc2l0aW9uOiBQb3NpdGlvblR5cGUgfCBQb3NpdGlvblR5cGVbXSA9ICd0b3AnO1xyXG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgc2hvd0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHNob3dBbmltYXRpb24gdG8gcmVwbGFjZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgc2hvd0FuaW1hdGUoaXNTaG93QW5pbWF0ZTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dBbmltYXRpb24gPSBpc1Nob3dBbmltYXRlO1xyXG4gIH1cclxuICAvLyDpmLLmraLmr4/mrKHpvKDmoIfkuI3lsI/lv4Pnu4/ov4fnm67moIflhYPntKDlsLHkvJrmmL7npLrlh7pUb29sdGlw55qE5YaF5a6577yM5omA5Lul5aKe5Yqg6YCC5b2T55qE5bu26L+f44CCXHJcbiAgQElucHV0KCkgbW91c2VFbnRlckRlbGF5ID0gMTUwO1xyXG4gIC8vIOWboOS4uum8oOagh+enu+WHuuS5i+WQjuWmguaenOeri+WIu+a2iOWkseS8muW+iOeqgeeEtu+8jOaJgOS7peWinuWKoOeVpeWwj+S4gOS6m+eahOW7tui/n++8jOS9v+W+l+aXouS4jeeqgeeEtuS5n+WPjeW6lOeBteaVj1xyXG4gIEBJbnB1dCgpIG1vdXNlTGVhdmVEZWxheSA9IDEwMDtcclxuICBpc0VudGVyOiBib29sZWFuO1xyXG4gIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgdW5zdWJzY3JpYmVUJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgdG9vbHRpcENvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFRvb2x0aXBDb21wb25lbnQ+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0cmlnZ2VyRWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgb3ZlcmxheUNvbnRhaW5lclJlZjogT3ZlcmxheUNvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIGRldkNvbmZpZ1NlcnZpY2U6IERldkNvbmZpZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJykgb25Gb2N1cygpIHtcclxuICAgIHRoaXMuc2hvdygpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpIG9uQmx1cigpIHtcclxuICAgIHRoaXMuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVG9vbHRpcCgpIHtcclxuICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZiA9IHRoaXMub3ZlcmxheUNvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvb2x0aXBDb21wb25lbnQpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5zdGFuY2VBc3NpZ25WYWx1ZShbJ2NvbnRlbnQnLCAncG9zaXRpb24nLCAnc2hvd0FuaW1hdGlvbicsICd0cmlnZ2VyRWxlbWVudFJlZiddKTtcclxuXHJcbiAgICAvLyDlr7nliJvlu7rnmoRUb29sVGlw57uE5Lu25re75Yqg6byg5qCH56e75YWl5ZKM56e75Ye655qE55uR5ZCs5LqL5Lu2XHJcbiAgICBpZiAoKHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLnRvb2x0aXAubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmJpbmRNb3VzZUV2ZW50KCh0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS50b29sdGlwLm5hdGl2ZUVsZW1lbnQsIHRoaXMudW5zdWJzY3JpYmVUJCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kTW91c2VFdmVudChldmVudFRhcmdldDogSFRNTEVsZW1lbnQsIHVuc3Vic2NyaWJlJDogU3ViamVjdDx1bmtub3duPikge1xyXG4gICAgZnJvbUV2ZW50KGV2ZW50VGFyZ2V0LCAnbW91c2VlbnRlcicpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNFbnRlciA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMubW91c2VFbnRlckRlbGF5KSxcclxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB0aGlzLmlzRW50ZXIpLFxyXG4gICAgICAgIHRha2VVbnRpbCh1bnN1YnNjcmliZSQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgIHRoaXMuc2hvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICBmcm9tRXZlbnQoZXZlbnRUYXJnZXQsICdtb3VzZWxlYXZlJylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0VudGVyID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMubW91c2VMZWF2ZURlbGF5KSxcclxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAhdGhpcy5pc0VudGVyKSxcclxuICAgICAgICB0YWtlVW50aWwodW5zdWJzY3JpYmUkKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICBpZiAoIXRoaXMuY29udGVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcENvbXBvbmVudFJlZikge1xyXG4gICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNyZWF0ZVRvb2x0aXAoKTtcclxuICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5pbnN0YW5jZS5vblNob3coKTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy50b29sdGlwQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZVQkKSB7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5uZXh0KCk7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIGlmICh0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYpIHtcclxuICAgICAgdGhpcy50b29sdGlwQ29tcG9uZW50UmVmLmluc3RhbmNlLm9uSGlkZSgpO1xyXG4gICAgICBpZiAoIXRoaXMuc2hvd0FuaW1hdGlvbikge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYuaW5zdGFuY2Uub25IaWRkZW4gPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZVQkKSB7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5uZXh0KCk7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5zdGFuY2VBc3NpZ25WYWx1ZShrZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXlBcnIgPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IFtrZXldIDoga2V5O1xyXG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcclxuICAgIGtleUFyci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIG9ialtpdGVtXSA9IHRoaXNbaXRlbV07XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy50b29sdGlwQ29tcG9uZW50UmVmLmluc3RhbmNlLCBvYmopO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b29sdGlwQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgIGNvbnN0IHsgY29udGVudCwgcG9zaXRpb24sIHNob3dBbmltYXRpb24gfSA9IGNoYW5nZXM7XHJcbiAgICAgIGlmICghY29udGVudC5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICB0aGlzLmluc3RhbmNlQXNzaWduVmFsdWUoJ2NvbnRlbnQnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmluc3RhbmNlQXNzaWduVmFsdWUoJ3Bvc2l0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNob3dBbmltYXRpb24pIHtcclxuICAgICAgICB0aGlzLmluc3RhbmNlQXNzaWduVmFsdWUoJ3Nob3dBbmltYXRpb24nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMudHJpZ2dlckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmJpbmRNb3VzZUV2ZW50KHRoaXMudHJpZ2dlckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy51bnN1YnNjcmliZSQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZVQkKSB7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5uZXh0KCk7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gIH1cclxufVxyXG4iXX0=