UNPKG

ngx-modialog-7

Version:
204 lines 21.7 kB
/** * @fileoverview added by tsickle * Generated from: lib/modal.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ 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 {?} */ const isDoc = !(typeof document === 'undefined' || !document); /** @type {?} */ let vexV3 = false; /** * Execute this method to flag that you are working with VEX version 3. * @return {?} */ export function vexV3Mode() { vexV3 = true; } export class Modal extends Modal_ { /** * @param {?} overlay */ constructor(overlay) { super(overlay); } /** * @return {?} */ alert() { return new DropInPresetBuilder(this, DROP_IN_TYPE.alert, (/** @type {?} */ ({ isBlocking: false }))); } /** * @return {?} */ prompt() { return new DropInPresetBuilder(this, DROP_IN_TYPE.prompt, (/** @type {?} */ ({ isBlocking: true, keyboard: null }))); } /** * @return {?} */ confirm() { return new DropInPresetBuilder(this, DROP_IN_TYPE.confirm, (/** @type {?} */ ({ isBlocking: true, keyboard: null }))); } /** * @protected * @param {?} dialogRef * @param {?} content * @return {?} */ create(dialogRef, content) { if (vexV3 === true) { return this.createV3(dialogRef, content); } /** @type {?} */ const backdropRef = this.createBackdrop(dialogRef, CSSBackdrop); /** @type {?} */ const containerRef = this.createContainer(dialogRef, VexCSSDialogContainer, content); /** @type {?} */ let overlay = dialogRef.overlayRef.instance; /** @type {?} */ let backdrop = backdropRef.instance; /** @type {?} */ let 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 {?} */ () => { backdrop.addClass('vex-closing'); container.addClass('vex-closing'); /** @type {?} */ const completer = new PromiseCompleter(); /** @type {?} */ let 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 {?} */ 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 {?} */ createV3(dialogRef, content) { /** @type {?} */ const backdropRef = this.createBackdrop(dialogRef, CSSBackdrop); /** @type {?} */ const containerRef = this.createContainer(dialogRef, CSSDialogContainer, content); /** @type {?} */ let overlay = dialogRef.overlayRef.instance; /** @type {?} */ let backdrop = backdropRef.instance; /** @type {?} */ let 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 {?} */ () => { overlay.addClass('vex-closing'); /** @type {?} */ const completer = new PromiseCompleter(); /** @type {?} */ let animationEnd$ = container.myAnimationEnd$(); if (dialogRef.context.className !== 'bottom-right-corner') { animationEnd$ = combineLatest.call(animationEnd$, backdrop.myAnimationEnd$(), (/** * @param {?} s1 * @param {?} s2 * @return {?} */ (s1, s2) => [s1, s2])); } animationEnd$.subscribe((/** * @param {?} sources * @return {?} */ 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 = () => [ { type: Overlay } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbW9kaWFsb2ctNy9wbHVnaW5zL3ZleC8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBRUwsT0FBTyxFQUVQLFlBQVksRUFDWixLQUFLLElBQUksTUFBTSxFQUNmLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7TUFJN0QsS0FBSyxHQUFZLENBQUMsQ0FBQyxPQUFPLFFBQVEsS0FBSyxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUM7O0lBRWxFLEtBQUssR0FBRyxLQUFLOzs7OztBQUlqQixNQUFNLFVBQVUsU0FBUztJQUN2QixLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2YsQ0FBQztBQUdELE1BQU0sT0FBTyxLQUFNLFNBQVEsTUFBTTs7OztJQUMvQixZQUFZLE9BQWdCO1FBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDOzs7O0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxtQkFBQSxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUMsRUFBTyxDQUFDLENBQUM7SUFDdkYsQ0FBQzs7OztJQUVELE1BQU07UUFDSixPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQUE7WUFDeEQsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLElB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RUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ3JHO1lBRUQsYUFBYSxDQUFDLFNBQVM7Ozs7WUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDakMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLENBQUMsRUFBQyxDQUFDO1lBRUgsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNCLENBQUMsRUFBQyxDQUFDO1FBR0gsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7O1lBdkpGLFVBQVU7Ozs7WUF4QlQsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBDb250YWluZXJDb250ZW50LFxuICBPdmVybGF5LFxuICBEaWFsb2dSZWYsXG4gIERST1BfSU5fVFlQRSxcbiAgTW9kYWwgYXMgTW9kYWxfLFxuICBDU1NCYWNrZHJvcCxcbiAgQ1NTRGlhbG9nQ29udGFpbmVyLFxuICBQcm9taXNlQ29tcGxldGVyXG59IGZyb20gJ25neC1tb2RpYWxvZy03JztcblxuaW1wb3J0IHsgRHJvcEluUHJlc2V0QnVpbGRlciB9IGZyb20gJy4vcHJlc2V0cy9kcm9waW4tcHJlc2V0JztcbmltcG9ydCB7IFZleENTU0RpYWxvZ0NvbnRhaW5lciB9IGZyb20gJy4vdmV4LWNzcy1kaWFsb2ctY29udGFpbmVyJztcblxuLy8gVE9ETzogdXNlIERJIGZhY3RvcnkgZm9yIHRoaXMuXG4vLyBUT0RPOiBjb25zb2xpZGF0ZSBkdXAgY29kZVxuY29uc3QgaXNEb2M6IGJvb2xlYW4gPSAhKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWRvY3VtZW50KTtcblxubGV0IHZleFYzID0gZmFsc2U7XG4vKipcbiAqIEV4ZWN1dGUgdGhpcyBtZXRob2QgdG8gZmxhZyB0aGF0IHlvdSBhcmUgd29ya2luZyB3aXRoIFZFWCB2ZXJzaW9uIDMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXhWM01vZGUoKTogdm9pZCB7XG4gIHZleFYzID0gdHJ1ZTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZGFsIGV4dGVuZHMgTW9kYWxfIHtcbiAgY29uc3RydWN0b3Iob3ZlcmxheTogT3ZlcmxheSkge1xuICAgIHN1cGVyKG92ZXJsYXkpO1xuICB9XG5cbiAgYWxlcnQoKTogRHJvcEluUHJlc2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBEcm9wSW5QcmVzZXRCdWlsZGVyKHRoaXMsIERST1BfSU5fVFlQRS5hbGVydCwge2lzQmxvY2tpbmc6IGZhbHNlfSBhcyBhbnkpO1xuICB9XG5cbiAgcHJvbXB0KCk6IERyb3BJblByZXNldEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRHJvcEluUHJlc2V0QnVpbGRlcih0aGlzLCBEUk9QX0lOX1RZUEUucHJvbXB0LCB7XG4gICAgICBpc0Jsb2NraW5nOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IG51bGxcbiAgICB9ICBhcyBhbnkpO1xuICB9XG5cbiAgY29uZmlybSgpOiBEcm9wSW5QcmVzZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IERyb3BJblByZXNldEJ1aWxkZXIodGhpcywgRFJPUF9JTl9UWVBFLmNvbmZpcm0sIHtcbiAgICAgIGlzQmxvY2tpbmc6IHRydWUsXG4gICAgICBrZXlib2FyZDogbnVsbFxuICAgIH0gIGFzIGFueSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlKGRpYWxvZ1JlZjogRGlhbG9nUmVmPGFueT4sIGNvbnRlbnQ6IENvbnRhaW5lckNvbnRlbnQpOiBEaWFsb2dSZWY8YW55PiB7XG4gICAgaWYgKHZleFYzID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVWMyhkaWFsb2dSZWYsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGJhY2tkcm9wUmVmID0gdGhpcy5jcmVhdGVCYWNrZHJvcChkaWFsb2dSZWYsIENTU0JhY2tkcm9wKTtcbiAgICBjb25zdCBjb250YWluZXJSZWYgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcihkaWFsb2dSZWYsIFZleENTU0RpYWxvZ0NvbnRhaW5lciwgY29udGVudCk7XG5cbiAgICBsZXQgb3ZlcmxheSA9IGRpYWxvZ1JlZi5vdmVybGF5UmVmLmluc3RhbmNlO1xuICAgIGxldCBiYWNrZHJvcCA9IGJhY2tkcm9wUmVmLmluc3RhbmNlO1xuICAgIGxldCBjb250YWluZXIgPSBjb250YWluZXJSZWYuaW5zdGFuY2U7XG5cbiAgICBpZiAoZGlhbG9nUmVmLmluRWxlbWVudCkge1xuICAgICAgb3ZlcmxheS5pbnNpZGVFbGVtZW50KCk7XG5cbiAgICAgIG92ZXJsYXkuc2V0Q29udGFpbmVyU3R5bGUoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJylcbiAgICAgICAgLnNldENvbnRhaW5lclN0eWxlKCdoZWlnaHQnLCAnMTAwJScpXG4gICAgICAgIC5zZXRDb250YWluZXJTdHlsZSgnd2lkdGgnLCAnMTAwJScpO1xuXG4gICAgICBiYWNrZHJvcC5zZXRTdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxuICAgICAgICAuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKVxuICAgICAgICAuc2V0U3R5bGUoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgICAgLnNldFN0eWxlKCd3aWR0aCcsICcxMDAlJyk7XG5cbiAgICAgIGNvbnRhaW5lci5zZXRTdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKVxuICAgICAgICAuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKVxuICAgICAgICAuc2V0U3R5bGUoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgICAgLnNldFN0eWxlKCd3aWR0aCcsICcxMDAlJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgb3ZlcmxheS5mdWxsc2NyZWVuKCk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJvZHkgY2xhc3MgaWYgdGhpcyBpcyB0aGUgb25seSBkaWFsb2cgaW4gdGhlIHN0YWNrXG4gICAgaWYgKGlzRG9jICYmICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndmV4LW9wZW4nKSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCd2ZXgtb3BlbicpO1xuICAgIH1cblxuICAgIGJhY2tkcm9wLmFkZENsYXNzKCd2ZXgtb3ZlcmxheScpO1xuICAgIGNvbnRhaW5lci5hZGRDbGFzcyhgdmV4IHZleC10aGVtZS0ke2RpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZX1gKTtcblxuICAgIGNvbnRhaW5lci5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xuXG4gICAgaWYgKGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG92ZXJsYXkuYmVmb3JlRGVzdHJveSgoKSA9PiB7XG4gICAgICBiYWNrZHJvcC5hZGRDbGFzcygndmV4LWNsb3NpbmcnKTtcbiAgICAgIGNvbnRhaW5lci5hZGRDbGFzcygndmV4LWNsb3NpbmcnKTtcbiAgICAgIGNvbnN0IGNvbXBsZXRlciA9IG5ldyBQcm9taXNlQ29tcGxldGVyPHZvaWQ+KCk7XG5cbiAgICAgIGxldCBhbmltYXRpb25FbmQkOiBPYnNlcnZhYmxlPGFueT4gPSBiYWNrZHJvcC5teUFuaW1hdGlvbkVuZCQoKTtcblxuICAgICAgLy8gVE9ETzogdGhlIGNoaWxkIGVsZW1lbnQgaW5zaWRlIHRoZSBjb250YWluZXIgKHZleC1jb250ZW50KSBpcyB0aGUgb25lIHdpdGggYW5pbWF0aW9uXG4gICAgICAvLyBuZWVkIHRvIGFsc28gd2FpdCBmb3IgaXQgdG8gZW5kLCBidXQgdGhpcyByZXF1aXJlcyBhIHJlZmVyZW5jZSB0byB0byBpdC5cbiAgICAgIC8vIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGl0cyBwYXJlbnQsIHdvbid0IGRvLlxuICAgICAgLy8gYW5pbWF0aW9uRW5kJCA9IGNvbWJpbmVMYXRlc3QuY2FsbChhbmltYXRpb25FbmQkLCBjb250YWluZXIubXlBbmltYXRpb25FbmQkKCksIChzMSwgczIpID0+IFtzMSxzMl0gKTtcblxuICAgICAgYW5pbWF0aW9uRW5kJC5zdWJzY3JpYmUoIHNvdXJjZXMgPT4ge1xuICAgICAgICBpc0RvYyAmJiB0aGlzLm92ZXJsYXkuZ3JvdXBTdGFja0xlbmd0aChkaWFsb2dSZWYpID09PSAxICYmIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgndmV4LW9wZW4nKTtcbiAgICAgICAgY29tcGxldGVyLnJlc29sdmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29tcGxldGVyLnByb21pc2U7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIuYXBwbHkob3ZlcmxheSk7XG5cbiAgICByZXR1cm4gZGlhbG9nUmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVWMyhkaWFsb2dSZWY6IERpYWxvZ1JlZjxhbnk+LCBjb250ZW50OiBDb250YWluZXJDb250ZW50KTogRGlhbG9nUmVmPGFueT4ge1xuXG4gICAgY29uc3QgYmFja2Ryb3BSZWYgPSB0aGlzLmNyZWF0ZUJhY2tkcm9wKGRpYWxvZ1JlZiwgQ1NTQmFja2Ryb3ApO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IHRoaXMuY3JlYXRlQ29udGFpbmVyKGRpYWxvZ1JlZiwgQ1NTRGlhbG9nQ29udGFpbmVyLCBjb250ZW50KTtcblxuICAgIGxldCBvdmVybGF5ID0gZGlhbG9nUmVmLm92ZXJsYXlSZWYuaW5zdGFuY2U7XG4gICAgbGV0IGJhY2tkcm9wID0gYmFja2Ryb3BSZWYuaW5zdGFuY2U7XG4gICAgbGV0IGNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcblxuICAgIGRpYWxvZ1JlZi5pbkVsZW1lbnQgPyBvdmVybGF5Lmluc2lkZUVsZW1lbnQoKSA6IG92ZXJsYXkuZnVsbHNjcmVlbigpO1xuXG4gICAgLy8gYWRkIGJvZHkgY2xhc3MgaWYgdGhpcyBpcyB0aGUgb25seSBkaWFsb2cgaW4gdGhlIHN0YWNrXG4gICAgaWYgKGlzRG9jICYmICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndmV4LW9wZW4nKSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCd2ZXgtb3BlbicpO1xuICAgIH1cblxuICAgIG92ZXJsYXkuYWRkQ2xhc3MoYHZleCB2ZXgtdGhlbWUtJHtkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWV9YCk7XG4gICAgYmFja2Ryb3AuYWRkQ2xhc3MoJ3ZleC1vdmVybGF5Jyk7XG4gICAgY29udGFpbmVyLmFkZENsYXNzKGRpYWxvZ1JlZi5jb250ZXh0LmNvbnRlbnRDbGFzc05hbWUpO1xuICAgIGNvbnRhaW5lci5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xuICAgIGlmIChkaWFsb2dSZWYuaW5FbGVtZW50KSB7XG4gICAgICBvdmVybGF5LnNldFN0eWxlKCdwYWRkaW5nJywgJzAnKTtcbiAgICAgIGNvbnRhaW5lci5zZXRTdHlsZSgnbWFyZ2luLXRvcCcsICcyMHB4Jyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmIChkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWUgPT09ICdib3R0b20tcmlnaHQtY29ybmVyJykge1xuICAgICAgb3ZlcmxheS5zZXRTdHlsZSgnb3ZlcmZsb3cteScsICdoaWRkZW4nKTtcbiAgICAgIGNvbnRhaW5lci5zZXRTdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgICB9XG5cbiAgICBvdmVybGF5LmJlZm9yZURlc3Ryb3koKCkgPT4ge1xuICAgICAgb3ZlcmxheS5hZGRDbGFzcygndmV4LWNsb3NpbmcnKTtcbiAgICAgIGNvbnN0IGNvbXBsZXRlciA9IG5ldyBQcm9taXNlQ29tcGxldGVyPHZvaWQ+KCk7XG5cbiAgICAgIGxldCBhbmltYXRpb25FbmQkOiBPYnNlcnZhYmxlPGFueT4gPSBjb250YWluZXIubXlBbmltYXRpb25FbmQkKCk7XG4gICAgICBpZiAoZGlhbG9nUmVmLmNvbnRleHQuY2xhc3NOYW1lICE9PSAnYm90dG9tLXJpZ2h0LWNvcm5lcicpIHtcbiAgICAgICAgYW5pbWF0aW9uRW5kJCA9IGNvbWJpbmVMYXRlc3QuY2FsbChhbmltYXRpb25FbmQkLCBiYWNrZHJvcC5teUFuaW1hdGlvbkVuZCQoKSwgKHMxLCBzMikgPT4gW3MxLHMyXSApO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRpb25FbmQkLnN1YnNjcmliZSggc291cmNlcyA9PiB7XG4gICAgICAgIGlzRG9jICYmIHRoaXMub3ZlcmxheS5ncm91cFN0YWNrTGVuZ3RoKGRpYWxvZ1JlZikgPT09IDEgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCd2ZXgtb3BlbicpO1xuICAgICAgICBjb21wbGV0ZXIucmVzb2x2ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb21wbGV0ZXIucHJvbWlzZTtcbiAgICB9KTtcblxuXG4gICAgb3ZlcmxheS5zZXRDbGlja0JvdW5kYXJ5KGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcblxuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cbn1cbiJdfQ==