UNPKG

kre-form

Version:

本项目由 Angular8+ 编写的表单设计器和表单应用,所有的配置都是 JSON 结构体组成,PC 端是基于 ANT 组件库封装

272 lines 26.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, } from "@angular/core"; import { moveItemInArray, copyArrayItem, } from "@angular/cdk/drag-drop"; import { NzMessageService } from "ng-zorro-antd/message"; import { NzModalService } from "ng-zorro-antd/modal"; var BoardComponent = /** @class */ (function () { function BoardComponent(message, modalService) { this.message = message; this.modalService = modalService; this.changeDataSource = new EventEmitter(); this.changeEchartsParams = new EventEmitter(); this.isLight = false; } /** * @return {?} */ BoardComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @param {?} changes * @return {?} */ BoardComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { for (var propName in changes) { /** @type {?} */ var chng = changes[propName]; if (propName === "term") { if (!chng.currentValue || JSON.stringify(chng.currentValue) === "{}") { this.term = { row: [], target: [], condition: [], }; } } if (propName === "chartOptions") { if (chng.currentValue) { // @ts-ignore this.echartsList = this.chartOptions.dataset["source"]; } else { this.chartOptions = {}; } } } }; /** * @param {?} e * @return {?} */ BoardComponent.prototype.editChartOptions = /** * @param {?} e * @return {?} */ function (e) { this.chartOptions = e; if (this.echartsList.length > 0) { ((/** @type {?} */ (this.chartOptions["series"]))).splice(1, ((/** @type {?} */ (this.chartOptions["series"]))).length - 1); for (var i = 0; i < this.echartsList[0].length - 2; i++) { if (this.chartOptions["series"]) { this.chartOptions["series"].push(this.chartOptions["series"][0]); } } } }; /** * @param {?} e * @return {?} */ BoardComponent.prototype.getEchartShape = /** * @param {?} e * @return {?} */ function (e) { this.editChartOptions(e.chartOption); if (this.echartsList.length > 0) { Object.assign(this.chartOptions, { dataset: { source: this.echartsList, }, }); } this.chartOptions = Object.assign({}, this.chartOptions); }; /** * @param {?} e * @return {?} */ BoardComponent.prototype.getEchartOptions = /** * @param {?} e * @return {?} */ function (e) { this.editChartOptions(e); this.chartOptions = Object.assign({}, this.chartOptions); }; /** * @param {?} event * @return {?} */ BoardComponent.prototype.drop = /** * @param {?} event * @return {?} */ function (event) { if (event.previousContainer === event.container) { moveItemInArray(event.container.data, event.previousIndex, event.currentIndex); } else { /** @type {?} */ var idx = event.container.data.indexOf(event.previousContainer.data[event.previousIndex]); if (idx != -1) { this.message.create("error", "标签不能重复"); return; //if item exist } if (event.container.id == "row" && this.term.row.length > 1) { this.message.create("error", "维度不能超过2个"); return; } copyArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex); this.changeEchartsParams.emit(this.term); } }; /** * @return {?} */ BoardComponent.prototype.dragStarted = /** * @return {?} */ function () { this.isLight = true; }; /** * @return {?} */ BoardComponent.prototype.dragEnded = /** * @return {?} */ function () { this.isLight = false; }; /** * @param {?} item * @param {?} status * @return {?} */ BoardComponent.prototype.hover = /** * @param {?} item * @param {?} status * @return {?} */ function (item, status) { item.closeBtn = status; }; /** * @param {?} e * @return {?} */ BoardComponent.prototype.changeData = /** * @param {?} e * @return {?} */ function (e) { this.changeDataSource.emit(e); }; /** * @param {?} list * @param {?} i * @return {?} */ BoardComponent.prototype.closeLabel = /** * @param {?} list * @param {?} i * @return {?} */ function (list, i) { list.splice(i, 1); }; /** * @return {?} */ BoardComponent.prototype.saveFinalObj = /** * @return {?} */ function () { this.finalObj = { dataSourceTitle: this.dataSourceItem.title, echartsList: this.echartsList, chartOptions: this.chartOptions, chartCondition: this.chartCondition, term: this.term, }; console.log(JSON.stringify(this.finalObj)); }; /** * @param {?} e * @return {?} */ BoardComponent.prototype.echartClickHandler = /** * @param {?} e * @return {?} */ function (e) { console.log("我在echart上点了啥", e); }; BoardComponent.decorators = [ { type: Component, args: [{ selector: "demo-board", template: "<div class=\"header\">\n <button nz-button nzType=\"link\" (click)=\"saveFinalObj()\" class=\"btn-text\">\n \u4FDD\u5B58\u6570\u636E\n </button>\n</div>\n<div class=\"wrap\" cdkDropListGroup>\n <div class=\"sider\">\n <div class=\"sider-title\">\n \u6570\u636E\u6E90\n <button\n nz-button\n nzType=\"link\"\n class=\"btn-text\"\n (click)=\"changeData($event)\"\n >\n \u66F4\u6539\u6570\u636E\u6E90\n </button>\n </div>\n <hr />\n <div *ngIf=\"dataSourceItem\">\n <div class=\"sider-title\">\n <h4>\u5B57\u6BB5</h4>\n <button\n nz-button\n nzType=\"link\"\n class=\"btn-text\"\n style=\"font-size: 1rem\"\n >\n <i class=\"icon-time\"></i>\n </button>\n </div>\n <p>\n <i\n style=\"font-size: 1rem; color: deepskyblue; margin-right: 1rem\"\n class=\"icon-DuoJiLuQu\"\n ></i>\n {{ dataSourceItem.title }}\n </p>\n <div\n cdkDropList\n [cdkDropListData]=\"dataSourceItem.columns\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <div\n class=\"data-list\"\n *ngFor=\"let item of dataSourceItem.columns\"\n cdkDrag\n (cdkDragStarted)=\"dragStarted()\"\n (cdkDragEnded)=\"dragEnded()\"\n >\n <i class=\"icon-Edit03\"></i>{{ item.title }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"main\">\n <div\n id=\"row\"\n class=\"main-list\"\n [ngClass]=\"isLight ? 'main-list-hover' : ''\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"term.row\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <div class=\"title\">\u7EF4\u5EA6</div>\n <!--\u7EF4\u5EA6\uFF08\u884C\uFF09 -->\n <div\n *ngFor=\"let item of term.row; let i = index\"\n cdkDrag\n class=\"drag-list\"\n (mouseenter)=\"hover(item, 'on')\"\n (mouseleave)=\"hover(item, 'off')\"\n >\n <div nz-dropdown nzTrigger=\"click\" [nzDropdownMenu]=\"menu\">\n <i class=\"icon-KT-Down\"></i>\n <span>{{ item.title }}</span>\n </div>\n <i\n [ngClass]=\"item.closeBtn == 'on' ? 'on' : 'off'\"\n (click)=\"closeLabel(term.row, i)\"\n class=\"icon-KT-Close\"\n ></i>\n </div>\n </div>\n\n <div\n id=\"target\"\n class=\"main-list\"\n [ngClass]=\"isLight ? 'main-list-hover' : ''\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"term.target\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <div class=\"title\">\u6307\u6807</div>\n <div\n *ngFor=\"let item of term.target; let i = index\"\n cdkDrag\n class=\"drag-list target-list\"\n (mouseenter)=\"hover(item, 'on')\"\n (mouseleave)=\"hover(item, 'off')\"\n >\n <div nz-dropdown nzTrigger=\"click\" [nzDropdownMenu]=\"menu\">\n <i class=\"icon-FenGeXian\"></i>\n <span>{{ item.title }}</span>\n </div>\n <i\n [ngClass]=\"item.closeBtn == 'on' ? 'on' : 'off'\"\n (click)=\"closeLabel(term.target, i)\"\n class=\"icon-KT-Close\"\n ></i>\n </div>\n </div>\n\n <div\n id=\"condition\"\n class=\"main-list\"\n [ngClass]=\"isLight ? 'main-list-hover' : ''\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"term.condition\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <div class=\"title\">\u8FC7\u6EE4\u6761\u4EF6</div>\n <div\n *ngFor=\"let item of term.condition; let i = index\"\n cdkDrag\n class=\"drag-list condition-list\"\n (mouseenter)=\"hover(item, 'on')\"\n (mouseleave)=\"hover(item, 'off')\"\n >\n <div nz-dropdown nzTrigger=\"click\" [nzDropdownMenu]=\"menu\">\n <i class=\"icon-FenGeXian\"></i>\n <span>{{ item.title }}</span>\n </div>\n <i\n [ngClass]=\"item.closeBtn == 'on' ? 'on' : 'off'\"\n (click)=\"closeLabel(term.condition, i)\"\n class=\"icon-KT-Close\"\n ></i>\n </div>\n </div>\n <div class=\"echarts-wrap\">\n <nz-empty\n [nzNotFoundContent]=\"contentTpl\"\n *ngIf=\"\n term.row.length <= 0 || term.target.length <= 0 || !chartCondition\n \"\n >\n <ng-template #contentTpl>\n <p *ngIf=\"term.row.length <= 0 || term.target.length <= 0\">\n \u8BF7\u9009\u62E9\u7EF4\u5EA6\u548C\u6307\u6807\n </p>\n <p *ngIf=\"!chartCondition\">\u8BF7\u9009\u62E9\u53F3\u4FA7\u56FE\u6807\u7C7B\u578B</p>\n </ng-template>\n </nz-empty>\n <div *ngIf=\"chartOptions\" style=\"height: 600px\">\n <echart-dom\n [option]=\"chartOptions\"\n (echartClick)=\"echartClickHandler($event)\"\n ></echart-dom>\n </div>\n </div>\n </div>\n <div class=\"right\">\n <echart-options-dom\n [colorList]=\"colorList\"\n [echartsList]=\"echartsList\"\n [(chartCondition)]=\"chartCondition\"\n (echartOptionsChange)=\"getEchartOptions($event)\"\n (echartShapeChange)=\"getEchartShape($event)\"\n ></echart-options-dom>\n </div>\n</div>\n\n<nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <ul nz-menu nzSelectable>\n <li nz-menu-item>1st menu item</li>\n <li nz-menu-item>2nd menu item</li>\n <li nz-menu-item>3rd menu item</li>\n </ul>\n</nz-dropdown-menu>\n", styles: [":host .header{height:60px;display:flex;justify-content:flex-end;align-items:flex-end}:host .wrap{background:#f4f6f9;display:flex;height:calc(100% - 60px)}:host .wrap .sider{padding:10px 0 0 15px;width:250px;border-right:1px solid #e9e9e9}:host .wrap .sider .btn-text{color:#0db3a6}:host .wrap .sider .data-list{cursor:pointer;font-size:12px;padding:10px 0;display:flex;flex-direction:row;align-items:center;box-sizing:border-box}:host .wrap .sider ul li{list-style:none;cursor:pointer;height:26px;line-height:26px}:host .wrap .sider .sider-title{display:flex;justify-content:space-between;align-items:baseline}:host .wrap .main{padding:10px 15px;flex-grow:1}:host .wrap .main ul li{list-style:none}:host .wrap .main .main-list{line-height:34px;background:#fff;position:relative;margin-bottom:10px;border:1px dashed #d9d9d9;border-radius:3px;display:flex;flex-direction:row;align-items:center}:host .wrap .main .main-list .title{display:inline-block;width:80px}:host .wrap .main .main-list .drag-list{cursor:pointer;border-radius:100px;color:#fff;background:#0db3a6;height:24px;line-height:24px;padding:0 10px 0 6px;margin:0 3px}:host .wrap .main .main-list .drag-list span{padding:0 4px}:host .wrap .main .main-list .drag-list .on{opacity:1}:host .wrap .main .main-list .drag-list .off{opacity:0}:host .wrap .main .main-list .target-list{background:#00bfff}:host .wrap .main .main-list .condition-list{background:#7fffd4}:host .wrap .main .echarts-wrap p{text-align:center}:host .wrap .main .main-list-hover{background-color:rgba(212,242,231,.4);border:1px dashed #0ff}:host .wrap .right{width:300px;padding-right:15px}.cdk-drag-preview{display:inline-block;box-sizing:border-box;background-color:#fff;width:80px;overflow:hidden;border-radius:4px;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}:host ::ng-deep hr{border:none;border-bottom:1px solid #eee}:host ::ng-deep .ant-select{width:100%}:host ::ng-deep .ant-dropdown-trigger{display:inline-block}"] }] } ]; /** @nocollapse */ BoardComponent.ctorParameters = function () { return [ { type: NzMessageService }, { type: NzModalService } ]; }; BoardComponent.propDecorators = { colorList: [{ type: Input }], echartsList: [{ type: Input }], dataSourceItem: [{ type: Input }], term: [{ type: Input }], chartCondition: [{ type: Input }], chartOptions: [{ type: Input }], changeDataSource: [{ type: Output }], changeEchartsParams: [{ type: Output }] }; return BoardComponent; }()); export { BoardComponent }; if (false) { /** @type {?} */ BoardComponent.prototype.colorList; /** @type {?} */ BoardComponent.prototype.echartsList; /** @type {?} */ BoardComponent.prototype.dataSourceItem; /** @type {?} */ BoardComponent.prototype.term; /** @type {?} */ BoardComponent.prototype.chartCondition; /** @type {?} */ BoardComponent.prototype.chartOptions; /** @type {?} */ BoardComponent.prototype.changeDataSource; /** @type {?} */ BoardComponent.prototype.changeEchartsParams; /** @type {?} */ BoardComponent.prototype.isLight; /** @type {?} */ BoardComponent.prototype.finalObj; /** * @type {?} * @private */ BoardComponent.prototype.message; /** * @type {?} * @private */ BoardComponent.prototype.modalService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL2FiYy8iLCJzb3VyY2VzIjpbImxpYi9ib2FyZC9ib2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNckQ7SUFrQkUsd0JBQ1UsT0FBeUIsRUFDekIsWUFBNEI7UUFENUIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBUDVCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRCxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBS2IsQ0FBQzs7OztJQUVKLGlDQUFROzs7SUFBUixjQUFZLENBQUM7Ozs7O0lBRWIsb0NBQVc7Ozs7SUFBWCxVQUFZLE9BQVk7UUFDdEIsS0FBSyxJQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUU7O2dCQUN4QixJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUM5QixJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDcEUsSUFBSSxDQUFDLElBQUksR0FBRzt3QkFDVixHQUFHLEVBQUUsRUFBRTt3QkFDUCxNQUFNLEVBQUUsRUFBRTt3QkFDVixTQUFTLEVBQUUsRUFBRTtxQkFDZCxDQUFDO2lCQUNIO2FBQ0Y7WUFDRCxJQUFJLFFBQVEsS0FBSyxjQUFjLEVBQUU7Z0JBQy9CLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDckIsYUFBYTtvQkFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN4RDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztpQkFDeEI7YUFDRjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7SUFFRCx5Q0FBZ0I7Ozs7SUFBaEIsVUFBaUIsQ0FBTTtRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQixDQUFDLG1CQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQU8sQ0FBQyxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxFQUNELENBQUMsbUJBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDaEQsQ0FBQztZQUNGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRTthQUNGO1NBQ0Y7SUFDSCxDQUFDOzs7OztJQUVELHVDQUFjOzs7O0lBQWQsVUFBZSxDQUFNO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUMvQixPQUFPLEVBQUU7b0JBQ1AsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXO2lCQUN6QjthQUNGLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7Ozs7SUFFRCx5Q0FBZ0I7Ozs7SUFBaEIsVUFBaUIsQ0FBTTtRQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7Ozs7SUFFRCw2QkFBSTs7OztJQUFKLFVBQUssS0FBNEI7UUFDL0IsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUMvQyxlQUFlLENBQ2IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7U0FDSDthQUFNOztnQkFDRCxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNwQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FDbEQ7WUFFRCxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxlQUFlO2FBQ3hCO1lBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPO2FBQ1I7WUFFRCxhQUFhLENBQ1gsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7WUFFRixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7Ozs7SUFFRCxvQ0FBVzs7O0lBQVg7UUFDRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDOzs7O0lBQ0Qsa0NBQVM7OztJQUFUO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQzs7Ozs7O0lBRUQsOEJBQUs7Ozs7O0lBQUwsVUFBTSxJQUFTLEVBQUUsTUFBVztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDOzs7OztJQUVELG1DQUFVOzs7O0lBQVYsVUFBVyxDQUFNO1FBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7Ozs7SUFFRCxtQ0FBVTs7Ozs7SUFBVixVQUFXLElBQVMsRUFBRSxDQUFNO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Ozs7SUFFRCxxQ0FBWTs7O0lBQVo7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSztZQUMxQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7OztJQUVELDJDQUFrQjs7OztJQUFsQixVQUFtQixDQUFNO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O2dCQWpKRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLG1oTEFBcUM7O2lCQUV0Qzs7OztnQkFYUSxnQkFBZ0I7Z0JBQ2hCLGNBQWM7Ozs0QkFZcEIsS0FBSzs4QkFDTCxLQUFLO2lDQUNMLEtBQUs7dUJBQ0wsS0FBSztpQ0FDTCxLQUFLOytCQUNMLEtBQUs7bUNBRUwsTUFBTTtzQ0FDTixNQUFNOztJQW9JVCxxQkFBQztDQUFBLEFBbEpELElBa0pDO1NBN0lZLGNBQWM7OztJQUN6QixtQ0FBd0I7O0lBQ3hCLHFDQUEwQjs7SUFDMUIsd0NBQTZCOztJQUM3Qiw4QkFBbUI7O0lBQ25CLHdDQUE2Qjs7SUFDN0Isc0NBQW9DOztJQUVwQywwQ0FBZ0Q7O0lBQ2hELDZDQUFtRDs7SUFFbkQsaUNBQWdCOztJQUNoQixrQ0FBYTs7Ozs7SUFFWCxpQ0FBaUM7Ozs7O0lBQ2pDLHNDQUFvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgQ2RrRHJhZ0Ryb3AsXG4gIG1vdmVJdGVtSW5BcnJheSxcbiAgY29weUFycmF5SXRlbSxcbn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcbmltcG9ydCB7IE56TWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwibmctem9ycm8tYW50ZC9tZXNzYWdlXCI7XG5pbXBvcnQgeyBOek1vZGFsU2VydmljZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL21vZGFsXCI7XG5pbXBvcnQgKiBhcyBlY2hhcnRzIGZyb20gXCJlY2hhcnRzXCI7XG5pbXBvcnQgeyBFQ2hhcnRPcHRpb24gfSBmcm9tIFwiZWNoYXJ0c1wiO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImRlbW8tYm9hcmRcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9ib2FyZC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vYm9hcmQuY29tcG9uZW50Lmxlc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb2xvckxpc3Q6IGFueTtcbiAgQElucHV0KCkgZWNoYXJ0c0xpc3Q6IGFueTtcbiAgQElucHV0KCkgZGF0YVNvdXJjZUl0ZW06IGFueTtcbiAgQElucHV0KCkgdGVybTogYW55O1xuICBASW5wdXQoKSBjaGFydENvbmRpdGlvbjogYW55O1xuICBASW5wdXQoKSBjaGFydE9wdGlvbnM6IEVDaGFydE9wdGlvbjtcblxuICBAT3V0cHV0KCkgY2hhbmdlRGF0YVNvdXJjZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoYW5nZUVjaGFydHNQYXJhbXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgaXNMaWdodCA9IGZhbHNlO1xuICBmaW5hbE9iajoge307XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWVzc2FnZTogTnpNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTnpNb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIGNoYW5nZXMpIHtcbiAgICAgIGNvbnN0IGNobmcgPSBjaGFuZ2VzW3Byb3BOYW1lXTtcbiAgICAgIGlmIChwcm9wTmFtZSA9PT0gXCJ0ZXJtXCIpIHtcbiAgICAgICAgaWYgKCFjaG5nLmN1cnJlbnRWYWx1ZSB8fCBKU09OLnN0cmluZ2lmeShjaG5nLmN1cnJlbnRWYWx1ZSkgPT09IFwie31cIikge1xuICAgICAgICAgIHRoaXMudGVybSA9IHtcbiAgICAgICAgICAgIHJvdzogW10sXG4gICAgICAgICAgICB0YXJnZXQ6IFtdLFxuICAgICAgICAgICAgY29uZGl0aW9uOiBbXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcE5hbWUgPT09IFwiY2hhcnRPcHRpb25zXCIpIHtcbiAgICAgICAgaWYgKGNobmcuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHRoaXMuZWNoYXJ0c0xpc3QgPSB0aGlzLmNoYXJ0T3B0aW9ucy5kYXRhc2V0W1wic291cmNlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhcnRPcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlZGl0Q2hhcnRPcHRpb25zKGU6IGFueSkge1xuICAgIHRoaXMuY2hhcnRPcHRpb25zID0gZTtcbiAgICBpZiAodGhpcy5lY2hhcnRzTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAodGhpcy5jaGFydE9wdGlvbnNbXCJzZXJpZXNcIl0gYXMgYW55KS5zcGxpY2UoXG4gICAgICAgIDEsXG4gICAgICAgICh0aGlzLmNoYXJ0T3B0aW9uc1tcInNlcmllc1wiXSBhcyBhbnkpLmxlbmd0aCAtIDFcbiAgICAgICk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWNoYXJ0c0xpc3RbMF0ubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYXJ0T3B0aW9uc1tcInNlcmllc1wiXSkge1xuICAgICAgICAgIHRoaXMuY2hhcnRPcHRpb25zW1wic2VyaWVzXCJdLnB1c2godGhpcy5jaGFydE9wdGlvbnNbXCJzZXJpZXNcIl1bMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RWNoYXJ0U2hhcGUoZTogYW55KSB7XG4gICAgdGhpcy5lZGl0Q2hhcnRPcHRpb25zKGUuY2hhcnRPcHRpb24pO1xuICAgIGlmICh0aGlzLmVjaGFydHNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jaGFydE9wdGlvbnMsIHtcbiAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgIHNvdXJjZTogdGhpcy5lY2hhcnRzTGlzdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNoYXJ0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2hhcnRPcHRpb25zKTtcbiAgfVxuXG4gIGdldEVjaGFydE9wdGlvbnMoZTogYW55KSB7XG4gICAgdGhpcy5lZGl0Q2hhcnRPcHRpb25zKGUpO1xuICAgIHRoaXMuY2hhcnRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jaGFydE9wdGlvbnMpO1xuICB9XG5cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlkeCA9IGV2ZW50LmNvbnRhaW5lci5kYXRhLmluZGV4T2YoXG4gICAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF1cbiAgICAgICk7XG5cbiAgICAgIGlmIChpZHggIT0gLTEpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmNyZWF0ZShcImVycm9yXCIsIFwi5qCH562+5LiN6IO96YeN5aSNXCIpO1xuICAgICAgICByZXR1cm47IC8vaWYgaXRlbSBleGlzdFxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuY29udGFpbmVyLmlkID09IFwicm93XCIgJiYgdGhpcy50ZXJtLnJvdy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZS5jcmVhdGUoXCJlcnJvclwiLCBcIue7tOW6puS4jeiDvei2hei/hzLkuKpcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29weUFycmF5SXRlbShcbiAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgKTtcblxuICAgICAgdGhpcy5jaGFuZ2VFY2hhcnRzUGFyYW1zLmVtaXQodGhpcy50ZXJtKTtcbiAgICB9XG4gIH1cblxuICBkcmFnU3RhcnRlZCgpIHtcbiAgICB0aGlzLmlzTGlnaHQgPSB0cnVlO1xuICB9XG4gIGRyYWdFbmRlZCgpIHtcbiAgICB0aGlzLmlzTGlnaHQgPSBmYWxzZTtcbiAgfVxuXG4gIGhvdmVyKGl0ZW06IGFueSwgc3RhdHVzOiBhbnkpIHtcbiAgICBpdGVtLmNsb3NlQnRuID0gc3RhdHVzO1xuICB9XG5cbiAgY2hhbmdlRGF0YShlOiBhbnkpIHtcbiAgICB0aGlzLmNoYW5nZURhdGFTb3VyY2UuZW1pdChlKTtcbiAgfVxuXG4gIGNsb3NlTGFiZWwobGlzdDogYW55LCBpOiBhbnkpIHtcbiAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgfVxuXG4gIHNhdmVGaW5hbE9iaigpIHtcbiAgICB0aGlzLmZpbmFsT2JqID0ge1xuICAgICAgZGF0YVNvdXJjZVRpdGxlOiB0aGlzLmRhdGFTb3VyY2VJdGVtLnRpdGxlLFxuICAgICAgZWNoYXJ0c0xpc3Q6IHRoaXMuZWNoYXJ0c0xpc3QsXG4gICAgICBjaGFydE9wdGlvbnM6IHRoaXMuY2hhcnRPcHRpb25zLFxuICAgICAgY2hhcnRDb25kaXRpb246IHRoaXMuY2hhcnRDb25kaXRpb24sXG4gICAgICB0ZXJtOiB0aGlzLnRlcm0sXG4gICAgfTtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmZpbmFsT2JqKSk7XG4gIH1cblxuICBlY2hhcnRDbGlja0hhbmRsZXIoZTogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCLmiJHlnKhlY2hhcnTkuIrngrnkuobllaVcIiwgZSk7XG4gIH1cbn1cbiJdfQ==