UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

196 lines 21.5 kB
/** * @fileoverview added by tsickle * Generated from: popover.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { animate, state, style, transition, trigger } from '@angular/animations'; import { Component, ElementRef, HostBinding, HostListener, Input, Renderer2 } from '@angular/core'; import { PositionService } from '@duoduo-oba/ng-devui/position'; import { fromEvent, Subscription } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; export class PopoverComponent { /** * @param {?} renderer * @param {?} positionService * @param {?} elementRef */ constructor(renderer, positionService, elementRef) { this.renderer = renderer; this.positionService = positionService; this.elementRef = elementRef; this.showAnimate = false; this.zIndex = 1060; this.animateState = this.showAnimate ? 'void' : ''; this.display = 'block'; this.subs = new Subscription(); this.SCROLL_REFRESH_INTERVAL = 100; } /** * @return {?} */ get class() { return 'devui-popover ' + this.position + ' devui-popover-' + this.popType; } /** * @return {?} */ get state() { return this.animateState; } /** * @return {?} */ ngOnInit() { this.elementRef.nativeElement.style.zIndex = this.zIndex; } /** * @return {?} */ ngAfterViewInit() { this.updatePosition(); if (this.appendToBody) { if (!this.scrollElement) { this.scrollElement = this.positionService.getScrollParent(this.triggerElementRef.nativeElement); } this.subs.add(fromEvent(this.scrollElement || window, 'scroll') .pipe(debounceTime(this.SCROLL_REFRESH_INTERVAL)) .subscribe((/** * @return {?} */ () => { this.updatePosition(); }))); this.subs.add(fromEvent(window, 'resize') .pipe(debounceTime(this.SCROLL_REFRESH_INTERVAL)) .subscribe((/** * @return {?} */ () => { this.updatePosition(); }))); } } /** * @return {?} */ ngAfterContentChecked() { this.updatePosition(); } /** * @return {?} */ show() { this.animateState = 'visible'; } /** * @return {?} */ hide() { this.animateState = 'void'; } // will be overwrite by directive /** * @return {?} */ onHidden() { } /** * @param {?} event * @return {?} */ onAnimationEnd(event) { if (event.toState === 'void') { this.onHidden(); } } /** * @return {?} */ ngOnDestroy() { if (this.subs) { this.subs.unsubscribe(); } } /** * @return {?} */ updatePosition() { /** @type {?} */ const rect = this.positionService.positionElements(this.triggerElementRef.nativeElement, this.elementRef.nativeElement, this.position, this.appendToBody); this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${rect.left}px`); this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${rect.top}px`); } } PopoverComponent.decorators = [ { type: Component, args: [{ selector: 'd-popover', template: "<div class=\"arrow\"></div>\r\n<div class=\"devui-popover-content\">\r\n <span class=\"devui-popover-icon\" *ngIf=\"popType && popType !== 'default'\">\r\n <svg\r\n *ngIf=\"popType === 'success'\"\r\n class=\"devui-icon devui-icon-success\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\r\n <path d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z\" fill-rule=\"nonzero\"></path>\r\n <polygon\r\n stroke-width=\"0.4\"\r\n fill-rule=\"nonzero\"\r\n points=\"8.16 10.48 7.32 11.32 6.48 10.48 6.48 10.48 3.6 7.68 4.44 6.84 7.28 9.68 11.52 5.44 12.36 6.28\"\r\n ></polygon>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'warning'\"\r\n class=\"devui-icon devui-icon-warning\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <polygon\r\n points=\"7.5 1.74501946 1.39184847 13.5954649 7.08947368 14.2207621 13.9973698 13.5954649 10.9383683 5.61273879 8.40084114 1.27624313\"\r\n ></polygon>\r\n <path\r\n d=\"M8.51325441,0.127397589 C8.70423071,0.228333932 8.8605922,0.383286648 8.96244623,0.57254229 L15.8714442,13.4101975 C16.1549662,13.9370117 15.9538562,14.5918482 15.4222523,14.8728158 C15.2642579,14.9563203 15.0879506,15 14.9088903,15 L1.09089441,15 C0.488410063,15 0,14.5159904 0,13.9189343 C0,13.7414873 0.0440768395,13.5667684 0.128340519,13.4101975 L7.03733844,0.57254229 C7.32086049,0.0457280838 7.98165058,-0.153569987 8.51325441,0.127397589 Z M8.87894737,11.2105263 L7.08947368,11.2105263 L7.08947368,13 L8.87894737,13 L8.87894737,11.2105263 Z M8.96842105,4.5 L7,4.5 L7.08947368,9.86842105 L8.87894737,9.86842105 L8.96842105,4.5 Z\"\r\n ></path>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'info'\"\r\n class=\"devui-icon devui-icon-info\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\r\n <g stroke-width=\"1\">\r\n <path\r\n d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z M9,5 L7,5 L7,3 L9,3 L9,5 Z M9,12.6 L7,12.6 L7,6.6 L9,6.6 L9,12.6 Z\"\r\n ></path>\r\n </g>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'error'\"\r\n class=\"devui-icon devui-icon-error\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\r\n <path\r\n d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z M9,12.6 L7,12.6 L7,10.6 L9,10.6 L9,12.6 Z M9,9.1 L7,9.1 L6.9,3.1 L9.1,3.1 L9,9.1 Z\"\r\n fill-rule=\"nonzero\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </span>\r\n <div class=\"devui-popover-main-content\" [ngClass]=\"{ 'with-icon': popType && popType !== 'default' }\" [innerHTML]=\"content\"></div>\r\n</div>\r\n", animations: [ trigger('state', [ state('void', style({ opacity: 0 })), state('visible', style({ opacity: 1 })), transition('* => visible', animate('150ms cubic-bezier(0.0, 0.0, 0.2, 1)')), transition('visible => *', animate('150ms cubic-bezier(0.4, 0.0, 1, 1)')) ]) ], styles: [":host.devui-popover{font-size:12px;position:absolute;top:0;left:0;line-height:20px;border:none;border-radius:2px;z-index:1060;background-color:#464d6e;color:#dfe1e6;overflow-wrap:break-word}:host.devui-popover>.arrow{border-width:8px}:host.devui-popover>.arrow,:host.devui-popover>.arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}:host.devui-popover>.arrow::after{content:''}:host.devui-popover.top>.arrow{left:50%;margin-left:-7px;border-bottom-width:0;border-top-color:#464d6e;bottom:-8px}:host.devui-popover.right>.arrow{top:50%;left:-8px;margin-top:-8px;border-left-width:0;border-right-color:#464d6e}:host.devui-popover.bottom>.arrow{left:50%;margin-left:-7px;border-top-width:0;border-bottom-color:#464d6e;top:-8px}:host.devui-popover.left>.arrow{top:50%;right:-8px;margin-top:-8px;border-right-width:0;border-left-color:#464d6e}:host.devui-popover.top{margin-top:-10px;box-shadow:-5px 5px 20px 0 rgba(41,48,64,.2)}:host.devui-popover.bottom{margin-top:10px;box-shadow:5px -5px 20px 0 rgba(41,48,64,.2)}:host.devui-popover.left{margin-left:-10px;box-shadow:5px -5px 20px 0 rgba(41,48,64,.2)}:host.devui-popover.right{margin-left:10px;box-shadow:-5px 5px 20px 0 rgba(41,48,64,.2)}.devui-popover-icon{display:block;position:absolute;left:12px;top:8px}.devui-popover-icon svg.devui-icon{width:16px;height:16px}.devui-popover-main-content.with-icon{text-indent:20px}.devui-icon.devui-icon-success>g>path{fill:#50d4ab}.devui-icon.devui-icon-success>g>circle,.devui-icon.devui-icon-success>g>polygon,.devui-icon.devui-icon-warning>g>polygon{fill:#fff}.devui-icon.devui-icon-warning>g>path{fill:#fac20a}.devui-icon.devui-icon-info>g>g{fill:#5e7ce0}.devui-icon.devui-icon-info>g>circle{fill:#fff}.devui-icon.devui-icon-error>g>path{fill:#f66f6a}.devui-icon.devui-icon-error>g>circle{fill:#fff}.devui-popover-content{padding:5px 14px}"] }] } ]; /** @nocollapse */ PopoverComponent.ctorParameters = () => [ { type: Renderer2 }, { type: PositionService }, { type: ElementRef } ]; PopoverComponent.propDecorators = { triggerElementRef: [{ type: Input }], position: [{ type: Input }], content: [{ type: Input }], showAnimate: [{ type: Input }], scrollElement: [{ type: Input }], appendToBody: [{ type: Input }], zIndex: [{ type: Input }], popType: [{ type: Input }], display: [{ type: HostBinding, args: ['style.display',] }], class: [{ type: HostBinding, args: ['class',] }], state: [{ type: HostBinding, args: ['@state',] }], onAnimationEnd: [{ type: HostListener, args: ['@state.done', ['$event'],] }] }; if (false) { /** @type {?} */ PopoverComponent.prototype.triggerElementRef; /** @type {?} */ PopoverComponent.prototype.position; /** @type {?} */ PopoverComponent.prototype.content; /** @type {?} */ PopoverComponent.prototype.showAnimate; /** @type {?} */ PopoverComponent.prototype.scrollElement; /** @type {?} */ PopoverComponent.prototype.appendToBody; /** @type {?} */ PopoverComponent.prototype.zIndex; /** @type {?} */ PopoverComponent.prototype.popType; /** @type {?} */ PopoverComponent.prototype.animateState; /** @type {?} */ PopoverComponent.prototype.display; /** @type {?} */ PopoverComponent.prototype.subs; /** @type {?} */ PopoverComponent.prototype.SCROLL_REFRESH_INTERVAL; /** * @type {?} * @private */ PopoverComponent.prototype.renderer; /** * @type {?} * @private */ PopoverComponent.prototype.positionService; /** @type {?} */ PopoverComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS9wb3BvdmVyLyIsInNvdXJjZXMiOlsicG9wb3Zlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBc0MsU0FBUyxFQUFFLFVBQVUsRUFDaEUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBbUI5QyxNQUFNLE9BQU8sZ0JBQWdCOzs7Ozs7SUF1QjNCLFlBQ1UsUUFBbUIsRUFDbkIsZUFBZ0MsRUFDakMsVUFBc0I7UUFGckIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDakMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXJCdEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUV2QixpQkFBWSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXhCLFlBQU8sR0FBRyxPQUFPLENBQUM7UUFRaEQsU0FBSSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hDLDRCQUF1QixHQUFHLEdBQUcsQ0FBQztJQU0zQixDQUFDOzs7O0lBZEosSUFBMEIsS0FBSztRQUM3QixPQUFPLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLEdB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QUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNwQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN2QyxVQUFVLENBQ1IsY0FBYyxFQUNkLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUNoRDt3QkFDRCxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO3FCQUMxRSxDQUFDO2lCQUNIOzthQUNGOzs7O1lBdEJzRCxTQUFTO1lBQ3ZELGVBQWU7WUFGZ0MsVUFBVTs7O2dDQTBCL0QsS0FBSzt1QkFDTCxLQUFLO3NCQUNMLEtBQUs7MEJBQ0wsS0FBSzs0QkFDTCxLQUFLOzJCQUNMLEtBQUs7cUJBQ0wsS0FBSztzQkFDTCxLQUFLO3NCQUdMLFdBQVcsU0FBQyxlQUFlO29CQUMzQixXQUFXLFNBQUMsT0FBTztvQkFHbkIsV0FBVyxTQUFDLFFBQVE7NkJBMERwQixZQUFZLFNBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDOzs7O0lBeEV2Qyw2Q0FBdUM7O0lBQ3ZDLG9DQUFnQzs7SUFDaEMsbUNBQXlCOztJQUN6Qix1Q0FBNkI7O0lBQzdCLHlDQUFnQzs7SUFDaEMsd0NBQStCOztJQUMvQixrQ0FBdUI7O0lBQ3ZCLG1DQUE4Qjs7SUFDOUIsd0NBQXNEOztJQUV0RCxtQ0FBZ0Q7O0lBUWhELGdDQUF3Qzs7SUFDeEMsbURBQThCOzs7OztJQUc1QixvQ0FBMkI7Ozs7O0lBQzNCLDJDQUF3Qzs7SUFDeEMsc0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZixcclxuICBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvblNlcnZpY2UgfSBmcm9tICduZy1kZXZ1aS9wb3NpdGlvbic7XHJcbmltcG9ydCB7IFBvc2l0aW9uVHlwZSB9IGZyb20gJ25nLWRldnVpL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFBvcG92ZXJUeXBlIH0gZnJvbSAnLi9wb3BvdmVyLnR5cGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC1wb3BvdmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbYC4vcG9wb3Zlci5jb21wb25lbnQuc2Nzc2BdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3N0YXRlJywgW1xyXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSksXHJcbiAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbihcclxuICAgICAgICAnKiA9PiB2aXNpYmxlJyxcclxuICAgICAgICBhbmltYXRlKCcxNTBtcyBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSknKVxyXG4gICAgICApLFxyXG4gICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+IConLCBhbmltYXRlKCcxNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpJykpXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBvcG92ZXJDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSB0cmlnZ2VyRWxlbWVudFJlZjogRWxlbWVudFJlZjtcclxuICBASW5wdXQoKSBwb3NpdGlvbjogUG9zaXRpb25UeXBlO1xyXG4gIEBJbnB1dCgpIGNvbnRlbnQ6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93QW5pbWF0ZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNjcm9sbEVsZW1lbnQ6IEVsZW1lbnQ7XHJcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHpJbmRleCA9IDEwNjA7XHJcbiAgQElucHV0KCkgcG9wVHlwZTogUG9wb3ZlclR5cGU7XHJcbiAgYW5pbWF0ZVN0YXRlOiBzdHJpbmcgPSB0aGlzLnNob3dBbmltYXRlID8gJ3ZvaWQnIDogJyc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpIGRpc3BsYXkgPSAnYmxvY2snO1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgY2xhc3MoKSB7XHJcbiAgICByZXR1cm4gJ2RldnVpLXBvcG92ZXIgJyArIHRoaXMucG9zaXRpb24gKyAnIGRldnVpLXBvcG92ZXItJyArIHRoaXMucG9wVHlwZTtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdAc3RhdGUnKSBnZXQgc3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hbmltYXRlU3RhdGU7XHJcbiAgfVxyXG5cclxuICBzdWJzOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgU0NST0xMX1JFRlJFU0hfSU5URVJWQUwgPSAxMDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBwb3NpdGlvblNlcnZpY2U6IFBvc2l0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnpJbmRleCA9IHRoaXMuekluZGV4O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xyXG5cclxuICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSkge1xyXG4gICAgICBpZiAoIXRoaXMuc2Nyb2xsRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudCA9IHRoaXMucG9zaXRpb25TZXJ2aWNlLmdldFNjcm9sbFBhcmVudChcclxuICAgICAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdWJzLmFkZChcclxuICAgICAgICBmcm9tRXZlbnQodGhpcy5zY3JvbGxFbGVtZW50IHx8IHdpbmRvdywgJ3Njcm9sbCcpXHJcbiAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5TQ1JPTExfUkVGUkVTSF9JTlRFUlZBTCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdWJzLmFkZChcclxuICAgICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLlNDUk9MTF9SRUZSRVNIX0lOVEVSVkFMKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xyXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHRoaXMuYW5pbWF0ZVN0YXRlID0gJ3Zpc2libGUnO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHRoaXMuYW5pbWF0ZVN0YXRlID0gJ3ZvaWQnO1xyXG4gIH1cclxuXHJcbiAgLy8gd2lsbCBiZSBvdmVyd3JpdGUgYnkgZGlyZWN0aXZlXHJcbiAgb25IaWRkZW4oKSB7fVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdAc3RhdGUuZG9uZScsIFsnJGV2ZW50J10pXHJcbiAgb25BbmltYXRpb25FbmQoZXZlbnQpIHtcclxuICAgIGlmIChldmVudC50b1N0YXRlID09PSAndm9pZCcpIHtcclxuICAgICAgdGhpcy5vbkhpZGRlbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzKSB7XHJcbiAgICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlUG9zaXRpb24oKSB7XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5wb3NpdGlvblNlcnZpY2UucG9zaXRpb25FbGVtZW50cyhcclxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgdGhpcy5wb3NpdGlvbixcclxuICAgICAgdGhpcy5hcHBlbmRUb0JvZHlcclxuICAgICk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxyXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgJ2xlZnQnLFxyXG4gICAgICBgJHtyZWN0LmxlZnR9cHhgXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICd0b3AnLFxyXG4gICAgICBgJHtyZWN0LnRvcH1weGBcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==