angular-admin-lte-teliqo
Version:
npm# angular-admin-lte
252 lines (251 loc) • 21 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Directive, Input, Output, ElementRef, EventEmitter, Renderer2, NgZone } from '@angular/core';
var CollapseAnimationDirective = /** @class */ (function () {
/**
* @method constructor
* @param elementRef [description]
* @param ngZone [description]
* @param renderer2 [description]
*/
function CollapseAnimationDirective(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();
}
Object.defineProperty(CollapseAnimationDirective.prototype, "_isCollapsed", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.lastIsCollapsed = this.isCollapsed;
this.isCollapsed = value;
if (!this.firstStart) {
this.emit('start');
if (value) {
this.collapse();
}
else if (value === false) {
this.unCollapse();
}
}
},
enumerable: true,
configurable: true
});
/**
* @method ngOnInit
*/
/**
* \@method ngOnInit
* @return {?}
*/
CollapseAnimationDirective.prototype.ngOnInit = /**
* \@method ngOnInit
* @return {?}
*/
function () {
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
*/
/**
* \@method ngAfterContentInit
* @return {?}
*/
CollapseAnimationDirective.prototype.ngAfterContentInit = /**
* \@method ngAfterContentInit
* @return {?}
*/
function () {
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 description]
* \@method ngOnDestroy
* @return {?} [description]
*/
CollapseAnimationDirective.prototype.ngOnDestroy = /**
* [ngOnDestroy description]
* \@method ngOnDestroy
* @return {?} [description]
*/
function () {
if (this.listener) {
this.listener();
}
};
/**
* [subscriptions description]
* \@method subscriptions
* @return {?}
*/
CollapseAnimationDirective.prototype.subscriptions = /**
* [subscriptions description]
* \@method subscriptions
* @return {?}
*/
function () {
var _this = this;
this.ngZone.runOutsideAngular(function () {
_this.listener = _this.renderer2.listen(_this.elementRef.nativeElement, 'transitionend', function () {
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(function () {
_this.renderer2.removeStyle(_this.elementRef.nativeElement, 'height');
_this.emit('done');
_this.transitioning = false;
});
});
});
};
/**
* [unCollapse description]
* \@method unCollapse
* @return {?}
*/
CollapseAnimationDirective.prototype.unCollapse = /**
* [unCollapse description]
* \@method unCollapse
* @return {?}
*/
function () {
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 {?}
*/
CollapseAnimationDirective.prototype.collapse = /**
* [collapse description]
* \@method collapse
* @return {?}
*/
function () {
var _this = this;
requestAnimationFrame(function () {
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(function () {
_this.renderer2.setStyle(_this.elementRef.nativeElement, 'height', "0px");
});
});
};
/**
* @param {?} phaseName
* @return {?}
*/
CollapseAnimationDirective.prototype.emit = /**
* @param {?} phaseName
* @return {?}
*/
function (phaseName) {
var /** @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 = function () { return [
{ 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',] },],
};
return CollapseAnimationDirective;
}());
export { CollapseAnimationDirective };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLWFkbWluLWx0ZS10ZWxpcW8vIiwic291cmNlcyI6WyJsaWIvYW5pbWF0aW9ucy9hbmltYXRpb25zLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBdUMsTUFBTSxlQUFlLENBQUM7O0lBa0N6STs7Ozs7T0FLRztJQUNILG9DQUNVLFlBQ0EsUUFDQTtRQUZBLGVBQVUsR0FBVixVQUFVO1FBQ1YsV0FBTSxHQUFOLE1BQU07UUFDTixjQUFTLEdBQVQsU0FBUzswQkFsQ0UsSUFBSTt5Q0FNbUIsR0FBRztpQ0FlZSxJQUFJLFlBQVksRUFBRTtnQ0FDcEIsSUFBSSxZQUFZLEVBQUU7S0FhMUU7MEJBM0JtQyxvREFBWTs7Ozs7a0JBQUMsS0FBYztZQUNoRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDVixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQ2pCO2dCQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUNuQjthQUNGOzs7OztJQW1CSDs7T0FFRzs7Ozs7SUFDSCw2Q0FBUTs7OztJQUFSO1FBQ0UsRUFBRSxDQUFDLENBQUMsSUFB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UztZQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQy9FLFNBQVMsRUFBRSxJQUFJLENBQUMseUJBQXlCO1lBQ3pDLFdBQVcsRUFBRSxtQkFBbUI7U0FDakMsQ0FBQztRQUVGLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQzs7O2dCQWhKSixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEM7Ozs7Z0JBUGtDLFVBQVU7Z0JBQTJCLE1BQU07Z0JBQWpCLFNBQVM7Ozs4Q0FlbkUsS0FBSzs0Q0FDTCxLQUFLO2lDQUNMLEtBQUssU0FBQyxtQkFBbUI7c0NBYXpCLE1BQU0sU0FBQyx5QkFBeUI7cUNBQ2hDLE1BQU0sU0FBQyx3QkFBd0I7O3FDQS9CbEM7O1NBUWEsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT3V0cHV0LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIFJlbmRlcmVyMiwgTmdab25lLCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICcuL2FuaW1hdGlvbnMuaW50ZXJmYWNlJztcbi8qXG4gKlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY29sbGFwc2VBbmltYXRpb25dJ1xufSlcbmV4cG9ydCBjbGFzcyBDb2xsYXBzZUFuaW1hdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBmaXJzdFN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBsYXN0SXNDb2xsYXBzZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgdHJhbnNpdGlvbmluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBsaXN0ZW5lcjogRnVuY3Rpb247XG5cbiAgQElucHV0KCkgcHVibGljIGNvbGxhcHNlQW5pbWF0aW9uRHVyYXRpb24gPSAzNTA7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xsYXBzZUFuaW1hdGlvblRpbWluZzogc3RyaW5nO1xuICBASW5wdXQoJ2NvbGxhcHNlQW5pbWF0aW9uJykgcHVibGljIHNldCBfaXNDb2xsYXBzZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxhc3RJc0NvbGxhcHNlZCA9IHRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IHZhbHVlO1xuICAgIGlmICghdGhpcy5maXJzdFN0YXJ0KSB7XG4gICAgICB0aGlzLmVtaXQoJ3N0YXJ0Jyk7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy51bkNvbGxhcHNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgnY29sbGFwc2VBbmltYXRpb24uc3RhcnQnKSBwdWJsaWMgc3RhcnRFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoJ2NvbGxhcHNlQW5pbWF0aW9uLmRvbmUnKSBwdWJsaWMgZG9uZUV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBlbGVtZW50UmVmIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIG5nWm9uZSAgICAgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gcmVuZGVyZXIyICBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyXG4gICkge31cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ09uSW5pdFxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuY29sbGFwc2VBbmltYXRpb25EdXJhdGlvbiAmJiB0aGlzLmNvbGxhcHNlQW5pbWF0aW9uRHVyYXRpb24gIT09IDM1MCkge1xuICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uLWR1cmF0aW9uJywgYCR7dGhpcy5jb2xsYXBzZUFuaW1hdGlvbkR1cmF0aW9ufW1zYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbGxhcHNlQW5pbWF0aW9uVGltaW5nKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJywgdGhpcy5jb2xsYXBzZUFuaW1hdGlvblRpbWluZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgbmdBZnRlckNvbnRlbnRJbml0XG4gICAqL1xuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcpO1xuICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjb2xsYXBzaW5nJyk7XG4gICAgfVxuICAgIHRoaXMuZW1pdCgnZG9uZScpO1xuICAgIHRoaXMuZmlyc3RTdGFydCA9IGZhbHNlO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogW25nT25EZXN0cm95IGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIG5nT25EZXN0cm95XG4gICAqIEByZXR1cm4gW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcbiAgICAgIHRoaXMubGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogW3N1YnNjcmlwdGlvbnMgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2Qgc3Vic2NyaXB0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMubGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyMi5saXN0ZW4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uZW5kJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3VuLWNvbGxhcHNlJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjb2xsYXBzaW5nJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZVN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0Jyk7XG4gICAgICAgICAgdGhpcy5lbWl0KCdkb25lJyk7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBbdW5Db2xsYXBzZSBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCB1bkNvbGxhcHNlXG4gICAqL1xuICBwcml2YXRlIHVuQ29sbGFwc2UoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcmVyMi5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3VuLWNvbGxhcHNlJyk7XG4gICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCBgJHt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHR9cHhgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbY29sbGFwc2UgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgY29sbGFwc2VcbiAgICovXG4gIHByaXZhdGUgY29sbGFwc2UoKTogdm9pZCB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50cmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0JywgYCR7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0fXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY29sbGFwc2luZycpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0JywgYDBweGApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXQocGhhc2VOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudDogQW5pbWF0aW9uRXZlbnQgPSB7XG4gICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIGZyb21TdGF0ZTogdGhpcy5sYXN0SXNDb2xsYXBzZWQgPT09IHVuZGVmaW5lZCA/ICd2b2lkJyA6IHRoaXMubGFzdElzQ29sbGFwc2VkID8gJzEnIDogJzAnLFxuICAgICAgcGhhc2VOYW1lOiBwaGFzZU5hbWUsXG4gICAgICB0b1N0YXRlOiB0aGlzLmlzQ29sbGFwc2VkID09PSB1bmRlZmluZWQgPyAndm9pZCcgOiB0aGlzLmlzQ29sbGFwc2VkID8gJzEnIDogJzAnLFxuICAgICAgdG90YWxUaW1lOiB0aGlzLmNvbGxhcHNlQW5pbWF0aW9uRHVyYXRpb24sXG4gICAgICB0cmlnZ2VyTmFtZTogJ2NvbGxhcHNlQW5pbWF0aW9uJ1xuICAgIH07XG5cbiAgICBpZiAocGhhc2VOYW1lID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXMuZG9uZUV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKHBoYXNlTmFtZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgdGhpcy5zdGFydEV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==