UNPKG

ngx-modialog-10

Version:
228 lines 22.7 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-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==