UNPKG

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
/** * @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