ng2-modal-module
Version:
bootstrap modal component adjusted for angular2+ framework based on rx-pubsub service. NO jQuery!
358 lines • 25.6 kB
JavaScript
/**
* @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\">×</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==