com.phloxui
Version:
PhloxUI Ng2+ Framework
285 lines (283 loc) • 22.8 kB
JavaScript
/**
* @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=