ngx-modialog-7
Version:
Modal / Dialog for Angular
228 lines • 22.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/modal.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __extends } from "tslib";
import { combineLatest } from 'rxjs';
import { Injectable } from '@angular/core';
import { Overlay, DROP_IN_TYPE, Modal as Modal_, CSSBackdrop, CSSDialogContainer, PromiseCompleter } from 'ngx-modialog-7';
import { DropInPresetBuilder } from './presets/dropin-preset';
import { VexCSSDialogContainer } from './vex-css-dialog-container';
// TODO: use DI factory for this.
// TODO: consolidate dup code
/** @type {?} */
var isDoc = !(typeof document === 'undefined' || !document);
/** @type {?} */
var vexV3 = false;
/**
* Execute this method to flag that you are working with VEX version 3.
* @return {?}
*/
export function vexV3Mode() {
vexV3 = true;
}
var Modal = /** @class */ (function (_super) {
__extends(Modal, _super);
function Modal(overlay) {
return _super.call(this, overlay) || this;
}
/**
* @return {?}
*/
Modal.prototype.alert = /**
* @return {?}
*/
function () {
return new DropInPresetBuilder(this, DROP_IN_TYPE.alert, (/** @type {?} */ ({ isBlocking: false })));
};
/**
* @return {?}
*/
Modal.prototype.prompt = /**
* @return {?}
*/
function () {
return new DropInPresetBuilder(this, DROP_IN_TYPE.prompt, (/** @type {?} */ ({
isBlocking: true,
keyboard: null
})));
};
/**
* @return {?}
*/
Modal.prototype.confirm = /**
* @return {?}
*/
function () {
return new DropInPresetBuilder(this, DROP_IN_TYPE.confirm, (/** @type {?} */ ({
isBlocking: true,
keyboard: null
})));
};
/**
* @protected
* @param {?} dialogRef
* @param {?} content
* @return {?}
*/
Modal.prototype.create = /**
* @protected
* @param {?} dialogRef
* @param {?} content
* @return {?}
*/
function (dialogRef, content) {
var _this = this;
if (vexV3 === true) {
return this.createV3(dialogRef, content);
}
/** @type {?} */
var backdropRef = this.createBackdrop(dialogRef, CSSBackdrop);
/** @type {?} */
var containerRef = this.createContainer(dialogRef, VexCSSDialogContainer, content);
/** @type {?} */
var overlay = dialogRef.overlayRef.instance;
/** @type {?} */
var backdrop = backdropRef.instance;
/** @type {?} */
var container = containerRef.instance;
if (dialogRef.inElement) {
overlay.insideElement();
overlay.setContainerStyle('position', 'relative')
.setContainerStyle('height', '100%')
.setContainerStyle('width', '100%');
backdrop.setStyle('position', 'absolute')
.setStyle('display', 'block')
.setStyle('height', '100%')
.setStyle('width', '100%');
container.setStyle('position', 'relative')
.setStyle('display', 'block')
.setStyle('height', '100%')
.setStyle('width', '100%');
}
else {
overlay.fullscreen();
}
// add body class if this is the only dialog in the stack
if (isDoc && !document.body.classList.contains('vex-open')) {
document.body.classList.add('vex-open');
}
backdrop.addClass('vex-overlay');
container.addClass("vex vex-theme-" + dialogRef.context.className);
container.setStyle('display', 'block');
if (containerRef.location.nativeElement) {
containerRef.location.nativeElement.focus();
}
overlay.beforeDestroy((/**
* @return {?}
*/
function () {
backdrop.addClass('vex-closing');
container.addClass('vex-closing');
/** @type {?} */
var completer = new PromiseCompleter();
/** @type {?} */
var animationEnd$ = backdrop.myAnimationEnd$();
// TODO: the child element inside the container (vex-content) is the one with animation
// need to also wait for it to end, but this requires a reference to to it.
// the container itself is its parent, won't do.
// animationEnd$ = combineLatest.call(animationEnd$, container.myAnimationEnd$(), (s1, s2) => [s1,s2] );
animationEnd$.subscribe((/**
* @param {?} sources
* @return {?}
*/
function (sources) {
isDoc && _this.overlay.groupStackLength(dialogRef) === 1 && document.body.classList.remove('vex-open');
completer.resolve();
}));
return completer.promise;
}));
container.apply(overlay);
return dialogRef;
};
/**
* @private
* @param {?} dialogRef
* @param {?} content
* @return {?}
*/
Modal.prototype.createV3 = /**
* @private
* @param {?} dialogRef
* @param {?} content
* @return {?}
*/
function (dialogRef, content) {
var _this = this;
/** @type {?} */
var backdropRef = this.createBackdrop(dialogRef, CSSBackdrop);
/** @type {?} */
var containerRef = this.createContainer(dialogRef, CSSDialogContainer, content);
/** @type {?} */
var overlay = dialogRef.overlayRef.instance;
/** @type {?} */
var backdrop = backdropRef.instance;
/** @type {?} */
var container = containerRef.instance;
dialogRef.inElement ? overlay.insideElement() : overlay.fullscreen();
// add body class if this is the only dialog in the stack
if (isDoc && !document.body.classList.contains('vex-open')) {
document.body.classList.add('vex-open');
}
overlay.addClass("vex vex-theme-" + dialogRef.context.className);
backdrop.addClass('vex-overlay');
container.addClass(dialogRef.context.contentClassName);
container.setStyle('display', 'block');
if (dialogRef.inElement) {
overlay.setStyle('padding', '0');
container.setStyle('margin-top', '20px');
}
if (containerRef.location.nativeElement) {
containerRef.location.nativeElement.focus();
}
if (dialogRef.context.className === 'bottom-right-corner') {
overlay.setStyle('overflow-y', 'hidden');
container.setStyle('position', 'absolute');
}
overlay.beforeDestroy((/**
* @return {?}
*/
function () {
overlay.addClass('vex-closing');
/** @type {?} */
var completer = new PromiseCompleter();
/** @type {?} */
var animationEnd$ = container.myAnimationEnd$();
if (dialogRef.context.className !== 'bottom-right-corner') {
animationEnd$ = combineLatest.call(animationEnd$, backdrop.myAnimationEnd$(), (/**
* @param {?} s1
* @param {?} s2
* @return {?}
*/
function (s1, s2) { return [s1, s2]; }));
}
animationEnd$.subscribe((/**
* @param {?} sources
* @return {?}
*/
function (sources) {
isDoc && _this.overlay.groupStackLength(dialogRef) === 1 && document.body.classList.remove('vex-open');
completer.resolve();
}));
return completer.promise;
}));
overlay.setClickBoundary(containerRef.location.nativeElement);
return dialogRef;
};
Modal.decorators = [
{ type: Injectable }
];
/** @nocollapse */
Modal.ctorParameters = function () { return [
{ type: Overlay }
]; };
return Modal;
}(Modal_));
export { Modal };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbW9kaWFsb2ctNy9wbHVnaW5zL3ZleC8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUVMLE9BQU8sRUFFUCxZQUFZLEVBQ1osS0FBSyxJQUFJLE1BQU0sRUFDZixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNqQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0lBSTdELEtBQUssR0FBWSxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDOztJQUVsRSxLQUFLLEdBQUcsS0FBSzs7Ozs7QUFJakIsTUFBTSxVQUFVLFNBQVM7SUFDdkIsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNmLENBQUM7QUFFRDtJQUMyQix5QkFBTTtJQUMvQixlQUFZLE9BQWdCO2VBQzFCLGtCQUFNLE9BQU8sQ0FBQztJQUNoQixDQUFDOzs7O0lBRUQscUJBQUs7OztJQUFMO1FBQ0UsT0FBTyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLG1CQUFBLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxFQUFPLENBQUMsQ0FBQztJQUN2RixDQUFDOzs7O0lBRUQsc0JBQU07OztJQUFOO1FBQ0UsT0FBTyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLG1CQUFBO1lBQ3hELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxJQUFJO1NBQ2Ys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QSxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBUCxDQUFPLEVBQUUsQ0FBQzthQUNyRztZQUVELGFBQWEsQ0FBQyxTQUFTOzs7O1lBQUUsVUFBQSxPQUFPO2dCQUM5QixLQUFLLElBQUksS0FBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUFDLENBQUM7WUFFSCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsQ0FBQyxFQUFDLENBQUM7UUFHSCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU5RCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOztnQkF2SkYsVUFBVTs7OztnQkF4QlQsT0FBTzs7SUFnTFQsWUFBQztDQUFBLEFBeEpELENBQzJCLE1BQU0sR0F1SmhDO1NBdkpZLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgQ29udGFpbmVyQ29udGVudCxcbiAgT3ZlcmxheSxcbiAgRGlhbG9nUmVmLFxuICBEUk9QX0lOX1RZUEUsXG4gIE1vZGFsIGFzIE1vZGFsXyxcbiAgQ1NTQmFja2Ryb3AsXG4gIENTU0RpYWxvZ0NvbnRhaW5lcixcbiAgUHJvbWlzZUNvbXBsZXRlclxufSBmcm9tICduZ3gtbW9kaWFsb2ctNyc7XG5cbmltcG9ydCB7IERyb3BJblByZXNldEJ1aWxkZXIgfSBmcm9tICcuL3ByZXNldHMvZHJvcGluLXByZXNldCc7XG5pbXBvcnQgeyBWZXhDU1NEaWFsb2dDb250YWluZXIgfSBmcm9tICcuL3ZleC1jc3MtZGlhbG9nLWNvbnRhaW5lcic7XG5cbi8vIFRPRE86IHVzZSBESSBmYWN0b3J5IGZvciB0aGlzLlxuLy8gVE9ETzogY29uc29saWRhdGUgZHVwIGNvZGVcbmNvbnN0IGlzRG9jOiBib29sZWFuID0gISh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICFkb2N1bWVudCk7XG5cbmxldCB2ZXhWMyA9IGZhbHNlO1xuLyoqXG4gKiBFeGVjdXRlIHRoaXMgbWV0aG9kIHRvIGZsYWcgdGhhdCB5b3UgYXJlIHdvcmtpbmcgd2l0aCBWRVggdmVyc2lvbiAzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmV4VjNNb2RlKCk6IHZvaWQge1xuICB2ZXhWMyA9IHRydWU7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2RhbCBleHRlbmRzIE1vZGFsXyB7XG4gIGNvbnN0cnVjdG9yKG92ZXJsYXk6IE92ZXJsYXkpIHtcbiAgICBzdXBlcihvdmVybGF5KTtcbiAgfVxuXG4gIGFsZXJ0KCk6IERyb3BJblByZXNldEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRHJvcEluUHJlc2V0QnVpbGRlcih0aGlzLCBEUk9QX0lOX1RZUEUuYWxlcnQsIHtpc0Jsb2NraW5nOiBmYWxzZX0gYXMgYW55KTtcbiAgfVxuXG4gIHByb21wdCgpOiBEcm9wSW5QcmVzZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IERyb3BJblByZXNldEJ1aWxkZXIodGhpcywgRFJPUF9JTl9UWVBFLnByb21wdCwge1xuICAgICAgaXNCbG9ja2luZzogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBudWxsXG4gICAgfSAgYXMgYW55KTtcbiAgfVxuXG4gIGNvbmZpcm0oKTogRHJvcEluUHJlc2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBEcm9wSW5QcmVzZXRCdWlsZGVyKHRoaXMsIERST1BfSU5fVFlQRS5jb25maXJtLCB7XG4gICAgICBpc0Jsb2NraW5nOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IG51bGxcbiAgICB9ICBhcyBhbnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZShkaWFsb2dSZWY6IERpYWxvZ1JlZjxhbnk+LCBjb250ZW50OiBDb250YWluZXJDb250ZW50KTogRGlhbG9nUmVmPGFueT4ge1xuICAgIGlmICh2ZXhWMyA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVjMoZGlhbG9nUmVmLCBjb250ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBiYWNrZHJvcFJlZiA9IHRoaXMuY3JlYXRlQmFja2Ryb3AoZGlhbG9nUmVmLCBDU1NCYWNrZHJvcCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdGhpcy5jcmVhdGVDb250YWluZXIoZGlhbG9nUmVmLCBWZXhDU1NEaWFsb2dDb250YWluZXIsIGNvbnRlbnQpO1xuXG4gICAgbGV0IG92ZXJsYXkgPSBkaWFsb2dSZWYub3ZlcmxheVJlZi5pbnN0YW5jZTtcbiAgICBsZXQgYmFja2Ryb3AgPSBiYWNrZHJvcFJlZi5pbnN0YW5jZTtcbiAgICBsZXQgY29udGFpbmVyID0gY29udGFpbmVyUmVmLmluc3RhbmNlO1xuXG4gICAgaWYgKGRpYWxvZ1JlZi5pbkVsZW1lbnQpIHtcbiAgICAgIG92ZXJsYXkuaW5zaWRlRWxlbWVudCgpO1xuXG4gICAgICBvdmVybGF5LnNldENvbnRhaW5lclN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpXG4gICAgICAgIC5zZXRDb250YWluZXJTdHlsZSgnaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAuc2V0Q29udGFpbmVyU3R5bGUoJ3dpZHRoJywgJzEwMCUnKTtcblxuICAgICAgYmFja2Ryb3Auc2V0U3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcbiAgICAgICAgLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJylcbiAgICAgICAgLnNldFN0eWxlKCdoZWlnaHQnLCAnMTAwJScpXG4gICAgICAgIC5zZXRTdHlsZSgnd2lkdGgnLCAnMTAwJScpO1xuXG4gICAgICBjb250YWluZXIuc2V0U3R5bGUoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJylcbiAgICAgICAgLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJylcbiAgICAgICAgLnNldFN0eWxlKCdoZWlnaHQnLCAnMTAwJScpXG4gICAgICAgIC5zZXRTdHlsZSgnd2lkdGgnLCAnMTAwJScpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIG92ZXJsYXkuZnVsbHNjcmVlbigpO1xuICAgIH1cblxuICAgIC8vIGFkZCBib2R5IGNsYXNzIGlmIHRoaXMgaXMgdGhlIG9ubHkgZGlhbG9nIGluIHRoZSBzdGFja1xuICAgIGlmIChpc0RvYyAmJiAhZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3ZleC1vcGVuJykpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgndmV4LW9wZW4nKTtcbiAgICB9XG5cbiAgICBiYWNrZHJvcC5hZGRDbGFzcygndmV4LW92ZXJsYXknKTtcbiAgICBjb250YWluZXIuYWRkQ2xhc3MoYHZleCB2ZXgtdGhlbWUtJHtkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWV9YCk7XG5cbiAgICBjb250YWluZXIuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcblxuICAgIGlmIChjb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBvdmVybGF5LmJlZm9yZURlc3Ryb3koKCkgPT4ge1xuICAgICAgYmFja2Ryb3AuYWRkQ2xhc3MoJ3ZleC1jbG9zaW5nJyk7XG4gICAgICBjb250YWluZXIuYWRkQ2xhc3MoJ3ZleC1jbG9zaW5nJyk7XG4gICAgICBjb25zdCBjb21wbGV0ZXIgPSBuZXcgUHJvbWlzZUNvbXBsZXRlcjx2b2lkPigpO1xuXG4gICAgICBsZXQgYW5pbWF0aW9uRW5kJDogT2JzZXJ2YWJsZTxhbnk+ID0gYmFja2Ryb3AubXlBbmltYXRpb25FbmQkKCk7XG5cbiAgICAgIC8vIFRPRE86IHRoZSBjaGlsZCBlbGVtZW50IGluc2lkZSB0aGUgY29udGFpbmVyICh2ZXgtY29udGVudCkgaXMgdGhlIG9uZSB3aXRoIGFuaW1hdGlvblxuICAgICAgLy8gbmVlZCB0byBhbHNvIHdhaXQgZm9yIGl0IHRvIGVuZCwgYnV0IHRoaXMgcmVxdWlyZXMgYSByZWZlcmVuY2UgdG8gdG8gaXQuXG4gICAgICAvLyB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBpdHMgcGFyZW50LCB3b24ndCBkby5cbiAgICAgIC8vIGFuaW1hdGlvbkVuZCQgPSBjb21iaW5lTGF0ZXN0LmNhbGwoYW5pbWF0aW9uRW5kJCwgY29udGFpbmVyLm15QW5pbWF0aW9uRW5kJCgpLCAoczEsIHMyKSA9PiBbczEsczJdICk7XG5cbiAgICAgIGFuaW1hdGlvbkVuZCQuc3Vic2NyaWJlKCBzb3VyY2VzID0+IHtcbiAgICAgICAgaXNEb2MgJiYgdGhpcy5vdmVybGF5Lmdyb3VwU3RhY2tMZW5ndGgoZGlhbG9nUmVmKSA9PT0gMSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3ZleC1vcGVuJyk7XG4gICAgICAgIGNvbXBsZXRlci5yZXNvbHZlKCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbXBsZXRlci5wcm9taXNlO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLmFwcGx5KG92ZXJsYXkpO1xuXG4gICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVjMoZGlhbG9nUmVmOiBEaWFsb2dSZWY8YW55PiwgY29udGVudDogQ29udGFpbmVyQ29udGVudCk6IERpYWxvZ1JlZjxhbnk+IHtcblxuICAgIGNvbnN0IGJhY2tkcm9wUmVmID0gdGhpcy5jcmVhdGVCYWNrZHJvcChkaWFsb2dSZWYsIENTU0JhY2tkcm9wKTtcbiAgICBjb25zdCBjb250YWluZXJSZWYgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcihkaWFsb2dSZWYsIENTU0RpYWxvZ0NvbnRhaW5lciwgY29udGVudCk7XG5cbiAgICBsZXQgb3ZlcmxheSA9IGRpYWxvZ1JlZi5vdmVybGF5UmVmLmluc3RhbmNlO1xuICAgIGxldCBiYWNrZHJvcCA9IGJhY2tkcm9wUmVmLmluc3RhbmNlO1xuICAgIGxldCBjb250YWluZXIgPSBjb250YWluZXJSZWYuaW5zdGFuY2U7XG5cbiAgICBkaWFsb2dSZWYuaW5FbGVtZW50ID8gb3ZlcmxheS5pbnNpZGVFbGVtZW50KCkgOiBvdmVybGF5LmZ1bGxzY3JlZW4oKTtcblxuICAgIC8vIGFkZCBib2R5IGNsYXNzIGlmIHRoaXMgaXMgdGhlIG9ubHkgZGlhbG9nIGluIHRoZSBzdGFja1xuICAgIGlmIChpc0RvYyAmJiAhZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3ZleC1vcGVuJykpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgndmV4LW9wZW4nKTtcbiAgICB9XG5cbiAgICBvdmVybGF5LmFkZENsYXNzKGB2ZXggdmV4LXRoZW1lLSR7ZGlhbG9nUmVmLmNvbnRleHQuY2xhc3NOYW1lfWApO1xuICAgIGJhY2tkcm9wLmFkZENsYXNzKCd2ZXgtb3ZlcmxheScpO1xuICAgIGNvbnRhaW5lci5hZGRDbGFzcyhkaWFsb2dSZWYuY29udGV4dC5jb250ZW50Q2xhc3NOYW1lKTtcbiAgICBjb250YWluZXIuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICBpZiAoZGlhbG9nUmVmLmluRWxlbWVudCkge1xuICAgICAgb3ZlcmxheS5zZXRTdHlsZSgncGFkZGluZycsICcwJyk7XG4gICAgICBjb250YWluZXIuc2V0U3R5bGUoJ21hcmdpbi10b3AnLCAnMjBweCcpO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAoZGlhbG9nUmVmLmNvbnRleHQuY2xhc3NOYW1lID09PSAnYm90dG9tLXJpZ2h0LWNvcm5lcicpIHtcbiAgICAgIG92ZXJsYXkuc2V0U3R5bGUoJ292ZXJmbG93LXknLCAnaGlkZGVuJyk7XG4gICAgICBjb250YWluZXIuc2V0U3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgfVxuXG4gICAgb3ZlcmxheS5iZWZvcmVEZXN0cm95KCgpID0+IHtcbiAgICAgIG92ZXJsYXkuYWRkQ2xhc3MoJ3ZleC1jbG9zaW5nJyk7XG4gICAgICBjb25zdCBjb21wbGV0ZXIgPSBuZXcgUHJvbWlzZUNvbXBsZXRlcjx2b2lkPigpO1xuXG4gICAgICBsZXQgYW5pbWF0aW9uRW5kJDogT2JzZXJ2YWJsZTxhbnk+ID0gY29udGFpbmVyLm15QW5pbWF0aW9uRW5kJCgpO1xuICAgICAgaWYgKGRpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZSAhPT0gJ2JvdHRvbS1yaWdodC1jb3JuZXInKSB7XG4gICAgICAgIGFuaW1hdGlvbkVuZCQgPSBjb21iaW5lTGF0ZXN0LmNhbGwoYW5pbWF0aW9uRW5kJCwgYmFja2Ryb3AubXlBbmltYXRpb25FbmQkKCksIChzMSwgczIpID0+IFtzMSxzMl0gKTtcbiAgICAgIH1cblxuICAgICAgYW5pbWF0aW9uRW5kJC5zdWJzY3JpYmUoIHNvdXJjZXMgPT4ge1xuICAgICAgICBpc0RvYyAmJiB0aGlzLm92ZXJsYXkuZ3JvdXBTdGFja0xlbmd0aChkaWFsb2dSZWYpID09PSAxICYmIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgndmV4LW9wZW4nKTtcbiAgICAgICAgY29tcGxldGVyLnJlc29sdmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29tcGxldGVyLnByb21pc2U7XG4gICAgfSk7XG5cblxuICAgIG92ZXJsYXkuc2V0Q2xpY2tCb3VuZGFyeShjb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG5cbiAgICByZXR1cm4gZGlhbG9nUmVmO1xuICB9XG59XG4iXX0=