UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

285 lines (283 loc) 22.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, Inject, EventEmitter, Output, ViewChild } from '@angular/core'; import { AbstractDataEditor } from './AbstractDataEditor'; import { DataEditorActionProvider } from './IDataEditorActionProvider'; import { DataEditorViewProvider } from './IDataEditorViewProvider'; import { DataServiceFactory } from './IDataServiceFactory'; import { EditorSettingServiceFactory } from './IEditorSettingServiceFactory'; import { PhloxAppInfoService } from '../../service/PhloxAppInfoService.service'; import { DialogService } from '../../service/DialogService.service'; import { BackgroundProcessManager } from '../../service/BackgroundProcessManager.service'; import { Option } from '../../decorator/Option.decorator'; import { I18N } from '../../decorator/decorators'; import { ActionMenuBar } from './editor.internal/ActionMenuBar.component'; const /** @type {?} */ TYPE_NAME = "phx-default-data-editor"; export class DefaultDataEditor extends AbstractDataEditor { /** * @param {?} actionProvider * @param {?} viewProvider * @param {?} dataFactory * @param {?} settingServiceFactory * @param {?} phloxAppService * @param {?} dialogService * @param {?} bgProcessMgr */ constructor(actionProvider, viewProvider, dataFactory, settingServiceFactory, phloxAppService, dialogService, bgProcessMgr) { super(actionProvider, viewProvider, dataFactory, settingServiceFactory, phloxAppService, dialogService, bgProcessMgr); } /** * @param {?} model * @return {?} */ _isViewModelActive(model) { if (model === null || typeof model === 'undefined') { return false; } for (let /** @type {?} */ v of this.views) { if (v.getModel() === model) { return v.isActive(); } } return false; } /** * @param {?} headerTitle * @return {?} */ setHeaderTitle(headerTitle) { this.headerTitle = headerTitle; } /** * @return {?} */ getHeaderTitle() { return this.headerTitle; } /** * @param {?} $event * @param {?} view * @return {?} */ onViewBtnClicked($event, view) { this.showView(view); } /** * @return {?} */ getMenuModelFactory() { return this.menuModelFactory; } /** * @return {?} */ getDataComparator() { return this.dataComparator; } /** * @return {?} */ isPageLoaded() { return true; } /** * @return {?} */ newDataObject() { return { "name": "TEST Name", "title": "TEST VALUE", "description": "TEST description", "startDate": (new Date()).getTime(), "endDate": (new Date()).getTime() }; } /** * @param {?} actionModels * @return {?} */ setActionModels(actionModels) { super.setActionModels(actionModels); this.actionMenuBar.setModels(actionModels); } /** * @param {?} settings * @return {?} */ onEditorSettingLoaded(settings) { // do sthing when reload editor setting } } DefaultDataEditor.TYPE_NAME = TYPE_NAME; DefaultDataEditor.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-default-data-editor"> <div class="background"> </div> <div class="wrapper"> <div class="content"> <!-- # this will open in the next version --> <!-- <phx-search-btn [editor]="this"></phx-search-btn> --> <div class="phlox-editor-header"> <div class="page-info-wrapper"> <phx-search-btn [editor]="this"></phx-search-btn> <div class="page-info"> {{getHeaderTitle()}} </div> <div class="page-search"> </div> </div> <div class="page-header-center"> <div class="page-action-wrapper"> <ul class="page-action"> <li> <ul class="action-button-group"> <li> <phx-action-menu-bar #actionMenuBar></phx-action-menu-bar> </li> </ul> </li> <li> <div class="page-separate"></div> </li> </ul> </div> </div> <div class="page-view-wrapper"> <ul class="view-button-group"> <li *ngFor="let view of getViewModels(); let i = index;"> <phx-view-btn #phxView [model]="view" [active]="_isViewModelActive(view)" (click)="onViewBtnClicked($event,view)"></phx-view-btn> </li> </ul> </div> </div> <div class="wrapper"> <div class="phlox-editor-body"> <phx-view-wrapper *ngFor="let view of getViewModels()" [editor]="this" [model]="view" [showEventHandler]="getViewShowHandler()" [hideEventHandler]="getViewHideHandler()"></phx-view-wrapper> </div> </div> </div> </div> </div> ` },] }, ]; /** @nocollapse */ DefaultDataEditor.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: [DataEditorActionProvider,] },] }, { type: undefined, decorators: [{ type: Inject, args: [DataEditorViewProvider,] },] }, { type: undefined, decorators: [{ type: Inject, args: [DataServiceFactory,] },] }, { type: undefined, decorators: [{ type: Inject, args: [EditorSettingServiceFactory,] },] }, { type: PhloxAppInfoService, }, { type: DialogService, }, { type: BackgroundProcessManager, }, ]; DefaultDataEditor.propDecorators = { "dataCreateEvent": [{ type: Output, args: ['phxDataCreate',] },], "dataUpdateEvent": [{ type: Output, args: ['phxDataUpdate',] },], "dataDeleteEvent": [{ type: Output, args: ['phxDataDelete',] },], "dataDestroyEvent": [{ type: Output, args: ['phxDataDestroy',] },], "dataRevertEvent": [{ type: Output, args: ['phxDataRevert',] },], "dataQueryEvent": [{ type: Output, args: ['phxDataQuery',] },], "dataPromoteEvent": [{ type: Output, args: ['phxDataPromote',] },], "dataReloadEvent": [{ type: Output, args: ['phxDataReload',] },], "dataSchemaLoadEvent": [{ type: Output, args: ['phxDataSchemaLoad',] },], "viewShowEvent": [{ type: Output, args: ['phxViewShow',] },], "viewHideEvent": [{ type: Output, args: ['phxViewHide',] },], "headerTitle": [{ type: Input },], "actionMenuBar": [{ type: ViewChild, args: ["actionMenuBar",] },], }; tslib_1.__decorate([ Option('dataCreate'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataCreateEvent", void 0); tslib_1.__decorate([ Option('dataUpdate'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataUpdateEvent", void 0); tslib_1.__decorate([ Option('dataDelete'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataDeleteEvent", void 0); tslib_1.__decorate([ Option('dataDestroy'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataDestroyEvent", void 0); tslib_1.__decorate([ Option('dataRevert'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataRevertEvent", void 0); tslib_1.__decorate([ Option('dataQuery'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataQueryEvent", void 0); tslib_1.__decorate([ Option('dataPromote'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataPromoteEvent", void 0); tslib_1.__decorate([ Option('dataReload'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataReloadEvent", void 0); tslib_1.__decorate([ Option('dataSchemaLoad'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "dataSchemaLoadEvent", void 0); tslib_1.__decorate([ Option('viewShow'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "viewShowEvent", void 0); tslib_1.__decorate([ Option('viewHide'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultDataEditor.prototype, "viewHideEvent", void 0); tslib_1.__decorate([ I18N("header.title"), tslib_1.__metadata("design:type", String) ], DefaultDataEditor.prototype, "headerTitle", void 0); function DefaultDataEditor_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DefaultDataEditor.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DefaultDataEditor.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DefaultDataEditor.propDecorators; /** @type {?} */ DefaultDataEditor.TYPE_NAME; /** @type {?} */ DefaultDataEditor.prototype.dataCreateEvent; /** @type {?} */ DefaultDataEditor.prototype.dataUpdateEvent; /** @type {?} */ DefaultDataEditor.prototype.dataDeleteEvent; /** @type {?} */ DefaultDataEditor.prototype.dataDestroyEvent; /** @type {?} */ DefaultDataEditor.prototype.dataRevertEvent; /** @type {?} */ DefaultDataEditor.prototype.dataQueryEvent; /** @type {?} */ DefaultDataEditor.prototype.dataPromoteEvent; /** @type {?} */ DefaultDataEditor.prototype.dataReloadEvent; /** @type {?} */ DefaultDataEditor.prototype.dataSchemaLoadEvent; /** @type {?} */ DefaultDataEditor.prototype.viewShowEvent; /** @type {?} */ DefaultDataEditor.prototype.viewHideEvent; /** @type {?} */ DefaultDataEditor.prototype.headerTitle; /** @type {?} */ DefaultDataEditor.prototype.actionMenuBar; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhdGFFZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2VkaXRvci9EZWZhdWx0RGF0YUVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsc0JBQXNCLEVBQTJCLE1BQU0sMkJBQTJCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGtCQUFrQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSwyQkFBMkIsRUFBZ0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUczRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFMUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFHMUUsdUJBQU0sU0FBUyxHQUFXLHlCQUF5QixDQUFDO0FBeURwRCxNQUFNLHdCQUF5QixTQUFRLGtCQUFrQjs7Ozs7Ozs7OztJQTJDdkQsWUFBK0MsZ0JBQTJFLGNBQW1FLGFBQ3RKLHVCQUFxRCxlQUFvQyxFQUFFLGFBQTRCLEVBQzVKLFlB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QUFZLENBQUM7c0NBQ00sWUFBWTs7O0lBRXRDLE1BQU0sQ0FBQyxZQUFZLENBQUM7c0NBQ00sWUFBWTs7O0lBRXRDLE1BQU0sQ0FBQyxhQUFhLENBQUM7c0NBQ00sWUFBWTs7O0lBRXZDLE1BQU0sQ0FBQyxZQUFZLENBQUM7c0NBQ00sWUFBWTs7O0lBRXRDLE1BQU0sQ0FBQyxXQUFXLENBQUM7c0NBQ00sWUFBWTs7O0lBRXJDLE1BQU0sQ0FBQyxhQUFhLENBQUM7c0NBQ00sWUFBWTs7O0lBRXZDLE1BQU0sQ0FBQyxZQUFZLENBQUM7c0NBQ00sWUFBWTs7O0lBRXRDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztzQ0FDTSxZQUFZOzs7SUFFMUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztzQ0FDTSxZQUFZOzs7SUFFcEMsTUFBTSxDQUFDLFVBQVUsQ0FBQztzQ0FDTSxZQUFZOzs7SUFFcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgSW5qZWN0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFFZGl0b3IgfSBmcm9tICcuL0Fic3RyYWN0RGF0YUVkaXRvcic7XG5pbXBvcnQgeyBEYXRhRWRpdG9yQWN0aW9uUHJvdmlkZXIsIElEYXRhRWRpdG9yQWN0aW9uUHJvdmlkZXIgfSBmcm9tICcuL0lEYXRhRWRpdG9yQWN0aW9uUHJvdmlkZXInO1xuaW1wb3J0IHsgRGF0YUVkaXRvclZpZXdQcm92aWRlciwgSURhdGFFZGl0b3JWaWV3UHJvdmlkZXIgfSBmcm9tICcuL0lEYXRhRWRpdG9yVmlld1Byb3ZpZGVyJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlRmFjdG9yeSwgSURhdGFTZXJ2aWNlRmFjdG9yeSB9IGZyb20gJy4vSURhdGFTZXJ2aWNlRmFjdG9yeSc7XG5pbXBvcnQgeyBFZGl0b3JTZXR0aW5nU2VydmljZUZhY3RvcnksIElFZGl0b3JTZXR0aW5nU2VydmljZUZhY3RvcnkgfSBmcm9tICcuL0lFZGl0b3JTZXR0aW5nU2VydmljZUZhY3RvcnknO1xuaW1wb3J0IHsgSU1lbnVNb2RlbEZhY3RvcnkgfSBmcm9tICcuLi9JTWVudU1vZGVsRmFjdG9yeSc7XG5pbXBvcnQgeyBJRGF0YUNvbXBhcmF0b3IgfSBmcm9tICcuLi9JRGF0YUNvbXBhcmF0b3InO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvUGhsb3hBcHBJbmZvU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL0RpYWxvZ1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL0JhY2tncm91bmRQcm9jZXNzTWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFZpZXdNb2RlbCB9IGZyb20gJy4uL21vZGVsL1ZpZXdNb2RlbCc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgVmlld0J1dHRvbiB9IGZyb20gJy4vZWRpdG9yLmludGVybmFsL1ZpZXdCdXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvbk1lbnVCYXIgfSBmcm9tICcuL2VkaXRvci5pbnRlcm5hbC9BY3Rpb25NZW51QmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsJztcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1kZWZhdWx0LWRhdGEtZWRpdG9yXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtZGVmYXVsdC1kYXRhLWVkaXRvclwiPlxuXHQ8ZGl2IGNsYXNzPVwiYmFja2dyb3VuZFwiPlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuXHRcdFx0PCEtLSAjIHRoaXMgd2lsbCBvcGVuIGluIHRoZSBuZXh0IHZlcnNpb24gIC0tPlxuXHRcdFx0PCEtLSA8cGh4LXNlYXJjaC1idG4gW2VkaXRvcl09XCJ0aGlzXCI+PC9waHgtc2VhcmNoLWJ0bj4gLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwicGhsb3gtZWRpdG9yLWhlYWRlclwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFnZS1pbmZvLXdyYXBwZXJcIj5cblx0XHRcdFx0XHQ8cGh4LXNlYXJjaC1idG4gW2VkaXRvcl09XCJ0aGlzXCI+PC9waHgtc2VhcmNoLWJ0bj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFnZS1pbmZvXCI+XG5cdFx0XHRcdFx0XHR7e2dldEhlYWRlclRpdGxlKCl9fVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwYWdlLXNlYXJjaFwiPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInBhZ2UtaGVhZGVyLWNlbnRlclwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwYWdlLWFjdGlvbi13cmFwcGVyXCI+XG5cdFx0XHRcdFx0XHQ8dWwgY2xhc3M9XCJwYWdlLWFjdGlvblwiPlxuXHRcdFx0XHRcdFx0XHQ8bGk+XG5cdFx0XHRcdFx0XHRcdFx0PHVsIGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGxpPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8cGh4LWFjdGlvbi1tZW51LWJhciAjYWN0aW9uTWVudUJhcj48L3BoeC1hY3Rpb24tbWVudS1iYXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2xpPlxuXHRcdFx0XHRcdFx0XHRcdDwvdWw+XG5cdFx0XHRcdFx0XHRcdDwvbGk+XG5cdFx0XHRcdFx0XHRcdDxsaT5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFnZS1zZXBhcmF0ZVwiPjwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2xpPlxuXHRcdFx0XHRcdFx0PC91bD5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJwYWdlLXZpZXctd3JhcHBlclwiPlxuXHRcdFx0XHRcdDx1bCBjbGFzcz1cInZpZXctYnV0dG9uLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHQ8bGkgKm5nRm9yPVwibGV0IHZpZXcgb2YgZ2V0Vmlld01vZGVscygpOyBsZXQgaSA9IGluZGV4O1wiPlxuXHRcdFx0XHRcdFx0XHQ8cGh4LXZpZXctYnRuICNwaHhWaWV3IFttb2RlbF09XCJ2aWV3XCIgW2FjdGl2ZV09XCJfaXNWaWV3TW9kZWxBY3RpdmUodmlldylcIiAoY2xpY2spPVwib25WaWV3QnRuQ2xpY2tlZCgkZXZlbnQsdmlldylcIj48L3BoeC12aWV3LWJ0bj5cblx0XHRcdFx0XHRcdDwvbGk+XG5cdFx0XHRcdFx0PC91bD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInBobG94LWVkaXRvci1ib2R5XCI+XG5cdFx0XHRcdFx0PHBoeC12aWV3LXdyYXBwZXIgKm5nRm9yPVwibGV0IHZpZXcgb2YgZ2V0Vmlld01vZGVscygpXCIgW2VkaXRvcl09XCJ0aGlzXCIgW21vZGVsXT1cInZpZXdcIlxuXHRcdFx0XHRcdFtzaG93RXZlbnRIYW5kbGVyXT1cImdldFZpZXdTaG93SGFuZGxlcigpXCIgW2hpZGVFdmVudEhhbmRsZXJdPVwiZ2V0Vmlld0hpZGVIYW5kbGVyKClcIj48L3BoeC12aWV3LXdyYXBwZXI+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIERlZmF1bHREYXRhRWRpdG9yIGV4dGVuZHMgQWJzdHJhY3REYXRhRWRpdG9yIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIEBPdXRwdXQoJ3BoeERhdGFDcmVhdGUnKVxuICBAT3B0aW9uKCdkYXRhQ3JlYXRlJylcbiAgcHJvdGVjdGVkIGRhdGFDcmVhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeERhdGFVcGRhdGUnKVxuICBAT3B0aW9uKCdkYXRhVXBkYXRlJylcbiAgcHJvdGVjdGVkIGRhdGFVcGRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeERhdGFEZWxldGUnKVxuICBAT3B0aW9uKCdkYXRhRGVsZXRlJylcbiAgcHJvdGVjdGVkIGRhdGFEZWxldGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeERhdGFEZXN0cm95JylcbiAgQE9wdGlvbignZGF0YURlc3Ryb3knKVxuICBwcm90ZWN0ZWQgZGF0YURlc3Ryb3lFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeERhdGFSZXZlcnQnKVxuICBAT3B0aW9uKCdkYXRhUmV2ZXJ0JylcbiAgcHJvdGVjdGVkIGRhdGFSZXZlcnRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeERhdGFRdWVyeScpXG4gIEBPcHRpb24oJ2RhdGFRdWVyeScpXG4gIHByb3RlY3RlZCBkYXRhUXVlcnlFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeERhdGFQcm9tb3RlJylcbiAgQE9wdGlvbignZGF0YVByb21vdGUnKVxuICBwcm90ZWN0ZWQgZGF0YVByb21vdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeERhdGFSZWxvYWQnKVxuICBAT3B0aW9uKCdkYXRhUmVsb2FkJylcbiAgcHJvdGVjdGVkIGRhdGFSZWxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeERhdGFTY2hlbWFMb2FkJylcbiAgQE9wdGlvbignZGF0YVNjaGVtYUxvYWQnKVxuICBwcm90ZWN0ZWQgZGF0YVNjaGVtYUxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeFZpZXdTaG93JylcbiAgQE9wdGlvbigndmlld1Nob3cnKVxuICBwcm90ZWN0ZWQgdmlld1Nob3dFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeFZpZXdIaWRlJylcbiAgQE9wdGlvbigndmlld0hpZGUnKVxuICBwcm90ZWN0ZWQgdmlld0hpZGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpXG4gIEBJMThOKFwiaGVhZGVyLnRpdGxlXCIpXG4gIHByaXZhdGUgaGVhZGVyVGl0bGU6IHN0cmluZztcbiAgQFZpZXdDaGlsZChcImFjdGlvbk1lbnVCYXJcIilcbiAgcHJpdmF0ZSBhY3Rpb25NZW51QmFyOiBBY3Rpb25NZW51QmFyO1xuXG4gIGNvbnN0cnVjdG9yKCBASW5qZWN0KERhdGFFZGl0b3JBY3Rpb25Qcm92aWRlcikgYWN0aW9uUHJvdmlkZXI6IElEYXRhRWRpdG9yQWN0aW9uUHJvdmlkZXIsIEBJbmplY3QoRGF0YUVkaXRvclZpZXdQcm92aWRlcikgdmlld1Byb3ZpZGVyOiBJRGF0YUVkaXRvclZpZXdQcm92aWRlciwgQEluamVjdChEYXRhU2VydmljZUZhY3RvcnkpIGRhdGFGYWN0b3J5OiBJRGF0YVNlcnZpY2VGYWN0b3J5LFxuICAgIEBJbmplY3QoRWRpdG9yU2V0dGluZ1NlcnZpY2VGYWN0b3J5KSBzZXR0aW5nU2VydmljZUZhY3Rvcnk6IElFZGl0b3JTZXR0aW5nU2VydmljZUZhY3RvcnksIHBobG94QXBwU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSwgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBiZ1Byb2Nlc3NNZ3I6IEJhY2tncm91bmRQcm9jZXNzTWFuYWdlcikge1xuICAgIHN1cGVyKGFjdGlvblByb3ZpZGVyLCB2aWV3UHJvdmlkZXIsIGRhdGFGYWN0b3J5LCBzZXR0aW5nU2VydmljZUZhY3RvcnksIHBobG94QXBwU2VydmljZSwgZGlhbG9nU2VydmljZSwgYmdQcm9jZXNzTWdyKTtcbiAgfVxuXG4gIHB1YmxpYyBfaXNWaWV3TW9kZWxBY3RpdmUobW9kZWw6IFZpZXdNb2RlbCk6IGJvb2xlYW4ge1xuICAgIGlmIChtb2RlbCA9PT0gbnVsbCB8fCB0eXBlb2YgbW9kZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IHYgb2YgdGhpcy52aWV3cykge1xuICAgICAgaWYgKHYuZ2V0TW9kZWwoKSA9PT0gbW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHYuaXNBY3RpdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNldEhlYWRlclRpdGxlKGhlYWRlclRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlclRpdGxlID0gaGVhZGVyVGl0bGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVhZGVyVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJUaXRsZTtcbiAgfVxuXG4gIHB1YmxpYyBvblZpZXdCdG5DbGlja2VkKCRldmVudDogTW91c2VFdmVudCwgdmlldzogVmlld01vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Vmlldyh2aWV3KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZW51TW9kZWxGYWN0b3J5KCk6IElNZW51TW9kZWxGYWN0b3J5IHtcbiAgICByZXR1cm4gdGhpcy5tZW51TW9kZWxGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIGdldERhdGFDb21wYXJhdG9yKCk6IElEYXRhQ29tcGFyYXRvcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29tcGFyYXRvcjtcbiAgfVxuXG4gIHB1YmxpYyBpc1BhZ2VMb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgXG4gIHB1YmxpYyBuZXdEYXRhT2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZVwiOiBcIlRFU1QgTmFtZVwiLFxuICAgICAgXCJ0aXRsZVwiOiBcIlRFU1QgVkFMVUVcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJURVNUIGRlc2NyaXB0aW9uXCIsXG4gICAgICBcInN0YXJ0RGF0ZVwiOiAobmV3IERhdGUoKSkuZ2V0VGltZSgpLFxuICAgICAgXCJlbmREYXRlXCI6IChuZXcgRGF0ZSgpKS5nZXRUaW1lKClcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHNldEFjdGlvbk1vZGVscyhhY3Rpb25Nb2RlbHM6IEFjdGlvbk1vZGVsW10pOiB2b2lkIHtcbiAgICBzdXBlci5zZXRBY3Rpb25Nb2RlbHMoYWN0aW9uTW9kZWxzKTtcblxuICAgIHRoaXMuYWN0aW9uTWVudUJhci5zZXRNb2RlbHMoYWN0aW9uTW9kZWxzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkVkaXRvclNldHRpbmdMb2FkZWQoc2V0dGluZ3M6IGFueSk6IHZvaWQge1xuICAgIC8vIGRvIHN0aGluZyB3aGVuIHJlbG9hZCBlZGl0b3Igc2V0dGluZ1xuICB9XG59XG4iXX0=