UNPKG

@stratio/egeo

Version:
396 lines 32.3 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'; var StModalComponent = /** @class */ (function () { function StModalComponent(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 = []; } Object.defineProperty(StModalComponent.prototype, "hasIcon", { get: /** * @return {?} */ function () { return this.modalConfig.iconStatus; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "isFullscreen", { get: /** * @return {?} */ function () { return this.modalConfig.fullscreen; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "title", { get: /** * @return {?} */ function () { return this.modalConfig.modalTitle; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "buttons", { get: /** * @return {?} */ function () { return this.modalConfig.buttons || []; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "isMessageModal", { get: /** * @return {?} */ function () { return this.modalConfig.message && this.modalConfig.message.length > 0; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "isComplexMessageModal", { get: /** * @return {?} */ function () { return this.modalConfig.html && this.modalConfig.html.length > 0; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "html", { get: /** * @return {?} */ function () { return this.modalConfig.html; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "message", { get: /** * @return {?} */ function () { return this.modalConfig.message; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "messageTitle", { get: /** * @return {?} */ function () { return this.modalConfig.messageTitle; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "modalStyles", { get: /** * @return {?} */ function () { /** @type {?} */ var maxWidth = this.modalConfig.maxWidth || this.defaultMaxWidth; /** @type {?} */ var minWidth = this.modalConfig.minWidth || this.defaultMinWidth; /** @type {?} */ var width = this.getModalActualWidth(maxWidth, minWidth); return { 'max-width': maxWidth + "px", 'min-width': minWidth + "px", 'width': width + "px" }; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "emptyModal", { get: /** * @return {?} */ function () { return this.modalConfig && this.modalConfig.empty; }, enumerable: true, configurable: true }); Object.defineProperty(StModalComponent.prototype, "showCloseBtn", { get: /** * @return {?} */ function () { return this.modalConfig.showCloseBtn; }, enumerable: true, configurable: true }); /** * @param {?} event * @return {?} */ StModalComponent.prototype.animationDone = /** * @param {?} event * @return {?} */ function (event) { if (event.toState === 'hidden') { this.endAnimation.emit(true); } }; /** * @param {?} event * @return {?} */ StModalComponent.prototype.onClickButtons = /** * @param {?} event * @return {?} */ function (event) { var _this = this; this.visibility = 'hidden'; this._subscriptions.push(this.endAnimation.subscribe((/** * @param {?} data * @return {?} */ function (data) { if (data) { _this.click.emit(event); } }))); }; /** * @return {?} */ StModalComponent.prototype.onClose = /** * @return {?} */ function () { var _this = this; this.visibility = 'hidden'; this._subscriptions.push(this.endAnimation.subscribe((/** * @param {?} data * @return {?} */ function (data) { if (data) { _this.click.emit({ response: StModalResponse.CLOSE, close: true }); } }))); }; /** DYNAMIC MODAL BODY COMPONENT LOAD */ /** * DYNAMIC MODAL BODY COMPONENT LOAD * @return {?} */ StModalComponent.prototype.ngAfterViewInit = /** * DYNAMIC MODAL BODY COMPONENT LOAD * @return {?} */ function () { 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 {?} */ StModalComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { 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 {?} */ function (subscription) { if (subscription) { subscription.unsubscribe(); } })); } }; /** * @private * @param {?} maxWidth * @param {?=} minWidth * @return {?} */ StModalComponent.prototype.getModalActualWidth = /** * @private * @param {?} maxWidth * @param {?=} minWidth * @return {?} */ function (maxWidth, minWidth) { /** @type {?} */ var screenWidth = this.windowRef.nativeWindow.screen.width; return screenWidth > maxWidth ? maxWidth : (screenWidth < minWidth ? minWidth : screenWidth); }; /** * @private * @return {?} */ StModalComponent.prototype.loadBody = /** * @private * @return {?} */ function () { if (!this.componentRef) { this.target.clear(); /** @type {?} */ var compFactory = this.cfr.resolveComponentFactory(this.component); this.componentRef = this.target.createComponent(compFactory); this.bindModalInputs(); } }; /** * @private * @return {?} */ StModalComponent.prototype.bindModalInputs = /** * @private * @return {?} */ function () { var _this = this; Object.keys(this.modalConfig.inputs).forEach((/** * @param {?} key * @return {?} */ function (key) { _this.componentRef.instance[key] = ((/** @type {?} */ (_this.modalConfig.inputs)))[key]; })); Object.keys(this.modalConfig.outputs).forEach((/** * @param {?} key * @return {?} */ function (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 = function () { return [ { 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 },] }] }; return StModalComponent; }()); export { StModalComponent }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN0cmF0aW8vZWdlby8iLCJzb3VyY2VzIjpbImxpYi9zdC1tb2RhbC9zdC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsT0FBTyxFQUNKLHVCQUF1QixFQUN2QixTQUFTLEVBQ1Qsd0JBQXdCLEVBRXhCLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakcsT0FBTyxFQUF3QyxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0Q7SUF1Q0csMEJBQ1csR0FBNkIsRUFDN0IsU0FBNkI7UUFEN0IsUUFBRyxHQUFILEdBQUcsQ0FBMEI7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFqQi9CLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNqQyxVQUFLLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO1FBQ3ZGLGlCQUFZLEdBQTJCLElBQUksWUFBWSxFQUFXLENBQUM7UUFJcEUsb0JBQWUsR0FBVyxHQUFHLENBQUM7UUFDOUIsb0JBQWUsR0FBVyxHQUFHLENBQUM7UUFHdkMsZUFBVSxHQUFXLFNBQVMsQ0FBQztRQUd2QixtQkFBYyxHQUF3QixFQUFFLENBQUM7SUFLN0MsQ0FBQztJQUVMLHNCQUFJLHFDQUFPOzs7O1FBQVg7WUFDRyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQ3RDLENBQUM7OztPQUFBO0lBRUQsc0JBQUksMENBQVk7Ozs7UUFBaEI7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QVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs4QkFDbEUsU0FBUyxTQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O0lBNEkzRSx1QkFBQztDQUFBLEFBeEtELElBd0tDO1NBcEpZLGdCQUFnQjs7O0lBQzFCLHVDQUFvQzs7SUFDcEMscUNBQXdCOztJQUN4Qiw2Q0FDMkM7O0lBQzNDLGlDQUFpRzs7SUFDakcsd0NBQTZFOztJQUM3RSx5Q0FBcUc7O0lBQ3JHLHVDQUF3Rzs7SUFFeEcsMkNBQXVDOztJQUN2QywyQ0FBdUM7O0lBRXZDLGtDQUF5Qjs7SUFDekIsc0NBQStCOzs7OztJQUUvQix3Q0FBd0M7Ozs7O0lBQ3hDLDBDQUFpRDs7Ozs7SUFHOUMsK0JBQXFDOzs7OztJQUNyQyxxQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogwqkgMjAxNyBTdHJhdGlvIEJpZyBEYXRhIEluYy4sIFN1Y3Vyc2FsIGVuIEVzcGHDsWEuXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTtcbiAqIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4gKiBTZWUgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAuXG4gKi9cbmltcG9ydCB7XG4gICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgIENvbXBvbmVudCxcbiAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgIENvbXBvbmVudFJlZixcbiAgIEV2ZW50RW1pdHRlcixcbiAgIEhvc3RCaW5kaW5nLFxuICAgSW5wdXQsXG4gICBPbkRlc3Ryb3ksXG4gICBBZnRlclZpZXdJbml0LFxuICAgT3V0cHV0LFxuICAgVmlld0NoaWxkLFxuICAgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBBbmltYXRpb25FdmVudCwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU3RNb2RhbEJ1dHRvbiwgU3RNb2RhbEJ1dHRvblJlc3BvbnNlLCBTdE1vZGFsQ29uZmlnLCBTdE1vZGFsUmVzcG9uc2UgfSBmcm9tICcuL3N0LW1vZGFsLm1vZGVsJztcbmltcG9ydCB7IFN0V2luZG93UmVmU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL3dpbmRvdy1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICBzZWxlY3RvcjogJ3N0LW1vZGFsJyxcbiAgIHRlbXBsYXRlVXJsOiAnLi9zdC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gICBzdHlsZVVybHM6IFsnLi9zdC1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICBhbmltYXRpb25zOiBbXG4gICAgICB0cmlnZ2VyKCdzdGF0ZScsIFtcbiAgICAgICAgIHN0YXRlKCd2b2lkLCBoaWRkZW4nLCBzdHlsZSh7b3BhY2l0eTogMH0pKSxcbiAgICAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoe29wYWNpdHk6IDF9KSksXG4gICAgICAgICB0cmFuc2l0aW9uKCcqID0+IHZpc2libGUnLCBbXG4gICAgICAgICAgICBzdHlsZSh7b3BhY2l0eTogMH0pLFxuICAgICAgICAgICAgYW5pbWF0ZSgzMDAgKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICB0cmFuc2l0aW9uKCcqID0+IGhpZGRlbicsIFtcbiAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAxfSksXG4gICAgICAgICAgICBhbmltYXRlKDMwMCApXG4gICAgICAgICAgICBdKVxuICAgICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTdE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgIEBJbnB1dCgpIG1vZGFsQ29uZmlnOiBTdE1vZGFsQ29uZmlnO1xuICAgQElucHV0KCkgY29tcG9uZW50OiBhbnk7XG4gICBASG9zdEJpbmRpbmcoJ0AuZGlzYWJsZWQnKVxuICAgQElucHV0KCkgZGlzYWJsZWRBbmltYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuICAgQE91dHB1dCgpIGNsaWNrOiBFdmVudEVtaXR0ZXI8U3RNb2RhbEJ1dHRvblJlc3BvbnNlPiA9IG5ldyBFdmVudEVtaXR0ZXI8U3RNb2RhbEJ1dHRvblJlc3BvbnNlPigpO1xuICAgQE91dHB1dCgpIGVuZEFuaW1hdGlvbjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ICA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgIEBWaWV3Q2hpbGQoJ3N0TW9kYWxCb2R5JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IGZhbHNlIH0pIHRhcmdldENvbnRlbnQ6IFZpZXdDb250YWluZXJSZWY7XG4gICBAVmlld0NoaWxkKCdzdE1vZGFsQm9keUVtcHR5JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IGZhbHNlIH0pIHRhcmdldEVtcHR5OiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICByZWFkb25seSBkZWZhdWx0TWF4V2lkdGg6IG51bWJlciA9IDYwMDtcbiAgIHJlYWRvbmx5IGRlZmF1bHRNaW5XaWR0aDogbnVtYmVyID0gNDAwO1xuXG4gICB0YXJnZXQ6IFZpZXdDb250YWluZXJSZWY7XG4gICB2aXNpYmlsaXR5OiBzdHJpbmcgPSAndmlzaWJsZSc7XG5cbiAgIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PjtcbiAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGNmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgcHJpdmF0ZSB3aW5kb3dSZWY6IFN0V2luZG93UmVmU2VydmljZVxuICAgKSB7IH1cblxuICAgZ2V0IGhhc0ljb24oKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLmljb25TdGF0dXM7XG4gICB9XG5cbiAgIGdldCBpc0Z1bGxzY3JlZW4oKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbENvbmZpZy5mdWxsc2NyZWVuO1xuICAgfVxuXG4gICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLm1vZGFsVGl0bGU7XG4gICB9XG5cbiAgIGdldCBidXR0b25zKCk6IFN0TW9kYWxCdXR0b25bXSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbENvbmZpZy5idXR0b25zIHx8IFtdO1xuICAgfVxuXG4gICBnZXQgaXNNZXNzYWdlTW9kYWwoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbENvbmZpZy5tZXNzYWdlICYmIHRoaXMubW9kYWxDb25maWcubWVzc2FnZS5sZW5ndGggPiAwO1xuICAgfVxuXG4gICBnZXQgaXNDb21wbGV4TWVzc2FnZU1vZGFsKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMubW9kYWxDb25maWcuaHRtbCAmJiB0aGlzLm1vZGFsQ29uZmlnLmh0bWwubGVuZ3RoID4gMDtcbiAgIH1cblxuICAgZ2V0IGh0bWwoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnLmh0bWw7XG4gICB9XG5cbiAgIGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbENvbmZpZy5tZXNzYWdlO1xuICAgfVxuXG4gICBnZXQgbWVzc2FnZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbENvbmZpZy5tZXNzYWdlVGl0bGU7XG4gICB9XG5cbiAgIGdldCBtb2RhbFN0eWxlcygpOiBPYmplY3Qge1xuICAgICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLm1vZGFsQ29uZmlnLm1heFdpZHRoIHx8IHRoaXMuZGVmYXVsdE1heFdpZHRoO1xuICAgICAgY29uc3QgbWluV2lkdGggPSB0aGlzLm1vZGFsQ29uZmlnLm1pbldpZHRoIHx8IHRoaXMuZGVmYXVsdE1pbldpZHRoO1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldE1vZGFsQWN0dWFsV2lkdGgobWF4V2lkdGgsIG1pbldpZHRoKTtcbiAgICAgIHJldHVybiB7ICdtYXgtd2lkdGgnOiBgJHttYXhXaWR0aH1weGAsICdtaW4td2lkdGgnOiBgJHttaW5XaWR0aH1weGAsICd3aWR0aCc6IGAke3dpZHRofXB4YCB9O1xuICAgfVxuXG4gICBnZXQgZW1wdHlNb2RhbCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsQ29uZmlnICYmIHRoaXMubW9kYWxDb25maWcuZW1wdHk7XG4gICB9XG5cbiAgIGdldCBzaG93Q2xvc2VCdG4oKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbENvbmZpZy5zaG93Q2xvc2VCdG47XG4gICB9XG5cbiAgIGFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgIHRoaXMuZW5kQW5pbWF0aW9uLmVtaXQodHJ1ZSk7XG4gICAgICB9XG4gICB9XG5cbiAgIG9uQ2xpY2tCdXR0b25zKGV2ZW50OiBhbnkpOiB2b2lkICB7XG4gICAgICB0aGlzLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmVuZEFuaW1hdGlvbi5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgfVxuICAgICAgfSkpO1xuICAgfVxuXG4gICBvbkNsb3NlKCk6IHZvaWQge1xuICAgICAgdGhpcy52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5lbmRBbmltYXRpb24uc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jbGljay5lbWl0KHtcbiAgICAgICAgICAgICAgIHJlc3BvbnNlOiBTdE1vZGFsUmVzcG9uc2UuQ0xPU0UsXG4gICAgICAgICAgICAgICBjbG9zZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICB9XG4gICAgICB9KSk7XG4gICB9XG5cbiAgIC8qKiBEWU5BTUlDIE1PREFMIEJPRFkgQ09NUE9ORU5UIExPQUQgKi9cbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5lbXB0eU1vZGFsID8gdGhpcy50YXJnZXRFbXB0eSA6IHRoaXMudGFyZ2V0Q29udGVudDtcbiAgICAgIGlmICh0aGlzLmNvbXBvbmVudCAmJiAhKHRoaXMubW9kYWxDb25maWcuaHRtbCB8fCB0aGlzLm1vZGFsQ29uZmlnLm1lc3NhZ2UpKSB7XG4gICAgICAgICB0aGlzLmxvYWRCb2R5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdzdC1tb2RhbC1vdmVybGF5Jyk7XG4gICB9XG5cbiAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzdC1tb2RhbC1vdmVybGF5Jyk7XG4gICAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9KTtcbiAgICAgIH1cbiAgIH1cblxuICAgcHJpdmF0ZSBnZXRNb2RhbEFjdHVhbFdpZHRoKG1heFdpZHRoOiBudW1iZXIsIG1pbldpZHRoPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIGNvbnN0IHNjcmVlbldpZHRoOiBudW1iZXIgPSB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2NyZWVuLndpZHRoO1xuICAgICAgcmV0dXJuIHNjcmVlbldpZHRoID4gbWF4V2lkdGggPyBtYXhXaWR0aCA6IChzY3JlZW5XaWR0aCA8IG1pbldpZHRoID8gbWluV2lkdGggOiBzY3JlZW5XaWR0aCk7XG4gICB9XG5cbiAgIHByaXZhdGUgbG9hZEJvZHkoKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICB0aGlzLnRhcmdldC5jbGVhcigpO1xuICAgICAgICAgY29uc3QgY29tcEZhY3RvcnkgPSB0aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLmNvbXBvbmVudCk7XG4gICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudGFyZ2V0LmNyZWF0ZUNvbXBvbmVudChjb21wRmFjdG9yeSk7XG4gICAgICAgICB0aGlzLmJpbmRNb2RhbElucHV0cygpO1xuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIGJpbmRNb2RhbElucHV0cygpOiB2b2lkIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubW9kYWxDb25maWcuaW5wdXRzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9ICh0aGlzLm1vZGFsQ29uZmlnLmlucHV0cyBhcyBhbnkpW2tleV07XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubW9kYWxDb25maWcub3V0cHV0cykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV0uc3Vic2NyaWJlKCh0aGlzLm1vZGFsQ29uZmlnLm91dHB1dHMgYXMgYW55KVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgfVxufVxuIl19