UNPKG

ng2-modal-module

Version:

bootstrap modal component adjusted for angular2+ framework based on rx-pubsub service. NO jQuery!

358 lines 25.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, ViewChild, ViewContainerRef } from '@angular/core'; import { ComponentInjector } from 'component-injector'; import { PubSubDistinct } from 'pubsub-distinct'; import { XDomUtil } from 'xdom-util'; var Ng2ModalWindowComponent = /** @class */ (function () { function Ng2ModalWindowComponent(componentInjector) { this.componentInjector = componentInjector; this.animationClass = 'fade'; this.showModalClass = 'in'; this.bodyOpenModalClass = 'modal-open'; this.defaultProperties = { title: '', show: false, showEvent: false, hide: false, componentSelector: false, componentInputs: false, htmlContent: '', overlayClick: true, customClass: '', buttons: { visible: true, cancel: { visible: true, label: 'Cancel', event: false }, success: { visible: true, label: 'Save', event: false } } }; this.properties = {}; } Object.defineProperty(Ng2ModalWindowComponent.prototype, "id", { set: /** * @param {?} eventName * @return {?} */ function (eventName) { if (eventName) { this.eventName = eventName; // remove previous subscription and create new one this.unsubscribe(); this.subscribeToEvent(); } }, enumerable: true, configurable: true }); /** * @return {?} */ Ng2ModalWindowComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ Ng2ModalWindowComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.unsubscribe(); this.resetInjectedComponent(); }; /** * @return {?} */ Ng2ModalWindowComponent.prototype.cancelAction = /** * @return {?} */ function () { if (this.properties.buttons.cancel.event) { PubSubDistinct.publishDistinct(this.properties.buttons.cancel.event, true); } this.hide(); }; /** * @return {?} */ Ng2ModalWindowComponent.prototype.successAction = /** * @return {?} */ function () { if (this.properties.buttons.success.event) { PubSubDistinct.publishDistinct(this.properties.buttons.success.event, true); } else { this.hide(); } }; /** * @return {?} */ Ng2ModalWindowComponent.prototype.overlayClick = /** * @return {?} */ function () { if (this.properties.overlayClick) { this.cancelAction(); } }; /** * @protected * @return {?} */ Ng2ModalWindowComponent.prototype.show = /** * @protected * @return {?} */ function () { // add class to modal DOM element to make it visible /** @type {?} */ var modalDom = this.modalWindow.nativeElement; if (!XDomUtil.hasClass(modalDom, this.showModalClass)) { XDomUtil.addClass(modalDom, this.showModalClass); } // add class to modal body to disable the scrolling /** @type {?} */ var body = document.querySelector('body'); if (!XDomUtil.hasClass(body, this.bodyOpenModalClass)) { XDomUtil.addClass(body, this.bodyOpenModalClass); } if (this.properties.showEvent) { PubSubDistinct.publishDistinct(this.properties.showEvent, true); } }; /** * @protected * @return {?} */ Ng2ModalWindowComponent.prototype.hide = /** * @protected * @return {?} */ function () { /** @type {?} */ var element = this.modalWindow.nativeElement; XDomUtil.removeClass(element, this.showModalClass); /** @type {?} */ var body = document.querySelector('body'); XDomUtil.removeClass(body, this.bodyOpenModalClass); }; /** * @protected * @return {?} */ Ng2ModalWindowComponent.prototype.subscribeToEvent = /** * @protected * @return {?} */ function () { var _this = this; this.eventSubscriber = PubSubDistinct.subscribe(this.eventName, (/** * @param {?} data * @return {?} */ function (data) { _this.initModal(data); })); }; /** * @protected * @param {?} properties * @return {?} */ Ng2ModalWindowComponent.prototype.initModal = /** * @protected * @param {?} properties * @return {?} */ function (properties) { if (properties.show) { // remove previously injected component this.resetInjectedComponent(); // reset the properties this.setProperties(properties); // inject component if (this.properties.componentSelector) { this.injectedComponentRef = this.injectComponent(this.properties.componentSelector); // set the components properties this.setComponentProperties(); } // display the modal this.show(); // reset modal event subscriber this.resetModalEventSubscriber(); } else if (properties.hide) { // remove previously injected component this.resetInjectedComponent(); // reset the properties this.setProperties(properties); // hide the modal this.hide(); // reset modal event subscriber this.resetModalEventSubscriber(); } }; /** * @protected * @return {?} */ Ng2ModalWindowComponent.prototype.unsubscribe = /** * @protected * @return {?} */ function () { if (this.eventSubscriber) { PubSubDistinct.unsubscribe(this.eventSubscriber); } }; /** * @protected * @param {?} componentSelector * @return {?} */ Ng2ModalWindowComponent.prototype.injectComponent = /** * @protected * @param {?} componentSelector * @return {?} */ function (componentSelector) { /** @type {?} */ var result; if (componentSelector) { result = this.componentInjector.inject(this.injectContainer, componentSelector); } return result; }; /** * @protected * @return {?} */ Ng2ModalWindowComponent.prototype.setComponentProperties = /** * @protected * @return {?} */ function () { if (this.properties.componentInputs && this.injectedComponentRef) { this.componentInjector.setProperties(this.injectedComponentRef, this.properties.componentInputs); } }; /** * @private * @return {?} */ Ng2ModalWindowComponent.prototype.resetInjectedComponent = /** * @private * @return {?} */ function () { if (this.injectedComponentRef) { this.componentInjector.remove(this.injectedComponentRef); this.injectedComponentRef = null; } }; /** * @private * @param {?} properties * @return {?} */ Ng2ModalWindowComponent.prototype.setProperties = /** * @private * @param {?} properties * @return {?} */ function (properties) { this.properties = tslib_1.__assign({}, this.defaultProperties, properties); }; /** * @private * @return {?} */ Ng2ModalWindowComponent.prototype.resetModalEventSubscriber = /** * @private * @return {?} */ function () { // reset modal show/hide display PubSubDistinct.publishDistinct(this.eventName, {}); }; Ng2ModalWindowComponent.decorators = [ { type: Component, args: [{ selector: 'ng2-modal-window', template: "<div class=\"ko-modal-window modal\" [ngClass]=\"animationClass\" tabindex=\"-1\" role=\"dialog\" id=\"myModal\" #modalWindow>\n <div class=\"ko-modal-overlay\" (click)=\"overlayClick()\"></div>\n <div class=\"modal-dialog {{properties.customClass}}\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"cancelAction()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n <h4 class=\"modal-title\">{{properties.title}}</h4>\n </div>\n <div class=\"modal-body\">\n <div #injectContainer [innerHTML]=\"properties.htmlContent | trustHtml\"></div>\n </div>\n <div class=\"modal-footer\" *ngIf=\"properties?.buttons?.visible\">\n <button type=\"button\" class=\"btn btn-default\" (click)=\"cancelAction()\"\n *ngIf=\"properties.buttons.cancel?.visible\">{{properties.buttons.cancel.label}}\n </button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"successAction()\"\n *ngIf=\"properties.buttons.success?.visible\">{{properties.buttons.success.label}}\n </button>\n </div>\n </div><!-- /.modal-content -->\n </div><!-- /.modal-dialog -->\n</div><!-- /.modal -->\n", styles: [".ko-modal-window{background-color:rgba(0,0,0,.5)}.ko-modal-window.in{display:block}.ko-modal-open{overflow:hidden}.ko-modal-overlay{position:fixed;width:100%;height:100%;left:0;top:0}"] }] } ]; /** @nocollapse */ Ng2ModalWindowComponent.ctorParameters = function () { return [ { type: ComponentInjector } ]; }; Ng2ModalWindowComponent.propDecorators = { modalWindow: [{ type: ViewChild, args: ['modalWindow', { static: true },] }], injectContainer: [{ type: ViewChild, args: ['injectContainer', { read: ViewContainerRef, static: true },] }], animationClass: [{ type: Input }], id: [{ type: Input }] }; return Ng2ModalWindowComponent; }()); export { Ng2ModalWindowComponent }; if (false) { /** @type {?} */ Ng2ModalWindowComponent.prototype.modalWindow; /** @type {?} */ Ng2ModalWindowComponent.prototype.injectContainer; /** @type {?} */ Ng2ModalWindowComponent.prototype.animationClass; /** * @type {?} * @protected */ Ng2ModalWindowComponent.prototype.showModalClass; /** * @type {?} * @protected */ Ng2ModalWindowComponent.prototype.bodyOpenModalClass; /** * @type {?} * @protected */ Ng2ModalWindowComponent.prototype.eventSubscriber; /** * @type {?} * @protected */ Ng2ModalWindowComponent.prototype.injectedComponentRef; /** * @type {?} * @protected */ Ng2ModalWindowComponent.prototype.defaultProperties; /** @type {?} */ Ng2ModalWindowComponent.prototype.properties; /** * @type {?} * @protected */ Ng2ModalWindowComponent.prototype.eventName; /** * @type {?} * @protected */ Ng2ModalWindowComponent.prototype.componentInjector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLW1vZGFsLXdpbmRvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZzItbW9kYWwtbW9kdWxlLyIsInNvdXJjZXMiOlsibGliL25nMi1tb2RhbC13aW5kb3cvbmcyLW1vZGFsLXdpbmRvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckM7SUF3Q0UsaUNBQXNCLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBaENqRCxtQkFBYyxHQUFXLE1BQU0sQ0FBQztRQUMvQixtQkFBYyxHQUFXLElBQUksQ0FBQztRQUM5Qix1QkFBa0IsR0FBVyxZQUFZLENBQUM7UUFHMUMsc0JBQWlCLEdBQVE7WUFDakMsS0FBSyxFQUFFLEVBQUU7WUFDVCxJQUFJLEVBQUUsS0FBSztZQUNYLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLElBQUksRUFBRSxLQUFLO1lBQ1gsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixlQUFlLEVBQUUsS0FBSztZQUN0QixXQUFXLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxFQUFFO1lBQ2YsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJO2dCQUNiLE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUUsSUFBSTtvQkFDYixLQUFLLEVBQUUsUUFBUTtvQkFDZixLQUFLLEVBQUUsS0FBSztpQkFDYjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLElBQUk7b0JBQ2IsS0FBSyxFQUFFLE1BQU07b0JBQ2IsS0FBSyxFQUFFLEtBQUs7aUJBQ2I7YUFDRjtTQUNGLENBQUM7UUFDRixlQUFVLEdBQVEsRUFBRSxDQUFDO0lBSXJCLENBQUM7SUFFRCxzQkFBYSx1Q0FBRTs7Ozs7UUFBZixVQUFnQixTQUFpQjtZQUMvQixJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDM0Isa0RBQWtEO2dCQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQzs7O09BQUE7Ozs7SUFFRCwwQ0FBUTs7O0lBQVI7SUFDQSxDQUFDOzs7O0lBRUQsNkNBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCw4Q0FBWTs7O0lBQVo7UUFDRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDeEMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQzs7OztJQUVELCtDQUFhOzs7SUFBYjtRQUNFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN6QyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDN0U7YUFDSTtZQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7OztJQUVELDhDQUFZOzs7SUFBWjtRQUNFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQzs7Ozs7SUFFUyxzQ0FBSTs7OztJQUFkOzs7WUFFTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO1FBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDckQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2xEOzs7WUFHRyxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3JELFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTtZQUM3QixjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQzs7Ozs7SUFFUyxzQ0FBSTs7OztJQUFkOztZQUNNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWE7UUFDNUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDOztZQUUvQyxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDekMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEQsQ0FBQzs7Ozs7SUFHUyxrREFBZ0I7Ozs7SUFBMUI7UUFBQSxpQkFJQztRQUhDLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUzs7OztRQUFFLFVBQUMsSUFBUztZQUN4RSxLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7O0lBRVMsMkNBQVM7Ozs7O0lBQW5CLFVBQW9CLFVBQWU7UUFDakMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ25CLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5Qix1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixtQkFBbUI7WUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3BGLGdDQUFnQztnQkFDaEMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7YUFDL0I7WUFDRCxvQkFBb0I7WUFDcEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osK0JBQStCO1lBQy9CLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO2FBQ0ksSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3hCLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5Qix1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixpQkFBaUI7WUFDakIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osK0JBQStCO1lBQy9CLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQzs7Ozs7SUFFUyw2Q0FBVzs7OztJQUFyQjtRQUNFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7Ozs7OztJQUVTLGlEQUFlOzs7OztJQUF6QixVQUEwQixpQkFBeUI7O1lBQzdDLE1BQXlCO1FBQzdCLElBQUksaUJBQWlCLEVBQUU7WUFDckIsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ2pGO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Ozs7SUFFUyx3REFBc0I7Ozs7SUFBaEM7UUFDRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNoRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2xHO0lBQ0gsQ0FBQzs7Ozs7SUFFTyx3REFBc0I7Ozs7SUFBOUI7UUFDRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDbEM7SUFDSCxDQUFDOzs7Ozs7SUFFTywrQ0FBYTs7Ozs7SUFBckIsVUFBc0IsVUFBZTtRQUNuQyxJQUFJLENBQUMsVUFBVSx3QkFBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUssVUFBVSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7Ozs7SUFFTywyREFBeUI7Ozs7SUFBakM7UUFDRSxnQ0FBZ0M7UUFDaEMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7O2dCQW5MRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsbXpDQUFnRDs7aUJBRWpEOzs7O2dCQVJRLGlCQUFpQjs7OzhCQVV2QixTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztrQ0FDdkMsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7aUNBQ25FLEtBQUs7cUJBbUNMLEtBQUs7O0lBMElSLDhCQUFDO0NBQUEsQUFyTEQsSUFxTEM7U0FoTFksdUJBQXVCOzs7SUFDbEMsOENBQWtFOztJQUNsRSxrREFBd0c7O0lBQ3hHLGlEQUF5Qzs7Ozs7SUFDekMsaURBQXdDOzs7OztJQUN4QyxxREFBb0Q7Ozs7O0lBQ3BELGtEQUF3Qzs7Ozs7SUFDeEMsdURBQWtEOzs7OztJQUNsRCxvREF1QkU7O0lBQ0YsNkNBQXFCOzs7OztJQUNyQiw0Q0FBNEI7Ozs7O0lBRWhCLG9EQUE4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudEluamVjdG9yIH0gZnJvbSAnY29tcG9uZW50LWluamVjdG9yJztcbmltcG9ydCB7IFB1YlN1YkRpc3RpbmN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdwdWJzdWItZGlzdGluY3QnO1xuaW1wb3J0IHsgWERvbVV0aWwgfSBmcm9tICd4ZG9tLXV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZzItbW9kYWwtd2luZG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL25nMi1tb2RhbC13aW5kb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZzItbW9kYWwtd2luZG93LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZzJNb2RhbFdpbmRvd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnbW9kYWxXaW5kb3cnLCB7c3RhdGljOiB0cnVlfSkgbW9kYWxXaW5kb3c6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2luamVjdENvbnRhaW5lcicsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWV9KSBpbmplY3RDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIEBJbnB1dCgpIGFuaW1hdGlvbkNsYXNzOiBzdHJpbmcgPSAnZmFkZSc7XG4gIHByb3RlY3RlZCBzaG93TW9kYWxDbGFzczogc3RyaW5nID0gJ2luJztcbiAgcHJvdGVjdGVkIGJvZHlPcGVuTW9kYWxDbGFzczogc3RyaW5nID0gJ21vZGFsLW9wZW4nO1xuICBwcm90ZWN0ZWQgZXZlbnRTdWJzY3JpYmVyOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBpbmplY3RlZENvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT47XG4gIHByb3RlY3RlZCBkZWZhdWx0UHJvcGVydGllczogYW55ID0ge1xuICAgIHRpdGxlOiAnJyxcbiAgICBzaG93OiBmYWxzZSxcbiAgICBzaG93RXZlbnQ6IGZhbHNlLFxuICAgIGhpZGU6IGZhbHNlLFxuICAgIGNvbXBvbmVudFNlbGVjdG9yOiBmYWxzZSxcbiAgICBjb21wb25lbnRJbnB1dHM6IGZhbHNlLFxuICAgIGh0bWxDb250ZW50OiAnJyxcbiAgICBvdmVybGF5Q2xpY2s6IHRydWUsXG4gICAgY3VzdG9tQ2xhc3M6ICcnLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBjYW5jZWw6IHtcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgbGFiZWw6ICdDYW5jZWwnLFxuICAgICAgICBldmVudDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBzdWNjZXNzOiB7XG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGxhYmVsOiAnU2F2ZScsXG4gICAgICAgIGV2ZW50OiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcHJvcGVydGllczogYW55ID0ge307XG4gIHByb3RlY3RlZCBldmVudE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY29tcG9uZW50SW5qZWN0b3I6IENvbXBvbmVudEluamVjdG9yKSB7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaWQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoZXZlbnROYW1lKSB7XG4gICAgICB0aGlzLmV2ZW50TmFtZSA9IGV2ZW50TmFtZTtcbiAgICAgIC8vIHJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gYW5kIGNyZWF0ZSBuZXcgb25lXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlc2V0SW5qZWN0ZWRDb21wb25lbnQoKTtcbiAgfVxuXG4gIGNhbmNlbEFjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wZXJ0aWVzLmJ1dHRvbnMuY2FuY2VsLmV2ZW50KSB7XG4gICAgICBQdWJTdWJEaXN0aW5jdC5wdWJsaXNoRGlzdGluY3QodGhpcy5wcm9wZXJ0aWVzLmJ1dHRvbnMuY2FuY2VsLmV2ZW50LCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5oaWRlKCk7XG4gIH1cblxuICBzdWNjZXNzQWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXMuYnV0dG9ucy5zdWNjZXNzLmV2ZW50KSB7XG4gICAgICBQdWJTdWJEaXN0aW5jdC5wdWJsaXNoRGlzdGluY3QodGhpcy5wcm9wZXJ0aWVzLmJ1dHRvbnMuc3VjY2Vzcy5ldmVudCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcmxheUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXMub3ZlcmxheUNsaWNrKSB7XG4gICAgICB0aGlzLmNhbmNlbEFjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93KCk6IHZvaWQge1xuICAgIC8vIGFkZCBjbGFzcyB0byBtb2RhbCBET00gZWxlbWVudCB0byBtYWtlIGl0IHZpc2libGVcbiAgICBsZXQgbW9kYWxEb20gPSB0aGlzLm1vZGFsV2luZG93Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFYRG9tVXRpbC5oYXNDbGFzcyhtb2RhbERvbSwgdGhpcy5zaG93TW9kYWxDbGFzcykpIHtcbiAgICAgIFhEb21VdGlsLmFkZENsYXNzKG1vZGFsRG9tLCB0aGlzLnNob3dNb2RhbENsYXNzKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgY2xhc3MgdG8gbW9kYWwgYm9keSB0byBkaXNhYmxlIHRoZSBzY3JvbGxpbmdcbiAgICBsZXQgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcbiAgICBpZiAoIVhEb21VdGlsLmhhc0NsYXNzKGJvZHksIHRoaXMuYm9keU9wZW5Nb2RhbENsYXNzKSkge1xuICAgICAgWERvbVV0aWwuYWRkQ2xhc3MoYm9keSwgdGhpcy5ib2R5T3Blbk1vZGFsQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BlcnRpZXMuc2hvd0V2ZW50KSB7XG4gICAgICBQdWJTdWJEaXN0aW5jdC5wdWJsaXNoRGlzdGluY3QodGhpcy5wcm9wZXJ0aWVzLnNob3dFdmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhpZGUoKTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLm1vZGFsV2luZG93Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgWERvbVV0aWwucmVtb3ZlQ2xhc3MoZWxlbWVudCwgdGhpcy5zaG93TW9kYWxDbGFzcyk7XG5cbiAgICBsZXQgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcbiAgICBYRG9tVXRpbC5yZW1vdmVDbGFzcyhib2R5LCB0aGlzLmJvZHlPcGVuTW9kYWxDbGFzcyk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBzdWJzY3JpYmVUb0V2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRTdWJzY3JpYmVyID0gUHViU3ViRGlzdGluY3Quc3Vic2NyaWJlKHRoaXMuZXZlbnROYW1lLCAoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLmluaXRNb2RhbChkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0TW9kYWwocHJvcGVydGllczogYW55KTogdm9pZCB7XG4gICAgaWYgKHByb3BlcnRpZXMuc2hvdykge1xuICAgICAgLy8gcmVtb3ZlIHByZXZpb3VzbHkgaW5qZWN0ZWQgY29tcG9uZW50XG4gICAgICB0aGlzLnJlc2V0SW5qZWN0ZWRDb21wb25lbnQoKTtcbiAgICAgIC8vIHJlc2V0IHRoZSBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzLmNvbXBvbmVudFNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuaW5qZWN0ZWRDb21wb25lbnRSZWYgPSB0aGlzLmluamVjdENvbXBvbmVudCh0aGlzLnByb3BlcnRpZXMuY29tcG9uZW50U2VsZWN0b3IpO1xuICAgICAgICAvLyBzZXQgdGhlIGNvbXBvbmVudHMgcHJvcGVydGllc1xuICAgICAgICB0aGlzLnNldENvbXBvbmVudFByb3BlcnRpZXMoKTtcbiAgICAgIH1cbiAgICAgIC8vIGRpc3BsYXkgdGhlIG1vZGFsXG4gICAgICB0aGlzLnNob3coKTtcbiAgICAgIC8vIHJlc2V0IG1vZGFsIGV2ZW50IHN1YnNjcmliZXJcbiAgICAgIHRoaXMucmVzZXRNb2RhbEV2ZW50U3Vic2NyaWJlcigpO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9wZXJ0aWVzLmhpZGUpIHtcbiAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IGluamVjdGVkIGNvbXBvbmVudFxuICAgICAgdGhpcy5yZXNldEluamVjdGVkQ29tcG9uZW50KCk7XG4gICAgICAvLyByZXNldCB0aGUgcHJvcGVydGllc1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgICAgLy8gaGlkZSB0aGUgbW9kYWxcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgLy8gcmVzZXQgbW9kYWwgZXZlbnQgc3Vic2NyaWJlclxuICAgICAgdGhpcy5yZXNldE1vZGFsRXZlbnRTdWJzY3JpYmVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50U3Vic2NyaWJlcikge1xuICAgICAgUHViU3ViRGlzdGluY3QudW5zdWJzY3JpYmUodGhpcy5ldmVudFN1YnNjcmliZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpbmplY3RDb21wb25lbnQoY29tcG9uZW50U2VsZWN0b3I6IHN0cmluZyk6IENvbXBvbmVudFJlZjxhbnk+IHtcbiAgICBsZXQgcmVzdWx0OiBDb21wb25lbnRSZWY8YW55PjtcbiAgICBpZiAoY29tcG9uZW50U2VsZWN0b3IpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuY29tcG9uZW50SW5qZWN0b3IuaW5qZWN0KHRoaXMuaW5qZWN0Q29udGFpbmVyLCBjb21wb25lbnRTZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRDb21wb25lbnRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXMuY29tcG9uZW50SW5wdXRzICYmIHRoaXMuaW5qZWN0ZWRDb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50SW5qZWN0b3Iuc2V0UHJvcGVydGllcyh0aGlzLmluamVjdGVkQ29tcG9uZW50UmVmLCB0aGlzLnByb3BlcnRpZXMuY29tcG9uZW50SW5wdXRzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0SW5qZWN0ZWRDb21wb25lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5qZWN0ZWRDb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50SW5qZWN0b3IucmVtb3ZlKHRoaXMuaW5qZWN0ZWRDb21wb25lbnRSZWYpO1xuICAgICAgdGhpcy5pbmplY3RlZENvbXBvbmVudFJlZiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHsuLi50aGlzLmRlZmF1bHRQcm9wZXJ0aWVzLCAuLi5wcm9wZXJ0aWVzfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRNb2RhbEV2ZW50U3Vic2NyaWJlcigpOiB2b2lkIHtcbiAgICAvLyByZXNldCBtb2RhbCBzaG93L2hpZGUgZGlzcGxheVxuICAgIFB1YlN1YkRpc3RpbmN0LnB1Ymxpc2hEaXN0aW5jdCh0aGlzLmV2ZW50TmFtZSwge30pO1xuICB9XG5cbn1cbiJdfQ==