lamb-web-lib
Version:
LambWebLib. Es un proyecto angular de tipo Librería. que contiene una Suit de componentes reutilizables para el proyecto [Lamb Financial](https://lamb.upeu.edu.pe).
214 lines • 21 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Injectable, ApplicationRef, Injector, Inject, ComponentFactoryResolver, TemplateRef, ReflectiveInjector, } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { LambActiveModal, LambModalRef } from './modal-ref';
import { isDefined, isString } from './util/util';
import { LambModalBackdropComponent } from './modal-backdrop.component';
import { LambModalWindowComponent } from './modal-window.component';
import { ContentRef } from './util/popup';
var LambModalStackService = /** @class */ (function () {
function LambModalStackService(applicationRef, injector, componentFactoryResolver, document) {
this.applicationRef = applicationRef;
this.injector = injector;
this.componentFactoryResolver = componentFactoryResolver;
this._windowAttributes = ['backdrop', 'keyboard', 'centered', 'size', 'windowClass'];
this._document = document;
}
/**
* @param {?} moduleCFR
* @param {?} contentInjector
* @param {?} content
* @param {?} options
* @return {?}
*/
LambModalStackService.prototype.open = /**
* @param {?} moduleCFR
* @param {?} contentInjector
* @param {?} content
* @param {?} options
* @return {?}
*/
function (moduleCFR, contentInjector, content, options) {
/** @type {?} */
var containerEl = isDefined(options.container) ?
this._document.querySelector(options.container) : this._document.body;
if (!containerEl) {
throw new Error("El contenedor modal especificado \"" + (options.container || 'body') + "\" no fue encontrado en el DOM");
}
/** @type {?} */
var activeModal = new LambActiveModal();
/** @type {?} */
var contentRef = this.getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal);
/** @type {?} */
var backdropCmptRef = options.backdrop !== false ? this.attachBackdrop(containerEl) : null;
/** @type {?} */
var windowCmptRef = this.attachWindowComponent(containerEl, contentRef);
/** @type {?} */
var lambModalRef = new LambModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);
activeModal.close = function (result) { lambModalRef.close(result); };
activeModal.dismiss = function (reason) { lambModalRef.dismiss(reason); };
this.applyWindowOptions(windowCmptRef.instance, options);
return lambModalRef;
};
/**
* @param {?} containerEl
* @return {?}
*/
LambModalStackService.prototype.attachBackdrop = /**
* @param {?} containerEl
* @return {?}
*/
function (containerEl) {
/** @type {?} */
var backdropFactory = this.componentFactoryResolver.resolveComponentFactory(LambModalBackdropComponent);
/** @type {?} */
var backdropCmptRef = backdropFactory.create(this.injector);
this.applicationRef.attachView(backdropCmptRef.hostView);
containerEl.appendChild(backdropCmptRef.location.nativeElement);
return backdropCmptRef;
};
/**
* @param {?} containerEl
* @param {?} contentRef
* @return {?}
*/
LambModalStackService.prototype.attachWindowComponent = /**
* @param {?} containerEl
* @param {?} contentRef
* @return {?}
*/
function (containerEl, contentRef) {
/** @type {?} */
var windowFactory = this.componentFactoryResolver.resolveComponentFactory(LambModalWindowComponent);
/** @type {?} */
var windowCmptRef = windowFactory.create(this.injector, contentRef.nodes);
this.applicationRef.attachView(windowCmptRef.hostView);
containerEl.appendChild(windowCmptRef.location.nativeElement);
return windowCmptRef;
};
/**
* @param {?} windowInstance
* @param {?} options
* @return {?}
*/
LambModalStackService.prototype.applyWindowOptions = /**
* @param {?} windowInstance
* @param {?} options
* @return {?}
*/
function (windowInstance, options) {
this._windowAttributes.forEach(function (optionName) {
if (isDefined(options[optionName])) {
windowInstance[optionName] = options[optionName];
}
});
};
/**
* @param {?} moduleCFR
* @param {?} contentInjector
* @param {?} content
* @param {?} context
* @return {?}
*/
LambModalStackService.prototype.getContentRef = /**
* @param {?} moduleCFR
* @param {?} contentInjector
* @param {?} content
* @param {?} context
* @return {?}
*/
function (moduleCFR, contentInjector, content, context) {
if (!content) {
return new ContentRef([]);
}
else if (content instanceof TemplateRef) {
return this.createFromTemplateRef(content, context);
}
else if (isString(content)) {
return this.createFromString(content);
}
else {
return this.createFromComponent(moduleCFR, contentInjector, content, context);
}
};
/**
* @param {?} content
* @param {?} context
* @return {?}
*/
LambModalStackService.prototype.createFromTemplateRef = /**
* @param {?} content
* @param {?} context
* @return {?}
*/
function (content, context) {
/** @type {?} */
var viewRef = content.createEmbeddedView(context);
this.applicationRef.attachView(viewRef);
return new ContentRef([viewRef.rootNodes], viewRef);
};
/**
* @param {?} content
* @return {?}
*/
LambModalStackService.prototype.createFromString = /**
* @param {?} content
* @return {?}
*/
function (content) {
/** @type {?} */
var component = this._document.createTextNode("" + content);
return new ContentRef([[component]]);
};
/**
* @param {?} moduleCFR
* @param {?} contentInjector
* @param {?} content
* @param {?} context
* @return {?}
*/
LambModalStackService.prototype.createFromComponent = /**
* @param {?} moduleCFR
* @param {?} contentInjector
* @param {?} content
* @param {?} context
* @return {?}
*/
function (moduleCFR, contentInjector, content, context) {
/** @type {?} */
var contentComponentFactory = moduleCFR.resolveComponentFactory(content);
/** @type {?} */
var modalContentInjector = ReflectiveInjector.resolveAndCreate([{ provide: LambActiveModal, useValue: context }], contentInjector);
/** @type {?} */
var componentRef = contentComponentFactory.create(modalContentInjector);
this.applicationRef.attachView(componentRef.hostView);
return new ContentRef([[componentRef.location.nativeElement]], componentRef.hostView, componentRef);
};
LambModalStackService.decorators = [
{ type: Injectable },
];
LambModalStackService.ctorParameters = function () { return [
{ type: ApplicationRef },
{ type: Injector },
{ type: ComponentFactoryResolver },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
]; };
return LambModalStackService;
}());
export { LambModalStackService };
if (false) {
/** @type {?} */
LambModalStackService.prototype._document;
/** @type {?} */
LambModalStackService.prototype._windowAttributes;
/** @type {?} */
LambModalStackService.prototype.applicationRef;
/** @type {?} */
LambModalStackService.prototype.injector;
/** @type {?} */
LambModalStackService.prototype.componentFactoryResolver;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2xhbWItd2ViLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL21vZGFsL21vZGFsLXN0YWNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFDcEMsTUFBTSxFQUFFLHdCQUF3QixFQUNkLFdBQVcsRUFBRSxrQkFBa0IsR0FDbEQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUM7SUFLRSwrQkFDVSxjQUE4QixFQUM5QixRQUFrQixFQUNsQix3QkFBa0QsRUFDeEMsUUFBUTtRQUhsQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBTHBELHNCQUFpQixHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBUXRGLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7Ozs7Ozs7O0lBRUQsb0NBQUk7Ozs7Ozs7SUFBSixVQUFLLFNBQW1DLEVBQUUsZUFBeUIsRUFBRSxPQUFZLEVBQUUsT0FBTzs7WUFDbEYsV0FBVyxH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QUNoQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBRyxPQUFTLENBQUM7UUFDN0QsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7Ozs7Ozs7SUFFTyxtREFBbUI7Ozs7Ozs7SUFBM0IsVUFDRSxTQUFtQyxFQUFFLGVBQXlCLEVBQUUsT0FBWSxFQUM1RSxPQUF3Qjs7WUFDbEIsdUJBQXVCLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQzs7WUFDcEUsb0JBQW9CLEdBQ3hCLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQzs7WUFDbkcsWUFBWSxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztRQUN6RSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RyxDQUFDOztnQkFqR0YsVUFBVTs7O2dCQVhHLGNBQWM7Z0JBQUUsUUFBUTtnQkFDNUIsd0JBQXdCO2dEQW1CN0IsTUFBTSxTQUFDLFFBQVE7O0lBeUZwQiw0QkFBQztDQUFBLEFBbEdELElBa0dDO1NBakdZLHFCQUFxQjs7O0lBQ2hDLDBDQUF1Qjs7SUFDdkIsa0RBQXdGOztJQUd0RiwrQ0FBc0M7O0lBQ3RDLHlDQUEwQjs7SUFDMUIseURBQTBEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBJbmplY3RhYmxlLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsXHJcbiAgSW5qZWN0LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZixcclxuICBDb21wb25lbnRGYWN0b3J5LCBUZW1wbGF0ZVJlZiwgUmVmbGVjdGl2ZUluamVjdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IExhbWJBY3RpdmVNb2RhbCwgTGFtYk1vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xyXG5pbXBvcnQgeyBpc0RlZmluZWQsIGlzU3RyaW5nIH0gZnJvbSAnLi91dGlsL3V0aWwnO1xyXG5pbXBvcnQgeyBMYW1iTW9kYWxCYWNrZHJvcENvbXBvbmVudCB9IGZyb20gJy4vbW9kYWwtYmFja2Ryb3AuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGFtYk1vZGFsV2luZG93Q29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC13aW5kb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29udGVudFJlZiB9IGZyb20gJy4vdXRpbC9wb3B1cCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBMYW1iTW9kYWxTdGFja1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgX2RvY3VtZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSBfd2luZG93QXR0cmlidXRlcyA9IFsnYmFja2Ryb3AnLCAna2V5Ym9hcmQnLCAnY2VudGVyZWQnLCAnc2l6ZScsICd3aW5kb3dDbGFzcyddO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQsXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9kb2N1bWVudCA9IGRvY3VtZW50O1xyXG4gIH1cclxuXHJcbiAgb3Blbihtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgY29udGVudEluamVjdG9yOiBJbmplY3RvciwgY29udGVudDogYW55LCBvcHRpb25zKTogTGFtYk1vZGFsUmVmIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gaXNEZWZpbmVkKG9wdGlvbnMuY29udGFpbmVyKSA/XHJcbiAgICAgIHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob3B0aW9ucy5jb250YWluZXIpIDogdGhpcy5fZG9jdW1lbnQuYm9keTtcclxuICAgIGlmICghY29udGFpbmVyRWwpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbCBjb250ZW5lZG9yIG1vZGFsIGVzcGVjaWZpY2FkbyBcIiR7b3B0aW9ucy5jb250YWluZXIgfHwgJ2JvZHknfVwiIG5vIGZ1ZSBlbmNvbnRyYWRvIGVuIGVsIERPTWApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFjdGl2ZU1vZGFsID0gbmV3IExhbWJBY3RpdmVNb2RhbCgpO1xyXG4gICAgY29uc3QgY29udGVudFJlZiA9IHRoaXMuZ2V0Q29udGVudFJlZihtb2R1bGVDRlIsIG9wdGlvbnMuaW5qZWN0b3IgfHwgY29udGVudEluamVjdG9yLCBjb250ZW50LCBhY3RpdmVNb2RhbCk7XHJcblxyXG4gICAgY29uc3QgYmFja2Ryb3BDbXB0UmVmOiBDb21wb25lbnRSZWY8TGFtYk1vZGFsQmFja2Ryb3BDb21wb25lbnQ+ID1cclxuICAgICAgb3B0aW9ucy5iYWNrZHJvcCAhPT0gZmFsc2UgPyB0aGlzLmF0dGFjaEJhY2tkcm9wKGNvbnRhaW5lckVsKSA6IG51bGw7XHJcbiAgICBjb25zdCB3aW5kb3dDbXB0UmVmOiBDb21wb25lbnRSZWY8TGFtYk1vZGFsV2luZG93Q29tcG9uZW50PlxyXG4gICAgICA9IHRoaXMuYXR0YWNoV2luZG93Q29tcG9uZW50KGNvbnRhaW5lckVsLCBjb250ZW50UmVmKTtcclxuICAgIGNvbnN0IGxhbWJNb2RhbFJlZjogTGFtYk1vZGFsUmVmID1cclxuICAgICAgbmV3IExhbWJNb2RhbFJlZih3aW5kb3dDbXB0UmVmLCBjb250ZW50UmVmLCBiYWNrZHJvcENtcHRSZWYsIG9wdGlvbnMuYmVmb3JlRGlzbWlzcyk7XHJcblxyXG4gICAgYWN0aXZlTW9kYWwuY2xvc2UgPSAocmVzdWx0OiBhbnkpID0+IHsgbGFtYk1vZGFsUmVmLmNsb3NlKHJlc3VsdCk7IH07XHJcbiAgICBhY3RpdmVNb2RhbC5kaXNtaXNzID0gKHJlYXNvbjogYW55KSA9PiB7IGxhbWJNb2RhbFJlZi5kaXNtaXNzKHJlYXNvbik7IH07XHJcblxyXG4gICAgdGhpcy5hcHBseVdpbmRvd09wdGlvbnMod2luZG93Q21wdFJlZi5pbnN0YW5jZSwgb3B0aW9ucyk7XHJcbiAgICByZXR1cm4gbGFtYk1vZGFsUmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdHRhY2hCYWNrZHJvcChjb250YWluZXJFbDogYW55KTogQ29tcG9uZW50UmVmPExhbWJNb2RhbEJhY2tkcm9wQ29tcG9uZW50PiB7XHJcbiAgICBjb25zdCBiYWNrZHJvcEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8TGFtYk1vZGFsQmFja2Ryb3BDb21wb25lbnQ+ID1cclxuICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGFtYk1vZGFsQmFja2Ryb3BDb21wb25lbnQpO1xyXG4gICAgY29uc3QgYmFja2Ryb3BDbXB0UmVmID0gYmFja2Ryb3BGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcclxuICAgIHRoaXMuYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyhiYWNrZHJvcENtcHRSZWYuaG9zdFZpZXcpO1xyXG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQoYmFja2Ryb3BDbXB0UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgcmV0dXJuIGJhY2tkcm9wQ21wdFJlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXR0YWNoV2luZG93Q29tcG9uZW50KGNvbnRhaW5lckVsOiBhbnksIGNvbnRlbnRSZWY6IGFueSk6IENvbXBvbmVudFJlZjxMYW1iTW9kYWxXaW5kb3dDb21wb25lbnQ+IHtcclxuICAgIGNvbnN0IHdpbmRvd0ZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMYW1iTW9kYWxXaW5kb3dDb21wb25lbnQpO1xyXG4gICAgY29uc3Qgd2luZG93Q21wdFJlZiA9IHdpbmRvd0ZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IsIGNvbnRlbnRSZWYubm9kZXMpO1xyXG4gICAgdGhpcy5hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHdpbmRvd0NtcHRSZWYuaG9zdFZpZXcpO1xyXG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQod2luZG93Q21wdFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuICAgIHJldHVybiB3aW5kb3dDbXB0UmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseVdpbmRvd09wdGlvbnMod2luZG93SW5zdGFuY2U6IExhbWJNb2RhbFdpbmRvd0NvbXBvbmVudCwgb3B0aW9uczogT2JqZWN0KTogdm9pZCB7XHJcbiAgICB0aGlzLl93aW5kb3dBdHRyaWJ1dGVzLmZvckVhY2goKG9wdGlvbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoaXNEZWZpbmVkKG9wdGlvbnNbb3B0aW9uTmFtZV0pKSB7XHJcbiAgICAgICAgd2luZG93SW5zdGFuY2Vbb3B0aW9uTmFtZV0gPSBvcHRpb25zW29wdGlvbk5hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGVudFJlZihcclxuICAgIG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBjb250ZW50SW5qZWN0b3I6IEluamVjdG9yLCBjb250ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBMYW1iQWN0aXZlTW9kYWwpOiBDb250ZW50UmVmIHtcclxuICAgIGlmICghY29udGVudCkge1xyXG4gICAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW10pO1xyXG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRnJvbVRlbXBsYXRlUmVmKGNvbnRlbnQsIGNvbnRleHQpO1xyXG4gICAgfSBlbHNlIGlmIChpc1N0cmluZyhjb250ZW50KSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVGcm9tU3RyaW5nKGNvbnRlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRnJvbUNvbXBvbmVudChtb2R1bGVDRlIsIGNvbnRlbnRJbmplY3RvciwgY29udGVudCwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZyb21UZW1wbGF0ZVJlZihjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+LCBjb250ZXh0OiBMYW1iQWN0aXZlTW9kYWwpOiBDb250ZW50UmVmIHtcclxuICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcclxuICAgIHRoaXMuYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyh2aWV3UmVmKTtcclxuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbdmlld1JlZi5yb290Tm9kZXNdLCB2aWV3UmVmKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRnJvbVN0cmluZyhjb250ZW50OiBzdHJpbmcpOiBDb250ZW50UmVmIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKGAke2NvbnRlbnR9YCk7XHJcbiAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW1tjb21wb25lbnRdXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZyb21Db21wb25lbnQoXHJcbiAgICBtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgY29udGVudEluamVjdG9yOiBJbmplY3RvciwgY29udGVudDogYW55LFxyXG4gICAgY29udGV4dDogTGFtYkFjdGl2ZU1vZGFsKTogQ29udGVudFJlZiB7XHJcbiAgICBjb25zdCBjb250ZW50Q29tcG9uZW50RmFjdG9yeSA9IG1vZHVsZUNGUi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb250ZW50KTtcclxuICAgIGNvbnN0IG1vZGFsQ29udGVudEluamVjdG9yID1cclxuICAgICAgUmVmbGVjdGl2ZUluamVjdG9yLnJlc29sdmVBbmRDcmVhdGUoW3sgcHJvdmlkZTogTGFtYkFjdGl2ZU1vZGFsLCB1c2VWYWx1ZTogY29udGV4dCB9XSwgY29udGVudEluamVjdG9yKTtcclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbnRlbnRDb21wb25lbnRGYWN0b3J5LmNyZWF0ZShtb2RhbENvbnRlbnRJbmplY3Rvcik7XHJcbiAgICB0aGlzLmFwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbW2NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XV0sIGNvbXBvbmVudFJlZi5ob3N0VmlldywgY29tcG9uZW50UmVmKTtcclxuICB9XHJcbn1cclxuIl19