UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

466 lines (465 loc) 37.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, ViewChild, ElementRef } from '@angular/core'; import { AbstractHasDataHelp } from '../AbstractHasDataHelp'; import { AbstractDataEditor } from './AbstractDataEditor'; import { DefaultEntryEditorPopover } from './DefaultEntryEditorPopover.component'; import { EllipsisButton } from '../../component/EllipsisButton.component'; import { Option } from '../../decorator/Option.decorator'; var /** @type {?} */ TYPE_NAME = "phx-default-calendar-entry-list-popover"; var DefaultCalendarEntryListPopover = /** @class */ (function (_super) { tslib_1.__extends(DefaultCalendarEntryListPopover, _super); function DefaultCalendarEntryListPopover(elementRef) { var _this = _super.call(this, elementRef) || this; _this.entryList = []; _this.showList = true; _this.autoFocusMoreMenu = false; _this.editorType = DefaultEntryEditorPopover; _this.selectedHeaderTitle = ""; _this.selectedData = null; return _this; } /** * @return {?} */ DefaultCalendarEntryListPopover.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) { _this.showList = true; // hide more menu if (_this.ellipsisButton !== null && typeof _this.ellipsisButton !== 'undefined') { _this.ellipsisButton.hideMenu(); } }); } } } }; /** * @param {?} data * @return {?} */ DefaultCalendarEntryListPopover.prototype.getCalendarEntry = /** * @param {?} data * @return {?} */ function (data) { if (this.entryMapper !== null && typeof this.entryMapper !== 'undefined') { return this.entryMapper.getCalendarEntry(data); } return null; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.reloadEntryList = /** * @return {?} */ function () { this.entryList = []; if (this.data !== null && typeof this.data !== 'undefined') { if (Array.isArray(this.data)) { try { for (var _a = tslib_1.__values(this.data), _b = _a.next(); !_b.done; _b = _a.next()) { var d = _b.value; this.entryList.push(this.getCalendarEntry(d)); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_1) throw e_1.error; } } } else { this.entryList.push(this.getCalendarEntry(this.data)); } } var e_1, _c; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype._getEntryListSize = /** * @return {?} */ function () { if (this.entryList !== null && typeof this.entryList !== 'undefined') { return this.entryList.length; } return 0; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype._getEntryList = /** * @return {?} */ function () { return this.entryList; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype._isAutoFocusMoreMenu = /** * @return {?} */ function () { return this.autoFocusMoreMenu; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype._getComponentHandler = /** * @return {?} */ function () { return this.componentHandler; }; /** * @param {?} $event * @param {?} index * @return {?} */ DefaultCalendarEntryListPopover.prototype.onItemClicked = /** * @param {?} $event * @param {?} index * @return {?} */ function ($event, index) { this.showList = false; this.selectedHeaderTitle = ""; this.selectedData = null; if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') { if (typeof this.compoWrapInstance.setData === 'function') { var /** @type {?} */ data = null; if (this.data !== null && typeof this.data !== 'undefined') { if (Array.isArray(this.data)) { if (index < this.data.length) { data = this.data[index]; } } else { data = this.data; } } if (index < this.entryList.length) { var /** @type {?} */ entry = this.entryList[index]; this.selectedHeaderTitle = entry.title; } this.selectedData = data; this.compoWrapInstance.setData(data); } } }; /** * @param {?} $event * @return {?} */ DefaultCalendarEntryListPopover.prototype.onBackToList = /** * @param {?} $event * @return {?} */ function ($event) { this.showList = true; if (this.ellipsisButton !== null && typeof this.ellipsisButton !== 'undefined') { this.ellipsisButton.hideMenu(); } }; /** * @param {?} data * @return {?} */ DefaultCalendarEntryListPopover.prototype.setData = /** * @param {?} data * @return {?} */ function (data) { _super.prototype.setData.call(this, data); this.reloadEntryList(); }; /** * @param {?} entryMapper * @return {?} */ DefaultCalendarEntryListPopover.prototype.setCalendarEntryMapper = /** * @param {?} entryMapper * @return {?} */ function (entryMapper) { this.entryMapper = entryMapper; this.reloadEntryList(); }; /** * @param {?} editor * @return {?} */ DefaultCalendarEntryListPopover.prototype.setEditor = /** * @param {?} editor * @return {?} */ function (editor) { this.editor = editor; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.isSelfDataDirty = /** * @return {?} */ function () { return false; }; /** * @param {?} data * @return {?} */ DefaultCalendarEntryListPopover.prototype.selfSaveData = /** * @param {?} data * @return {?} */ function (data) { }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.selfResetData = /** * @return {?} */ function () { }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.getModel = /** * @return {?} */ function () { return this.model; }; /** * @param {?} model * @return {?} */ DefaultCalendarEntryListPopover.prototype.setModel = /** * @param {?} model * @return {?} */ function (model) { this.model = model; if (this.model !== null && typeof this.model !== 'undefined') { this.editorType = this.model.type; } if (this.editorType === null || typeof this.editorType === 'undefined') { this.editorType = DefaultEntryEditorPopover; } }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.isShowList = /** * @return {?} */ function () { return this.showList; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.getSelectedHeaderTitle = /** * @return {?} */ function () { return this.selectedHeaderTitle; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.getMenuModelFactory = /** * @return {?} */ function () { return this.menuFactory; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.getSelectedData = /** * @return {?} */ function () { return this.selectedData; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.getEditorType = /** * @return {?} */ function () { return this.editorType; }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.doPreload = /** * @return {?} */ function () { return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.doLoaded = /** * @return {?} */ function () { }; /** * @param {?} $event * @return {?} */ DefaultCalendarEntryListPopover.prototype.onPopoverClosed = /** * @param {?} $event * @return {?} */ function ($event) { }; /** * @param {?} $event * @return {?} */ DefaultCalendarEntryListPopover.prototype.onAutoSaved = /** * @param {?} $event * @return {?} */ function ($event) { }; /** * @return {?} */ DefaultCalendarEntryListPopover.prototype.isAutoSave = /** * @return {?} */ function () { return false; }; DefaultCalendarEntryListPopover.TYPE_NAME = TYPE_NAME; DefaultCalendarEntryListPopover.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div class=\"phx-default-calendar-entry-list-popover\">\n\t<div class=\"header\">\n\t\t<div class=\"left\" [class.show]=\"!isShowList()\"\n\t\t\t(click)=\"onBackToList($event)\">\n\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t<div class=\"table-cell-wrapper middle\"><div class=\"left-angle\"></div></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"right\" [class.expand]=\"isShowList()\">\n\t\t\t<div class=\"info\">\n\t\t\t\t<div [class.expand]=\"!isShowList()\">\n\t\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t\t{{isShowList() ? getModel().title : getSelectedHeaderTitle()}}\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>\n\t\t\t\t\t{{isShowList() ? _getEntryListSize() + 'items' : ''}}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"more\">\n\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\"><phx-ellipsis-btn #ellipsisButton [menuFactory]=\"getMenuModelFactory()\" [data]=\"getSelectedData()\"></phx-ellipsis-btn></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=\"list\" [class.show]=\"isShowList()\">\n\t\t\t<ng-template ngFor let-item [ngForOf]=\"_getEntryList()\" let-i=\"index\">\n\t\t\t\t<div class=\"row\" (click)=\"onItemClicked($event, i)\">\n\t\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t\t<div class=\"left\">{{item.title}}</div>\n\t\t\t\t\t\t\t<div class=\"right\"> > </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</ng-template>\n\t\t</div>\n\t\t<div class=\"form\" [class.show]=\"!isShowList()\">\n\t\t\t<phx-component-wrapper [type]=\"getEditorType()\" [handler]=\"_getComponentHandler()\" [dataParent]=\"this\"></phx-component-wrapper>\n\t\t</div>\n\t</div>\n</div>\n" },] }, ]; /** @nocollapse */ DefaultCalendarEntryListPopover.ctorParameters = function () { return [ { type: ElementRef, }, ]; }; DefaultCalendarEntryListPopover.propDecorators = { "data": [{ type: Input },], "entryMapper": [{ type: Input },], "editor": [{ type: Input },], "model": [{ type: Input },], "menuFactory": [{ type: Input },], "ellipsisButton": [{ type: ViewChild, args: ['ellipsisButton',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultCalendarEntryListPopover.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultCalendarEntryListPopover.prototype, "entryMapper", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", AbstractDataEditor) ], DefaultCalendarEntryListPopover.prototype, "editor", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultCalendarEntryListPopover.prototype, "model", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultCalendarEntryListPopover.prototype, "menuFactory", void 0); return DefaultCalendarEntryListPopover; }(AbstractHasDataHelp)); export { DefaultCalendarEntryListPopover }; function DefaultCalendarEntryListPopover_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DefaultCalendarEntryListPopover.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DefaultCalendarEntryListPopover.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DefaultCalendarEntryListPopover.propDecorators; /** @type {?} */ DefaultCalendarEntryListPopover.TYPE_NAME; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.data; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.entryMapper; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.editor; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.model; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.menuFactory; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.ellipsisButton; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.entryList; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.showList; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.editorType; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.componentHandler; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.compoWrapInstance; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.selectedHeaderTitle; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.selectedData; /** @type {?} */ DefaultCalendarEntryListPopover.prototype.autoFocusMoreMenu; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdENhbGVuZGFyRW50cnlMaXN0UG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL0RlZmF1bHRDYWxlbmRhckVudHJ5TGlzdFBvcG92ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVEsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUs3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBSTFELHFCQUFNLFNBQVMsR0FBVyx5Q0FBeUMsQ0FBQzs7SUFxRGYsMkRBQW1CO0lBK0J0RSx5Q0FBWSxVQUFzQjtRQUFsQyxZQUNFLGtCQUFNLFVBQVUsQ0FBQyxTQU9sQjtRQU5DLEtBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLEtBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLEtBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsS0FBSSxDQUFDLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQztRQUM1QyxLQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLEtBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDOztLQUMxQjs7OztJQUVNLGtEQUFROzs7OztRQUNiLGlCQUFNLFFBQVEsV0FBRSxDQUFDO1FBRWpCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FB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R1IsTUFBTSxFQUFFOzs7MENBcEZYO0VBbUVxRCxtQkFBbUI7U0FBM0QsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBUeXBlLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SGFzRGF0YUhlbHAgfSBmcm9tICcuLi9BYnN0cmFjdEhhc0RhdGFIZWxwJztcbmltcG9ydCB7IElIYXNNb2RlbCB9IGZyb20gJy4uL0lIYXNNb2RlbCc7XG5pbXBvcnQgeyBDYWxlbmRhckVudHJ5IH0gZnJvbSAnLi4vbW9kZWwvQ2FsZW5kYXJFbnRyeSc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJFbnRyeU1hcHBlciB9IGZyb20gJy4vSUNhbGVuZGFyRW50cnlNYXBwZXInO1xuaW1wb3J0IHsgSUNhbGVuZGFyRW50cnlQb3BvdmVyQ29udGVudCB9IGZyb20gJy4vSUNhbGVuZGFyRW50cnlQb3BvdmVyQ29udGVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFFZGl0b3IgfSBmcm9tICcuL0Fic3RyYWN0RGF0YUVkaXRvcic7XG5pbXBvcnQgeyBEZWZhdWx0RW50cnlFZGl0b3JQb3BvdmVyIH0gZnJvbSAnLi9EZWZhdWx0RW50cnlFZGl0b3JQb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJTWVudU1vZGVsRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9JTWVudU1vZGVsRmFjdG9yeSc7XG5pbXBvcnQgeyBFbGxpcHNpc0J1dHRvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9FbGxpcHNpc0J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtZGVmYXVsdC1jYWxlbmRhci1lbnRyeS1saXN0LXBvcG92ZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1kZWZhdWx0LWNhbGVuZGFyLWVudHJ5LWxpc3QtcG9wb3ZlclwiPlxuXHQ8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG5cdFx0PGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3Muc2hvd109XCIhaXNTaG93TGlzdCgpXCJcblx0XHRcdChjbGljayk9XCJvbkJhY2tUb0xpc3QoJGV2ZW50KVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj48ZGl2IGNsYXNzPVwibGVmdC1hbmdsZVwiPjwvZGl2PjwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cInJpZ2h0XCIgW2NsYXNzLmV4cGFuZF09XCJpc1Nob3dMaXN0KClcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJpbmZvXCI+XG5cdFx0XHRcdDxkaXYgW2NsYXNzLmV4cGFuZF09XCIhaXNTaG93TGlzdCgpXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+XG5cdFx0XHRcdFx0XHRcdHt7aXNTaG93TGlzdCgpID8gZ2V0TW9kZWwoKS50aXRsZSA6IGdldFNlbGVjdGVkSGVhZGVyVGl0bGUoKX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0e3tpc1Nob3dMaXN0KCkgPyBfZ2V0RW50cnlMaXN0U2l6ZSgpICsgJ2l0ZW1zJyA6ICcnfX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJtb3JlXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyIGZsdWlkXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj48cGh4LWVsbGlwc2lzLWJ0biAjZWxsaXBzaXNCdXR0b24gW21lbnVGYWN0b3J5XT1cImdldE1lbnVNb2RlbEZhY3RvcnkoKVwiIFtkYXRhXT1cImdldFNlbGVjdGVkRGF0YSgpXCI+PC9waHgtZWxsaXBzaXMtYnRuPjwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cImJvZHlcIj5cblx0XHQ8ZGl2IGNsYXNzPVwibGlzdFwiIFtjbGFzcy5zaG93XT1cImlzU2hvd0xpc3QoKVwiPlxuXHRcdFx0PG5nLXRlbXBsYXRlIG5nRm9yIGxldC1pdGVtIFtuZ0Zvck9mXT1cIl9nZXRFbnRyeUxpc3QoKVwiIGxldC1pPVwiaW5kZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInJvd1wiIChjbGljayk9XCJvbkl0ZW1DbGlja2VkKCRldmVudCwgaSlcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxlZnRcIj57e2l0ZW0udGl0bGV9fTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicmlnaHRcIj4gPiA8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImZvcm1cIiBbY2xhc3Muc2hvd109XCIhaXNTaG93TGlzdCgpXCI+XG5cdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyICBbdHlwZV09XCJnZXRFZGl0b3JUeXBlKClcIiBbaGFuZGxlcl09XCJfZ2V0Q29tcG9uZW50SGFuZGxlcigpXCIgW2RhdGFQYXJlbnRdPVwidGhpc1wiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0Q2FsZW5kYXJFbnRyeUxpc3RQb3BvdmVyIGV4dGVuZHMgQWJzdHJhY3RIYXNEYXRhSGVscCBpbXBsZW1lbnRzIE9uSW5pdCwgSUNhbGVuZGFyRW50cnlQb3BvdmVyQ29udGVudCwgSUhhc01vZGVsIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBlbnRyeU1hcHBlcjogSUNhbGVuZGFyRW50cnlNYXBwZXI7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGVkaXRvcjogQWJzdHJhY3REYXRhRWRpdG9yO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBtb2RlbDogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBtZW51RmFjdG9yeTogSU1lbnVNb2RlbEZhY3Rvcnk7XG4gIEBWaWV3Q2hpbGQoJ2VsbGlwc2lzQnV0dG9uJylcbiAgcHJpdmF0ZSBlbGxpcHNpc0J1dHRvbjogRWxsaXBzaXNCdXR0b247XG4gIFxuICBwcml2YXRlIGVudHJ5TGlzdDogQ2FsZW5kYXJFbnRyeVtdO1xuICBwcml2YXRlIHNob3dMaXN0OiBib29sZWFuO1xuICBwcml2YXRlIGVkaXRvclR5cGU6IFR5cGU8YW55PjtcbiAgcHJpdmF0ZSBjb21wb25lbnRIYW5kbGVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBjb21wb1dyYXBJbnN0YW5jZTogYW55O1xuICBwcml2YXRlIHNlbGVjdGVkSGVhZGVyVGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBzZWxlY3RlZERhdGE6IGFueTtcbiAgcHJpdmF0ZSBhdXRvRm9jdXNNb3JlTWVudTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZik7XG4gICAgdGhpcy5lbnRyeUxpc3QgPSBbXTtcbiAgICB0aGlzLnNob3dMaXN0ID0gdHJ1ZTtcbiAgICB0aGlzLmF1dG9Gb2N1c01vcmVNZW51ID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0b3JUeXBlID0gRGVmYXVsdEVudHJ5RWRpdG9yUG9wb3ZlcjtcbiAgICB0aGlzLnNlbGVjdGVkSGVhZGVyVGl0bGUgPSBcIlwiO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgaWYgKHRoaXMuZWRpdG9yICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmVkaXRvciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubWVudUZhY3RvcnkgPSB0aGlzLmVkaXRvci5nZXRNZW51TW9kZWxGYWN0b3J5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBsZXQgY29tSW5zdGFuY2UgPSBudWxsO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21JbnN0YW5jZSA9IHJlc3VsdC5pbnN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGEgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29tSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21JbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29tSW5zdGFuY2Uuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbUluc3RhbmNlLnNldENhbGVuZGFyRW50cnlNYXBwZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29tSW5zdGFuY2Uuc2V0Q2FsZW5kYXJFbnRyeU1hcHBlcih0aGlzLmVudHJ5TWFwcGVyKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29tSW5zdGFuY2Uuc2V0RWRpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbUluc3RhbmNlLnNldEVkaXRvcih0aGlzLmVkaXRvcik7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlID0gY29tSW5zdGFuY2U7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRhdGFQYXJlbnQgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YVBhcmVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBwYXJlbnQ6IGFueSA9IHRoaXMuZGF0YVBhcmVudDtcbiAgICAgIGlmICh0eXBlb2YgcGFyZW50LmdldEhpZGVFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsZXQgaGlkZUV2ZW50ID0gcGFyZW50LmdldEhpZGVFdmVudCgpO1xuXG4gICAgICAgIGlmIChoaWRlRXZlbnQgIT09IG51bGwgJiYgKHR5cGVvZiBoaWRlRXZlbnQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICAgIGhpZGVFdmVudC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QgPSB0cnVlO1xuICAgICAgICAgICAgLy8gaGlkZSBtb3JlIG1lbnVcbiAgICAgICAgICAgIGlmICh0aGlzLmVsbGlwc2lzQnV0dG9uICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmVsbGlwc2lzQnV0dG9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aGlzLmVsbGlwc2lzQnV0dG9uLmhpZGVNZW51KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENhbGVuZGFyRW50cnkoZGF0YTogYW55KTogQ2FsZW5kYXJFbnRyeSB7XG4gICAgaWYgKHRoaXMuZW50cnlNYXBwZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZW50cnlNYXBwZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRyeU1hcHBlci5nZXRDYWxlbmRhckVudHJ5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkRW50cnlMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuZW50cnlMaXN0ID0gW107XG4gICAgaWYgKHRoaXMuZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgICBmb3IgKGxldCBkIG9mIHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuZW50cnlMaXN0LnB1c2godGhpcy5nZXRDYWxlbmRhckVudHJ5KGQpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnRyeUxpc3QucHVzaCh0aGlzLmdldENhbGVuZGFyRW50cnkodGhpcy5kYXRhKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIF9nZXRFbnRyeUxpc3RTaXplKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuZW50cnlMaXN0ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmVudHJ5TGlzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudHJ5TGlzdC5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHVibGljIF9nZXRFbnRyeUxpc3QoKTogQ2FsZW5kYXJFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyeUxpc3Q7XG4gIH1cblxuICBwdWJsaWMgX2lzQXV0b0ZvY3VzTW9yZU1lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b0ZvY3VzTW9yZU1lbnU7XG4gIH1cblxuICBwdWJsaWMgX2dldENvbXBvbmVudEhhbmRsZXIoKTogRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgb25JdGVtQ2xpY2tlZCgkZXZlbnQ6IGFueSwgaW5kZXg6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0xpc3QgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkSGVhZGVyVGl0bGUgPSBcIlwiO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMuZW50cnlMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIGxldCBlbnRyeSA9IHRoaXMuZW50cnlMaXN0W2luZGV4XTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSGVhZGVyVGl0bGUgPSBlbnRyeS50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IGRhdGE7XG5cbiAgICAgICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5zZXREYXRhKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkJhY2tUb0xpc3QoJGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dMaXN0ID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5lbGxpcHNpc0J1dHRvbiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5lbGxpcHNpc0J1dHRvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuZWxsaXBzaXNCdXR0b24uaGlkZU1lbnUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5zZXREYXRhKGRhdGEpO1xuXG4gICAgdGhpcy5yZWxvYWRFbnRyeUxpc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDYWxlbmRhckVudHJ5TWFwcGVyKGVudHJ5TWFwcGVyOiBJQ2FsZW5kYXJFbnRyeU1hcHBlcik6IHZvaWQge1xuICAgIHRoaXMuZW50cnlNYXBwZXIgPSBlbnRyeU1hcHBlcjtcblxuICAgIHRoaXMucmVsb2FkRW50cnlMaXN0KCk7XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdG9yKGVkaXRvcjogQWJzdHJhY3REYXRhRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxmRGF0YURpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmU2F2ZURhdGEoZGF0YTogYW55KTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZWxmUmVzZXREYXRhKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kZWwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RlbChtb2RlbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmVkaXRvclR5cGUgPSB0aGlzLm1vZGVsLnR5cGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdG9yVHlwZSA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy5lZGl0b3JUeXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5lZGl0b3JUeXBlID0gRGVmYXVsdEVudHJ5RWRpdG9yUG9wb3ZlcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNTaG93TGlzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93TGlzdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZEhlYWRlclRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRIZWFkZXJUaXRsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZW51TW9kZWxGYWN0b3J5KCk6IElNZW51TW9kZWxGYWN0b3J5IHtcbiAgICByZXR1cm4gdGhpcy5tZW51RmFjdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZERhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0RWRpdG9yVHlwZSgpOiBUeXBlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvclR5cGU7XG4gIH1cblxuICBwdWJsaWMgZG9QcmVsb2FkKCk6IFByb21pc2U8YW55PiB7ICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyAgICAgICByZXNvbHZlKG51bGwpOyAgICAgfSk7ICAgfSAgcHVibGljIGRvTG9hZGVkKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgb25Qb3BvdmVyQ2xvc2VkKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBvbkF1dG9TYXZlZCgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgaXNBdXRvU2F2ZSgpOiBib29sZWFuIHtcbiAgXHRyZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==