ngx-modialog-10
Version:
Modal / Dialog for Angular
204 lines • 21.9 kB
JavaScript
/**
* @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-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 {?} */
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbW9kaWFsb2ctMTAvcGx1Z2lucy92ZXgvIiwic291cmNlcyI6WyJsaWIvbW9kYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUVMLE9BQU8sRUFFUCxZQUFZLEVBQ1osS0FBSyxJQUFJLE1BQU0sRUFDZixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O01BSTdELEtBQUssR0FBWSxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDOztJQUVsRSxLQUFLLEdBQUcsS0FBSzs7Ozs7QUFJakIsTUFBTSxVQUFVLFNBQVM7SUFDdkIsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNmLENBQUM7QUFHRCxNQUFNLE9BQU8sS0FBTSxTQUFRLE1BQU07Ozs7SUFDL0IsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQzs7OztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsbUJBQUEsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLEVBQU8sQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7Ozs7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLG1CQUFBO1lBQ3hELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxJ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LEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUNyRztZQUVELGFBQWEsQ0FBQyxTQUFTOzs7O1lBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2pDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQUMsQ0FBQztZQUVILE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUMzQixDQUFDLEVBQUMsQ0FBQztRQUdILE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7OztZQXZKRixVQUFVOzs7O1lBeEJULE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgQ29udGFpbmVyQ29udGVudCxcbiAgT3ZlcmxheSxcbiAgRGlhbG9nUmVmLFxuICBEUk9QX0lOX1RZUEUsXG4gIE1vZGFsIGFzIE1vZGFsXyxcbiAgQ1NTQmFja2Ryb3AsXG4gIENTU0RpYWxvZ0NvbnRhaW5lcixcbiAgUHJvbWlzZUNvbXBsZXRlclxufSBmcm9tICduZ3gtbW9kaWFsb2ctMTAnO1xuXG5pbXBvcnQgeyBEcm9wSW5QcmVzZXRCdWlsZGVyIH0gZnJvbSAnLi9wcmVzZXRzL2Ryb3Bpbi1wcmVzZXQnO1xuaW1wb3J0IHsgVmV4Q1NTRGlhbG9nQ29udGFpbmVyIH0gZnJvbSAnLi92ZXgtY3NzLWRpYWxvZy1jb250YWluZXInO1xuXG4vLyBUT0RPOiB1c2UgREkgZmFjdG9yeSBmb3IgdGhpcy5cbi8vIFRPRE86IGNvbnNvbGlkYXRlIGR1cCBjb2RlXG5jb25zdCBpc0RvYzogYm9vbGVhbiA9ICEodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhZG9jdW1lbnQpO1xuXG5sZXQgdmV4VjMgPSBmYWxzZTtcbi8qKlxuICogRXhlY3V0ZSB0aGlzIG1ldGhvZCB0byBmbGFnIHRoYXQgeW91IGFyZSB3b3JraW5nIHdpdGggVkVYIHZlcnNpb24gMy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZleFYzTW9kZSgpOiB2b2lkIHtcbiAgdmV4VjMgPSB0cnVlO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kYWwgZXh0ZW5kcyBNb2RhbF8ge1xuICBjb25zdHJ1Y3RvcihvdmVybGF5OiBPdmVybGF5KSB7XG4gICAgc3VwZXIob3ZlcmxheSk7XG4gIH1cblxuICBhbGVydCgpOiBEcm9wSW5QcmVzZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IERyb3BJblByZXNldEJ1aWxkZXIodGhpcywgRFJPUF9JTl9UWVBFLmFsZXJ0LCB7aXNCbG9ja2luZzogZmFsc2V9IGFzIGFueSk7XG4gIH1cblxuICBwcm9tcHQoKTogRHJvcEluUHJlc2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBEcm9wSW5QcmVzZXRCdWlsZGVyKHRoaXMsIERST1BfSU5fVFlQRS5wcm9tcHQsIHtcbiAgICAgIGlzQmxvY2tpbmc6IHRydWUsXG4gICAgICBrZXlib2FyZDogbnVsbFxuICAgIH0gIGFzIGFueSk7XG4gIH1cblxuICBjb25maXJtKCk6IERyb3BJblByZXNldEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRHJvcEluUHJlc2V0QnVpbGRlcih0aGlzLCBEUk9QX0lOX1RZUEUuY29uZmlybSwge1xuICAgICAgaXNCbG9ja2luZzogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBudWxsXG4gICAgfSAgYXMgYW55KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGUoZGlhbG9nUmVmOiBEaWFsb2dSZWY8YW55PiwgY29udGVudDogQ29udGFpbmVyQ29udGVudCk6IERpYWxvZ1JlZjxhbnk+IHtcbiAgICBpZiAodmV4VjMgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVYzKGRpYWxvZ1JlZiwgY29udGVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgYmFja2Ryb3BSZWYgPSB0aGlzLmNyZWF0ZUJhY2tkcm9wKGRpYWxvZ1JlZiwgQ1NTQmFja2Ryb3ApO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IHRoaXMuY3JlYXRlQ29udGFpbmVyKGRpYWxvZ1JlZiwgVmV4Q1NTRGlhbG9nQ29udGFpbmVyLCBjb250ZW50KTtcblxuICAgIGxldCBvdmVybGF5ID0gZGlhbG9nUmVmLm92ZXJsYXlSZWYuaW5zdGFuY2U7XG4gICAgbGV0IGJhY2tkcm9wID0gYmFja2Ryb3BSZWYuaW5zdGFuY2U7XG4gICAgbGV0IGNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcblxuICAgIGlmIChkaWFsb2dSZWYuaW5FbGVtZW50KSB7XG4gICAgICBvdmVybGF5Lmluc2lkZUVsZW1lbnQoKTtcblxuICAgICAgb3ZlcmxheS5zZXRDb250YWluZXJTdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKVxuICAgICAgICAuc2V0Q29udGFpbmVyU3R5bGUoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgICAgLnNldENvbnRhaW5lclN0eWxlKCd3aWR0aCcsICcxMDAlJyk7XG5cbiAgICAgIGJhY2tkcm9wLnNldFN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXG4gICAgICAgIC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpXG4gICAgICAgIC5zZXRTdHlsZSgnaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAuc2V0U3R5bGUoJ3dpZHRoJywgJzEwMCUnKTtcblxuICAgICAgY29udGFpbmVyLnNldFN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpXG4gICAgICAgIC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpXG4gICAgICAgIC5zZXRTdHlsZSgnaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAuc2V0U3R5bGUoJ3dpZHRoJywgJzEwMCUnKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBvdmVybGF5LmZ1bGxzY3JlZW4oKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYm9keSBjbGFzcyBpZiB0aGlzIGlzIHRoZSBvbmx5IGRpYWxvZyBpbiB0aGUgc3RhY2tcbiAgICBpZiAoaXNEb2MgJiYgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd2ZXgtb3BlbicpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3ZleC1vcGVuJyk7XG4gICAgfVxuXG4gICAgYmFja2Ryb3AuYWRkQ2xhc3MoJ3ZleC1vdmVybGF5Jyk7XG4gICAgY29udGFpbmVyLmFkZENsYXNzKGB2ZXggdmV4LXRoZW1lLSR7ZGlhbG9nUmVmLmNvbnRleHQuY2xhc3NOYW1lfWApO1xuXG4gICAgY29udGFpbmVyLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG5cbiAgICBpZiAoY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb3ZlcmxheS5iZWZvcmVEZXN0cm95KCgpID0+IHtcbiAgICAgIGJhY2tkcm9wLmFkZENsYXNzKCd2ZXgtY2xvc2luZycpO1xuICAgICAgY29udGFpbmVyLmFkZENsYXNzKCd2ZXgtY2xvc2luZycpO1xuICAgICAgY29uc3QgY29tcGxldGVyID0gbmV3IFByb21pc2VDb21wbGV0ZXI8dm9pZD4oKTtcblxuICAgICAgbGV0IGFuaW1hdGlvbkVuZCQ6IE9ic2VydmFibGU8YW55PiA9IGJhY2tkcm9wLm15QW5pbWF0aW9uRW5kJCgpO1xuXG4gICAgICAvLyBUT0RPOiB0aGUgY2hpbGQgZWxlbWVudCBpbnNpZGUgdGhlIGNvbnRhaW5lciAodmV4LWNvbnRlbnQpIGlzIHRoZSBvbmUgd2l0aCBhbmltYXRpb25cbiAgICAgIC8vIG5lZWQgdG8gYWxzbyB3YWl0IGZvciBpdCB0byBlbmQsIGJ1dCB0aGlzIHJlcXVpcmVzIGEgcmVmZXJlbmNlIHRvIHRvIGl0LlxuICAgICAgLy8gdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgaXRzIHBhcmVudCwgd29uJ3QgZG8uXG4gICAgICAvLyBhbmltYXRpb25FbmQkID0gY29tYmluZUxhdGVzdC5jYWxsKGFuaW1hdGlvbkVuZCQsIGNvbnRhaW5lci5teUFuaW1hdGlvbkVuZCQoKSwgKHMxLCBzMikgPT4gW3MxLHMyXSApO1xuXG4gICAgICBhbmltYXRpb25FbmQkLnN1YnNjcmliZSggc291cmNlcyA9PiB7XG4gICAgICAgIGlzRG9jICYmIHRoaXMub3ZlcmxheS5ncm91cFN0YWNrTGVuZ3RoKGRpYWxvZ1JlZikgPT09IDEgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCd2ZXgtb3BlbicpO1xuICAgICAgICBjb21wbGV0ZXIucmVzb2x2ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb21wbGV0ZXIucHJvbWlzZTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5hcHBseShvdmVybGF5KTtcblxuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVYzKGRpYWxvZ1JlZjogRGlhbG9nUmVmPGFueT4sIGNvbnRlbnQ6IENvbnRhaW5lckNvbnRlbnQpOiBEaWFsb2dSZWY8YW55PiB7XG5cbiAgICBjb25zdCBiYWNrZHJvcFJlZiA9IHRoaXMuY3JlYXRlQmFja2Ryb3AoZGlhbG9nUmVmLCBDU1NCYWNrZHJvcCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdGhpcy5jcmVhdGVDb250YWluZXIoZGlhbG9nUmVmLCBDU1NEaWFsb2dDb250YWluZXIsIGNvbnRlbnQpO1xuXG4gICAgbGV0IG92ZXJsYXkgPSBkaWFsb2dSZWYub3ZlcmxheVJlZi5pbnN0YW5jZTtcbiAgICBsZXQgYmFja2Ryb3AgPSBiYWNrZHJvcFJlZi5pbnN0YW5jZTtcbiAgICBsZXQgY29udGFpbmVyID0gY29udGFpbmVyUmVmLmluc3RhbmNlO1xuXG4gICAgZGlhbG9nUmVmLmluRWxlbWVudCA/IG92ZXJsYXkuaW5zaWRlRWxlbWVudCgpIDogb3ZlcmxheS5mdWxsc2NyZWVuKCk7XG5cbiAgICAvLyBhZGQgYm9keSBjbGFzcyBpZiB0aGlzIGlzIHRoZSBvbmx5IGRpYWxvZyBpbiB0aGUgc3RhY2tcbiAgICBpZiAoaXNEb2MgJiYgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd2ZXgtb3BlbicpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3ZleC1vcGVuJyk7XG4gICAgfVxuXG4gICAgb3ZlcmxheS5hZGRDbGFzcyhgdmV4IHZleC10aGVtZS0ke2RpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZX1gKTtcbiAgICBiYWNrZHJvcC5hZGRDbGFzcygndmV4LW92ZXJsYXknKTtcbiAgICBjb250YWluZXIuYWRkQ2xhc3MoZGlhbG9nUmVmLmNvbnRleHQuY29udGVudENsYXNzTmFtZSk7XG4gICAgY29udGFpbmVyLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgaWYgKGRpYWxvZ1JlZi5pbkVsZW1lbnQpIHtcbiAgICAgIG92ZXJsYXkuc2V0U3R5bGUoJ3BhZGRpbmcnLCAnMCcpO1xuICAgICAgY29udGFpbmVyLnNldFN0eWxlKCdtYXJnaW4tdG9wJywgJzIwcHgnKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaWYgKGRpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZSA9PT0gJ2JvdHRvbS1yaWdodC1jb3JuZXInKSB7XG4gICAgICBvdmVybGF5LnNldFN0eWxlKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpO1xuICAgICAgY29udGFpbmVyLnNldFN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICAgIH1cblxuICAgIG92ZXJsYXkuYmVmb3JlRGVzdHJveSgoKSA9PiB7XG4gICAgICBvdmVybGF5LmFkZENsYXNzKCd2ZXgtY2xvc2luZycpO1xuICAgICAgY29uc3QgY29tcGxldGVyID0gbmV3IFByb21pc2VDb21wbGV0ZXI8dm9pZD4oKTtcblxuICAgICAgbGV0IGFuaW1hdGlvbkVuZCQ6IE9ic2VydmFibGU8YW55PiA9IGNvbnRhaW5lci5teUFuaW1hdGlvbkVuZCQoKTtcbiAgICAgIGlmIChkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWUgIT09ICdib3R0b20tcmlnaHQtY29ybmVyJykge1xuICAgICAgICBhbmltYXRpb25FbmQkID0gY29tYmluZUxhdGVzdC5jYWxsKGFuaW1hdGlvbkVuZCQsIGJhY2tkcm9wLm15QW5pbWF0aW9uRW5kJCgpLCAoczEsIHMyKSA9PiBbczEsczJdICk7XG4gICAgICB9XG5cbiAgICAgIGFuaW1hdGlvbkVuZCQuc3Vic2NyaWJlKCBzb3VyY2VzID0+IHtcbiAgICAgICAgaXNEb2MgJiYgdGhpcy5vdmVybGF5Lmdyb3VwU3RhY2tMZW5ndGgoZGlhbG9nUmVmKSA9PT0gMSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3ZleC1vcGVuJyk7XG4gICAgICAgIGNvbXBsZXRlci5yZXNvbHZlKCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbXBsZXRlci5wcm9taXNlO1xuICAgIH0pO1xuXG5cbiAgICBvdmVybGF5LnNldENsaWNrQm91bmRhcnkoY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgfVxufVxuIl19