@stratio/egeo
Version:
314 lines • 29 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/st-modal/st-modal.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*
* © 2017 Stratio Big Data Inc., Sucursal en España.
*
* This software is licensed under the Apache License, Version 2.0.
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the terms of the License for more details.
*
* SPDX-License-Identifier: Apache-2.0.
*/
import { ChangeDetectionStrategy, Component, ComponentFactoryResolver, EventEmitter, HostBinding, Input, Output, ViewChild, ViewContainerRef } from '@angular/core';
import { animate, state, style, transition, trigger } from '@angular/animations';
import { StModalConfig, StModalResponse } from './st-modal.model';
import { StWindowRefService } from '../utils/window-service';
export class StModalComponent {
/**
* @param {?} cfr
* @param {?} windowRef
*/
constructor(cfr, windowRef) {
this.cfr = cfr;
this.windowRef = windowRef;
this.disabledAnimation = true;
this.click = new EventEmitter();
this.endAnimation = new EventEmitter();
this.defaultMaxWidth = 600;
this.defaultMinWidth = 400;
this.visibility = 'visible';
this._subscriptions = [];
}
/**
* @return {?}
*/
get hasIcon() {
return this.modalConfig.iconStatus;
}
/**
* @return {?}
*/
get isFullscreen() {
return this.modalConfig.fullscreen;
}
/**
* @return {?}
*/
get title() {
return this.modalConfig.modalTitle;
}
/**
* @return {?}
*/
get buttons() {
return this.modalConfig.buttons || [];
}
/**
* @return {?}
*/
get isMessageModal() {
return this.modalConfig.message && this.modalConfig.message.length > 0;
}
/**
* @return {?}
*/
get isComplexMessageModal() {
return this.modalConfig.html && this.modalConfig.html.length > 0;
}
/**
* @return {?}
*/
get html() {
return this.modalConfig.html;
}
/**
* @return {?}
*/
get message() {
return this.modalConfig.message;
}
/**
* @return {?}
*/
get messageTitle() {
return this.modalConfig.messageTitle;
}
/**
* @return {?}
*/
get modalStyles() {
/** @type {?} */
const maxWidth = this.modalConfig.maxWidth || this.defaultMaxWidth;
/** @type {?} */
const minWidth = this.modalConfig.minWidth || this.defaultMinWidth;
/** @type {?} */
const width = this.getModalActualWidth(maxWidth, minWidth);
return { 'max-width': `${maxWidth}px`, 'min-width': `${minWidth}px`, 'width': `${width}px` };
}
/**
* @return {?}
*/
get emptyModal() {
return this.modalConfig && this.modalConfig.empty;
}
/**
* @return {?}
*/
get showCloseBtn() {
return this.modalConfig.showCloseBtn;
}
/**
* @param {?} event
* @return {?}
*/
animationDone(event) {
if (event.toState === 'hidden') {
this.endAnimation.emit(true);
}
}
/**
* @param {?} event
* @return {?}
*/
onClickButtons(event) {
this.visibility = 'hidden';
this._subscriptions.push(this.endAnimation.subscribe((/**
* @param {?} data
* @return {?}
*/
(data) => {
if (data) {
this.click.emit(event);
}
})));
}
/**
* @return {?}
*/
onClose() {
this.visibility = 'hidden';
this._subscriptions.push(this.endAnimation.subscribe((/**
* @param {?} data
* @return {?}
*/
(data) => {
if (data) {
this.click.emit({
response: StModalResponse.CLOSE,
close: true
});
}
})));
}
/**
* DYNAMIC MODAL BODY COMPONENT LOAD
* @return {?}
*/
ngAfterViewInit() {
this.target = this.emptyModal ? this.targetEmpty : this.targetContent;
if (this.component && !(this.modalConfig.html || this.modalConfig.message)) {
this.loadBody();
}
this.windowRef.nativeWindow.document.body.classList.add('st-modal-overlay');
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this.componentRef) {
this.componentRef.destroy();
}
this.windowRef.nativeWindow.document.body.classList.remove('st-modal-overlay');
if (this._subscriptions.length > 0) {
this._subscriptions.forEach((/**
* @param {?} subscription
* @return {?}
*/
(subscription) => {
if (subscription) {
subscription.unsubscribe();
}
}));
}
}
/**
* @private
* @param {?} maxWidth
* @param {?=} minWidth
* @return {?}
*/
getModalActualWidth(maxWidth, minWidth) {
/** @type {?} */
const screenWidth = this.windowRef.nativeWindow.screen.width;
return screenWidth > maxWidth ? maxWidth : (screenWidth < minWidth ? minWidth : screenWidth);
}
/**
* @private
* @return {?}
*/
loadBody() {
if (!this.componentRef) {
this.target.clear();
/** @type {?} */
const compFactory = this.cfr.resolveComponentFactory(this.component);
this.componentRef = this.target.createComponent(compFactory);
this.bindModalInputs();
}
}
/**
* @private
* @return {?}
*/
bindModalInputs() {
Object.keys(this.modalConfig.inputs).forEach((/**
* @param {?} key
* @return {?}
*/
(key) => {
this.componentRef.instance[key] = ((/** @type {?} */ (this.modalConfig.inputs)))[key];
}));
Object.keys(this.modalConfig.outputs).forEach((/**
* @param {?} key
* @return {?}
*/
(key) => {
this.componentRef.instance[key].subscribe(((/** @type {?} */ (this.modalConfig.outputs)))[key]);
}));
this.componentRef.changeDetectorRef.detectChanges();
}
}
StModalComponent.decorators = [
{ type: Component, args: [{
selector: 'st-modal',
template: "<!--\n\n \u00A9 2017 Stratio Big Data Inc., Sucursal en Espa\u00F1a.\n\n This software is licensed under the Apache License, Version 2.0.\n This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n See the terms of the License for more details.\n\n SPDX-License-Identifier: Apache-2.0.\n\n-->\n<div class=\"st-modal-container\" [@state]=\"visibility\" (@state.done)=\"animationDone($event)\" [@.disabled]=\"disabledAnimation\">\n <section *ngIf=\"emptyModal\" class=\"st-modal\" [ngClass]=\"{'st-modal-fullscreen': isFullscreen}\" [ngStyle]=\"modalStyles\" [hidden]=\"emptyModal\">\n <div #stModalBodyEmpty></div>\n </section>\n <section *ngIf=\"!emptyModal\" class=\"st-modal\" [ngClass]=\"{'st-modal-fullscreen': isFullscreen}\" [ngStyle]=\"modalStyles\" [hidden]=\"!emptyModal\">\n <div class=\"st-modal-header\">\n <div class=\"container\">\n <span class=\"status-icon\" [ngClass]=\"hasIcon\" *ngIf=\"hasIcon\"></span>\n <p class=\"title\">{{title}}</p> <span class=\"close-button\" *ngIf=\"showCloseBtn\" (click)=\"onClose()\"></span>\n\n <st-modal-buttons *ngIf=\"isFullscreen\" [buttonConfig]=\"buttons\" [fullscreen]=\"isFullscreen\" (click)=\"onClickButtons($event)\"></st-modal-buttons>\n </div>\n </div>\n <div class=\"st-modal-body\">\n <div class=\"container\">\n\n <div *ngIf=\"isMessageModal\" class=\"message\">\n <h1 id=\"st-modal-message-plain-title\" class=\"st-modal-message-plain-title\">{{messageTitle}}</h1>\n <p id=\"st-modal-message-plain-message\" class=\"st-modal-message-plain-message\">{{message}}</p>\n </div>\n <div *ngIf=\"isComplexMessageModal\" [innerHTML]=\"html\" id=\"st-modal-message-html\"></div>\n <div #stModalBody id=\"st-modal-message-component\"></div>\n\n </div>\n </div>\n <footer class=\"st-modal-footer\" *ngIf=\"buttons && buttons.length > 0\">\n <div class=\"container\">\n <st-modal-buttons *ngIf=\"!isFullscreen\" [buttonConfig]=\"buttons\" (click)=\"onClickButtons($event)\"></st-modal-buttons>\n </div>\n </footer>\n </section>\n</div>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
animations: [
trigger('state', [
state('void, hidden', style({ opacity: 0 })),
state('visible', style({ opacity: 1 })),
transition('* => visible', [
style({ opacity: 0 }),
animate(300)
]),
transition('* => hidden', [
style({ opacity: 1 }),
animate(300)
])
])
],
styles: ["@charset \"UTF-8\";.st-modal-container{display:flex;height:100vh;left:0;position:fixed;top:0;width:100%}.st-modal-container .st-modal{-ms-grid-row-align:center;align-self:center;display:flex;flex-direction:column;margin:auto}.st-modal-container .st-modal.st-modal-fullscreen{min-height:100vh;max-height:100vh;min-width:100%;max-width:100%}.st-modal-container .st-modal .st-modal-header{display:flex;flex-direction:row;height:70px;width:100%}.st-modal-container .st-modal .st-modal-header .container{display:flex;margin-right:auto;margin-left:auto;width:100%;align-items:center;flex-wrap:nowrap}.st-modal-container .st-modal .st-modal-header .container .status-icon{padding-right:1.05rem}.st-modal-container .st-modal .st-modal-header .container .status-icon.delete:before{content:var(--egeo-st-modal__delete-icon--content, \"\uE043\")}.st-modal-container .st-modal .st-modal-header .container .status-icon.alert:before{content:var(--egeo-st-modal__warning-icon--content, \"\uE613\")}.st-modal-container .st-modal .st-modal-header .container .close-button{font-size:var(--egeo-st-modal__close-icon--font-size,inherit);color:var(--egeo-st-modal__close-icon--color,inherit)}.st-modal-container .st-modal .st-modal-header .container .close-button:before{content:var(--egeo-st-modal__close-icon--content, \"\uE117\")}.st-modal-container .st-modal st-modal-buttons{display:flex;justify-content:flex-end;margin-left:auto}.st-modal-container .st-modal .container{min-width:auto}"]
}] }
];
/** @nocollapse */
StModalComponent.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: StWindowRefService }
];
StModalComponent.propDecorators = {
modalConfig: [{ type: Input }],
component: [{ type: Input }],
disabledAnimation: [{ type: HostBinding, args: ['@.disabled',] }, { type: Input }],
click: [{ type: Output }],
endAnimation: [{ type: Output }],
targetContent: [{ type: ViewChild, args: ['stModalBody', { read: ViewContainerRef, static: false },] }],
targetEmpty: [{ type: ViewChild, args: ['stModalBodyEmpty', { read: ViewContainerRef, static: false },] }]
};
if (false) {
/** @type {?} */
StModalComponent.prototype.modalConfig;
/** @type {?} */
StModalComponent.prototype.component;
/** @type {?} */
StModalComponent.prototype.disabledAnimation;
/** @type {?} */
StModalComponent.prototype.click;
/** @type {?} */
StModalComponent.prototype.endAnimation;
/** @type {?} */
StModalComponent.prototype.targetContent;
/** @type {?} */
StModalComponent.prototype.targetEmpty;
/** @type {?} */
StModalComponent.prototype.defaultMaxWidth;
/** @type {?} */
StModalComponent.prototype.defaultMinWidth;
/** @type {?} */
StModalComponent.prototype.target;
/** @type {?} */
StModalComponent.prototype.visibility;
/**
* @type {?}
* @private
*/
StModalComponent.prototype.componentRef;
/**
* @type {?}
* @private
*/
StModalComponent.prototype._subscriptions;
/**
* @type {?}
* @private
*/
StModalComponent.prototype.cfr;
/**
* @type {?}
* @private
*/
StModalComponent.prototype.windowRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN0cmF0aW8vZWdlby8iLCJzb3VyY2VzIjpbImxpYi9zdC1tb2RhbC9zdC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsT0FBTyxFQUNKLHVCQUF1QixFQUN2QixTQUFTLEVBQ1Qsd0JBQXdCLEVBRXhCLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakcsT0FBTyxFQUF3QyxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFzQjdELE1BQU0sT0FBTyxnQkFBZ0I7Ozs7O0lBbUIxQixZQUNXLEdBQTZCLEVBQzdCLFNBQTZCO1FBRDdCLFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBakIvQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDakMsVUFBSyxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUN2RixpQkFBWSxHQUEyQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBSXBFLG9CQUFlLEdBQVcsR0FBRyxDQUFDO1FBQzlCLG9CQUFlLEdBQVcsR0FBRyxDQUFDO1FBR3ZDLGVBQVUsR0FBVyxTQUFTLENBQUM7UUFHdkIsbUJBQWMsR0FBd0IsRUFBRSxDQUFDO0lBSzdDLENBQUM7Ozs7SUFFTCxJQUFJLE9BQU87UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQ3RDLENBQUM7Ozs7SUFFRCxJQUFJLFlBQVk7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NkU7O0lBQzdFLHlDQUFxRzs7SUFDckcsdUNBQXdHOztJQUV4RywyQ0FBdUM7O0lBQ3ZDLDJDQUF1Qzs7SUFFdkMsa0NBQXlCOztJQUN6QixzQ0FBK0I7Ozs7O0lBRS9CLHdDQUF3Qzs7Ozs7SUFDeEMsMENBQWlEOzs7OztJQUc5QywrQkFBcUM7Ozs7O0lBQ3JDLHFDQUFxQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiDCqSAyMDE3IFN0cmF0aW8gQmlnIERhdGEgSW5jLiwgU3VjdXJzYWwgZW4gRXNwYcOxYS5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZO1xuICogd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiAqIFNlZSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMC5cbiAqL1xuaW1wb3J0IHtcbiAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgQ29tcG9uZW50LFxuICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgQ29tcG9uZW50UmVmLFxuICAgRXZlbnRFbWl0dGVyLFxuICAgSG9zdEJpbmRpbmcsXG4gICBJbnB1dCxcbiAgIE9uRGVzdHJveSxcbiAgIEFmdGVyVmlld0luaXQsXG4gICBPdXRwdXQsXG4gICBWaWV3Q2hpbGQsXG4gICBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFuaW1hdGUsIEFuaW1hdGlvbkV2ZW50LCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTdE1vZGFsQnV0dG9uLCBTdE1vZGFsQnV0dG9uUmVzcG9uc2UsIFN0TW9kYWxDb25maWcsIFN0TW9kYWxSZXNwb25zZSB9IGZyb20gJy4vc3QtbW9kYWwubW9kZWwnO1xuaW1wb3J0IHsgU3RXaW5kb3dSZWZTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvd2luZG93LXNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgIHNlbGVjdG9yOiAnc3QtbW9kYWwnLFxuICAgdGVtcGxhdGVVcmw6ICcuL3N0LW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgIHN0eWxlVXJsczogWycuL3N0LW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgIGFuaW1hdGlvbnM6IFtcbiAgICAgIHRyaWdnZXIoJ3N0YXRlJywgW1xuICAgICAgICAgc3RhdGUoJ3ZvaWQsIGhpZGRlbicsIHN0eWxlKHtvcGFjaXR5OiAwfSkpLFxuICAgICAgICAgc3RhdGUoJ3Zpc2libGUnLCBzdHlsZSh7b3BhY2l0eTogMX0pKSxcbiAgICAgICAgIHRyYW5zaXRpb24oJyogPT4gdmlzaWJsZScsIFtcbiAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAwfSksXG4gICAgICAgICAgICBhbmltYXRlKDMwMCApXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgIHRyYW5zaXRpb24oJyogPT4gaGlkZGVuJywgW1xuICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDF9KSxcbiAgICAgICAgICAgIGFuaW1hdGUoMzAwIClcbiAgICAgICAgICAgIF0pXG4gICAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFN0TW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgQElucHV0KCkgbW9kYWxDb25maWc6IFN0TW9kYWxDb25maWc7XG4gICBASW5wdXQoKSBjb21wb25lbnQ6IGFueTtcbiAgIEBIb3N0QmluZGluZygnQC5kaXNhYmxlZCcpXG4gICBASW5wdXQoKSBkaXNhYmxlZEFuaW1hdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gICBAT3V0cHV0KCkgY2xpY2s6IEV2ZW50RW1pdHRlcjxTdE1vZGFsQnV0dG9uUmVzcG9uc2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxTdE1vZGFsQnV0dG9uUmVzcG9uc2U+KCk7XG4gICBAT3V0cHV0KCkgZW5kQW5pbWF0aW9uOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgQFZpZXdDaGlsZCgnc3RNb2RhbEJvZHknLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogZmFsc2UgfSkgdGFyZ2V0Q29udGVudDogVmlld0NvbnRhaW5lclJlZjtcbiAgIEBWaWV3Q2hpbGQoJ3N0TW9kYWxCb2R5RW1wdHknLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogZmFsc2UgfSkgdGFyZ2V0RW1wdHk6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgIHJlYWRvbmx5IGRlZmF1bHRNYXhXaWR0aDogbnVtYmVyID0gNjAwO1xuICAgcmVhZG9ubHkgZGVmYXVsdE1pbldpZHRoOiBudW1iZXIgPSA0MDA7XG5cbiAgIHRhcmdldDogVmlld0NvbnRhaW5lclJlZjtcbiAgIHZpc2liaWxpdHk6IHN0cmluZyA9ICd2aXNpYmxlJztcblxuICAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xuICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICBwcml2YXRlIHdpbmRvd1JlZjogU3RXaW5kb3dSZWZTZXJ2aWNlXG4gICApIHsgfVxuXG4gICBnZXQgaGFzSWNvbigpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMubW9kYWxDb25maWcuaWNvblN0YXR1cztcbiAgIH1cblxuICAgZ2V0IGlzRnVsbHNjcmVlbigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLmZ1bGxzY3JlZW47XG4gICB9XG5cbiAgIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMubW9kYWxDb25maWcubW9kYWxUaXRsZTtcbiAgIH1cblxuICAgZ2V0IGJ1dHRvbnMoKTogU3RNb2RhbEJ1dHRvbltdIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLmJ1dHRvbnMgfHwgW107XG4gICB9XG5cbiAgIGdldCBpc01lc3NhZ2VNb2RhbCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLm1lc3NhZ2UgJiYgdGhpcy5tb2RhbENvbmZpZy5tZXNzYWdlLmxlbmd0aCA+IDA7XG4gICB9XG5cbiAgIGdldCBpc0NvbXBsZXhNZXNzYWdlTW9kYWwoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbENvbmZpZy5odG1sICYmIHRoaXMubW9kYWxDb25maWcuaHRtbC5sZW5ndGggPiAwO1xuICAgfVxuXG4gICBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMubW9kYWxDb25maWcuaHRtbDtcbiAgIH1cblxuICAgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLm1lc3NhZ2U7XG4gICB9XG5cbiAgIGdldCBtZXNzYWdlVGl0bGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLm1lc3NhZ2VUaXRsZTtcbiAgIH1cblxuICAgZ2V0IG1vZGFsU3R5bGVzKCk6IE9iamVjdCB7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMubW9kYWxDb25maWcubWF4V2lkdGggfHwgdGhpcy5kZWZhdWx0TWF4V2lkdGg7XG4gICAgICBjb25zdCBtaW5XaWR0aCA9IHRoaXMubW9kYWxDb25maWcubWluV2lkdGggfHwgdGhpcy5kZWZhdWx0TWluV2lkdGg7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0TW9kYWxBY3R1YWxXaWR0aChtYXhXaWR0aCwgbWluV2lkdGgpO1xuICAgICAgcmV0dXJuIHsgJ21heC13aWR0aCc6IGAke21heFdpZHRofXB4YCwgJ21pbi13aWR0aCc6IGAke21pbldpZHRofXB4YCwgJ3dpZHRoJzogYCR7d2lkdGh9cHhgIH07XG4gICB9XG5cbiAgIGdldCBlbXB0eU1vZGFsKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMubW9kYWxDb25maWcgJiYgdGhpcy5tb2RhbENvbmZpZy5lbXB0eTtcbiAgIH1cblxuICAgZ2V0IHNob3dDbG9zZUJ0bigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLnNob3dDbG9zZUJ0bjtcbiAgIH1cblxuICAgYW5pbWF0aW9uRG9uZShldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAgIGlmIChldmVudC50b1N0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgdGhpcy5lbmRBbmltYXRpb24uZW1pdCh0cnVlKTtcbiAgICAgIH1cbiAgIH1cblxuICAgb25DbGlja0J1dHRvbnMoZXZlbnQ6IGFueSk6IHZvaWQgIHtcbiAgICAgIHRoaXMudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZW5kQW5pbWF0aW9uLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICB9XG4gICAgICB9KSk7XG4gICB9XG5cbiAgIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgICB0aGlzLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmVuZEFuaW1hdGlvbi5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrLmVtaXQoe1xuICAgICAgICAgICAgICAgcmVzcG9uc2U6IFN0TW9kYWxSZXNwb25zZS5DTE9TRSxcbiAgICAgICAgICAgICAgIGNsb3NlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgIH1cbiAgICAgIH0pKTtcbiAgIH1cblxuICAgLyoqIERZTkFNSUMgTU9EQUwgQk9EWSBDT01QT05FTlQgTE9BRCAqL1xuICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgdGhpcy50YXJnZXQgPSB0aGlzLmVtcHR5TW9kYWwgPyB0aGlzLnRhcmdldEVtcHR5IDogdGhpcy50YXJnZXRDb250ZW50O1xuICAgICAgaWYgKHRoaXMuY29tcG9uZW50ICYmICEodGhpcy5tb2RhbENvbmZpZy5odG1sIHx8IHRoaXMubW9kYWxDb25maWcubWVzc2FnZSkpIHtcbiAgICAgICAgIHRoaXMubG9hZEJvZHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3N0LW1vZGFsLW92ZXJsYXknKTtcbiAgIH1cblxuICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3N0LW1vZGFsLW92ZXJsYXknKTtcbiAgICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIH0pO1xuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIGdldE1vZGFsQWN0dWFsV2lkdGgobWF4V2lkdGg6IG51bWJlciwgbWluV2lkdGg/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgY29uc3Qgc2NyZWVuV2lkdGg6IG51bWJlciA9IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5zY3JlZW4ud2lkdGg7XG4gICAgICByZXR1cm4gc2NyZWVuV2lkdGggPiBtYXhXaWR0aCA/IG1heFdpZHRoIDogKHNjcmVlbldpZHRoIDwgbWluV2lkdGggPyBtaW5XaWR0aCA6IHNjcmVlbldpZHRoKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBsb2FkQm9keSgpOiB2b2lkIHtcbiAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgIHRoaXMudGFyZ2V0LmNsZWFyKCk7XG4gICAgICAgICBjb25zdCBjb21wRmFjdG9yeSA9IHRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY29tcG9uZW50KTtcbiAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy50YXJnZXQuY3JlYXRlQ29tcG9uZW50KGNvbXBGYWN0b3J5KTtcbiAgICAgICAgIHRoaXMuYmluZE1vZGFsSW5wdXRzKCk7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgYmluZE1vZGFsSW5wdXRzKCk6IHZvaWQge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5tb2RhbENvbmZpZy5pbnB1dHMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZVtrZXldID0gKHRoaXMubW9kYWxDb25maWcuaW5wdXRzIGFzIGFueSlba2V5XTtcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5tb2RhbENvbmZpZy5vdXRwdXRzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHRoaXMubW9kYWxDb25maWcub3V0cHV0cyBhcyBhbnkpW2tleV0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICB9XG59XG4iXX0=