UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

396 lines (395 loc) 32.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, ViewChild, HostListener, ElementRef } from '@angular/core'; import { AbstractHasDataHelp } from '../AbstractHasDataHelp'; import { AbstractDataEditor } from './AbstractDataEditor'; import { DefaultEntryEditorPopover } from './DefaultEntryEditorPopover.component'; import { EllipsisButton } from '../../component/EllipsisButton.component'; import { ComponentCalendarEntryModel } from '../model/ComponentCalendarEntryModel'; import { Option } from '../../decorator/decorators'; const /** @type {?} */ TYPE_NAME = "phx-default-component-calendar-entry"; DefaultEntryEditorPopover; export class DefaultComponentCalendarEntry extends AbstractHasDataHelp { /** * @param {?} elementRef */ constructor(elementRef) { super(elementRef); this.componentType = DefaultEntryEditorPopover; this.selectedHeaderTitle = ""; this.selectedData = null; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); if (this.editor !== null && typeof this.editor !== 'undefined') { this.menuFactory = this.editor.getMenuModelFactory(); } this.componentHandler = (result) => { let /** @type {?} */ comInstance = null; if (result !== null && typeof result !== 'undefined') { comInstance = result.instance; } if (this.data !== null && typeof this.data !== 'undefined' && comInstance !== null) { if (typeof comInstance.setData === 'function') { comInstance.setData(this.data); } } if (typeof comInstance.setCalendarEntryMapper === 'function') { comInstance.setCalendarEntryMapper(this.entryMapper); } if (typeof comInstance.setEditor === 'function') { comInstance.setEditor(this.editor); } this.compoWrapInstance = comInstance; }; if (this.dataParent !== null && typeof this.dataParent !== 'undefined') { let /** @type {?} */ parent = this.dataParent; if (typeof parent.getHideEvent === 'function') { let /** @type {?} */ hideEvent = parent.getHideEvent(); if (hideEvent !== null && (typeof hideEvent !== 'undefined')) { hideEvent.subscribe((event) => { // hide more menu if (this.ellipsisButton !== null && typeof this.ellipsisButton !== 'undefined') { this.ellipsisButton.hideMenu(); } }); } } } } /** * @param {?} data * @return {?} */ getCalendarEntry(data) { if (this.entryMapper !== null && typeof this.entryMapper !== 'undefined') { return this.entryMapper.getCalendarEntry(data); } return null; } /** * @return {?} */ _getComponentHandler() { return this.componentHandler; } /** * @param {?} $event * @return {?} */ onClick($event) { if (this.ellipsisButton !== null && typeof this.ellipsisButton !== 'undefined') { if (this.ellipsisButton.isShowMenu()) { this.ellipsisButton.hideMenu(); } } } /** * @return {?} */ getTitle() { if (this.model !== null && typeof this.model !== 'undefined') { return this.model.title; } return ""; } /** * @return {?} */ getDescription() { if (this.model !== null && typeof this.model !== 'undefined') { return this.model.description; } return ""; } /** * @param {?} data * @return {?} */ setData(data) { super.setData(data); } /** * @param {?} entryMapper * @return {?} */ setCalendarEntryMapper(entryMapper) { this.entryMapper = entryMapper; if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') { if (typeof this.compoWrapInstance.setCalendarEntryMapper === 'function') { this.compoWrapInstance.setCalendarEntryMapper(this.entryMapper); } } } /** * @param {?} editor * @return {?} */ setEditor(editor) { this.editor = editor; } /** * @return {?} */ isSelfDataDirty() { return false; } /** * @param {?} data * @return {?} */ selfSaveData(data) { } /** * @return {?} */ selfResetData() { } /** * @return {?} */ getModel() { return this.model; } /** * @param {?} model * @return {?} */ setModel(model) { this.model = model; if (this.model !== null && typeof this.model !== 'undefined') { this.componentType = this.model.type; } if (this.componentType === null || typeof this.componentType === 'undefined') { this.componentType = DefaultEntryEditorPopover; } } /** * @return {?} */ getMenuModelFactory() { return this.menuFactory; } /** * @return {?} */ getComponentType() { return this.componentType; } /** * @return {?} */ doPreload() { return new Promise((resolve, reject) => { resolve(null); }); } /** * @return {?} */ doLoaded() { } /** * @param {?} $event * @return {?} */ onPopoverClosed($event) { if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') { if (typeof this.compoWrapInstance.onPopoverClosed === 'function') { this.compoWrapInstance.onPopoverClosed($event); } } } /** * @param {?} $event * @return {?} */ onAutoSaved($event) { if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') { if (typeof this.compoWrapInstance.onAutoSaved === 'function') { this.compoWrapInstance.onAutoSaved($event); } } } /** * @return {?} */ isAutoSave() { if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') { if (typeof this.compoWrapInstance.isAutoSave === 'function') { return this.compoWrapInstance.isAutoSave(); } } return false; } } DefaultComponentCalendarEntry.TYPE_NAME = TYPE_NAME; DefaultComponentCalendarEntry.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-default-component-calendar-entry"> <div class="header"> <div class="wrapper"> <div> <div class="info"> <div> <div class="table-wrapper fluid"> <div class="table-cell-wrapper middle">{{getTitle()}}</div> </div> </div> </div> <div class="more"> <div class="table-wrapper fluid"> <div class="table-cell-wrapper middle"><phx-ellipsis-btn #ellipsisButton [menuFactory]="getMenuModelFactory()" [data]="getData()"></phx-ellipsis-btn></div> </div> </div> </div> </div> </div> <div class="body"> <div class="wrapper"> <div class="description"> {{getDescription()}} </div> <div class="content"> <phx-component-wrapper [type]="getComponentType()" [data]="getData()" [handler]="_getComponentHandler()" [dataParent]="this"></phx-component-wrapper> </div> </div> </div> </div> ` },] }, ]; /** @nocollapse */ DefaultComponentCalendarEntry.ctorParameters = () => [ { type: ElementRef, }, ]; DefaultComponentCalendarEntry.propDecorators = { "data": [{ type: Input },], "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "entryMapper": [{ type: Input },], "editor": [{ type: Input },], "model": [{ type: Input },], "ellipsisButton": [{ type: ViewChild, args: ['ellipsisButton',] },], "onClick": [{ type: HostListener, args: ['click', ['$event'],] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultComponentCalendarEntry.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultComponentCalendarEntry.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultComponentCalendarEntry.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultComponentCalendarEntry.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultComponentCalendarEntry.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], DefaultComponentCalendarEntry.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], DefaultComponentCalendarEntry.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultComponentCalendarEntry.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], DefaultComponentCalendarEntry.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], DefaultComponentCalendarEntry.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultComponentCalendarEntry.prototype, "entryMapper", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", AbstractDataEditor) ], DefaultComponentCalendarEntry.prototype, "editor", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", ComponentCalendarEntryModel) ], DefaultComponentCalendarEntry.prototype, "model", void 0); function DefaultComponentCalendarEntry_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DefaultComponentCalendarEntry.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DefaultComponentCalendarEntry.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DefaultComponentCalendarEntry.propDecorators; /** @type {?} */ DefaultComponentCalendarEntry.TYPE_NAME; /** @type {?} */ DefaultComponentCalendarEntry.prototype.data; /** @type {?} */ DefaultComponentCalendarEntry.prototype.dataParent; /** @type {?} */ DefaultComponentCalendarEntry.prototype.ignoreParentData; /** @type {?} */ DefaultComponentCalendarEntry.prototype.ignoreParentDisabled; /** @type {?} */ DefaultComponentCalendarEntry.prototype.delegateHistory; /** @type {?} */ DefaultComponentCalendarEntry.prototype.onDisabled; /** @type {?} */ DefaultComponentCalendarEntry.prototype.onEnabled; /** @type {?} */ DefaultComponentCalendarEntry.prototype.loadingEnabled; /** @type {?} */ DefaultComponentCalendarEntry.prototype.i18nKey; /** @type {?} */ DefaultComponentCalendarEntry.prototype.bypass; /** @type {?} */ DefaultComponentCalendarEntry.prototype.options; /** @type {?} */ DefaultComponentCalendarEntry.prototype.entryMapper; /** @type {?} */ DefaultComponentCalendarEntry.prototype.editor; /** @type {?} */ DefaultComponentCalendarEntry.prototype.model; /** @type {?} */ DefaultComponentCalendarEntry.prototype.ellipsisButton; /** @type {?} */ DefaultComponentCalendarEntry.prototype.componentType; /** @type {?} */ DefaultComponentCalendarEntry.prototype.componentHandler; /** @type {?} */ DefaultComponentCalendarEntry.prototype.compoWrapInstance; /** @type {?} */ DefaultComponentCalendarEntry.prototype.selectedHeaderTitle; /** @type {?} */ DefaultComponentCalendarEntry.prototype.selectedData; /** @type {?} */ DefaultComponentCalendarEntry.prototype.menuFactory; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdENvbXBvbmVudENhbGVuZGFyRW50cnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2VkaXRvci9EZWZhdWx0Q29tcG9uZW50Q2FsZW5kYXJFbnRyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBUSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU03RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSXBELHVCQUFNLFNBQVMsR0FBVyxzQ0FBc0MsQ0FBQztBQUNqRSx5QkFBeUIsQ0FBQTtBQW9DekIsTUFBTSxvQ0FBcUMsU0FBUSxtQkFBbUI7Ozs7SUF1RHBFLFlBQVksVUFBc0I7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcseUJBQXlCLENBQUM7UUFDL0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztLQUMxQjs7OztJQUVNLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FB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QUs7Z0NBR0wsS0FBSzsyQkFHTCxLQUFLOzBCQUdMLEtBQUs7K0JBR0wsS0FBSzt3QkFHTCxLQUFLO3VCQUdMLEtBQUssU0FBQyxZQUFZO3dCQUdsQixLQUFLOzRCQUVMLEtBQUs7dUJBR0wsS0FBSztzQkFHTCxLQUFLOytCQUdMLFNBQVMsU0FBQyxnQkFBZ0I7d0JBdUUxQixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzs7SUEvR2hDLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTtzQ0FDYSxRQUFROzs7SUFFN0IsTUFBTSxFQUFFO3NDQUNZLFFBQVE7OztJQUU1QixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLENBQUMsWUFBWSxDQUFDOzs7O0lBS3BCLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTtzQ0FDTyxrQkFBa0I7OztJQUVqQyxNQUFNLEVBQUU7c0NBQ00sMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBUeXBlLCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RIYXNEYXRhSGVscCB9IGZyb20gJy4uL0Fic3RyYWN0SGFzRGF0YUhlbHAnO1xuaW1wb3J0IHsgSUhhc01vZGVsIH0gZnJvbSAnLi4vSUhhc01vZGVsJztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgQ2FsZW5kYXJFbnRyeSB9IGZyb20gJy4uL21vZGVsL0NhbGVuZGFyRW50cnknO1xuaW1wb3J0IHsgSUNhbGVuZGFyRW50cnlNYXBwZXIgfSBmcm9tICcuL0lDYWxlbmRhckVudHJ5TWFwcGVyJztcbmltcG9ydCB7IElDYWxlbmRhckVudHJ5UG9wb3ZlckNvbnRlbnQgfSBmcm9tICcuL0lDYWxlbmRhckVudHJ5UG9wb3ZlckNvbnRlbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhRWRpdG9yIH0gZnJvbSAnLi9BYnN0cmFjdERhdGFFZGl0b3InO1xuaW1wb3J0IHsgRGVmYXVsdEVudHJ5RWRpdG9yUG9wb3ZlciB9IGZyb20gJy4vRGVmYXVsdEVudHJ5RWRpdG9yUG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU1lbnVNb2RlbEZhY3RvcnkgfSBmcm9tICcuLi8uLi9jb21wb25lbnQvSU1lbnVNb2RlbEZhY3RvcnknO1xuaW1wb3J0IHsgRWxsaXBzaXNCdXR0b24gfSBmcm9tICcuLi8uLi9jb21wb25lbnQvRWxsaXBzaXNCdXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudENhbGVuZGFyRW50cnlNb2RlbCB9IGZyb20gJy4uL21vZGVsL0NvbXBvbmVudENhbGVuZGFyRW50cnlNb2RlbCc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi9kZWNvcmF0b3IvZGVjb3JhdG9ycyc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1kZWZhdWx0LWNvbXBvbmVudC1jYWxlbmRhci1lbnRyeVwiO1xuRGVmYXVsdEVudHJ5RWRpdG9yUG9wb3ZlclxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1kZWZhdWx0LWNvbXBvbmVudC1jYWxlbmRhci1lbnRyeVwiPlxuXHQ8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG5cdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cblx0XHRcdDxkaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJpbmZvXCI+XG5cdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyIGZsdWlkXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+e3tnZXRUaXRsZSgpfX08L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vcmVcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj48cGh4LWVsbGlwc2lzLWJ0biAjZWxsaXBzaXNCdXR0b24gW21lbnVGYWN0b3J5XT1cImdldE1lbnVNb2RlbEZhY3RvcnkoKVwiIFtkYXRhXT1cImdldERhdGEoKVwiPjwvcGh4LWVsbGlwc2lzLWJ0bj48L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJib2R5XCI+XG5cdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlxuXHRcdFx0XHR7e2dldERlc2NyaXB0aW9uKCl9fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuXHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyICBbdHlwZV09XCJnZXRDb21wb25lbnRUeXBlKClcIiBbZGF0YV09XCJnZXREYXRhKClcIiBbaGFuZGxlcl09XCJfZ2V0Q29tcG9uZW50SGFuZGxlcigpXCIgW2RhdGFQYXJlbnRdPVwidGhpc1wiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIERlZmF1bHRDb21wb25lbnRDYWxlbmRhckVudHJ5IGV4dGVuZHMgQWJzdHJhY3RIYXNEYXRhSGVscCBpbXBsZW1lbnRzIE9uSW5pdCwgSUNhbGVuZGFyRW50cnlQb3BvdmVyQ29udGVudCwgSUhhc01vZGVsIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xuICBASW5wdXQoJ2kxOG5CeXBhc3MnKVxuICBAT3B0aW9uKCdpMThuQnlwYXNzJylcbiAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgZW50cnlNYXBwZXI6IElDYWxlbmRhckVudHJ5TWFwcGVyO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBlZGl0b3I6IEFic3RyYWN0RGF0YUVkaXRvcjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgbW9kZWw6IENvbXBvbmVudENhbGVuZGFyRW50cnlNb2RlbDtcbiAgQFZpZXdDaGlsZCgnZWxsaXBzaXNCdXR0b24nKVxuICBwcml2YXRlIGVsbGlwc2lzQnV0dG9uOiBFbGxpcHNpc0J1dHRvbjtcbiAgXG4gIHByaXZhdGUgY29tcG9uZW50VHlwZTogVHlwZTxhbnk+O1xuICBwcml2YXRlIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGNvbXBvV3JhcEluc3RhbmNlOiBhbnk7XG4gIHByaXZhdGUgc2VsZWN0ZWRIZWFkZXJUaXRsZTogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkRGF0YTogYW55O1xuICBwcml2YXRlIG1lbnVGYWN0b3J5OiBJTWVudU1vZGVsRmFjdG9yeTtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZik7XG4gICAgdGhpcy5jb21wb25lbnRUeXBlID0gRGVmYXVsdEVudHJ5RWRpdG9yUG9wb3ZlcjtcbiAgICB0aGlzLnNlbGVjdGVkSGVhZGVyVGl0bGUgPSBcIlwiO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgaWYgKHRoaXMuZWRpdG9yICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmVkaXRvciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubWVudUZhY3RvcnkgPSB0aGlzLmVkaXRvci5nZXRNZW51TW9kZWxGYWN0b3J5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBsZXQgY29tSW5zdGFuY2UgPSBudWxsO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21JbnN0YW5jZSA9IHJlc3VsdC5pbnN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGEgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29tSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21JbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29tSW5zdGFuY2Uuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbUluc3RhbmNlLnNldENhbGVuZGFyRW50cnlNYXBwZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29tSW5zdGFuY2Uuc2V0Q2FsZW5kYXJFbnRyeU1hcHBlcih0aGlzLmVudHJ5TWFwcGVyKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29tSW5zdGFuY2Uuc2V0RWRpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbUluc3RhbmNlLnNldEVkaXRvcih0aGlzLmVkaXRvcik7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlID0gY29tSW5zdGFuY2U7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRhdGFQYXJlbnQgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YVBhcmVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBwYXJlbnQ6IGFueSA9IHRoaXMuZGF0YVBhcmVudDtcbiAgICAgIGlmICh0eXBlb2YgcGFyZW50LmdldEhpZGVFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsZXQgaGlkZUV2ZW50ID0gcGFyZW50LmdldEhpZGVFdmVudCgpO1xuXG4gICAgICAgIGlmIChoaWRlRXZlbnQgIT09IG51bGwgJiYgKHR5cGVvZiBoaWRlRXZlbnQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICAgIGhpZGVFdmVudC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIGhpZGUgbW9yZSBtZW51XG4gICAgICAgICAgICBpZiAodGhpcy5lbGxpcHNpc0J1dHRvbiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5lbGxpcHNpc0J1dHRvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5lbGxpcHNpc0J1dHRvbi5oaWRlTWVudSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWxlbmRhckVudHJ5KGRhdGE6IGFueSk6IENhbGVuZGFyRW50cnkge1xuICAgIGlmICh0aGlzLmVudHJ5TWFwcGVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmVudHJ5TWFwcGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMuZW50cnlNYXBwZXIuZ2V0Q2FsZW5kYXJFbnRyeShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgX2dldENvbXBvbmVudEhhbmRsZXIoKTogRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXI7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkNsaWNrKCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsbGlwc2lzQnV0dG9uICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmVsbGlwc2lzQnV0dG9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMuZWxsaXBzaXNCdXR0b24uaXNTaG93TWVudSgpKSB7XG4gICAgICAgIHRoaXMuZWxsaXBzaXNCdXR0b24uaGlkZU1lbnUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsLnRpdGxlO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm1vZGVsICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHNldERhdGEoZGF0YTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuc2V0RGF0YShkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDYWxlbmRhckVudHJ5TWFwcGVyKGVudHJ5TWFwcGVyOiBJQ2FsZW5kYXJFbnRyeU1hcHBlcik6IHZvaWQge1xuICAgIHRoaXMuZW50cnlNYXBwZXIgPSBlbnRyeU1hcHBlcjtcblxuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldENhbGVuZGFyRW50cnlNYXBwZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5zZXRDYWxlbmRhckVudHJ5TWFwcGVyKHRoaXMuZW50cnlNYXBwZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRFZGl0b3IoZWRpdG9yOiBBYnN0cmFjdERhdGFFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGZEYXRhRGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlbGZTYXZlRGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldE1vZGVsKG1vZGVsOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG5cbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IHRoaXMubW9kZWwudHlwZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21wb25lbnRUeXBlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLmNvbXBvbmVudFR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSBEZWZhdWx0RW50cnlFZGl0b3JQb3BvdmVyO1xuXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1lbnVNb2RlbEZhY3RvcnkoKTogSU1lbnVNb2RlbEZhY3Rvcnkge1xuICAgIHJldHVybiB0aGlzLm1lbnVGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudFR5cGUoKTogVHlwZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRUeXBlO1xuICB9XG5cbiAgcHVibGljIGRvUHJlbG9hZCgpOiBQcm9taXNlPGFueT4geyAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsgICAgICAgcmVzb2x2ZShudWxsKTsgICAgIH0pOyAgIH0gIHB1YmxpYyBkb0xvYWRlZCgpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIG9uUG9wb3ZlckNsb3NlZCgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uub25Qb3BvdmVyQ2xvc2VkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uub25Qb3BvdmVyQ2xvc2VkKCRldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQXV0b1NhdmVkKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb1dyYXBJbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb1dyYXBJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5vbkF1dG9TYXZlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLm9uQXV0b1NhdmVkKCRldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQXV0b1NhdmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UuaXNBdXRvU2F2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5pc0F1dG9TYXZlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19