angular-admin-lte-teliqo
Version:
npm# angular-admin-lte
201 lines (200 loc) • 19.2 kB
JavaScript
/**
* @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLWFkbWluLWx0ZS10ZWxpcW8vIiwic291cmNlcyI6WyJsaWIvYW5pbWF0aW9ucy9hbmltYXRpb25zLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFRM0ksTUFBTTs7Ozs7OztJQWdDSixZQUNVLFlBQ0EsUUFDQTtRQUZBLGVBQVUsR0FBVixVQUFVO1FBQ1YsV0FBTSxHQUFOLE1BQU07UUFDTixjQUFTLEdBQVQsU0FBUzswQkFsQ0UsSUFBSTt5Q0FNbUIsR0FBRztpQ0FlZSxJQUFJLFlBQVksRUFBRTtnQ0FDcEIsSUFBSSxZQUFZLEVBQUU7S0FhMUU7Ozs7O1FBM0JtQyxZQUFZLENBQUMsS0FBYztRQUNoRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pCO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDbkI7U0FDRjs7Ozs7O0lBc0JILFFBQVE7UUFDTixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLHlCQUF5QixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxJQUFJLENBQUMseUJBQXlCLElBQUksQ0FBQyxDQUFDO1NBQ3RIO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSw0QkFBNEIsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUNwSDtLQUNGOzs7OztJQUtELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUN0RTtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFeEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0tBQ3RCOzs7Ozs7SUFPRCxXQUFXO1FBQ1QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0tBQ0Y7Ozs7OztJQU1PLGFBQWE7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFO2dCQUN6RixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDekUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7aUJBQ3pFO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDM0U7Z0JBQ0QscUJBQXFCLENBQUMsR0FBRyxFQUFFO29CQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7aUJBQzVCLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQzs7Ozs7OztJQVFHLFVBQVU7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQzs7Ozs7OztJQU85RyxRQUFRO1FBQ2QscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7Z0JBQ3BILElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQ3RFO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekUsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDOzs7Ozs7SUFHRyxJQUFJLENBQUMsU0FBaUI7UUFDNUIsdUJBQU0sS0FBSyxHQUFtQjtZQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQ3RDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDekYsU0FBUyxFQUFFLFNBQVM7WUFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUMvRSxTQUFTLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtZQUN6QyxXQUFXLEVBQUUsbUJBQW1CO1NBQ2pDLENBQUM7UUFFRixFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25DO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEM7Ozs7WUFoSkosU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7YUFDaEM7Ozs7WUFQa0MsVUFBVTtZQUEyQixNQUFNO1lBQWpCLFNBQVM7OzswQ0FlbkUsS0FBSzt3Q0FDTCxLQUFLOzZCQUNMLEtBQUssU0FBQyxtQkFBbUI7a0NBYXpCLE1BQU0sU0FBQyx5QkFBeUI7aUNBQ2hDLE1BQU0sU0FBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPdXRwdXQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgUmVuZGVyZXIyLCBOZ1pvbmUsIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJy4vYW5pbWF0aW9ucy5pbnRlcmZhY2UnO1xuLypcbiAqXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjb2xsYXBzZUFuaW1hdGlvbl0nXG59KVxuZXhwb3J0IGNsYXNzIENvbGxhcHNlQW5pbWF0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGZpcnN0U3RhcnQgPSB0cnVlO1xuICBwcml2YXRlIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICBwcml2YXRlIGxhc3RJc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSB0cmFuc2l0aW9uaW5nOiBib29sZWFuO1xuICBwcml2YXRlIGxpc3RlbmVyOiBGdW5jdGlvbjtcblxuICBASW5wdXQoKSBwdWJsaWMgY29sbGFwc2VBbmltYXRpb25EdXJhdGlvbiA9IDM1MDtcbiAgQElucHV0KCkgcHVibGljIGNvbGxhcHNlQW5pbWF0aW9uVGltaW5nOiBzdHJpbmc7XG4gIEBJbnB1dCgnY29sbGFwc2VBbmltYXRpb24nKSBwdWJsaWMgc2V0IF9pc0NvbGxhcHNlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGFzdElzQ29sbGFwc2VkID0gdGhpcy5pc0NvbGxhcHNlZDtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdmFsdWU7XG4gICAgaWYgKCF0aGlzLmZpcnN0U3RhcnQpIHtcbiAgICAgIHRoaXMuZW1pdCgnc3RhcnQnKTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnVuQ29sbGFwc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCdjb2xsYXBzZUFuaW1hdGlvbi5zdGFydCcpIHB1YmxpYyBzdGFydEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgnY29sbGFwc2VBbmltYXRpb24uZG9uZScpIHB1YmxpYyBkb25lRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgLyoqXG4gICAqIEBtZXRob2QgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIGVsZW1lbnRSZWYgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gbmdab25lICAgICBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSByZW5kZXJlcjIgIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25Jbml0XG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5jb2xsYXBzZUFuaW1hdGlvbkR1cmF0aW9uICYmIHRoaXMuY29sbGFwc2VBbmltYXRpb25EdXJhdGlvbiAhPT0gMzUwKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24tZHVyYXRpb24nLCBgJHt0aGlzLmNvbGxhcHNlQW5pbWF0aW9uRHVyYXRpb259bXNgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sbGFwc2VBbmltYXRpb25UaW1pbmcpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLCB0aGlzLmNvbGxhcHNlQW5pbWF0aW9uVGltaW5nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ0FmdGVyQ29udGVudEluaXRcbiAgICovXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0Jyk7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NvbGxhcHNpbmcnKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdkb25lJyk7XG4gICAgdGhpcy5maXJzdFN0YXJ0ID0gZmFsc2U7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbbmdPbkRlc3Ryb3kgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgbmdPbkRlc3Ryb3lcbiAgICogQHJldHVybiBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcikge1xuICAgICAgdGhpcy5saXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBbc3Vic2NyaXB0aW9ucyBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBzdWJzY3JpcHRpb25zXG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lciA9IHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnLCAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndW4tY29sbGFwc2UnKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NvbGxhcHNpbmcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnKTtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2RvbmUnKTtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFt1bkNvbGxhcHNlIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHVuQ29sbGFwc2VcbiAgICovXG4gIHByaXZhdGUgdW5Db2xsYXBzZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndW4tY29sbGFwc2UnKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodH1weGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFtjb2xsYXBzZSBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBjb2xsYXBzZVxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnRyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCBgJHt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHR9cHhgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjb2xsYXBzaW5nJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCBgMHB4YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdChwaGFzZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50OiBBbmltYXRpb25FdmVudCA9IHtcbiAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgZnJvbVN0YXRlOiB0aGlzLmxhc3RJc0NvbGxhcHNlZCA9PT0gdW5kZWZpbmVkID8gJ3ZvaWQnIDogdGhpcy5sYXN0SXNDb2xsYXBzZWQgPyAnMScgOiAnMCcsXG4gICAgICBwaGFzZU5hbWU6IHBoYXNlTmFtZSxcbiAgICAgIHRvU3RhdGU6IHRoaXMuaXNDb2xsYXBzZWQgPT09IHVuZGVmaW5lZCA/ICd2b2lkJyA6IHRoaXMuaXNDb2xsYXBzZWQgPyAnMScgOiAnMCcsXG4gICAgICB0b3RhbFRpbWU6IHRoaXMuY29sbGFwc2VBbmltYXRpb25EdXJhdGlvbixcbiAgICAgIHRyaWdnZXJOYW1lOiAnY29sbGFwc2VBbmltYXRpb24nXG4gICAgfTtcblxuICAgIGlmIChwaGFzZU5hbWUgPT09ICdkb25lJykge1xuICAgICAgdGhpcy5kb25lRXZlbnRFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAocGhhc2VOYW1lID09PSAnc3RhcnQnKSB7XG4gICAgICB0aGlzLnN0YXJ0RXZlbnRFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxufVxuIl19