UNPKG

ngx-modialog-10

Version:
204 lines 21.9 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-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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbW9kaWFsb2ctMTAvcGx1Z2lucy92ZXgvIiwic291cmNlcyI6WyJsaWIvbW9kYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUVMLE9BQU8sRUFFUCxZQUFZLEVBQ1osS0FBSyxJQUFJLE1BQU0sRUFDZixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O01BSTdELEtBQUssR0FBWSxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDOztJQUVsRSxLQUFLLEdBQUcsS0FBSzs7Ozs7QUFJakIsTUFBTSxVQUFVLFNBQVM7SUFDdkIsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNmLENBQUM7QUFHRCxNQUFNLE9BQU8sS0FBTSxTQUFRLE1BQU07Ozs7SUFDL0IsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQzs7OztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsbUJBQUEsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLEVBQU8sQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7Ozs7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLG1CQUFBO1lBQ3hELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsRUFBUSxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxtQkFBQTtZQUN6RCxVQUFVLEVBQUUsSUFBSTtZQUNoQixRQUFRLEVBQUUsSUFBSTtTQUNmLEVBQVEsQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7Ozs7OztJQUVTLE1BQU0sQ0FBQyxTQUF5QixFQUFFLE9BQXlCO1FBQ25FLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzFDOztjQUVLLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUM7O2NBQ3pELFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUM7O1lBRWhGLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVE7O1lBQ3ZDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUTs7WUFDL0IsU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRO1FBRXJDLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUN2QixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFeEIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7aUJBQzlDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7aUJBQ25DLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV0QyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7aUJBQ3RDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO2lCQUM1QixRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztpQkFDMUIsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUU3QixTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7aUJBQ3ZDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO2lCQUM1QixRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztpQkFDMUIsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUU5QjthQUFNO1lBQ0wsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ3RCO1FBRUQseURBQXlEO1FBQ3pELElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFELFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6QztRQUVELFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDdkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDN0M7UUFFRCxPQUFPLENBQUMsYUFBYTs7O1FBQUMsR0FBRyxFQUFFO1lBQ3pCLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7a0JBQzVCLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixFQUFROztnQkFFMUMsYUFBYSxHQUFvQixRQUFRLENBQUMsZUFBZSxFQUFFO1lBRS9ELHVGQUF1RjtZQUN2RiwyRUFBMkU7WUFDM0UsZ0RBQWdEO1lBQ2hELHdHQUF3RztZQUV4RyxhQUFhLENBQUMsU0FBUzs7OztZQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNqQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUFDLENBQUM7WUFFSCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsQ0FBQyxFQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Ozs7Ozs7SUFFTyxRQUFRLENBQUMsU0FBeUIsRUFBRSxPQUF5Qjs7Y0FFN0QsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQzs7Y0FDekQsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQzs7WUFFN0UsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUTs7WUFDdkMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFROztZQUMvQixTQUFTLEdBQUcsWUFBWSxDQUFDLFFBQVE7UUFFckMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFckUseURBQXlEO1FBQ3pELElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFELFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6QztRQUVELE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRSxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqQyxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMxQztRQUVELElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDdkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDN0M7UUFFRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLHFCQUFxQixFQUFFO1lBQ3pELE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxDQUFDLGFBQWE7OztRQUFDLEdBQUcsRUFBRTtZQUN6QixPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDOztrQkFDMUIsU0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQVE7O2dCQUUxQyxhQUFhLEdBQW9CLFNBQVMsQ0FBQyxlQUFlLEVBQUU7WUFDaEUsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxxQkFBcUIsRUFBRTtnQkFDekQsYUFBYSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUU7Ozs7O2dCQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUNyRztZQUVELGFBQWEsQ0FBQyxTQUFTOzs7O1lBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2pDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQUMsQ0FBQztZQUVILE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUMzQixDQUFDLEVBQUMsQ0FBQztRQUdILE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7OztZQXZKRixVQUFVOzs7O1lBeEJULE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgQ29udGFpbmVyQ29udGVudCxcbiAgT3ZlcmxheSxcbiAgRGlhbG9nUmVmLFxuICBEUk9QX0lOX1RZUEUsXG4gIE1vZGFsIGFzIE1vZGFsXyxcbiAgQ1NTQmFja2Ryb3AsXG4gIENTU0RpYWxvZ0NvbnRhaW5lcixcbiAgUHJvbWlzZUNvbXBsZXRlclxufSBmcm9tICduZ3gtbW9kaWFsb2ctMTAnO1xuXG5pbXBvcnQgeyBEcm9wSW5QcmVzZXRCdWlsZGVyIH0gZnJvbSAnLi9wcmVzZXRzL2Ryb3Bpbi1wcmVzZXQnO1xuaW1wb3J0IHsgVmV4Q1NTRGlhbG9nQ29udGFpbmVyIH0gZnJvbSAnLi92ZXgtY3NzLWRpYWxvZy1jb250YWluZXInO1xuXG4vLyBUT0RPOiB1c2UgREkgZmFjdG9yeSBmb3IgdGhpcy5cbi8vIFRPRE86IGNvbnNvbGlkYXRlIGR1cCBjb2RlXG5jb25zdCBpc0RvYzogYm9vbGVhbiA9ICEodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhZG9jdW1lbnQpO1xuXG5sZXQgdmV4VjMgPSBmYWxzZTtcbi8qKlxuICogRXhlY3V0ZSB0aGlzIG1ldGhvZCB0byBmbGFnIHRoYXQgeW91IGFyZSB3b3JraW5nIHdpdGggVkVYIHZlcnNpb24gMy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZleFYzTW9kZSgpOiB2b2lkIHtcbiAgdmV4VjMgPSB0cnVlO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kYWwgZXh0ZW5kcyBNb2RhbF8ge1xuICBjb25zdHJ1Y3RvcihvdmVybGF5OiBPdmVybGF5KSB7XG4gICAgc3VwZXIob3ZlcmxheSk7XG4gIH1cblxuICBhbGVydCgpOiBEcm9wSW5QcmVzZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IERyb3BJblByZXNldEJ1aWxkZXIodGhpcywgRFJPUF9JTl9UWVBFLmFsZXJ0LCB7aXNCbG9ja2luZzogZmFsc2V9IGFzIGFueSk7XG4gIH1cblxuICBwcm9tcHQoKTogRHJvcEluUHJlc2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBEcm9wSW5QcmVzZXRCdWlsZGVyKHRoaXMsIERST1BfSU5fVFlQRS5wcm9tcHQsIHtcbiAgICAgIGlzQmxvY2tpbmc6IHRydWUsXG4gICAgICBrZXlib2FyZDogbnVsbFxuICAgIH0gIGFzIGFueSk7XG4gIH1cblxuICBjb25maXJtKCk6IERyb3BJblByZXNldEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRHJvcEluUHJlc2V0QnVpbGRlcih0aGlzLCBEUk9QX0lOX1RZUEUuY29uZmlybSwge1xuICAgICAgaXNCbG9ja2luZzogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBudWxsXG4gICAgfSAgYXMgYW55KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGUoZGlhbG9nUmVmOiBEaWFsb2dSZWY8YW55PiwgY29udGVudDogQ29udGFpbmVyQ29udGVudCk6IERpYWxvZ1JlZjxhbnk+IHtcbiAgICBpZiAodmV4VjMgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVYzKGRpYWxvZ1JlZiwgY29udGVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgYmFja2Ryb3BSZWYgPSB0aGlzLmNyZWF0ZUJhY2tkcm9wKGRpYWxvZ1JlZiwgQ1NTQmFja2Ryb3ApO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IHRoaXMuY3JlYXRlQ29udGFpbmVyKGRpYWxvZ1JlZiwgVmV4Q1NTRGlhbG9nQ29udGFpbmVyLCBjb250ZW50KTtcblxuICAgIGxldCBvdmVybGF5ID0gZGlhbG9nUmVmLm92ZXJsYXlSZWYuaW5zdGFuY2U7XG4gICAgbGV0IGJhY2tkcm9wID0gYmFja2Ryb3BSZWYuaW5zdGFuY2U7XG4gICAgbGV0IGNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcblxuICAgIGlmIChkaWFsb2dSZWYuaW5FbGVtZW50KSB7XG4gICAgICBvdmVybGF5Lmluc2lkZUVsZW1lbnQoKTtcblxuICAgICAgb3ZlcmxheS5zZXRDb250YWluZXJTdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKVxuICAgICAgICAuc2V0Q29udGFpbmVyU3R5bGUoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgICAgLnNldENvbnRhaW5lclN0eWxlKCd3aWR0aCcsICcxMDAlJyk7XG5cbiAgICAgIGJhY2tkcm9wLnNldFN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXG4gICAgICAgIC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpXG4gICAgICAgIC5zZXRTdHlsZSgnaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAuc2V0U3R5bGUoJ3dpZHRoJywgJzEwMCUnKTtcblxuICAgICAgY29udGFpbmVyLnNldFN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpXG4gICAgICAgIC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpXG4gICAgICAgIC5zZXRTdHlsZSgnaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAuc2V0U3R5bGUoJ3dpZHRoJywgJzEwMCUnKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBvdmVybGF5LmZ1bGxzY3JlZW4oKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYm9keSBjbGFzcyBpZiB0aGlzIGlzIHRoZSBvbmx5IGRpYWxvZyBpbiB0aGUgc3RhY2tcbiAgICBpZiAoaXNEb2MgJiYgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd2ZXgtb3BlbicpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3ZleC1vcGVuJyk7XG4gICAgfVxuXG4gICAgYmFja2Ryb3AuYWRkQ2xhc3MoJ3ZleC1vdmVybGF5Jyk7XG4gICAgY29udGFpbmVyLmFkZENsYXNzKGB2ZXggdmV4LXRoZW1lLSR7ZGlhbG9nUmVmLmNvbnRleHQuY2xhc3NOYW1lfWApO1xuXG4gICAgY29udGFpbmVyLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG5cbiAgICBpZiAoY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb3ZlcmxheS5iZWZvcmVEZXN0cm95KCgpID0+IHtcbiAgICAgIGJhY2tkcm9wLmFkZENsYXNzKCd2ZXgtY2xvc2luZycpO1xuICAgICAgY29udGFpbmVyLmFkZENsYXNzKCd2ZXgtY2xvc2luZycpO1xuICAgICAgY29uc3QgY29tcGxldGVyID0gbmV3IFByb21pc2VDb21wbGV0ZXI8dm9pZD4oKTtcblxuICAgICAgbGV0IGFuaW1hdGlvbkVuZCQ6IE9ic2VydmFibGU8YW55PiA9IGJhY2tkcm9wLm15QW5pbWF0aW9uRW5kJCgpO1xuXG4gICAgICAvLyBUT0RPOiB0aGUgY2hpbGQgZWxlbWVudCBpbnNpZGUgdGhlIGNvbnRhaW5lciAodmV4LWNvbnRlbnQpIGlzIHRoZSBvbmUgd2l0aCBhbmltYXRpb25cbiAgICAgIC8vIG5lZWQgdG8gYWxzbyB3YWl0IGZvciBpdCB0byBlbmQsIGJ1dCB0aGlzIHJlcXVpcmVzIGEgcmVmZXJlbmNlIHRvIHRvIGl0LlxuICAgICAgLy8gdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgaXRzIHBhcmVudCwgd29uJ3QgZG8uXG4gICAgICAvLyBhbmltYXRpb25FbmQkID0gY29tYmluZUxhdGVzdC5jYWxsKGFuaW1hdGlvbkVuZCQsIGNvbnRhaW5lci5teUFuaW1hdGlvbkVuZCQoKSwgKHMxLCBzMikgPT4gW3MxLHMyXSApO1xuXG4gICAgICBhbmltYXRpb25FbmQkLnN1YnNjcmliZSggc291cmNlcyA9PiB7XG4gICAgICAgIGlzRG9jICYmIHRoaXMub3ZlcmxheS5ncm91cFN0YWNrTGVuZ3RoKGRpYWxvZ1JlZikgPT09IDEgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCd2ZXgtb3BlbicpO1xuICAgICAgICBjb21wbGV0ZXIucmVzb2x2ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb21wbGV0ZXIucHJvbWlzZTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5hcHBseShvdmVybGF5KTtcblxuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVYzKGRpYWxvZ1JlZjogRGlhbG9nUmVmPGFueT4sIGNvbnRlbnQ6IENvbnRhaW5lckNvbnRlbnQpOiBEaWFsb2dSZWY8YW55PiB7XG5cbiAgICBjb25zdCBiYWNrZHJvcFJlZiA9IHRoaXMuY3JlYXRlQmFja2Ryb3AoZGlhbG9nUmVmLCBDU1NCYWNrZHJvcCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdGhpcy5jcmVhdGVDb250YWluZXIoZGlhbG9nUmVmLCBDU1NEaWFsb2dDb250YWluZXIsIGNvbnRlbnQpO1xuXG4gICAgbGV0IG92ZXJsYXkgPSBkaWFsb2dSZWYub3ZlcmxheVJlZi5pbnN0YW5jZTtcbiAgICBsZXQgYmFja2Ryb3AgPSBiYWNrZHJvcFJlZi5pbnN0YW5jZTtcbiAgICBsZXQgY29udGFpbmVyID0gY29udGFpbmVyUmVmLmluc3RhbmNlO1xuXG4gICAgZGlhbG9nUmVmLmluRWxlbWVudCA/IG92ZXJsYXkuaW5zaWRlRWxlbWVudCgpIDogb3ZlcmxheS5mdWxsc2NyZWVuKCk7XG5cbiAgICAvLyBhZGQgYm9keSBjbGFzcyBpZiB0aGlzIGlzIHRoZSBvbmx5IGRpYWxvZyBpbiB0aGUgc3RhY2tcbiAgICBpZiAoaXNEb2MgJiYgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd2ZXgtb3BlbicpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3ZleC1vcGVuJyk7XG4gICAgfVxuXG4gICAgb3ZlcmxheS5hZGRDbGFzcyhgdmV4IHZleC10aGVtZS0ke2RpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZX1gKTtcbiAgICBiYWNrZHJvcC5hZGRDbGFzcygndmV4LW92ZXJsYXknKTtcbiAgICBjb250YWluZXIuYWRkQ2xhc3MoZGlhbG9nUmVmLmNvbnRleHQuY29udGVudENsYXNzTmFtZSk7XG4gICAgY29udGFpbmVyLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgaWYgKGRpYWxvZ1JlZi5pbkVsZW1lbnQpIHtcbiAgICAgIG92ZXJsYXkuc2V0U3R5bGUoJ3BhZGRpbmcnLCAnMCcpO1xuICAgICAgY29udGFpbmVyLnNldFN0eWxlKCdtYXJnaW4tdG9wJywgJzIwcHgnKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaWYgKGRpYWxvZ1JlZi5jb250ZXh0LmNsYXNzTmFtZSA9PT0gJ2JvdHRvbS1yaWdodC1jb3JuZXInKSB7XG4gICAgICBvdmVybGF5LnNldFN0eWxlKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpO1xuICAgICAgY29udGFpbmVyLnNldFN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICAgIH1cblxuICAgIG92ZXJsYXkuYmVmb3JlRGVzdHJveSgoKSA9PiB7XG4gICAgICBvdmVybGF5LmFkZENsYXNzKCd2ZXgtY2xvc2luZycpO1xuICAgICAgY29uc3QgY29tcGxldGVyID0gbmV3IFByb21pc2VDb21wbGV0ZXI8dm9pZD4oKTtcblxuICAgICAgbGV0IGFuaW1hdGlvbkVuZCQ6IE9ic2VydmFibGU8YW55PiA9IGNvbnRhaW5lci5teUFuaW1hdGlvbkVuZCQoKTtcbiAgICAgIGlmIChkaWFsb2dSZWYuY29udGV4dC5jbGFzc05hbWUgIT09ICdib3R0b20tcmlnaHQtY29ybmVyJykge1xuICAgICAgICBhbmltYXRpb25FbmQkID0gY29tYmluZUxhdGVzdC5jYWxsKGFuaW1hdGlvbkVuZCQsIGJhY2tkcm9wLm15QW5pbWF0aW9uRW5kJCgpLCAoczEsIHMyKSA9PiBbczEsczJdICk7XG4gICAgICB9XG5cbiAgICAgIGFuaW1hdGlvbkVuZCQuc3Vic2NyaWJlKCBzb3VyY2VzID0+IHtcbiAgICAgICAgaXNEb2MgJiYgdGhpcy5vdmVybGF5Lmdyb3VwU3RhY2tMZW5ndGgoZGlhbG9nUmVmKSA9PT0gMSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3ZleC1vcGVuJyk7XG4gICAgICAgIGNvbXBsZXRlci5yZXNvbHZlKCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbXBsZXRlci5wcm9taXNlO1xuICAgIH0pO1xuXG5cbiAgICBvdmVybGF5LnNldENsaWNrQm91bmRhcnkoY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgfVxufVxuIl19