UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

407 lines (406 loc) 33.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'; const /** @type {?} */ TYPE_NAME = "phx-default-calendar-entry-list-popover"; export class DefaultCalendarEntryListPopover extends AbstractHasDataHelp { /** * @param {?} elementRef */ constructor(elementRef) { super(elementRef); this.entryList = []; this.showList = true; this.autoFocusMoreMenu = false; this.editorType = 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) => { this.showList = true; // 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 {?} */ reloadEntryList() { this.entryList = []; if (this.data !== null && typeof this.data !== 'undefined') { if (Array.isArray(this.data)) { for (let /** @type {?} */ d of this.data) { this.entryList.push(this.getCalendarEntry(d)); } } else { this.entryList.push(this.getCalendarEntry(this.data)); } } } /** * @return {?} */ _getEntryListSize() { if (this.entryList !== null && typeof this.entryList !== 'undefined') { return this.entryList.length; } return 0; } /** * @return {?} */ _getEntryList() { return this.entryList; } /** * @return {?} */ _isAutoFocusMoreMenu() { return this.autoFocusMoreMenu; } /** * @return {?} */ _getComponentHandler() { return this.componentHandler; } /** * @param {?} $event * @param {?} index * @return {?} */ onItemClicked($event, index) { this.showList = false; this.selectedHeaderTitle = ""; this.selectedData = null; if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') { if (typeof this.compoWrapInstance.setData === 'function') { let /** @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) { let /** @type {?} */ entry = this.entryList[index]; this.selectedHeaderTitle = entry.title; } this.selectedData = data; this.compoWrapInstance.setData(data); } } } /** * @param {?} $event * @return {?} */ onBackToList($event) { this.showList = true; if (this.ellipsisButton !== null && typeof this.ellipsisButton !== 'undefined') { this.ellipsisButton.hideMenu(); } } /** * @param {?} data * @return {?} */ setData(data) { super.setData(data); this.reloadEntryList(); } /** * @param {?} entryMapper * @return {?} */ setCalendarEntryMapper(entryMapper) { this.entryMapper = entryMapper; this.reloadEntryList(); } /** * @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.editorType = this.model.type; } if (this.editorType === null || typeof this.editorType === 'undefined') { this.editorType = DefaultEntryEditorPopover; } } /** * @return {?} */ isShowList() { return this.showList; } /** * @return {?} */ getSelectedHeaderTitle() { return this.selectedHeaderTitle; } /** * @return {?} */ getMenuModelFactory() { return this.menuFactory; } /** * @return {?} */ getSelectedData() { return this.selectedData; } /** * @return {?} */ getEditorType() { return this.editorType; } /** * @return {?} */ doPreload() { return new Promise((resolve, reject) => { resolve(null); }); } /** * @return {?} */ doLoaded() { } /** * @param {?} $event * @return {?} */ onPopoverClosed($event) { } /** * @param {?} $event * @return {?} */ onAutoSaved($event) { } /** * @return {?} */ isAutoSave() { 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"> <div class="header"> <div class="left" [class.show]="!isShowList()" (click)="onBackToList($event)"> <div class="table-wrapper fluid"> <div class="table-cell-wrapper middle"><div class="left-angle"></div></div> </div> </div> <div class="right" [class.expand]="isShowList()"> <div class="info"> <div [class.expand]="!isShowList()"> <div class="table-wrapper fluid"> <div class="table-cell-wrapper middle"> {{isShowList() ? getModel().title : getSelectedHeaderTitle()}} </div> </div> </div> <div> {{isShowList() ? _getEntryListSize() + 'items' : ''}} </div> </div> <div class="more"> <div class="table-wrapper fluid"> <div class="table-cell-wrapper middle"><phx-ellipsis-btn #ellipsisButton [menuFactory]="getMenuModelFactory()" [data]="getSelectedData()"></phx-ellipsis-btn></div> </div> </div> </div> </div> <div class="body"> <div class="list" [class.show]="isShowList()"> <ng-template ngFor let-item [ngForOf]="_getEntryList()" let-i="index"> <div class="row" (click)="onItemClicked($event, i)"> <div class="table-wrapper fluid"> <div class="table-cell-wrapper middle"> <div class="left">{{item.title}}</div> <div class="right"> > </div> </div> </div> </div> </ng-template> </div> <div class="form" [class.show]="!isShowList()"> <phx-component-wrapper [type]="getEditorType()" [handler]="_getComponentHandler()" [dataParent]="this"></phx-component-wrapper> </div> </div> </div> ` },] }, ]; /** @nocollapse */ DefaultCalendarEntryListPopover.ctorParameters = () => [ { 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); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdENhbGVuZGFyRW50cnlMaXN0UG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL0RlZmF1bHRDYWxlbmRhckVudHJ5TGlzdFBvcG92ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVEsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUs3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBSTFELHVCQUFNLFNBQVMsR0FBVyx5Q0FBeUMsQ0FBQztBQXFEcEUsTUFBTSxzQ0FBdUMsU0FBUSxtQkFBbUI7Ozs7SUErQnRFLFlBQVksVUFBc0I7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQztRQUM1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0tBQzFCOzs7O0lBRU0sUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixFQUFFLENB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bXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFR5cGUsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RIYXNEYXRhSGVscCB9IGZyb20gJy4uL0Fic3RyYWN0SGFzRGF0YUhlbHAnO1xuaW1wb3J0IHsgSUhhc01vZGVsIH0gZnJvbSAnLi4vSUhhc01vZGVsJztcbmltcG9ydCB7IENhbGVuZGFyRW50cnkgfSBmcm9tICcuLi9tb2RlbC9DYWxlbmRhckVudHJ5JztcbmltcG9ydCB7IElDYWxlbmRhckVudHJ5TWFwcGVyIH0gZnJvbSAnLi9JQ2FsZW5kYXJFbnRyeU1hcHBlcic7XG5pbXBvcnQgeyBJQ2FsZW5kYXJFbnRyeVBvcG92ZXJDb250ZW50IH0gZnJvbSAnLi9JQ2FsZW5kYXJFbnRyeVBvcG92ZXJDb250ZW50JztcbmltcG9ydCB7IEFic3RyYWN0RGF0YUVkaXRvciB9IGZyb20gJy4vQWJzdHJhY3REYXRhRWRpdG9yJztcbmltcG9ydCB7IERlZmF1bHRFbnRyeUVkaXRvclBvcG92ZXIgfSBmcm9tICcuL0RlZmF1bHRFbnRyeUVkaXRvclBvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElNZW51TW9kZWxGYWN0b3J5IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L0lNZW51TW9kZWxGYWN0b3J5JztcbmltcG9ydCB7IEVsbGlwc2lzQnV0dG9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L0VsbGlwc2lzQnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1kZWZhdWx0LWNhbGVuZGFyLWVudHJ5LWxpc3QtcG9wb3ZlclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LWRlZmF1bHQtY2FsZW5kYXItZW50cnktbGlzdC1wb3BvdmVyXCI+XG5cdDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cblx0XHQ8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5zaG93XT1cIiFpc1Nob3dMaXN0KClcIlxuXHRcdFx0KGNsaWNrKT1cIm9uQmFja1RvTGlzdCgkZXZlbnQpXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPjxkaXYgY2xhc3M9XCJsZWZ0LWFuZ2xlXCI+PC9kaXY+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwicmlnaHRcIiBbY2xhc3MuZXhwYW5kXT1cImlzU2hvd0xpc3QoKVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImluZm9cIj5cblx0XHRcdFx0PGRpdiBbY2xhc3MuZXhwYW5kXT1cIiFpc1Nob3dMaXN0KClcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0e3tpc1Nob3dMaXN0KCkgPyBnZXRNb2RlbCgpLnRpdGxlIDogZ2V0U2VsZWN0ZWRIZWFkZXJUaXRsZSgpfX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHR7e2lzU2hvd0xpc3QoKSA/IF9nZXRFbnRyeUxpc3RTaXplKCkgKyAnaXRlbXMnIDogJyd9fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vcmVcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPjxwaHgtZWxsaXBzaXMtYnRuICNlbGxpcHNpc0J1dHRvbiBbbWVudUZhY3RvcnldPVwiZ2V0TWVudU1vZGVsRmFjdG9yeSgpXCIgW2RhdGFdPVwiZ2V0U2VsZWN0ZWREYXRhKClcIj48L3BoeC1lbGxpcHNpcy1idG4+PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiYm9keVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsaXN0XCIgW2NsYXNzLnNob3ddPVwiaXNTaG93TGlzdCgpXCI+XG5cdFx0XHQ8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWl0ZW0gW25nRm9yT2ZdPVwiX2dldEVudHJ5TGlzdCgpXCIgbGV0LWk9XCJpbmRleFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93XCIgKGNsaWNrKT1cIm9uSXRlbUNsaWNrZWQoJGV2ZW50LCBpKVwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyIGZsdWlkXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGVmdFwiPnt7aXRlbS50aXRsZX19PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJyaWdodFwiPiA+IDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiZm9ybVwiIFtjbGFzcy5zaG93XT1cIiFpc1Nob3dMaXN0KClcIj5cblx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgIFt0eXBlXT1cImdldEVkaXRvclR5cGUoKVwiIFtoYW5kbGVyXT1cIl9nZXRDb21wb25lbnRIYW5kbGVyKClcIiBbZGF0YVBhcmVudF09XCJ0aGlzXCI+PC9waHgtY29tcG9uZW50LXdyYXBwZXI+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIERlZmF1bHRDYWxlbmRhckVudHJ5TGlzdFBvcG92ZXIgZXh0ZW5kcyBBYnN0cmFjdEhhc0RhdGFIZWxwIGltcGxlbWVudHMgT25Jbml0LCBJQ2FsZW5kYXJFbnRyeVBvcG92ZXJDb250ZW50LCBJSGFzTW9kZWwge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGVudHJ5TWFwcGVyOiBJQ2FsZW5kYXJFbnRyeU1hcHBlcjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgZWRpdG9yOiBBYnN0cmFjdERhdGFFZGl0b3I7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIG1vZGVsOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIG1lbnVGYWN0b3J5OiBJTWVudU1vZGVsRmFjdG9yeTtcbiAgQFZpZXdDaGlsZCgnZWxsaXBzaXNCdXR0b24nKVxuICBwcml2YXRlIGVsbGlwc2lzQnV0dG9uOiBFbGxpcHNpc0J1dHRvbjtcbiAgXG4gIHByaXZhdGUgZW50cnlMaXN0OiBDYWxlbmRhckVudHJ5W107XG4gIHByaXZhdGUgc2hvd0xpc3Q6IGJvb2xlYW47XG4gIHByaXZhdGUgZWRpdG9yVHlwZTogVHlwZTxhbnk+O1xuICBwcml2YXRlIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGNvbXBvV3JhcEluc3RhbmNlOiBhbnk7XG4gIHByaXZhdGUgc2VsZWN0ZWRIZWFkZXJUaXRsZTogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkRGF0YTogYW55O1xuICBwcml2YXRlIGF1dG9Gb2N1c01vcmVNZW51OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmKTtcbiAgICB0aGlzLmVudHJ5TGlzdCA9IFtdO1xuICAgIHRoaXMuc2hvd0xpc3QgPSB0cnVlO1xuICAgIHRoaXMuYXV0b0ZvY3VzTW9yZU1lbnUgPSBmYWxzZTtcbiAgICB0aGlzLmVkaXRvclR5cGUgPSBEZWZhdWx0RW50cnlFZGl0b3JQb3BvdmVyO1xuICAgIHRoaXMuc2VsZWN0ZWRIZWFkZXJUaXRsZSA9IFwiXCI7XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBpZiAodGhpcy5lZGl0b3IgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZWRpdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5tZW51RmFjdG9yeSA9IHRoaXMuZWRpdG9yLmdldE1lbnVNb2RlbEZhY3RvcnkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudEhhbmRsZXIgPSAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGxldCBjb21JbnN0YW5jZSA9IG51bGw7XG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbUluc3RhbmNlID0gcmVzdWx0Lmluc3RhbmNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kYXRhICE9PSAndW5kZWZpbmVkJyAmJiBjb21JbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbUluc3RhbmNlLnNldERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb21JbnN0YW5jZS5zZXREYXRhKHRoaXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29tSW5zdGFuY2Uuc2V0Q2FsZW5kYXJFbnRyeU1hcHBlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21JbnN0YW5jZS5zZXRDYWxlbmRhckVudHJ5TWFwcGVyKHRoaXMuZW50cnlNYXBwZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb21JbnN0YW5jZS5zZXRFZGl0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29tSW5zdGFuY2Uuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgPSBjb21JbnN0YW5jZTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZGF0YVBhcmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kYXRhUGFyZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHBhcmVudDogYW55ID0gdGhpcy5kYXRhUGFyZW50O1xuICAgICAgaWYgKHR5cGVvZiBwYXJlbnQuZ2V0SGlkZUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxldCBoaWRlRXZlbnQgPSBwYXJlbnQuZ2V0SGlkZUV2ZW50KCk7XG5cbiAgICAgICAgaWYgKGhpZGVFdmVudCAhPT0gbnVsbCAmJiAodHlwZW9mIGhpZGVFdmVudCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgaGlkZUV2ZW50LnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93TGlzdCA9IHRydWU7XG4gICAgICAgICAgICAvLyBoaWRlIG1vcmUgbWVudVxuICAgICAgICAgICAgaWYgKHRoaXMuZWxsaXBzaXNCdXR0b24gIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZWxsaXBzaXNCdXR0b24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRoaXMuZWxsaXBzaXNCdXR0b24uaGlkZU1lbnUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FsZW5kYXJFbnRyeShkYXRhOiBhbnkpOiBDYWxlbmRhckVudHJ5IHtcbiAgICBpZiAodGhpcy5lbnRyeU1hcHBlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5lbnRyeU1hcHBlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudHJ5TWFwcGVyLmdldENhbGVuZGFyRW50cnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRFbnRyeUxpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyeUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5kYXRhICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XG4gICAgICAgIGZvciAobGV0IGQgb2YgdGhpcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy5lbnRyeUxpc3QucHVzaCh0aGlzLmdldENhbGVuZGFyRW50cnkoZCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVudHJ5TGlzdC5wdXNoKHRoaXMuZ2V0Q2FsZW5kYXJFbnRyeSh0aGlzLmRhdGEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgX2dldEVudHJ5TGlzdFNpemUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5lbnRyeUxpc3QgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZW50cnlMaXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMuZW50cnlMaXN0Lmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwdWJsaWMgX2dldEVudHJ5TGlzdCgpOiBDYWxlbmRhckVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLmVudHJ5TGlzdDtcbiAgfVxuXG4gIHB1YmxpYyBfaXNBdXRvRm9jdXNNb3JlTWVudSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdXRvRm9jdXNNb3JlTWVudTtcbiAgfVxuXG4gIHB1YmxpYyBfZ2V0Q29tcG9uZW50SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBvbkl0ZW1DbGlja2VkKCRldmVudDogYW55LCBpbmRleDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zaG93TGlzdCA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRIZWFkZXJUaXRsZSA9IFwiXCI7XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uuc2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsZXQgZGF0YTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZGF0YVtpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5lbnRyeUxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5lbnRyeUxpc3RbaW5kZXhdO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIZWFkZXJUaXRsZSA9IGVudHJ5LnRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gZGF0YTtcblxuICAgICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldERhdGEoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQmFja1RvTGlzdCgkZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0xpc3QgPSB0cnVlO1xuICAgIGlmICh0aGlzLmVsbGlwc2lzQnV0dG9uICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmVsbGlwc2lzQnV0dG9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5lbGxpcHNpc0J1dHRvbi5oaWRlTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnNldERhdGEoZGF0YSk7XG5cbiAgICB0aGlzLnJlbG9hZEVudHJ5TGlzdCgpO1xuICB9XG5cbiAgcHVibGljIHNldENhbGVuZGFyRW50cnlNYXBwZXIoZW50cnlNYXBwZXI6IElDYWxlbmRhckVudHJ5TWFwcGVyKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyeU1hcHBlciA9IGVudHJ5TWFwcGVyO1xuXG4gICAgdGhpcy5yZWxvYWRFbnRyeUxpc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRFZGl0b3IoZWRpdG9yOiBBYnN0cmFjdERhdGFFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGZEYXRhRGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlbGZTYXZlRGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldE1vZGVsKG1vZGVsOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG5cbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuZWRpdG9yVHlwZSA9IHRoaXMubW9kZWwudHlwZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGl0b3JUeXBlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLmVkaXRvclR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmVkaXRvclR5cGUgPSBEZWZhdWx0RW50cnlFZGl0b3JQb3BvdmVyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3dMaXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dMaXN0O1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkSGVhZGVyVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEhlYWRlclRpdGxlO1xuICB9XG5cbiAgcHVibGljIGdldE1lbnVNb2RlbEZhY3RvcnkoKTogSU1lbnVNb2RlbEZhY3Rvcnkge1xuICAgIHJldHVybiB0aGlzLm1lbnVGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkRGF0YSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFZGl0b3JUeXBlKCk6IFR5cGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBkb1ByZWxvYWQoKTogUHJvbWlzZTxhbnk+IHsgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7ICAgICAgIHJlc29sdmUobnVsbCk7ICAgICB9KTsgICB9ICBwdWJsaWMgZG9Mb2FkZWQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJDbG9zZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIG9uQXV0b1NhdmVkKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBpc0F1dG9TYXZlKCk6IGJvb2xlYW4ge1xuICBcdHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19