UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

363 lines 28.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ComponentFactoryResolver, Directive, ElementRef, EventEmitter, Host, Input, Optional, Output, Renderer2, ViewContainerRef } from '@angular/core'; import { Subscription } from 'rxjs'; import { distinctUntilChanged } from 'rxjs/operators'; import { NzNoAnimationDirective } from '../core/no-animation/nz-no-animation.directive'; import { isNotNil } from '../core/util/check'; import { NzToolTipComponent } from './nz-tooltip.component'; var NzTooltipDirective = /** @class */ (function () { function NzTooltipDirective(elementRef, hostView, resolver, renderer, tooltip, noAnimation) { this.elementRef = elementRef; this.hostView = hostView; this.resolver = resolver; this.renderer = renderer; this.tooltip = tooltip; this.noAnimation = noAnimation; // [NOTE] Here hard coded, and nzTitle used only under NzTooltipDirective currently. this.isTooltipOpen = false; this.isDynamicTooltip = false; // Indicate whether current tooltip is dynamic created this.factory = this.resolver.resolveComponentFactory(NzToolTipComponent); /** * Names of properties that should be proxy to child component. */ this.needProxyProperties = [ 'nzTitle', 'nzContent', 'nzOverlayClassName', 'nzOverlayStyle', 'nzMouseEnterDelay', 'nzMouseLeaveDelay', 'nzVisible', 'nzTrigger', 'nzPlacement' ]; this.subs_ = new Subscription(); this.nzVisibleChange = new EventEmitter(); } Object.defineProperty(NzTooltipDirective.prototype, "setTitle", { set: /** * @param {?} title * @return {?} */ function (title) { this.nzTitle = title; }, enumerable: true, configurable: true }); /** * @param {?} changes * @return {?} */ NzTooltipDirective.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { this.updateProxies(changes); }; /** * @return {?} */ NzTooltipDirective.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; // Support faster tooltip mode: <a nz-tooltip="xxx"></a>. [NOTE] Used only under NzTooltipDirective currently. if (!this.tooltip) { /** @type {?} */ var tooltipComponent = this.hostView.createComponent(this.factory); this.tooltip = tooltipComponent.instance; this.tooltip.noAnimation = this.noAnimation; // Remove element when use directive https://github.com/NG-ZORRO/ng-zorro-antd/issues/1967 this.renderer.removeChild(this.renderer.parentNode(this.elementRef.nativeElement), tooltipComponent.location.nativeElement); this.isDynamicTooltip = true; this.needProxyProperties.forEach((/** * @param {?} property * @return {?} */ function (property) { return _this.updateCompValue(property, _this[property]); })); /** @type {?} */ var visible_ = this.tooltip.nzVisibleChange.pipe(distinctUntilChanged()).subscribe((/** * @param {?} data * @return {?} */ function (data) { _this.visible = data; _this.nzVisibleChange.emit(data); })); this.subs_.add(visible_); } this.tooltip.setOverlayOrigin(this); }; /** * @return {?} */ NzTooltipDirective.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; if (this.tooltip.nzTrigger === 'hover') { /** @type {?} */ var overlayElement_1; this.renderer.listen(this.elementRef.nativeElement, 'mouseenter', (/** * @return {?} */ function () { return _this.delayEnterLeave(true, true, _this.tooltip.nzMouseEnterDelay); })); this.renderer.listen(this.elementRef.nativeElement, 'mouseleave', (/** * @return {?} */ function () { _this.delayEnterLeave(true, false, _this.tooltip.nzMouseLeaveDelay); if (_this.tooltip.overlay.overlayRef && !overlayElement_1) { // NOTE: we bind events under "mouseleave" due to the overlayRef is only created after the overlay was completely shown up overlayElement_1 = _this.tooltip.overlay.overlayRef.overlayElement; _this.renderer.listen(overlayElement_1, 'mouseenter', (/** * @return {?} */ function () { return _this.delayEnterLeave(false, true); })); _this.renderer.listen(overlayElement_1, 'mouseleave', (/** * @return {?} */ function () { return _this.delayEnterLeave(false, false); })); } })); } else if (this.tooltip.nzTrigger === 'focus') { this.renderer.listen(this.elementRef.nativeElement, 'focus', (/** * @return {?} */ function () { return _this.show(); })); this.renderer.listen(this.elementRef.nativeElement, 'blur', (/** * @return {?} */ function () { return _this.hide(); })); } else if (this.tooltip.nzTrigger === 'click') { this.renderer.listen(this.elementRef.nativeElement, 'click', (/** * @param {?} e * @return {?} */ function (e) { e.preventDefault(); _this.show(); })); } }; /** * @return {?} */ NzTooltipDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subs_.unsubscribe(); }; // tslint:disable-next-line:no-any // tslint:disable-next-line:no-any /** * @protected * @param {?} key * @param {?} value * @return {?} */ NzTooltipDirective.prototype.updateCompValue = // tslint:disable-next-line:no-any /** * @protected * @param {?} key * @param {?} value * @return {?} */ function (key, value) { if (this.isDynamicTooltip && isNotNil(value)) { this.tooltip[key] = value; } }; /** * @private * @return {?} */ NzTooltipDirective.prototype.show = /** * @private * @return {?} */ function () { this.tooltip.show(); this.isTooltipOpen = true; }; /** * @private * @return {?} */ NzTooltipDirective.prototype.hide = /** * @private * @return {?} */ function () { this.tooltip.hide(); this.isTooltipOpen = false; }; /** * @private * @param {?} isOrigin * @param {?} isEnter * @param {?=} delay * @return {?} */ NzTooltipDirective.prototype.delayEnterLeave = /** * @private * @param {?} isOrigin * @param {?} isEnter * @param {?=} delay * @return {?} */ function (isOrigin, isEnter, delay) { var _this = this; if (delay === void 0) { delay = -1; } if (this.delayTimer) { // Clear timer during the delay time clearTimeout(this.delayTimer); this.delayTimer = null; } else if (delay > 0) { this.delayTimer = setTimeout((/** * @return {?} */ function () { _this.delayTimer = null; isEnter ? _this.show() : _this.hide(); }), delay * 1000); } else { isEnter && isOrigin ? this.show() : this.hide(); // [Compatible] The "isOrigin" is used due to the tooltip will not hide immediately (may caused by the fade-out animation) } }; /** * Set inputs of child components when this component's inputs change. * @param changes */ /** * Set inputs of child components when this component's inputs change. * @private * @param {?} changes * @return {?} */ NzTooltipDirective.prototype.updateProxies = /** * Set inputs of child components when this component's inputs change. * @private * @param {?} changes * @return {?} */ function (changes) { var _this = this; if (this.tooltip) { Object.keys(changes).forEach((/** * @param {?} key * @return {?} */ function (key) { /** @type {?} */ var change = changes[key]; if (change) { _this.updateCompValue(key, change.currentValue); } })); if (changes.setTitle) { this.nzTitle = changes.setTitle.currentValue; this.updateCompValue('nzTitle', changes.setTitle.currentValue); } } }; NzTooltipDirective.decorators = [ { type: Directive, args: [{ selector: '[nz-tooltip]', host: { '[class.ant-tooltip-open]': 'isTooltipOpen' } },] } ]; /** @nocollapse */ NzTooltipDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: ViewContainerRef }, { type: ComponentFactoryResolver }, { type: Renderer2 }, { type: NzToolTipComponent, decorators: [{ type: Optional }] }, { type: NzNoAnimationDirective, decorators: [{ type: Host }, { type: Optional }] } ]; }; NzTooltipDirective.propDecorators = { nzVisibleChange: [{ type: Output }], nzTitle: [{ type: Input, args: ['nz-tooltip',] }], setTitle: [{ type: Input, args: ['nzTitle',] }], nzContent: [{ type: Input }], nzMouseEnterDelay: [{ type: Input }], nzMouseLeaveDelay: [{ type: Input }], nzOverlayClassName: [{ type: Input }], nzOverlayStyle: [{ type: Input }], nzTrigger: [{ type: Input }], nzVisible: [{ type: Input }], nzPlacement: [{ type: Input }] }; return NzTooltipDirective; }()); export { NzTooltipDirective }; if (false) { /** @type {?} */ NzTooltipDirective.prototype.isTooltipOpen; /** @type {?} */ NzTooltipDirective.prototype.isDynamicTooltip; /** @type {?} */ NzTooltipDirective.prototype.delayTimer; /** @type {?} */ NzTooltipDirective.prototype.visible; /** @type {?} */ NzTooltipDirective.prototype.factory; /** * Names of properties that should be proxy to child component. * @type {?} * @protected */ NzTooltipDirective.prototype.needProxyProperties; /** * @type {?} * @protected */ NzTooltipDirective.prototype.subs_; /** @type {?} */ NzTooltipDirective.prototype.nzVisibleChange; /** @type {?} */ NzTooltipDirective.prototype.nzTitle; /** @type {?} */ NzTooltipDirective.prototype.nzContent; /** @type {?} */ NzTooltipDirective.prototype.nzMouseEnterDelay; /** @type {?} */ NzTooltipDirective.prototype.nzMouseLeaveDelay; /** @type {?} */ NzTooltipDirective.prototype.nzOverlayClassName; /** @type {?} */ NzTooltipDirective.prototype.nzOverlayStyle; /** @type {?} */ NzTooltipDirective.prototype.nzTrigger; /** @type {?} */ NzTooltipDirective.prototype.nzVisible; /** @type {?} */ NzTooltipDirective.prototype.nzPlacement; /** @type {?} */ NzTooltipDirective.prototype.elementRef; /** @type {?} */ NzTooltipDirective.prototype.hostView; /** @type {?} */ NzTooltipDirective.prototype.resolver; /** @type {?} */ NzTooltipDirective.prototype.renderer; /** @type {?} */ NzTooltipDirective.prototype.tooltip; /** @type {?} */ NzTooltipDirective.prototype.noAnimation; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotdG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLyIsInNvdXJjZXMiOlsidG9vbHRpcC9uei10b29sdGlwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLHdCQUF3QixFQUN4QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUdULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RDtJQThDRSw0QkFDUyxVQUFzQixFQUN0QixRQUEwQixFQUMxQixRQUFrQyxFQUNsQyxRQUFtQixFQUNQLE9BQTJCLEVBQ25CLFdBQW9DO1FBTHhELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNQLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUF5Qjs7UUE1Q2pFLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHFCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLHNEQUFzRDtRQUdoRixZQUFPLEdBQXlDLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7OztRQUdoRyx3QkFB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QUksUUFBUTs7O2tDQXZCbEIsTUFBTTswQkFFTixLQUFLLFNBQUMsWUFBWTsyQkFFbEIsS0FBSyxTQUFDLFNBQVM7NEJBSWYsS0FBSztvQ0FDTCxLQUFLO29DQUNMLEtBQUs7cUNBQ0wsS0FBSztpQ0FDTCxLQUFLOzRCQUNMLEtBQUs7NEJBQ0wsS0FBSzs4QkFDTCxLQUFLOztJQWdIUix5QkFBQztDQUFBLEFBNUpELElBNEpDO1NBdEpZLGtCQUFrQjs7O0lBRTdCLDJDQUErQjs7SUFDL0IsOENBQXlCOztJQUN6Qix3Q0FBbUI7O0lBQ25CLHFDQUFpQjs7SUFDakIscUNBQTBHOzs7Ozs7SUFHMUcsaURBVUU7Ozs7O0lBRUYsbUNBQXFDOztJQUVyQyw2Q0FBaUU7O0lBRWpFLHFDQUF5RDs7SUFNekQsdUNBQStDOztJQUMvQywrQ0FBbUM7O0lBQ25DLCtDQUFtQzs7SUFDbkMsZ0RBQW9DOztJQUNwQyw0Q0FBcUQ7O0lBQ3JELHVDQUEyQjs7SUFDM0IsdUNBQTRCOztJQUM1Qix5Q0FBNkI7O0lBRzNCLHdDQUE2Qjs7SUFDN0Isc0NBQWlDOztJQUNqQyxzQ0FBeUM7O0lBQ3pDLHNDQUEwQjs7SUFDMUIscUNBQThDOztJQUM5Qyx5Q0FBK0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpOb0FuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2NvcmUvbm8tYW5pbWF0aW9uL256LW5vLWFuaW1hdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgaXNOb3ROaWwgfSBmcm9tICcuLi9jb3JlL3V0aWwvY2hlY2snO1xuaW1wb3J0IHsgTnpUb29sVGlwQ29tcG9uZW50IH0gZnJvbSAnLi9uei10b29sdGlwLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuei10b29sdGlwXScsXG4gIGhvc3QgICAgOiB7XG4gICAgJ1tjbGFzcy5hbnQtdG9vbHRpcC1vcGVuXSc6ICdpc1Rvb2x0aXBPcGVuJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE56VG9vbHRpcERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBbTk9URV0gSGVyZSBoYXJkIGNvZGVkLCBhbmQgbnpUaXRsZSB1c2VkIG9ubHkgdW5kZXIgTnpUb29sdGlwRGlyZWN0aXZlIGN1cnJlbnRseS5cbiAgaXNUb29sdGlwT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0R5bmFtaWNUb29sdGlwID0gZmFsc2U7IC8vIEluZGljYXRlIHdoZXRoZXIgY3VycmVudCB0b29sdGlwIGlzIGR5bmFtaWMgY3JlYXRlZFxuICBkZWxheVRpbWVyOiBudW1iZXI7IC8vIFRpbWVyIGZvciBkZWxheSBlbnRlci9sZWF2ZVxuICB2aXNpYmxlOiBib29sZWFuO1xuICBmYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PE56VG9vbFRpcENvbXBvbmVudD4gPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE56VG9vbFRpcENvbXBvbmVudCk7XG5cbiAgLyoqIE5hbWVzIG9mIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgcHJveHkgdG8gY2hpbGQgY29tcG9uZW50LiAqL1xuICBwcm90ZWN0ZWQgbmVlZFByb3h5UHJvcGVydGllcyA9IFtcbiAgICAnbnpUaXRsZScsXG4gICAgJ256Q29udGVudCcsXG4gICAgJ256T3ZlcmxheUNsYXNzTmFtZScsXG4gICAgJ256T3ZlcmxheVN0eWxlJyxcbiAgICAnbnpNb3VzZUVudGVyRGVsYXknLFxuICAgICduek1vdXNlTGVhdmVEZWxheScsXG4gICAgJ256VmlzaWJsZScsXG4gICAgJ256VHJpZ2dlcicsXG4gICAgJ256UGxhY2VtZW50J1xuICBdO1xuXG4gIHByb3RlY3RlZCBzdWJzXyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpWaXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBJbnB1dCgnbnotdG9vbHRpcCcpIG56VGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIEBJbnB1dCgnbnpUaXRsZScpIHNldCBzZXRUaXRsZSh0aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD4pIHtcbiAgICB0aGlzLm56VGl0bGUgPSB0aXRsZTtcbiAgfVxuXG4gIEBJbnB1dCgpIG56Q29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD47XG4gIEBJbnB1dCgpIG56TW91c2VFbnRlckRlbGF5OiBudW1iZXI7XG4gIEBJbnB1dCgpIG56TW91c2VMZWF2ZURlbGF5OiBudW1iZXI7XG4gIEBJbnB1dCgpIG56T3ZlcmxheUNsYXNzTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBuek92ZXJsYXlTdHlsZTogeyBbIGtleTogc3RyaW5nIF06IHN0cmluZyB9O1xuICBASW5wdXQoKSBuelRyaWdnZXI6IHN0cmluZztcbiAgQElucHV0KCkgbnpWaXNpYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSBuelBsYWNlbWVudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBob3N0VmlldzogVmlld0NvbnRhaW5lclJlZixcbiAgICBwdWJsaWMgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgdG9vbHRpcDogTnpUb29sVGlwQ29tcG9uZW50LFxuICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgcHVibGljIG5vQW5pbWF0aW9uPzogTnpOb0FuaW1hdGlvbkRpcmVjdGl2ZVxuICApIHtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVByb3hpZXMoY2hhbmdlcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTdXBwb3J0IGZhc3RlciB0b29sdGlwIG1vZGU6IDxhIG56LXRvb2x0aXA9XCJ4eHhcIj48L2E+LiBbTk9URV0gVXNlZCBvbmx5IHVuZGVyIE56VG9vbHRpcERpcmVjdGl2ZSBjdXJyZW50bHkuXG4gICAgaWYgKCF0aGlzLnRvb2x0aXApIHtcbiAgICAgIGNvbnN0IHRvb2x0aXBDb21wb25lbnQgPSB0aGlzLmhvc3RWaWV3LmNyZWF0ZUNvbXBvbmVudCh0aGlzLmZhY3RvcnkpO1xuICAgICAgdGhpcy50b29sdGlwID0gdG9vbHRpcENvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgIHRoaXMudG9vbHRpcC5ub0FuaW1hdGlvbiA9IHRoaXMubm9BbmltYXRpb247XG4gICAgICAvLyBSZW1vdmUgZWxlbWVudCB3aGVuIHVzZSBkaXJlY3RpdmUgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvaXNzdWVzLzE5NjdcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5yZW5kZXJlci5wYXJlbnROb2RlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSwgdG9vbHRpcENvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMuaXNEeW5hbWljVG9vbHRpcCA9IHRydWU7XG4gICAgICB0aGlzLm5lZWRQcm94eVByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB0aGlzLnVwZGF0ZUNvbXBWYWx1ZShwcm9wZXJ0eSwgdGhpc1sgcHJvcGVydHkgXSkpO1xuICAgICAgY29uc3QgdmlzaWJsZV8gPSB0aGlzLnRvb2x0aXAubnpWaXNpYmxlQ2hhbmdlLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLnZpc2libGUgPSBkYXRhO1xuICAgICAgICB0aGlzLm56VmlzaWJsZUNoYW5nZS5lbWl0KGRhdGEpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNfLmFkZCh2aXNpYmxlXyk7XG4gICAgfVxuICAgIHRoaXMudG9vbHRpcC5zZXRPdmVybGF5T3JpZ2luKHRoaXMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvb2x0aXAubnpUcmlnZ2VyID09PSAnaG92ZXInKSB7XG4gICAgICBsZXQgb3ZlcmxheUVsZW1lbnQ7XG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZW50ZXInLCAoKSA9PiB0aGlzLmRlbGF5RW50ZXJMZWF2ZSh0cnVlLCB0cnVlLCB0aGlzLnRvb2x0aXAubnpNb3VzZUVudGVyRGVsYXkpKTtcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5kZWxheUVudGVyTGVhdmUodHJ1ZSwgZmFsc2UsIHRoaXMudG9vbHRpcC5uek1vdXNlTGVhdmVEZWxheSk7XG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXAub3ZlcmxheS5vdmVybGF5UmVmICYmICFvdmVybGF5RWxlbWVudCkgeyAvLyBOT1RFOiB3ZSBiaW5kIGV2ZW50cyB1bmRlciBcIm1vdXNlbGVhdmVcIiBkdWUgdG8gdGhlIG92ZXJsYXlSZWYgaXMgb25seSBjcmVhdGVkIGFmdGVyIHRoZSBvdmVybGF5IHdhcyBjb21wbGV0ZWx5IHNob3duIHVwXG4gICAgICAgICAgb3ZlcmxheUVsZW1lbnQgPSB0aGlzLnRvb2x0aXAub3ZlcmxheS5vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50O1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKG92ZXJsYXlFbGVtZW50LCAnbW91c2VlbnRlcicsICgpID0+IHRoaXMuZGVsYXlFbnRlckxlYXZlKGZhbHNlLCB0cnVlKSk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4ob3ZlcmxheUVsZW1lbnQsICdtb3VzZWxlYXZlJywgKCkgPT4gdGhpcy5kZWxheUVudGVyTGVhdmUoZmFsc2UsIGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b29sdGlwLm56VHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1cycsICgpID0+IHRoaXMuc2hvdygpKTtcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYmx1cicsICgpID0+IHRoaXMuaGlkZSgpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9vbHRpcC5uelRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzXy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBwcm90ZWN0ZWQgdXBkYXRlQ29tcFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljVG9vbHRpcCAmJiBpc05vdE5pbCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMudG9vbHRpcFsga2V5IF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3coKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwLnNob3coKTtcbiAgICB0aGlzLmlzVG9vbHRpcE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgdGhpcy5pc1Rvb2x0aXBPcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGRlbGF5RW50ZXJMZWF2ZShpc09yaWdpbjogYm9vbGVhbiwgaXNFbnRlcjogYm9vbGVhbiwgZGVsYXk6IG51bWJlciA9IC0xKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVsYXlUaW1lcikgeyAvLyBDbGVhciB0aW1lciBkdXJpbmcgdGhlIGRlbGF5IHRpbWVcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlbGF5VGltZXIpO1xuICAgICAgdGhpcy5kZWxheVRpbWVyID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgdGhpcy5kZWxheVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGVsYXlUaW1lciA9IG51bGw7XG4gICAgICAgIGlzRW50ZXIgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuICAgICAgfSwgZGVsYXkgKiAxMDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNFbnRlciAmJiBpc09yaWdpbiA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7IC8vIFtDb21wYXRpYmxlXSBUaGUgXCJpc09yaWdpblwiIGlzIHVzZWQgZHVlIHRvIHRoZSB0b29sdGlwIHdpbGwgbm90IGhpZGUgaW1tZWRpYXRlbHkgKG1heSBjYXVzZWQgYnkgdGhlIGZhZGUtb3V0IGFuaW1hdGlvbilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGlucHV0cyBvZiBjaGlsZCBjb21wb25lbnRzIHdoZW4gdGhpcyBjb21wb25lbnQncyBpbnB1dHMgY2hhbmdlLlxuICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVQcm94aWVzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b29sdGlwKSB7XG4gICAgICBPYmplY3Qua2V5cyhjaGFuZ2VzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbIGtleSBdO1xuICAgICAgICBpZiAoY2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb21wVmFsdWUoa2V5LCBjaGFuZ2UuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjaGFuZ2VzLnNldFRpdGxlKSB7XG4gICAgICAgIHRoaXMubnpUaXRsZSA9IGNoYW5nZXMuc2V0VGl0bGUuY3VycmVudFZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBWYWx1ZSgnbnpUaXRsZScsIGNoYW5nZXMuc2V0VGl0bGUuY3VycmVudFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==