UNPKG

@stratio/egeo

Version:
314 lines 29 kB
/** * @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=