@universis/common
Version:
Universis - common directives and services
158 lines (157 loc) • 18.3 kB
JavaScript
import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from '@angular/core';
import { DialogComponent, DIALOG_BUTTONS } from '../components/modal/dialog.component';
import { BsModalService } from 'ngx-bootstrap/modal';
/**
*
* Displays a Modal window or a type of Notification (based on choice the color changes)
* @export
* @class ModalService
*/
export class ModalService {
constructor(componentFactoryResolver, appRef, injector, modalService) {
this.componentFactoryResolver = componentFactoryResolver;
this.appRef = appRef;
this.injector = injector;
this.modalService = modalService;
this.config = {
ignoreBackdropClick: true,
keyboard: false,
initialState: null,
class: 'modal-content-base'
};
}
showDialog(title, message, buttons = DIALOG_BUTTONS.Ok, extras) {
const componentRef = this.componentFactoryResolver
.resolveComponentFactory(DialogComponent)
.create(this.injector);
componentRef.instance.title = title;
componentRef.instance.message = message;
componentRef.instance.buttons = buttons;
if (extras) {
componentRef.instance.theme = extras.theme;
}
// attach component to the appRef so that it's inside the ng component tree
this.appRef.attachView(componentRef.hostView);
// get DOM element from component
const modalElement = componentRef.hostView
.rootNodes[0];
// append DOM element to the body
document.body.appendChild(modalElement);
return componentRef.instance.ngOnInit().then(() => {
// show dialog
return componentRef.instance.show().then(result => {
// detach view
this.appRef.detachView(componentRef.hostView);
// destroy component ref
componentRef.destroy();
//
return Promise.resolve(result);
});
});
}
showWarningDialog(title, message, buttons = DIALOG_BUTTONS.OkCancel, icon) {
return this.showDialog(null, `<div class="text-center">
<div class="icon-circle icon-circle-warning">
<i class="${icon || 'fa fa-exclamation'}"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-warning'
});
}
showSuccessDialog(title, message, buttons = DIALOG_BUTTONS.Ok, icon) {
return this.showDialog(null, `<div class="text-center">
<div class="icon-circle icon-circle-success">
<i class="${icon || 'fa fa-check'}"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-success'
});
}
showErrorDialog(title, message, buttons = DIALOG_BUTTONS.Ok, icon) {
return this.showDialog(null, `<div class="text-center">
<div class="icon-circle icon-circle-danger">
<i class="${icon || 'fa fa-times'}"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-danger'
});
}
showDangerDialog(title, message, buttons = DIALOG_BUTTONS.Ok, icon) {
return this.showDialog(null, `<div class="text-center">
<div class="icon-circle icon-circle-danger">
<i class="${icon || 'fa fa-exclamation'}"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-danger'
});
}
showInfoDialog(title, message, buttons = DIALOG_BUTTONS.Ok, icon) {
return this.showDialog(null, `<div class="text-center">
<div class="icon-circle icon-circle-info">
<i class="${icon || 'fa fa-info'}"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-info'
});
}
openModal(template, customClass) {
let config;
if (customClass) {
config = JSON.parse(JSON.stringify(this.config));
config.class = customClass;
}
else {
config = this.config;
}
return this.modalRef = this.modalService.show(template, config);
}
openModalComponent(template, options) {
return this.modalRef = this.modalService.show(template, options);
}
}
ModalService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ModalService.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: ApplicationRef },
{ type: Injector },
{ type: BsModalService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvY29tbW9uLyIsInNvdXJjZXMiOlsic2hhcmVkL3NlcnZpY2VzL21vZGFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBRSx3QkFBd0IsRUFBbUIsVUFBVSxFQUFFLFFBQVEsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUMsZUFBZSxFQUFFLGNBQWMsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVFyRDs7Ozs7R0FLRztBQUVILE1BQU07SUFTSixZQUFvQix3QkFBa0QsRUFDbEQsTUFBc0IsRUFDdEIsUUFBa0IsRUFDbEIsWUFBNEI7UUFINUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQVZoRCxXQUFNLEdBQUc7WUFDUCxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsWUFBWSxFQUFFLElBQUk7WUFDbEIsS0FBSyxFQUFFLG9CQUFvQjtTQUM1QixDQUFDO0lBS2tELENBQUM7SUFFckQsVUFBVSxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsVUFBMEIsY0FBYyxDQUFDLEVBQUUsRUFBRSxNQUE4QjtRQUNwSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCO2FBQzdDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQzthQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7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Tzs7O2FBR1osRUFDRCxPQUFPLEVBQUU7WUFDTCxLQUFLLEVBQUUsbUJBQW1CO1NBQzdCLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFSCxTQUFTLENBQUMsUUFBYSxFQUFFLFdBQW9CO1FBQzNDLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1NBQzVCO2FBQU07WUFDTCxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQWEsRUFBRSxPQUFhO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckUsQ0FBQzs7O1lBOUpKLFVBQVU7Ozs7WUFqQmEsd0JBQXdCO1lBQXhDLGNBQWM7WUFBeUQsUUFBUTtZQUc5RSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBFbWJlZGRlZFZpZXdSZWYsIEluamVjdGFibGUsIEluamVjdG9yLCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEaWFsb2dDb21wb25lbnQsIERJQUxPR19CVVRUT05TfSBmcm9tICcuLi9jb21wb25lbnRzL21vZGFsL2RpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbC9icy1tb2RhbC1yZWYuc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0NvbXBvbmVudEV4dHJhcyB7XG4gIHRoZW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqXG4gKiBEaXNwbGF5cyBhIE1vZGFsIHdpbmRvdyBvciBhIHR5cGUgb2YgTm90aWZpY2F0aW9uIChiYXNlZCBvbiBjaG9pY2UgdGhlIGNvbG9yIGNoYW5nZXMpXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTW9kYWxTZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2Uge1xuICBtb2RhbFJlZjogYW55O1xuICBjb25maWcgPSB7XG4gICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgaW5pdGlhbFN0YXRlOiBudWxsLFxuICAgIGNsYXNzOiAnbW9kYWwtY29udGVudC1iYXNlJ1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkgeyB9XG5cbiAgc2hvd0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2ssIGV4dHJhcz86IERpYWxvZ0NvbXBvbmVudEV4dHJhcykge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShEaWFsb2dDb21wb25lbnQpXG4gICAgICAgIC5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnRpdGxlID0gdGl0bGU7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5idXR0b25zID0gYnV0dG9ucztcbiAgICBpZiAoZXh0cmFzKSB7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudGhlbWUgPSBleHRyYXMudGhlbWU7XG4gICAgfVxuICAgIC8vIGF0dGFjaCBjb21wb25lbnQgdG8gdGhlIGFwcFJlZiBzbyB0aGF0IGl0J3MgaW5zaWRlIHRoZSBuZyBjb21wb25lbnQgdHJlZVxuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAvLyBnZXQgRE9NIGVsZW1lbnQgZnJvbSBjb21wb25lbnRcbiAgICBjb25zdCBtb2RhbEVsZW1lbnQgPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KVxuICAgICAgICAucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIC8vIGFwcGVuZCBET00gZWxlbWVudCB0byB0aGUgYm9keVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9kYWxFbGVtZW50KTtcbiAgICByZXR1cm4gY29tcG9uZW50UmVmLmluc3RhbmNlLm5nT25Jbml0KCkudGhlbigoKSA9PiB7XG4gICAgICAvLyBzaG93IGRpYWxvZ1xuICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zaG93KCkudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgICAgLy8gZGV0YWNoIHZpZXdcbiAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAvLyBkZXN0cm95IGNvbXBvbmVudCByZWZcbiAgICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93V2FybmluZ0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2tDYW5jZWwsIGljb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dEaWFsb2coXG4gICAgICAgIG51bGwsXG4gICAgICAgIGA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgaWNvbi1jaXJjbGUtd2FybmluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiR7IGljb24gfHwgJ2ZhIGZhLWV4Y2xhbWF0aW9uJyB9XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LTJ4bCBmb250LXdlaWdodC1ib2xkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAke3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICR7bWVzc2FnZX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGJ1dHRvbnMsIHtcbiAgICAgICAgICB0aGVtZTogJ21vZGFsLWRpYWxvZy13YXJuaW5nJ1xuICAgICAgICB9KTtcbiAgfVxuXG4gIHNob3dTdWNjZXNzRGlhbG9nKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgYnV0dG9uczogRElBTE9HX0JVVFRPTlMgPSBESUFMT0dfQlVUVE9OUy5PaywgaWNvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNob3dEaWFsb2coXG4gICAgICAgIG51bGwsXG4gICAgICAgIGA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgaWNvbi1jaXJjbGUtc3VjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiR7IGljb24gfHwgJ2ZhIGZhLWNoZWNrJyB9XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LTJ4bCBmb250LXdlaWdodC1ib2xkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAke3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICR7bWVzc2FnZX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGJ1dHRvbnMsIHtcbiAgICAgICAgICB0aGVtZTogJ21vZGFsLWRpYWxvZy1zdWNjZXNzJ1xuICAgICAgICB9KTtcbiAgfVxuXG4gIHNob3dFcnJvckRpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2ssIGljb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RGlhbG9nKFxuICAgICAgICBudWxsLFxuICAgICAgICBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGljb24tY2lyY2xlLWRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiR7IGljb24gfHwgJ2ZhIGZhLXRpbWVzJyB9XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LTJ4bCBmb250LXdlaWdodC1ib2xkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAke3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICR7bWVzc2FnZX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGJ1dHRvbnMsIHtcbiAgICAgICAgICB0aGVtZTogJ21vZGFsLWRpYWxvZy1kYW5nZXInXG4gICAgICAgIH0pO1xuICB9XG5cbiAgc2hvd0RhbmdlckRpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2ssIGljb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RGlhbG9nKFxuICAgICAgICBudWxsLFxuICAgICAgICBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGljb24tY2lyY2xlLWRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiR7IGljb24gfHwgJ2ZhIGZhLWV4Y2xhbWF0aW9uJyB9XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LTJ4bCBmb250LXdlaWdodC1ib2xkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAke3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICR7bWVzc2FnZX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGJ1dHRvbnMsIHtcbiAgICAgICAgICB0aGVtZTogJ21vZGFsLWRpYWxvZy1kYW5nZXInXG4gICAgICAgIH0pO1xuICB9XG5cbiAgICBzaG93SW5mb0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2ssIGljb24/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0RpYWxvZyhcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGljb24tY2lyY2xlLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIkeyBpY29uIHx8ICdmYSBmYS1pbmZvJyB9XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LTJ4bCBmb250LXdlaWdodC1ib2xkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAke3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICR7bWVzc2FnZX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgICBidXR0b25zLCB7XG4gICAgICAgICAgICAgICAgdGhlbWU6ICdtb2RhbC1kaWFsb2ctaW5mbydcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICBvcGVuTW9kYWwodGVtcGxhdGU6IGFueSwgY3VzdG9tQ2xhc3M/OiBzdHJpbmcpOiBCc01vZGFsUmVmIHtcbiAgICBsZXQgY29uZmlnO1xuICAgIGlmIChjdXN0b21DbGFzcykge1xuICAgICAgY29uZmlnID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZykpO1xuICAgICAgY29uZmlnLmNsYXNzID0gY3VzdG9tQ2xhc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIGNvbmZpZyk7XG4gIH1cblxuICBvcGVuTW9kYWxDb21wb25lbnQodGVtcGxhdGU6IGFueSwgb3B0aW9ucz86IGFueSk6IEJzTW9kYWxSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIG9wdGlvbnMpO1xuICAgIH1cbn1cbiJdfQ==