UNPKG

ngx-modialog-11

Version:
139 lines 21 kB
import { combineLatest } from 'rxjs'; import { Injectable } from '@angular/core'; import { Overlay, DROP_IN_TYPE, Modal as Modal_, CSSBackdrop, CSSDialogContainer, PromiseCompleter } from 'ngx-modialog-11'; import { DropInPresetBuilder } from './presets/dropin-preset'; import { VexCSSDialogContainer } from './vex-css-dialog-container'; // TODO: use DI factory for this. // TODO: consolidate dup code const isDoc = !(typeof document === 'undefined' || !document); let vexV3 = false; /** * Execute this method to flag that you are working with VEX version 3. */ export function vexV3Mode() { vexV3 = true; } export class Modal extends Modal_ { constructor(overlay) { super(overlay); } alert() { return new DropInPresetBuilder(this, DROP_IN_TYPE.alert, { isBlocking: false }); } prompt() { return new DropInPresetBuilder(this, DROP_IN_TYPE.prompt, { isBlocking: true, keyboard: null }); } confirm() { return new DropInPresetBuilder(this, DROP_IN_TYPE.confirm, { isBlocking: true, keyboard: null }); } create(dialogRef, content) { if (vexV3 === true) { return this.createV3(dialogRef, content); } const backdropRef = this.createBackdrop(dialogRef, CSSBackdrop); const containerRef = this.createContainer(dialogRef, VexCSSDialogContainer, content); let overlay = dialogRef.overlayRef.instance; let backdrop = backdropRef.instance; 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(() => { backdrop.addClass('vex-closing'); container.addClass('vex-closing'); const completer = new PromiseCompleter(); 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(sources => { isDoc && this.overlay.groupStackLength(dialogRef) === 1 && document.body.classList.remove('vex-open'); completer.resolve(); }); return completer.promise; }); container.apply(overlay); return dialogRef; } createV3(dialogRef, content) { const backdropRef = this.createBackdrop(dialogRef, CSSBackdrop); const containerRef = this.createContainer(dialogRef, CSSDialogContainer, content); let overlay = dialogRef.overlayRef.instance; let backdrop = backdropRef.instance; 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(() => { overlay.addClass('vex-closing'); const completer = new PromiseCompleter(); let animationEnd$ = container.myAnimationEnd$(); if (dialogRef.context.className !== 'bottom-right-corner') { animationEnd$ = combineLatest.call(animationEnd$, backdrop.myAnimationEnd$(), (s1, s2) => [s1, s2]); } animationEnd$.subscribe(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wbHVnaW5zL3ZleC9zcmMvbGliL21vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBRUwsT0FBTyxFQUVQLFlBQVksRUFDWixLQUFLLElBQUksTUFBTSxFQUNmLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbkUsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QixNQUFNLEtBQUssR0FBWSxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFdkUsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2xCOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVM7SUFDdkIsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNmLENBQUM7QUFHRCxNQUFNLE9BQU8sS0FBTSxTQUFRLE1BQU07SUFDL0IsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFRLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUN4RCxVQUFV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QWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsQ0FBRSxDQUFDO2FBQ3JHO1lBRUQsYUFBYSxDQUFDLFNBQVMsQ0FBRSxPQUFPLENBQUMsRUFBRTtnQkFDakMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBR0gsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7O1lBdkpGLFVBQVU7Ozs7WUF4QlQsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29udGFpbmVyQ29udGVudCxcclxuICBPdmVybGF5LFxyXG4gIERpYWxvZ1JlZixcclxuICBEUk9QX0lOX1RZUEUsXHJcbiAgTW9kYWwgYXMgTW9kYWxfLFxyXG4gIENTU0JhY2tkcm9wLFxyXG4gIENTU0RpYWxvZ0NvbnRhaW5lcixcclxuICBQcm9taXNlQ29tcGxldGVyXHJcbn0gZnJvbSAnbmd4LW1vZGlhbG9nLTExJztcclxuXHJcbmltcG9ydCB7IERyb3BJblByZXNldEJ1aWxkZXIgfSBmcm9tICcuL3ByZXNldHMvZHJvcGluLXByZXNldCc7XHJcbmltcG9ydCB7IFZleENTU0RpYWxvZ0NvbnRhaW5lciB9IGZyb20gJy4vdmV4LWNzcy1kaWFsb2ctY29udGFpbmVyJztcclxuXHJcbi8vIFRPRE86IHVzZSBESSBmYWN0b3J5IGZvciB0aGlzLlxyXG4vLyBUT0RPOiBjb25zb2xpZGF0ZSBkdXAgY29kZVxyXG5jb25zdCBpc0RvYzogYm9vbGVhbiA9ICEodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhZG9jdW1lbnQpO1xyXG5cclxubGV0IHZleFYzID0gZmFsc2U7XHJcbi8qKlxyXG4gKiBFeGVjdXRlIHRoaXMgbWV0aG9kIHRvIGZsYWcgdGhhdCB5b3UgYXJlIHdvcmtpbmcgd2l0aCBWRVggdmVyc2lvbiAzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHZleFYzTW9kZSgpOiB2b2lkIHtcclxuICB2ZXhWMyA9IHRydWU7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1vZGFsIGV4dGVuZHMgTW9kYWxfIHtcclxuICBjb25zdHJ1Y3RvcihvdmVybGF5OiBPdmVybGF5KSB7XHJcbiAgICBzdXBlcihvdmVybGF5KTtcclxuICB9XHJcblxyXG4gIGFsZXJ0KCk6IERyb3BJblByZXNldEJ1aWxkZXIge1xyXG4gICAgcmV0dXJuIG5ldyBEcm9wSW5QcmVzZXRCdWlsZGVyKHRoaXMsIERST1BfSU5fVFlQRS5hbGVydCwge2lzQmxvY2tpbmc6IGZhbHNlfSBhcyBhbnkpO1xyXG4gIH1cclxuXHJcbiAgcHJvbXB0KCk6IERyb3BJblByZXNldEJ1aWxkZXIge1xyXG4gICAgcmV0dXJuIG5ldyBEcm9wSW5QcmVzZXRCdWlsZGVyKHRoaXMsIERST1BfSU5fVFlQRS5wcm9tcHQsIHtcclxuICAgICAgaXNCbG9ja2luZzogdHJ1ZSxcclxuICAgICAga2V5Ym9hcmQ6IG51bGxcclxuICAgIH0gIGFzIGFueSk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtKCk6IERyb3BJblByZXNldEJ1aWxkZXIge1xyXG4gICAgcmV0dXJuIG5ldyBEcm9wSW5QcmVzZXRCdWlsZGVyKHRoaXMsIERST1BfSU5fVFlQRS5jb25maXJtLCB7XHJcbiAgICAgIGlzQmxvY2tpbmc6IHRydWUsXHJcbiAgICAgIGtleWJvYXJkOiBudWxsXHJcbiAgICB9ICBhcyBhbnkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNyZWF0ZShkaWFsb2dSZWY6IERpYWxvZ1JlZjxhbnk+LCBjb250ZW50OiBDb250YWluZXJDb250ZW50KTogRGlhbG9nUmVmPGFueT4ge1xyXG4gICAgaWYgKHZleFYzID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVYzKGRpYWxvZ1JlZiwgY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmFja2Ryb3BSZWYgPSB0aGlzLmNyZWF0ZUJhY2tkcm9wKGRpYWxvZ1JlZiwgQ1NTQmFja2Ryb3ApO1xyXG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdGhpcy5jcmVhdGVDb250YWluZXIoZGlhbG9nUmVmLCBWZXhDU1NEaWFsb2dDb250YWluZXIsIGNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBvdmVybGF5ID0gZGlhbG9nUmVmLm92ZXJsYXlSZWYuaW5zdGFuY2U7XHJcbiAgICBsZXQgYmFja2Ryb3AgPSBiYWNrZHJvcFJlZi5pbnN0YW5jZTtcclxuICAgIGxldCBjb250YWluZXIgPSBjb250YWluZXJSZWYuaW5zdGFuY2U7XHJcblxyXG4gICAgaWYgKGRpYWxvZ1JlZi5pbkVsZW1lbnQpIHtcclxuICAgICAgb3ZlcmxheS5pbnNpZGVFbGVtZW50KCk7XHJcblxyXG4gICAgICBvdmVybGF5LnNldENvbnRhaW5lclN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpXHJcbiAgICAgICAgLnNldENvbnRhaW5lclN0eWxlKCdoZWlnaHQnLCAnMTAwJScpXHJcbiAgICAgICAgLnNldENvbnRhaW5lclN0eWxlKCd3aWR0aCcsICcxMDAlJyk7XHJcblxyXG4gICAgICBiYWNrZHJvcC5zZXRTdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAgIC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgLnNldFN0eWxlKCdoZWlnaHQnLCAnMTAwJScpXHJcbiAgICAgICAgLnNldFN0eWxlKCd3aWR0aCcsICcxMDAlJyk7XHJcblxyXG4gICAgICBjb250YWluZXIuc2V0U3R5bGUoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJylcclxuICAgICAgICAuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKVxyXG4gICAgICAgIC5zZXRTdHlsZSgnaGVpZ2h0JywgJzEwMCUnKVxyXG4gICAgICAgIC5zZXRTdHlsZSgnd2lkdGgnLCAnMTAwJScpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG92ZXJsYXkuZnVsbHNjcmVlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCBib2R5IGNsYXNzIGlmIHRoaXMgaXMgdGhlIG9ubHkgZGlhbG9nIGluIHRoZSBzdGFja1xyXG4gICAgaWYgKGlzRG9jICYmICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndmV4LW9wZW4nKSkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3ZleC1vcGVuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYmFja2Ryb3AuYWRkQ2xhc3MoJ3ZleC1vdmVybGF5Jyk7XHJcbiAgICBjb250YWluZXIuYWRkQ2xhc3MoYHZleCB2ZXgtdGhlbWUtJHtkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWV9YCk7XHJcblxyXG4gICAgY29udGFpbmVyLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcblxyXG4gICAgaWYgKGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcmxheS5iZWZvcmVEZXN0cm95KCgpID0+IHtcclxuICAgICAgYmFja2Ryb3AuYWRkQ2xhc3MoJ3ZleC1jbG9zaW5nJyk7XHJcbiAgICAgIGNvbnRhaW5lci5hZGRDbGFzcygndmV4LWNsb3NpbmcnKTtcclxuICAgICAgY29uc3QgY29tcGxldGVyID0gbmV3IFByb21pc2VDb21wbGV0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAgIGxldCBhbmltYXRpb25FbmQkOiBPYnNlcnZhYmxlPGFueT4gPSBiYWNrZHJvcC5teUFuaW1hdGlvbkVuZCQoKTtcclxuXHJcbiAgICAgIC8vIFRPRE86IHRoZSBjaGlsZCBlbGVtZW50IGluc2lkZSB0aGUgY29udGFpbmVyICh2ZXgtY29udGVudCkgaXMgdGhlIG9uZSB3aXRoIGFuaW1hdGlvblxyXG4gICAgICAvLyBuZWVkIHRvIGFsc28gd2FpdCBmb3IgaXQgdG8gZW5kLCBidXQgdGhpcyByZXF1aXJlcyBhIHJlZmVyZW5jZSB0byB0byBpdC5cclxuICAgICAgLy8gdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgaXRzIHBhcmVudCwgd29uJ3QgZG8uXHJcbiAgICAgIC8vIGFuaW1hdGlvbkVuZCQgPSBjb21iaW5lTGF0ZXN0LmNhbGwoYW5pbWF0aW9uRW5kJCwgY29udGFpbmVyLm15QW5pbWF0aW9uRW5kJCgpLCAoczEsIHMyKSA9PiBbczEsczJdICk7XHJcblxyXG4gICAgICBhbmltYXRpb25FbmQkLnN1YnNjcmliZSggc291cmNlcyA9PiB7XHJcbiAgICAgICAgaXNEb2MgJiYgdGhpcy5vdmVybGF5Lmdyb3VwU3RhY2tMZW5ndGgoZGlhbG9nUmVmKSA9PT0gMSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3ZleC1vcGVuJyk7XHJcbiAgICAgICAgY29tcGxldGVyLnJlc29sdmUoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tcGxldGVyLnByb21pc2U7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb250YWluZXIuYXBwbHkob3ZlcmxheSk7XHJcblxyXG4gICAgcmV0dXJuIGRpYWxvZ1JlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVjMoZGlhbG9nUmVmOiBEaWFsb2dSZWY8YW55PiwgY29udGVudDogQ29udGFpbmVyQ29udGVudCk6IERpYWxvZ1JlZjxhbnk+IHtcclxuXHJcbiAgICBjb25zdCBiYWNrZHJvcFJlZiA9IHRoaXMuY3JlYXRlQmFja2Ryb3AoZGlhbG9nUmVmLCBDU1NCYWNrZHJvcCk7XHJcbiAgICBjb25zdCBjb250YWluZXJSZWYgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcihkaWFsb2dSZWYsIENTU0RpYWxvZ0NvbnRhaW5lciwgY29udGVudCk7XHJcblxyXG4gICAgbGV0IG92ZXJsYXkgPSBkaWFsb2dSZWYub3ZlcmxheVJlZi5pbnN0YW5jZTtcclxuICAgIGxldCBiYWNrZHJvcCA9IGJhY2tkcm9wUmVmLmluc3RhbmNlO1xyXG4gICAgbGV0IGNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcclxuXHJcbiAgICBkaWFsb2dSZWYuaW5FbGVtZW50ID8gb3ZlcmxheS5pbnNpZGVFbGVtZW50KCkgOiBvdmVybGF5LmZ1bGxzY3JlZW4oKTtcclxuXHJcbiAgICAvLyBhZGQgYm9keSBjbGFzcyBpZiB0aGlzIGlzIHRoZSBvbmx5IGRpYWxvZyBpbiB0aGUgc3RhY2tcclxuICAgIGlmIChpc0RvYyAmJiAhZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3ZleC1vcGVuJykpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCd2ZXgtb3BlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIG92ZXJsYXkuYWRkQ2xhc3MoYHZleCB2ZXgtdGhlbWUtJHtkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWV9YCk7XHJcbiAgICBiYWNrZHJvcC5hZGRDbGFzcygndmV4LW92ZXJsYXknKTtcclxuICAgIGNvbnRhaW5lci5hZGRDbGFzcyhkaWFsb2dSZWYuY29udGV4dC5jb250ZW50Q2xhc3NOYW1lKTtcclxuICAgIGNvbnRhaW5lci5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgaWYgKGRpYWxvZ1JlZi5pbkVsZW1lbnQpIHtcclxuICAgICAgb3ZlcmxheS5zZXRTdHlsZSgncGFkZGluZycsICcwJyk7XHJcbiAgICAgIGNvbnRhaW5lci5zZXRTdHlsZSgnbWFyZ2luLXRvcCcsICcyMHB4Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZSA9PT0gJ2JvdHRvbS1yaWdodC1jb3JuZXInKSB7XHJcbiAgICAgIG92ZXJsYXkuc2V0U3R5bGUoJ292ZXJmbG93LXknLCAnaGlkZGVuJyk7XHJcbiAgICAgIGNvbnRhaW5lci5zZXRTdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVybGF5LmJlZm9yZURlc3Ryb3koKCkgPT4ge1xyXG4gICAgICBvdmVybGF5LmFkZENsYXNzKCd2ZXgtY2xvc2luZycpO1xyXG4gICAgICBjb25zdCBjb21wbGV0ZXIgPSBuZXcgUHJvbWlzZUNvbXBsZXRlcjx2b2lkPigpO1xyXG5cclxuICAgICAgbGV0IGFuaW1hdGlvbkVuZCQ6IE9ic2VydmFibGU8YW55PiA9IGNvbnRhaW5lci5teUFuaW1hdGlvbkVuZCQoKTtcclxuICAgICAgaWYgKGRpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZSAhPT0gJ2JvdHRvbS1yaWdodC1jb3JuZXInKSB7XHJcbiAgICAgICAgYW5pbWF0aW9uRW5kJCA9IGNvbWJpbmVMYXRlc3QuY2FsbChhbmltYXRpb25FbmQkLCBiYWNrZHJvcC5teUFuaW1hdGlvbkVuZCQoKSwgKHMxLCBzMikgPT4gW3MxLHMyXSApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhbmltYXRpb25FbmQkLnN1YnNjcmliZSggc291cmNlcyA9PiB7XHJcbiAgICAgICAgaXNEb2MgJiYgdGhpcy5vdmVybGF5Lmdyb3VwU3RhY2tMZW5ndGgoZGlhbG9nUmVmKSA9PT0gMSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3ZleC1vcGVuJyk7XHJcbiAgICAgICAgY29tcGxldGVyLnJlc29sdmUoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tcGxldGVyLnByb21pc2U7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgb3ZlcmxheS5zZXRDbGlja0JvdW5kYXJ5KGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gIH1cclxufVxyXG4iXX0=