UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

440 lines (439 loc) 35.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'; var /** @type {?} */ TYPE_NAME = "phx-default-component-calendar-entry"; DefaultEntryEditorPopover; var DefaultComponentCalendarEntry = /** @class */ (function (_super) { tslib_1.__extends(DefaultComponentCalendarEntry, _super); function DefaultComponentCalendarEntry(elementRef) { var _this = _super.call(this, elementRef) || this; _this.componentType = DefaultEntryEditorPopover; _this.selectedHeaderTitle = ""; _this.selectedData = null; return _this; } /** * @return {?} */ DefaultComponentCalendarEntry.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; _super.prototype.ngOnInit.call(this); if (this.editor !== null && typeof this.editor !== 'undefined') { this.menuFactory = this.editor.getMenuModelFactory(); } this.componentHandler = function (result) { var /** @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') { var /** @type {?} */ parent_1 = this.dataParent; if (typeof parent_1.getHideEvent === 'function') { var /** @type {?} */ hideEvent = parent_1.getHideEvent(); if (hideEvent !== null && (typeof hideEvent !== 'undefined')) { hideEvent.subscribe(function (event) { // hide more menu if (_this.ellipsisButton !== null && typeof _this.ellipsisButton !== 'undefined') { _this.ellipsisButton.hideMenu(); } }); } } } }; /** * @param {?} data * @return {?} */ DefaultComponentCalendarEntry.prototype.getCalendarEntry = /** * @param {?} data * @return {?} */ function (data) { if (this.entryMapper !== null && typeof this.entryMapper !== 'undefined') { return this.entryMapper.getCalendarEntry(data); } return null; }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype._getComponentHandler = /** * @return {?} */ function () { return this.componentHandler; }; /** * @param {?} $event * @return {?} */ DefaultComponentCalendarEntry.prototype.onClick = /** * @param {?} $event * @return {?} */ function ($event) { if (this.ellipsisButton !== null && typeof this.ellipsisButton !== 'undefined') { if (this.ellipsisButton.isShowMenu()) { this.ellipsisButton.hideMenu(); } } }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.getTitle = /** * @return {?} */ function () { if (this.model !== null && typeof this.model !== 'undefined') { return this.model.title; } return ""; }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.getDescription = /** * @return {?} */ function () { if (this.model !== null && typeof this.model !== 'undefined') { return this.model.description; } return ""; }; /** * @param {?} data * @return {?} */ DefaultComponentCalendarEntry.prototype.setData = /** * @param {?} data * @return {?} */ function (data) { _super.prototype.setData.call(this, data); }; /** * @param {?} entryMapper * @return {?} */ DefaultComponentCalendarEntry.prototype.setCalendarEntryMapper = /** * @param {?} entryMapper * @return {?} */ function (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 {?} */ DefaultComponentCalendarEntry.prototype.setEditor = /** * @param {?} editor * @return {?} */ function (editor) { this.editor = editor; }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.isSelfDataDirty = /** * @return {?} */ function () { return false; }; /** * @param {?} data * @return {?} */ DefaultComponentCalendarEntry.prototype.selfSaveData = /** * @param {?} data * @return {?} */ function (data) { }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.selfResetData = /** * @return {?} */ function () { }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.getModel = /** * @return {?} */ function () { return this.model; }; /** * @param {?} model * @return {?} */ DefaultComponentCalendarEntry.prototype.setModel = /** * @param {?} model * @return {?} */ function (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 {?} */ DefaultComponentCalendarEntry.prototype.getMenuModelFactory = /** * @return {?} */ function () { return this.menuFactory; }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.getComponentType = /** * @return {?} */ function () { return this.componentType; }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.doPreload = /** * @return {?} */ function () { return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.doLoaded = /** * @return {?} */ function () { }; /** * @param {?} $event * @return {?} */ DefaultComponentCalendarEntry.prototype.onPopoverClosed = /** * @param {?} $event * @return {?} */ function ($event) { if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') { if (typeof this.compoWrapInstance.onPopoverClosed === 'function') { this.compoWrapInstance.onPopoverClosed($event); } } }; /** * @param {?} $event * @return {?} */ DefaultComponentCalendarEntry.prototype.onAutoSaved = /** * @param {?} $event * @return {?} */ function ($event) { if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') { if (typeof this.compoWrapInstance.onAutoSaved === 'function') { this.compoWrapInstance.onAutoSaved($event); } } }; /** * @return {?} */ DefaultComponentCalendarEntry.prototype.isAutoSave = /** * @return {?} */ function () { 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\">\n\t<div class=\"header\">\n\t\t<div class=\"wrapper\">\n\t\t\t<div>\n\t\t\t\t<div class=\"info\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t\t\t<div class=\"table-cell-wrapper middle\">{{getTitle()}}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"more\">\n\t\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t\t<div class=\"table-cell-wrapper middle\"><phx-ellipsis-btn #ellipsisButton [menuFactory]=\"getMenuModelFactory()\" [data]=\"getData()\"></phx-ellipsis-btn></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"body\">\n\t\t<div class=\"wrapper\">\n\t\t\t<div class=\"description\">\n\t\t\t\t{{getDescription()}}\n\t\t\t</div>\n\t\t\t<div class=\"content\">\n\t\t\t\t<phx-component-wrapper [type]=\"getComponentType()\" [data]=\"getData()\" [handler]=\"_getComponentHandler()\" [dataParent]=\"this\"></phx-component-wrapper>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n" },] }, ]; /** @nocollapse */ DefaultComponentCalendarEntry.ctorParameters = function () { return [ { 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); return DefaultComponentCalendarEntry; }(AbstractHasDataHelp)); export { DefaultComponentCalendarEntry }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdENvbXBvbmVudENhbGVuZGFyRW50cnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2VkaXRvci9EZWZhdWx0Q29tcG9uZW50Q2FsZW5kYXJFbnRyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBUSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU03RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSXBELHFCQUFNLFNBQVMsR0FBVyxzQ0FBc0MsQ0FBQztBQUNqRSx5QkFBeUIsQ0FBQTs7SUFvQzBCLHlEQUFtQjtJQXVEcEUsdUNBQVksVUFBc0I7UUFBbEMsWUFDRSxrQkFBTSxVQUFVLENBQUMsU0FJbEI7UUFIQyxLQUFJLENBQUMsYUFBYSxHQUFHLHlCQUF5QixDQUFDO1FBQy9DLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsS0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7O0tBQzFCOzs7O0lBRU0sZ0RBQVE7Ozs7O1FBQ2IsaUJBQU0sUUFBUSxXQUFFLENBQUM7UUFFakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsTUFB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QUFLO29DQUdMLEtBQUs7K0JBR0wsS0FBSzs4QkFHTCxLQUFLO21DQUdMLEtBQUs7NEJBR0wsS0FBSzsyQkFHTCxLQUFLLFNBQUMsWUFBWTs0QkFHbEIsS0FBSztnQ0FFTCxLQUFLOzJCQUdMLEtBQUs7MEJBR0wsS0FBSzttQ0FHTCxTQUFTLFNBQUMsZ0JBQWdCOzRCQXVFMUIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7O1FBL0doQyxNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7MENBQ2EsUUFBUTs7O1FBRTdCLE1BQU0sRUFBRTswQ0FDWSxRQUFROzs7UUFFNUIsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxDQUFDLFlBQVksQ0FBQzs7OztRQUtwQixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7MENBQ08sa0JBQWtCOzs7UUFFakMsTUFBTSxFQUFFOzBDQUNNLDJCQUEyQjs7d0NBakc1QztFQXFEbUQsbUJBQW1CO1NBQXpELDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVHlwZSwgVmlld0NoaWxkLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SGFzRGF0YUhlbHAgfSBmcm9tICcuLi9BYnN0cmFjdEhhc0RhdGFIZWxwJztcbmltcG9ydCB7IElIYXNNb2RlbCB9IGZyb20gJy4uL0lIYXNNb2RlbCc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4uL0lIYXNEYXRhJztcbmltcG9ydCB7IENhbGVuZGFyRW50cnkgfSBmcm9tICcuLi9tb2RlbC9DYWxlbmRhckVudHJ5JztcbmltcG9ydCB7IElDYWxlbmRhckVudHJ5TWFwcGVyIH0gZnJvbSAnLi9JQ2FsZW5kYXJFbnRyeU1hcHBlcic7XG5pbXBvcnQgeyBJQ2FsZW5kYXJFbnRyeVBvcG92ZXJDb250ZW50IH0gZnJvbSAnLi9JQ2FsZW5kYXJFbnRyeVBvcG92ZXJDb250ZW50JztcbmltcG9ydCB7IEFic3RyYWN0RGF0YUVkaXRvciB9IGZyb20gJy4vQWJzdHJhY3REYXRhRWRpdG9yJztcbmltcG9ydCB7IERlZmF1bHRFbnRyeUVkaXRvclBvcG92ZXIgfSBmcm9tICcuL0RlZmF1bHRFbnRyeUVkaXRvclBvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElNZW51TW9kZWxGYWN0b3J5IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L0lNZW51TW9kZWxGYWN0b3J5JztcbmltcG9ydCB7IEVsbGlwc2lzQnV0dG9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L0VsbGlwc2lzQnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wb25lbnRDYWxlbmRhckVudHJ5TW9kZWwgfSBmcm9tICcuLi9tb2RlbC9Db21wb25lbnRDYWxlbmRhckVudHJ5TW9kZWwnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL2RlY29yYXRvcnMnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtZGVmYXVsdC1jb21wb25lbnQtY2FsZW5kYXItZW50cnlcIjtcbkRlZmF1bHRFbnRyeUVkaXRvclBvcG92ZXJcbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtZGVmYXVsdC1jb21wb25lbnQtY2FsZW5kYXItZW50cnlcIj5cblx0PGRpdiBjbGFzcz1cImhlYWRlclwiPlxuXHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG5cdFx0XHQ8ZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5mb1wiPlxuXHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPnt7Z2V0VGl0bGUoKX19PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtb3JlXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+PHBoeC1lbGxpcHNpcy1idG4gI2VsbGlwc2lzQnV0dG9uIFttZW51RmFjdG9yeV09XCJnZXRNZW51TW9kZWxGYWN0b3J5KClcIiBbZGF0YV09XCJnZXREYXRhKClcIj48L3BoeC1lbGxpcHNpcy1idG4+PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiYm9keVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj5cblx0XHRcdFx0e3tnZXREZXNjcmlwdGlvbigpfX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cblx0XHRcdFx0PHBoeC1jb21wb25lbnQtd3JhcHBlciAgW3R5cGVdPVwiZ2V0Q29tcG9uZW50VHlwZSgpXCIgW2RhdGFdPVwiZ2V0RGF0YSgpXCIgW2hhbmRsZXJdPVwiX2dldENvbXBvbmVudEhhbmRsZXIoKVwiIFtkYXRhUGFyZW50XT1cInRoaXNcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0Q29tcG9uZW50Q2FsZW5kYXJFbnRyeSBleHRlbmRzIEFic3RyYWN0SGFzRGF0YUhlbHAgaW1wbGVtZW50cyBPbkluaXQsIElDYWxlbmRhckVudHJ5UG9wb3ZlckNvbnRlbnQsIElIYXNNb2RlbCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGVudHJ5TWFwcGVyOiBJQ2FsZW5kYXJFbnRyeU1hcHBlcjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgZWRpdG9yOiBBYnN0cmFjdERhdGFFZGl0b3I7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIG1vZGVsOiBDb21wb25lbnRDYWxlbmRhckVudHJ5TW9kZWw7XG4gIEBWaWV3Q2hpbGQoJ2VsbGlwc2lzQnV0dG9uJylcbiAgcHJpdmF0ZSBlbGxpcHNpc0J1dHRvbjogRWxsaXBzaXNCdXR0b247XG4gIFxuICBwcml2YXRlIGNvbXBvbmVudFR5cGU6IFR5cGU8YW55PjtcbiAgcHJpdmF0ZSBjb21wb25lbnRIYW5kbGVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBjb21wb1dyYXBJbnN0YW5jZTogYW55O1xuICBwcml2YXRlIHNlbGVjdGVkSGVhZGVyVGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBzZWxlY3RlZERhdGE6IGFueTtcbiAgcHJpdmF0ZSBtZW51RmFjdG9yeTogSU1lbnVNb2RlbEZhY3Rvcnk7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IERlZmF1bHRFbnRyeUVkaXRvclBvcG92ZXI7XG4gICAgdGhpcy5zZWxlY3RlZEhlYWRlclRpdGxlID0gXCJcIjtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIGlmICh0aGlzLmVkaXRvciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5lZGl0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLm1lbnVGYWN0b3J5ID0gdGhpcy5lZGl0b3IuZ2V0TWVudU1vZGVsRmFjdG9yeSgpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50SGFuZGxlciA9IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgbGV0IGNvbUluc3RhbmNlID0gbnVsbDtcbiAgICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgdHlwZW9mIHJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29tSW5zdGFuY2UgPSByZXN1bHQuaW5zdGFuY2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmRhdGEgIT09ICd1bmRlZmluZWQnICYmIGNvbUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tSW5zdGFuY2Uuc2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbUluc3RhbmNlLnNldERhdGEodGhpcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb21JbnN0YW5jZS5zZXRDYWxlbmRhckVudHJ5TWFwcGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbUluc3RhbmNlLnNldENhbGVuZGFyRW50cnlNYXBwZXIodGhpcy5lbnRyeU1hcHBlcik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbUluc3RhbmNlLnNldEVkaXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21JbnN0YW5jZS5zZXRFZGl0b3IodGhpcy5lZGl0b3IpO1xuICAgICAgfVxuICAgICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZSA9IGNvbUluc3RhbmNlO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5kYXRhUGFyZW50ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmRhdGFQYXJlbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgcGFyZW50OiBhbnkgPSB0aGlzLmRhdGFQYXJlbnQ7XG4gICAgICBpZiAodHlwZW9mIHBhcmVudC5nZXRIaWRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGV0IGhpZGVFdmVudCA9IHBhcmVudC5nZXRIaWRlRXZlbnQoKTtcblxuICAgICAgICBpZiAoaGlkZUV2ZW50ICE9PSBudWxsICYmICh0eXBlb2YgaGlkZUV2ZW50ICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAgICBoaWRlRXZlbnQuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBoaWRlIG1vcmUgbWVudVxuICAgICAgICAgICAgaWYgKHRoaXMuZWxsaXBzaXNCdXR0b24gIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZWxsaXBzaXNCdXR0b24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRoaXMuZWxsaXBzaXNCdXR0b24uaGlkZU1lbnUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FsZW5kYXJFbnRyeShkYXRhOiBhbnkpOiBDYWxlbmRhckVudHJ5IHtcbiAgICBpZiAodGhpcy5lbnRyeU1hcHBlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5lbnRyeU1hcHBlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudHJ5TWFwcGVyLmdldENhbGVuZGFyRW50cnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIF9nZXRDb21wb25lbnRIYW5kbGVyKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRIYW5kbGVyO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25DbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbGxpcHNpc0J1dHRvbiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5lbGxpcHNpc0J1dHRvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLmVsbGlwc2lzQnV0dG9uLmlzU2hvd01lbnUoKSkge1xuICAgICAgICB0aGlzLmVsbGlwc2lzQnV0dG9uLmhpZGVNZW51KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFRpdGxlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbC50aXRsZTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnNldERhdGEoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2FsZW5kYXJFbnRyeU1hcHBlcihlbnRyeU1hcHBlcjogSUNhbGVuZGFyRW50cnlNYXBwZXIpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJ5TWFwcGVyID0gZW50cnlNYXBwZXI7XG5cbiAgICBpZiAodGhpcy5jb21wb1dyYXBJbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb1dyYXBJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5zZXRDYWxlbmRhckVudHJ5TWFwcGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uuc2V0Q2FsZW5kYXJFbnRyeU1hcHBlcih0aGlzLmVudHJ5TWFwcGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdG9yKGVkaXRvcjogQWJzdHJhY3REYXRhRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxmRGF0YURpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmU2F2ZURhdGEoZGF0YTogYW55KTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZWxmUmVzZXREYXRhKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kZWwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RlbChtb2RlbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLm1vZGVsLnR5cGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29tcG9uZW50VHlwZSA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy5jb21wb25lbnRUeXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gRGVmYXVsdEVudHJ5RWRpdG9yUG9wb3ZlcjtcblxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNZW51TW9kZWxGYWN0b3J5KCk6IElNZW51TW9kZWxGYWN0b3J5IHtcbiAgICByZXR1cm4gdGhpcy5tZW51RmFjdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21wb25lbnRUeXBlKCk6IFR5cGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBkb1ByZWxvYWQoKTogUHJvbWlzZTxhbnk+IHsgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7ICAgICAgIHJlc29sdmUobnVsbCk7ICAgICB9KTsgICB9ICBwdWJsaWMgZG9Mb2FkZWQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJDbG9zZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLm9uUG9wb3ZlckNsb3NlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLm9uUG9wb3ZlckNsb3NlZCgkZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkF1dG9TYXZlZCgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uub25BdXRvU2F2ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5vbkF1dG9TYXZlZCgkZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0F1dG9TYXZlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLmlzQXV0b1NhdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UuaXNBdXRvU2F2ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==