com.phloxui
Version:
PhloxUI Ng2+ Framework
407 lines (406 loc) • 33.2 kB
JavaScript
/**
* @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