UNPKG

ngx-modialog-7

Version:
228 lines 22.5 kB
/** * @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=