ngx-modialog-10
Version:
Modal / Dialog for Angular
228 lines • 22.7 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-10';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbW9kaWFsb2ctMTAvcGx1Z2lucy92ZXgvIiwic291cmNlcyI6WyJsaWIvbW9kYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFFTCxPQUFPLEVBRVAsWUFBWSxFQUNaLEtBQUssSUFBSSxNQUFNLEVBQ2YsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztJQUk3RCxLQUFLLEdBQVksQ0FBQyxDQUFDLE9BQU8sUUFBUSxLQUFLLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7SUFFbEUsS0FBSyxHQUFHLEtBQUs7Ozs7O0FBSWpCLE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDZixDQUFDO0FBRUQ7SUFDMkIseUJBQU07SUFDL0IsZUFBWSxPQUFnQjtlQUMxQixrQkFBTSxPQUFPLENBQUM7SUFDaEIsQ0FBQzs7OztJQUVELHFCQUFLOzs7SUFBTDtRQUNFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxtQkFBQSxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUMsRUFBTyxDQUFDLENBQUM7SUFDdkYsQ0FBQzs7OztJQUVELHNCQUFNOzs7SUFBTjtRQUNFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxtQkFBQTtZQUN4RCxVQUFVLEVBQUUsSUFBSTtZQUNoQixRQUFRLEVBQUUsSUFBSTtTQUNm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QUEsQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQVAsQ0FBTyxFQUFFLENBQUM7YUFDckc7WUFFRCxhQUFhLENBQUMsU0FBUzs7OztZQUFFLFVBQUEsT0FBTztnQkFDOUIsS0FBSyxJQUFJLEtBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLENBQUMsRUFBQyxDQUFDO1lBRUgsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNCLENBQUMsRUFBQyxDQUFDO1FBR0gsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7Z0JBdkpGLFVBQVU7Ozs7Z0JBeEJULE9BQU87O0lBZ0xULFlBQUM7Q0FBQSxBQXhKRCxDQUMyQixNQUFNLEdBdUpoQztTQXZKWSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIENvbnRhaW5lckNvbnRlbnQsXG4gIE92ZXJsYXksXG4gIERpYWxvZ1JlZixcbiAgRFJPUF9JTl9UWVBFLFxuICBNb2RhbCBhcyBNb2RhbF8sXG4gIENTU0JhY2tkcm9wLFxuICBDU1NEaWFsb2dDb250YWluZXIsXG4gIFByb21pc2VDb21wbGV0ZXJcbn0gZnJvbSAnbmd4LW1vZGlhbG9nLTEwJztcblxuaW1wb3J0IHsgRHJvcEluUHJlc2V0QnVpbGRlciB9IGZyb20gJy4vcHJlc2V0cy9kcm9waW4tcHJlc2V0JztcbmltcG9ydCB7IFZleENTU0RpYWxvZ0NvbnRhaW5lciB9IGZyb20gJy4vdmV4LWNzcy1kaWFsb2ctY29udGFpbmVyJztcblxuLy8gVE9ETzogdXNlIERJIGZhY3RvcnkgZm9yIHRoaXMuXG4vLyBUT0RPOiBjb25zb2xpZGF0ZSBkdXAgY29kZVxuY29uc3QgaXNEb2M6IGJvb2xlYW4gPSAhKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWRvY3VtZW50KTtcblxubGV0IHZleFYzID0gZmFsc2U7XG4vKipcbiAqIEV4ZWN1dGUgdGhpcyBtZXRob2QgdG8gZmxhZyB0aGF0IHlvdSBhcmUgd29ya2luZyB3aXRoIFZFWCB2ZXJzaW9uIDMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXhWM01vZGUoKTogdm9pZCB7XG4gIHZleFYzID0gdHJ1ZTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZGFsIGV4dGVuZHMgTW9kYWxfIHtcbiAgY29uc3RydWN0b3Iob3ZlcmxheTogT3ZlcmxheSkge1xuICAgIHN1cGVyKG92ZXJsYXkpO1xuICB9XG5cbiAgYWxlcnQoKTogRHJvcEluUHJlc2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBEcm9wSW5QcmVzZXRCdWlsZGVyKHRoaXMsIERST1BfSU5fVFlQRS5hbGVydCwge2lzQmxvY2tpbmc6IGZhbHNlfSBhcyBhbnkpO1xuICB9XG5cbiAgcHJvbXB0KCk6IERyb3BJblByZXNldEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRHJvcEluUHJlc2V0QnVpbGRlcih0aGlzLCBEUk9QX0lOX1RZUEUucHJvbXB0LCB7XG4gICAgICBpc0Jsb2NraW5nOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IG51bGxcbiAgICB9ICBhcyBhbnkpO1xuICB9XG5cbiAgY29uZmlybSgpOiBEcm9wSW5QcmVzZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IERyb3BJblByZXNldEJ1aWxkZXIodGhpcywgRFJPUF9JTl9UWVBFLmNvbmZpcm0sIHtcbiAgICAgIGlzQmxvY2tpbmc6IHRydWUsXG4gICAgICBrZXlib2FyZDogbnVsbFxuICAgIH0gIGFzIGFueSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlKGRpYWxvZ1JlZjogRGlhbG9nUmVmPGFueT4sIGNvbnRlbnQ6IENvbnRhaW5lckNvbnRlbnQpOiBEaWFsb2dSZWY8YW55PiB7XG4gICAgaWYgKHZleFYzID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVWMyhkaWFsb2dSZWYsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGJhY2tkcm9wUmVmID0gdGhpcy5jcmVhdGVCYWNrZHJvcChkaWFsb2dSZWYsIENTU0JhY2tkcm9wKTtcbiAgICBjb25zdCBjb250YWluZXJSZWYgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcihkaWFsb2dSZWYsIFZleENTU0RpYWxvZ0NvbnRhaW5lciwgY29udGVudCk7XG5cbiAgICBsZXQgb3ZlcmxheSA9IGRpYWxvZ1JlZi5vdmVybGF5UmVmLmluc3RhbmNlO1xuICAgIGxldCBiYWNrZHJvcCA9IGJhY2tkcm9wUmVmLmluc3RhbmNlO1xuICAgIGxldCBjb250YWluZXIgPSBjb250YWluZXJSZWYuaW5zdGFuY2U7XG5cbiAgICBpZiAoZGlhbG9nUmVmLmluRWxlbWVudCkge1xuICAgICAgb3ZlcmxheS5pbnNpZGVFbGVtZW50KCk7XG5cbiAgICAgIG92ZXJsYXkuc2V0Q29udGFpbmVyU3R5bGUoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJylcbiAgICAgICAgLnNldENvbnRhaW5lclN0eWxlKCdoZWlnaHQnLCAnMTAwJScpXG4gICAgICAgIC5zZXRDb250YWluZXJTdHlsZSgnd2lkdGgnLCAnMTAwJScpO1xuXG4gICAgICBiYWNrZHJvcC5zZXRTdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxuICAgICAgICAuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKVxuICAgICAgICAuc2V0U3R5bGUoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgICAgLnNldFN0eWxlKCd3aWR0aCcsICcxMDAlJyk7XG5cbiAgICAgIGNvbnRhaW5lci5zZXRTdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKVxuICAgICAgICAuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKVxuICAgICAgICAuc2V0U3R5bGUoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgICAgLnNldFN0eWxlKCd3aWR0aCcsICcxMDAlJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgb3ZlcmxheS5mdWxsc2NyZWVuKCk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJvZHkgY2xhc3MgaWYgdGhpcyBpcyB0aGUgb25seSBkaWFsb2cgaW4gdGhlIHN0YWNrXG4gICAgaWYgKGlzRG9jICYmICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndmV4LW9wZW4nKSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCd2ZXgtb3BlbicpO1xuICAgIH1cblxuICAgIGJhY2tkcm9wLmFkZENsYXNzKCd2ZXgtb3ZlcmxheScpO1xuICAgIGNvbnRhaW5lci5hZGRDbGFzcyhgdmV4IHZleC10aGVtZS0ke2RpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZX1gKTtcblxuICAgIGNvbnRhaW5lci5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xuXG4gICAgaWYgKGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG92ZXJsYXkuYmVmb3JlRGVzdHJveSgoKSA9PiB7XG4gICAgICBiYWNrZHJvcC5hZGRDbGFzcygndmV4LWNsb3NpbmcnKTtcbiAgICAgIGNvbnRhaW5lci5hZGRDbGFzcygndmV4LWNsb3NpbmcnKTtcbiAgICAgIGNvbnN0IGNvbXBsZXRlciA9IG5ldyBQcm9taXNlQ29tcGxldGVyPHZvaWQ+KCk7XG5cbiAgICAgIGxldCBhbmltYXRpb25FbmQkOiBPYnNlcnZhYmxlPGFueT4gPSBiYWNrZHJvcC5teUFuaW1hdGlvbkVuZCQoKTtcblxuICAgICAgLy8gVE9ETzogdGhlIGNoaWxkIGVsZW1lbnQgaW5zaWRlIHRoZSBjb250YWluZXIgKHZleC1jb250ZW50KSBpcyB0aGUgb25lIHdpdGggYW5pbWF0aW9uXG4gICAgICAvLyBuZWVkIHRvIGFsc28gd2FpdCBmb3IgaXQgdG8gZW5kLCBidXQgdGhpcyByZXF1aXJlcyBhIHJlZmVyZW5jZSB0byB0byBpdC5cbiAgICAgIC8vIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGl0cyBwYXJlbnQsIHdvbid0IGRvLlxuICAgICAgLy8gYW5pbWF0aW9uRW5kJCA9IGNvbWJpbmVMYXRlc3QuY2FsbChhbmltYXRpb25FbmQkLCBjb250YWluZXIubXlBbmltYXRpb25FbmQkKCksIChzMSwgczIpID0+IFtzMSxzMl0gKTtcblxuICAgICAgYW5pbWF0aW9uRW5kJC5zdWJzY3JpYmUoIHNvdXJjZXMgPT4ge1xuICAgICAgICBpc0RvYyAmJiB0aGlzLm92ZXJsYXkuZ3JvdXBTdGFja0xlbmd0aChkaWFsb2dSZWYpID09PSAxICYmIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgndmV4LW9wZW4nKTtcbiAgICAgICAgY29tcGxldGVyLnJlc29sdmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29tcGxldGVyLnByb21pc2U7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIuYXBwbHkob3ZlcmxheSk7XG5cbiAgICByZXR1cm4gZGlhbG9nUmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVWMyhkaWFsb2dSZWY6IERpYWxvZ1JlZjxhbnk+LCBjb250ZW50OiBDb250YWluZXJDb250ZW50KTogRGlhbG9nUmVmPGFueT4ge1xuXG4gICAgY29uc3QgYmFja2Ryb3BSZWYgPSB0aGlzLmNyZWF0ZUJhY2tkcm9wKGRpYWxvZ1JlZiwgQ1NTQmFja2Ryb3ApO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IHRoaXMuY3JlYXRlQ29udGFpbmVyKGRpYWxvZ1JlZiwgQ1NTRGlhbG9nQ29udGFpbmVyLCBjb250ZW50KTtcblxuICAgIGxldCBvdmVybGF5ID0gZGlhbG9nUmVmLm92ZXJsYXlSZWYuaW5zdGFuY2U7XG4gICAgbGV0IGJhY2tkcm9wID0gYmFja2Ryb3BSZWYuaW5zdGFuY2U7XG4gICAgbGV0IGNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcblxuICAgIGRpYWxvZ1JlZi5pbkVsZW1lbnQgPyBvdmVybGF5Lmluc2lkZUVsZW1lbnQoKSA6IG92ZXJsYXkuZnVsbHNjcmVlbigpO1xuXG4gICAgLy8gYWRkIGJvZHkgY2xhc3MgaWYgdGhpcyBpcyB0aGUgb25seSBkaWFsb2cgaW4gdGhlIHN0YWNrXG4gICAgaWYgKGlzRG9jICYmICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndmV4LW9wZW4nKSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCd2ZXgtb3BlbicpO1xuICAgIH1cblxuICAgIG92ZXJsYXkuYWRkQ2xhc3MoYHZleCB2ZXgtdGhlbWUtJHtkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWV9YCk7XG4gICAgYmFja2Ryb3AuYWRkQ2xhc3MoJ3ZleC1vdmVybGF5Jyk7XG4gICAgY29udGFpbmVyLmFkZENsYXNzKGRpYWxvZ1JlZi5jb250ZXh0LmNvbnRlbnRDbGFzc05hbWUpO1xuICAgIGNvbnRhaW5lci5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xuICAgIGlmIChkaWFsb2dSZWYuaW5FbGVtZW50KSB7XG4gICAgICBvdmVybGF5LnNldFN0eWxlKCdwYWRkaW5nJywgJzAnKTtcbiAgICAgIGNvbnRhaW5lci5zZXRTdHlsZSgnbWFyZ2luLXRvcCcsICcyMHB4Jyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmIChkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWUgPT09ICdib3R0b20tcmlnaHQtY29ybmVyJykge1xuICAgICAgb3ZlcmxheS5zZXRTdHlsZSgnb3ZlcmZsb3cteScsICdoaWRkZW4nKTtcbiAgICAgIGNvbnRhaW5lci5zZXRTdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgICB9XG5cbiAgICBvdmVybGF5LmJlZm9yZURlc3Ryb3koKCkgPT4ge1xuICAgICAgb3ZlcmxheS5hZGRDbGFzcygndmV4LWNsb3NpbmcnKTtcbiAgICAgIGNvbnN0IGNvbXBsZXRlciA9IG5ldyBQcm9taXNlQ29tcGxldGVyPHZvaWQ+KCk7XG5cbiAgICAgIGxldCBhbmltYXRpb25FbmQkOiBPYnNlcnZhYmxlPGFueT4gPSBjb250YWluZXIubXlBbmltYXRpb25FbmQkKCk7XG4gICAgICBpZiAoZGlhbG9nUmVmLmNvbnRleHQuY2xhc3NOYW1lICE9PSAnYm90dG9tLXJpZ2h0LWNvcm5lcicpIHtcbiAgICAgICAgYW5pbWF0aW9uRW5kJCA9IGNvbWJpbmVMYXRlc3QuY2FsbChhbmltYXRpb25FbmQkLCBiYWNrZHJvcC5teUFuaW1hdGlvbkVuZCQoKSwgKHMxLCBzMikgPT4gW3MxLHMyXSApO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRpb25FbmQkLnN1YnNjcmliZSggc291cmNlcyA9PiB7XG4gICAgICAgIGlzRG9jICYmIHRoaXMub3ZlcmxheS5ncm91cFN0YWNrTGVuZ3RoKGRpYWxvZ1JlZikgPT09IDEgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCd2ZXgtb3BlbicpO1xuICAgICAgICBjb21wbGV0ZXIucmVzb2x2ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb21wbGV0ZXIucHJvbWlzZTtcbiAgICB9KTtcblxuXG4gICAgb3ZlcmxheS5zZXRDbGlja0JvdW5kYXJ5KGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcblxuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cbn1cbiJdfQ==