ng-devui
Version:
DevUI components based on Angular
173 lines • 21.2 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsd0JBQXdCLEVBRXhCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssR0FJTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBT3ZELE1BQU0sT0FBTyxnQkFBZ0I7SUFJM0I7O09BRUc7SUFDSCxJQUFhLFdBQVcsQ0FBQyxhQUFrQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBU0QsWUFDVSxpQkFBNkIsRUFDN0IsbUJBQXdDLEVBQ3hDLHdCQUFrRCxFQUNsRCxnQkFBa0M7UUFIbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFZO1FBQzdCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBcEJuQyxhQUFRLEdBQWtDLEtBQUssQ0FBQztRQUNsQyxrQkFBYSxHQUFHLElBQUksQ0FBQztRQU81Qyw0Q0FBNEM7UUFDbkMsb0JBQWUsR0FBRyxHQUFHLENBQUM7UUFDL0IsNkNBQTZDO1FBQ3BD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LENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7K0dBL0pVLGdCQUFnQjttR0FBaEIsZ0JBQWdCOztBQUdKO0lBQWIsVUFBVSxFQUFFOzt1REFBc0I7NEZBSGpDLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFVBQVU7aUJBQ3JCO3VMQUVVLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNpQixhQUFhO3NCQUFuQyxLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQVlpQixPQUFPO3NCQUE3QixZQUFZO3VCQUFDLE9BQU87Z0JBSUMsTUFBTTtzQkFBM0IsWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3ZlcmxheUNvbnRhaW5lclJlZiB9IGZyb20gJ25nLWRldnVpL292ZXJsYXktY29udGFpbmVyJztcclxuaW1wb3J0IHsgRGV2Q29uZmlnU2VydmljZSwgV2l0aENvbmZpZyB9IGZyb20gJ25nLWRldnVpL3V0aWxzJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4vdG9vbHRpcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQb3NpdGlvblR5cGUgfSBmcm9tICcuL3Rvb2x0aXAudHlwZXMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZFRvb2x0aXBdJyxcclxuICBleHBvcnRBczogJ2RUb29sdGlwJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRvb2x0aXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBvc2l0aW9uOiBQb3NpdGlvblR5cGUgfCBQb3NpdGlvblR5cGVbXSA9ICd0b3AnO1xyXG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgc2hvd0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHNob3dBbmltYXRpb24gdG8gcmVwbGFjZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgc2hvd0FuaW1hdGUoaXNTaG93QW5pbWF0ZTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dBbmltYXRpb24gPSBpc1Nob3dBbmltYXRlO1xyXG4gIH1cclxuICAvLyDpmLLmraLmr4/mrKHpvKDmoIfkuI3lsI/lv4Pnu4/ov4fnm67moIflhYPntKDlsLHkvJrmmL7npLrlh7pUb29sdGlw55qE5YaF5a6577yM5omA5Lul5aKe5Yqg6YCC5b2T55qE5bu26L+f44CCXHJcbiAgQElucHV0KCkgbW91c2VFbnRlckRlbGF5ID0gMTUwO1xyXG4gIC8vIOWboOS4uum8oOagh+enu+WHuuS5i+WQjuWmguaenOeri+WIu+a2iOWkseS8muW+iOeqgeeEtu+8jOaJgOS7peWinuWKoOeVpeWwj+S4gOS6m+eahOW7tui/n++8jOS9v+W+l+aXouS4jeeqgeeEtuS5n+WPjeW6lOeBteaVj1xyXG4gIEBJbnB1dCgpIG1vdXNlTGVhdmVEZWxheSA9IDEwMDtcclxuICBpc0VudGVyOiBib29sZWFuO1xyXG4gIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgdW5zdWJzY3JpYmVUJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgdG9vbHRpcENvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFRvb2x0aXBDb21wb25lbnQ+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0cmlnZ2VyRWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgb3ZlcmxheUNvbnRhaW5lclJlZjogT3ZlcmxheUNvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIGRldkNvbmZpZ1NlcnZpY2U6IERldkNvbmZpZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJykgb25Gb2N1cygpIHtcclxuICAgIHRoaXMuc2hvdygpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpIG9uQmx1cigpIHtcclxuICAgIHRoaXMuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVG9vbHRpcCgpIHtcclxuICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZiA9IHRoaXMub3ZlcmxheUNvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvb2x0aXBDb21wb25lbnQpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5zdGFuY2VBc3NpZ25WYWx1ZShbJ2NvbnRlbnQnLCAncG9zaXRpb24nLCAnc2hvd0FuaW1hdGlvbicsICd0cmlnZ2VyRWxlbWVudFJlZiddKTtcclxuXHJcbiAgICAvLyDlr7nliJvlu7rnmoRUb29sVGlw57uE5Lu25re75Yqg6byg5qCH56e75YWl5ZKM56e75Ye655qE55uR5ZCs5LqL5Lu2XHJcbiAgICBpZiAoKHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLnRvb2x0aXAubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmJpbmRNb3VzZUV2ZW50KCh0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS50b29sdGlwLm5hdGl2ZUVsZW1lbnQsIHRoaXMudW5zdWJzY3JpYmVUJCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kTW91c2VFdmVudChldmVudFRhcmdldDogSFRNTEVsZW1lbnQsIHVuc3Vic2NyaWJlJDogU3ViamVjdDx1bmtub3duPikge1xyXG4gICAgZnJvbUV2ZW50KGV2ZW50VGFyZ2V0LCAnbW91c2VlbnRlcicpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNFbnRlciA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMubW91c2VFbnRlckRlbGF5KSxcclxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB0aGlzLmlzRW50ZXIpLFxyXG4gICAgICAgIHRha2VVbnRpbCh1bnN1YnNjcmliZSQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgIHRoaXMuc2hvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICBmcm9tRXZlbnQoZXZlbnRUYXJnZXQsICdtb3VzZWxlYXZlJylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0VudGVyID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMubW91c2VMZWF2ZURlbGF5KSxcclxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAhdGhpcy5pc0VudGVyKSxcclxuICAgICAgICB0YWtlVW50aWwodW5zdWJzY3JpYmUkKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICBpZiAoIXRoaXMuY29udGVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcENvbXBvbmVudFJlZikge1xyXG4gICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNyZWF0ZVRvb2x0aXAoKTtcclxuICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5pbnN0YW5jZS5vblNob3coKTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy50b29sdGlwQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZVQkKSB7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5uZXh0KCk7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIGlmICh0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYpIHtcclxuICAgICAgdGhpcy50b29sdGlwQ29tcG9uZW50UmVmLmluc3RhbmNlLm9uSGlkZSgpO1xyXG4gICAgICBpZiAoIXRoaXMuc2hvd0FuaW1hdGlvbikge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYuaW5zdGFuY2Uub25IaWRkZW4gPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZVQkKSB7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5uZXh0KCk7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5zdGFuY2VBc3NpZ25WYWx1ZShrZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXlBcnIgPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IFtrZXldIDoga2V5O1xyXG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcclxuICAgIGtleUFyci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIG9ialtpdGVtXSA9IHRoaXNbaXRlbV07XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy50b29sdGlwQ29tcG9uZW50UmVmLmluc3RhbmNlLCBvYmopO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b29sdGlwQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgIGNvbnN0IHsgY29udGVudCwgcG9zaXRpb24sIHNob3dBbmltYXRpb24gfSA9IGNoYW5nZXM7XHJcbiAgICAgIGlmICghY29udGVudC5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICB0aGlzLmluc3RhbmNlQXNzaWduVmFsdWUoJ2NvbnRlbnQnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmluc3RhbmNlQXNzaWduVmFsdWUoJ3Bvc2l0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNob3dBbmltYXRpb24pIHtcclxuICAgICAgICB0aGlzLmluc3RhbmNlQXNzaWduVmFsdWUoJ3Nob3dBbmltYXRpb24nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMudHJpZ2dlckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmJpbmRNb3VzZUV2ZW50KHRoaXMudHJpZ2dlckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy51bnN1YnNjcmliZSQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZVQkKSB7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5uZXh0KCk7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVUJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gIH1cclxufVxyXG4iXX0=