ngx-modialog-11
Version:
Modal / Dialog for Angular
139 lines • 21 kB
JavaScript
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=