UNPKG

angular-admin-lte-teliqo

Version:
201 lines (200 loc) 19.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Directive, Input, Output, ElementRef, EventEmitter, Renderer2, NgZone } from '@angular/core'; export class CollapseAnimationDirective { /** * \@method constructor * @param {?} elementRef [description] * @param {?} ngZone [description] * @param {?} renderer2 [description] */ constructor(elementRef, ngZone, renderer2) { this.elementRef = elementRef; this.ngZone = ngZone; this.renderer2 = renderer2; this.firstStart = true; this.collapseAnimationDuration = 350; this.startEventEmitter = new EventEmitter(); this.doneEventEmitter = new EventEmitter(); } /** * @param {?} value * @return {?} */ set _isCollapsed(value) { this.lastIsCollapsed = this.isCollapsed; this.isCollapsed = value; if (!this.firstStart) { this.emit('start'); if (value) { this.collapse(); } else if (value === false) { this.unCollapse(); } } } /** * \@method ngOnInit * @return {?} */ ngOnInit() { if (this.collapseAnimationDuration && this.collapseAnimationDuration !== 350) { this.renderer2.setStyle(this.elementRef.nativeElement, 'transition-duration', `${this.collapseAnimationDuration}ms`); } if (this.collapseAnimationTiming) { this.renderer2.setStyle(this.elementRef.nativeElement, 'transition-timing-function', this.collapseAnimationTiming); } } /** * \@method ngAfterContentInit * @return {?} */ ngAfterContentInit() { this.emit('start'); if (this.isCollapsed) { this.renderer2.setStyle(this.elementRef.nativeElement, 'display', 'none'); this.renderer2.addClass(this.elementRef.nativeElement, 'collapsing'); } this.emit('done'); this.firstStart = false; this.subscriptions(); } /** * [ngOnDestroy description] * \@method ngOnDestroy * @return {?} [description] */ ngOnDestroy() { if (this.listener) { this.listener(); } } /** * [subscriptions description] * \@method subscriptions * @return {?} */ subscriptions() { this.ngZone.runOutsideAngular(() => { this.listener = this.renderer2.listen(this.elementRef.nativeElement, 'transitionend', () => { if (!this.isCollapsed) { this.renderer2.removeClass(this.elementRef.nativeElement, 'un-collapse'); this.renderer2.removeClass(this.elementRef.nativeElement, 'collapsing'); } else { this.renderer2.setStyle(this.elementRef.nativeElement, 'display', 'none'); } requestAnimationFrame(() => { this.renderer2.removeStyle(this.elementRef.nativeElement, 'height'); this.emit('done'); this.transitioning = false; }); }); }); } /** * [unCollapse description] * \@method unCollapse * @return {?} */ unCollapse() { this.transitioning = true; this.renderer2.addClass(this.elementRef.nativeElement, 'un-collapse'); this.renderer2.removeStyle(this.elementRef.nativeElement, 'display'); this.renderer2.setStyle(this.elementRef.nativeElement, 'height', `${this.elementRef.nativeElement.scrollHeight}px`); } /** * [collapse description] * \@method collapse * @return {?} */ collapse() { requestAnimationFrame(() => { if (!this.transitioning) { this.renderer2.setStyle(this.elementRef.nativeElement, 'height', `${this.elementRef.nativeElement.offsetHeight}px`); this.renderer2.addClass(this.elementRef.nativeElement, 'collapsing'); } this.transitioning = true; requestAnimationFrame(() => { this.renderer2.setStyle(this.elementRef.nativeElement, 'height', `0px`); }); }); } /** * @param {?} phaseName * @return {?} */ emit(phaseName) { const /** @type {?} */ event = { element: this.elementRef.nativeElement, fromState: this.lastIsCollapsed === undefined ? 'void' : this.lastIsCollapsed ? '1' : '0', phaseName: phaseName, toState: this.isCollapsed === undefined ? 'void' : this.isCollapsed ? '1' : '0', totalTime: this.collapseAnimationDuration, triggerName: 'collapseAnimation' }; if (phaseName === 'done') { this.doneEventEmitter.emit(event); } else if (phaseName === 'start') { this.startEventEmitter.emit(event); } } } CollapseAnimationDirective.decorators = [ { type: Directive, args: [{ selector: '[collapseAnimation]' },] }, ]; /** @nocollapse */ CollapseAnimationDirective.ctorParameters = () => [ { type: ElementRef, }, { type: NgZone, }, { type: Renderer2, }, ]; CollapseAnimationDirective.propDecorators = { "collapseAnimationDuration": [{ type: Input },], "collapseAnimationTiming": [{ type: Input },], "_isCollapsed": [{ type: Input, args: ['collapseAnimation',] },], "startEventEmitter": [{ type: Output, args: ['collapseAnimation.start',] },], "doneEventEmitter": [{ type: Output, args: ['collapseAnimation.done',] },], }; function CollapseAnimationDirective_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ CollapseAnimationDirective.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ CollapseAnimationDirective.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ CollapseAnimationDirective.propDecorators; /** @type {?} */ CollapseAnimationDirective.prototype.firstStart; /** @type {?} */ CollapseAnimationDirective.prototype.isCollapsed; /** @type {?} */ CollapseAnimationDirective.prototype.lastIsCollapsed; /** @type {?} */ CollapseAnimationDirective.prototype.transitioning; /** @type {?} */ CollapseAnimationDirective.prototype.listener; /** @type {?} */ CollapseAnimationDirective.prototype.collapseAnimationDuration; /** @type {?} */ CollapseAnimationDirective.prototype.collapseAnimationTiming; /** @type {?} */ CollapseAnimationDirective.prototype.startEventEmitter; /** @type {?} */ CollapseAnimationDirective.prototype.doneEventEmitter; /** @type {?} */ CollapseAnimationDirective.prototype.elementRef; /** @type {?} */ CollapseAnimationDirective.prototype.ngZone; /** @type {?} */ CollapseAnimationDirective.prototype.renderer2; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLWFkbWluLWx0ZS10ZWxpcW8vIiwic291cmNlcyI6WyJsaWIvYW5pbWF0aW9ucy9hbmltYXRpb25zLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFRM0ksTUFBTTs7Ozs7OztJQWdDSixZQUNVLFlBQ0EsUUFDQTtRQUZBLGVBQVUsR0FBVixVQUFVO1FBQ1YsV0FBTSxHQUFOLE1BQU07UUFDTixjQUFTLEdBQVQsU0FBUzswQkFsQ0UsSUFBSTt5Q0FNbUIsR0FBRztpQ0FlZSxJQUFJLFlBQVksRUFBRTtnQ0FDcEIsSUFBSSxZQUFZLEVBQUU7S0FhMUU7Ozs7O1FBM0JtQyxZQUFZLENBQUMsS0FBYztRQUNoRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pCO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDbkI7U0FDRjs7Ozs7O0lBc0JILFFBQVE7UUFDTixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLHlC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LEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUMvRSxTQUFTLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtZQUN6QyxXQUFXLEVBQUUsbUJBQW1CO1NBQ2pDLENBQUM7UUFFRixFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25DO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEM7Ozs7WUFoSkosU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7YUFDaEM7Ozs7WUFQa0MsVUFBVTtZQUEyQixNQUFNO1lBQWpCLFNBQVM7OzswQ0FlbkUsS0FBSzt3Q0FDTCxLQUFLOzZCQUNMLEtBQUssU0FBQyxtQkFBbUI7a0NBYXpCLE1BQU0sU0FBQyx5QkFBeUI7aUNBQ2hDLE1BQU0sU0FBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPdXRwdXQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgUmVuZGVyZXIyLCBOZ1pvbmUsIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJy4vYW5pbWF0aW9ucy5pbnRlcmZhY2UnO1xuLypcbiAqXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjb2xsYXBzZUFuaW1hdGlvbl0nXG59KVxuZXhwb3J0IGNsYXNzIENvbGxhcHNlQW5pbWF0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGZpcnN0U3RhcnQgPSB0cnVlO1xuICBwcml2YXRlIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICBwcml2YXRlIGxhc3RJc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSB0cmFuc2l0aW9uaW5nOiBib29sZWFuO1xuICBwcml2YXRlIGxpc3RlbmVyOiBGdW5jdGlvbjtcblxuICBASW5wdXQoKSBwdWJsaWMgY29sbGFwc2VBbmltYXRpb25EdXJhdGlvbiA9IDM1MDtcbiAgQElucHV0KCkgcHVibGljIGNvbGxhcHNlQW5pbWF0aW9uVGltaW5nOiBzdHJpbmc7XG4gIEBJbnB1dCgnY29sbGFwc2VBbmltYXRpb24nKSBwdWJsaWMgc2V0IF9pc0NvbGxhcHNlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGFzdElzQ29sbGFwc2VkID0gdGhpcy5pc0NvbGxhcHNlZDtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdmFsdWU7XG4gICAgaWYgKCF0aGlzLmZpcnN0U3RhcnQpIHtcbiAgICAgIHRoaXMuZW1pdCgnc3RhcnQnKTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnVuQ29sbGFwc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCdjb2xsYXBzZUFuaW1hdGlvbi5zdGFydCcpIHB1YmxpYyBzdGFydEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgnY29sbGFwc2VBbmltYXRpb24uZG9uZScpIHB1YmxpYyBkb25lRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgLyoqXG4gICAqIEBtZXRob2QgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIGVsZW1lbnRSZWYgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gbmdab25lICAgICBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSByZW5kZXJlcjIgIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25Jbml0XG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5jb2xsYXBzZUFuaW1hdGlvbkR1cmF0aW9uICYmIHRoaXMuY29sbGFwc2VBbmltYXRpb25EdXJhdGlvbiAhPT0gMzUwKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24tZHVyYXRpb24nLCBgJHt0aGlzLmNvbGxhcHNlQW5pbWF0aW9uRHVyYXRpb259bXNgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sbGFwc2VBbmltYXRpb25UaW1pbmcpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLCB0aGlzLmNvbGxhcHNlQW5pbWF0aW9uVGltaW5nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ0FmdGVyQ29udGVudEluaXRcbiAgICovXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0Jyk7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NvbGxhcHNpbmcnKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdkb25lJyk7XG4gICAgdGhpcy5maXJzdFN0YXJ0ID0gZmFsc2U7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbbmdPbkRlc3Ryb3kgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgbmdPbkRlc3Ryb3lcbiAgICogQHJldHVybiBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcikge1xuICAgICAgdGhpcy5saXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBbc3Vic2NyaXB0aW9ucyBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBzdWJzY3JpcHRpb25zXG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lciA9IHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnLCAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndW4tY29sbGFwc2UnKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NvbGxhcHNpbmcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnKTtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2RvbmUnKTtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFt1bkNvbGxhcHNlIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHVuQ29sbGFwc2VcbiAgICovXG4gIHByaXZhdGUgdW5Db2xsYXBzZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndW4tY29sbGFwc2UnKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodH1weGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFtjb2xsYXBzZSBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBjb2xsYXBzZVxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnRyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCBgJHt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHR9cHhgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjb2xsYXBzaW5nJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCBgMHB4YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdChwaGFzZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50OiBBbmltYXRpb25FdmVudCA9IHtcbiAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgZnJvbVN0YXRlOiB0aGlzLmxhc3RJc0NvbGxhcHNlZCA9PT0gdW5kZWZpbmVkID8gJ3ZvaWQnIDogdGhpcy5sYXN0SXNDb2xsYXBzZWQgPyAnMScgOiAnMCcsXG4gICAgICBwaGFzZU5hbWU6IHBoYXNlTmFtZSxcbiAgICAgIHRvU3RhdGU6IHRoaXMuaXNDb2xsYXBzZWQgPT09IHVuZGVmaW5lZCA/ICd2b2lkJyA6IHRoaXMuaXNDb2xsYXBzZWQgPyAnMScgOiAnMCcsXG4gICAgICB0b3RhbFRpbWU6IHRoaXMuY29sbGFwc2VBbmltYXRpb25EdXJhdGlvbixcbiAgICAgIHRyaWdnZXJOYW1lOiAnY29sbGFwc2VBbmltYXRpb24nXG4gICAgfTtcblxuICAgIGlmIChwaGFzZU5hbWUgPT09ICdkb25lJykge1xuICAgICAgdGhpcy5kb25lRXZlbnRFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAocGhhc2VOYW1lID09PSAnc3RhcnQnKSB7XG4gICAgICB0aGlzLnN0YXJ0RXZlbnRFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxufVxuIl19