@kre-form/ant
Version:
524 lines • 38.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter } from "@angular/core";
/**
* @record
*/
export function ITableQuery() { }
if (false) {
/** @type {?} */
ITableQuery.prototype.total;
/** @type {?} */
ITableQuery.prototype.pageIndex;
/** @type {?} */
ITableQuery.prototype.pageSize;
/** @type {?|undefined} */
ITableQuery.prototype.sortName;
/** @type {?|undefined} */
ITableQuery.prototype.sortValue;
/** @type {?|undefined} */
ITableQuery.prototype.parameter;
/** @type {?} */
ITableQuery.prototype.keyWord;
}
/**
* @record
*/
export function ITableHeader() { }
if (false) {
/** @type {?|undefined} */
ITableHeader.prototype.key;
/** @type {?|undefined} */
ITableHeader.prototype.name;
/** @type {?|undefined} */
ITableHeader.prototype.width;
/** @type {?|undefined} */
ITableHeader.prototype.minWidth;
/** @type {?|undefined} */
ITableHeader.prototype.filterList;
/** @type {?|undefined} */
ITableHeader.prototype.checkboxable;
/** @type {?} */
ITableHeader.prototype.sortable;
/** @type {?|undefined} */
ITableHeader.prototype.hiden;
/** @type {?|undefined} */
ITableHeader.prototype.action;
/* Skipping unhandled member: [additionalProperties: string]: any;*/
}
/**
* @record
*/
export function ITableButton() { }
if (false) {
/** @type {?|undefined} */
ITableButton.prototype.type;
/** @type {?|undefined} */
ITableButton.prototype.text;
}
var KreFormPrivateTable = /** @class */ (function () {
function KreFormPrivateTable() {
//tableId
this.id = "";
//是否要多选
this.check = false;
//是否有操作列0 没有操作列;1 多个操作按钮 2 选择
this.action = 0;
//按钮列表
this.buttonlist = [];
//选中事件
this.checkChangeEvent = new EventEmitter();
//翻页事件
this.pageIndexEvent = new EventEmitter();
//排序事件
this.orderChangeEvent = new EventEmitter();
//过滤事件
this.filterChangeEvent = new EventEmitter();
//操作事件
this.buttonAction = new EventEmitter();
this.checkIds = [];
this._headerData = [];
this.isAllChecked = false;
this.isIndeterminate = false;
this.listData = [];
this.listDataCheckedId = {};
this.listDataSelectedList = [];
this.query = {
total: 0,
pageIndex: 1,
pageSize: 15,
sortName: "",
sortValue: "",
keyWord: ""
};
this.tableScroll = {
y: '332px'
};
}
Object.defineProperty(KreFormPrivateTable.prototype, "tableIndex", {
get: /**
* @return {?}
*/
function () {
return this.query.pageIndex;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.query.pageIndex = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(KreFormPrivateTable.prototype, "tableSize", {
get: /**
* @return {?}
*/
function () {
return this.query.pageSize;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.query.pageSize = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(KreFormPrivateTable.prototype, "tableTotal", {
get: /**
* @return {?}
*/
function () {
return this.query.total;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.query.total = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(KreFormPrivateTable.prototype, "header", {
get: /**
* @return {?}
*/
function () {
return this._headerData;
},
//table 头部信息
set:
//table 头部信息
/**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
if (value != null && value.length > 0) {
value.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item.prop = item.key;
if (item.checkboxable) {
item.name = "";
item.width = 50;
item.canAutoResize = false;
item.resizeable = false;
item.frozenLeft = true;
item.checkboxable = true;
item.headerCheckboxable = true;
}
if (item.action) {
item.frozenRight = true;
item.canAutoResize = false;
item.resizeable = false;
}
_this._headerData.push(item);
}));
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(KreFormPrivateTable.prototype, "body", {
//table 行数据
set:
//table 行数据
/**
* @param {?} value
* @return {?}
*/
function (value) {
this.listData = value;
if (this.listData == null || this.listData.length == 0) {
this.tableScroll.y = "0px";
}
else {
this.tableScroll.y = "332px";
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(KreFormPrivateTable.prototype, "checkid", {
//默认选中Id
set:
//默认选中Id
/**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
this.listDataSelectedList = [];
if (value != null && value.length > 0) {
value.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
_this.listDataCheckedId[item.id] = true;
_this.listDataSelectedList.push(item);
}));
}
},
enumerable: true,
configurable: true
});
/**
* @param {?} changes
* @return {?}
*/
KreFormPrivateTable.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) { };
/**
* @return {?}
*/
KreFormPrivateTable.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
KreFormPrivateTable.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
};
//全选|全不选
//全选|全不选
/**
* @param {?} value
* @return {?}
*/
KreFormPrivateTable.prototype.setCheckAll =
//全选|全不选
/**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
this.listData.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) { return (_this.listDataCheckedId[item.id] = value); }));
this.setCheckStatus();
};
//设置某个选择|取消选中
//设置某个选择|取消选中
/**
* @return {?}
*/
KreFormPrivateTable.prototype.setCheckStatus =
//设置某个选择|取消选中
/**
* @return {?}
*/
function () {
var _this = this;
this.isAllChecked = this.listData.every((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.listDataCheckedId[item.id]; }));
this.isIndeterminate = this.listData.some((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.listDataCheckedId[item.id]; })) && !this.isAllChecked;
this.saveSelected();
};
//点击查询
//点击查询
/**
* @return {?}
*/
KreFormPrivateTable.prototype.queryChange =
//点击查询
/**
* @return {?}
*/
function () {
this.pageIndexEvent.emit(this.query);
};
//点击翻页
//点击翻页
/**
* @param {?} e
* @return {?}
*/
KreFormPrivateTable.prototype.pageIndexChange =
//点击翻页
/**
* @param {?} e
* @return {?}
*/
function (e) {
this.query.pageIndex = e;
this.pageIndexEvent.emit(this.query);
};
//点击排序
//点击排序
/**
* @param {?} sort
* @return {?}
*/
KreFormPrivateTable.prototype.tableSort =
//点击排序
/**
* @param {?} sort
* @return {?}
*/
function (sort) {
this.query.sortName = sort.key;
this.query.sortValue = sort.value;
this.orderChangeEvent.emit(this.query);
};
//单击选中
//单击选中
/**
* @param {?} event
* @return {?}
*/
KreFormPrivateTable.prototype.itemSelectChange =
//单击选中
/**
* @param {?} event
* @return {?}
*/
function (event) {
this.listDataSelectedList.shift();
this.listDataSelectedList.push({
"id": event.id,
"name": event.name
});
this.checkChangeEvent.emit(this.listDataSelectedList);
};
//保存选中
//保存选中
/**
* @return {?}
*/
KreFormPrivateTable.prototype.saveSelected =
//保存选中
/**
* @return {?}
*/
function () {
var _this = this;
Object.keys(this.listDataCheckedId).forEach((/**
* @param {?} id
* @return {?}
*/
function (id) {
/** @type {?} */
var value = _this.listDataCheckedId[id];
if (value) {
if (!_this.listDataSelectedList.some((/**
* @param {?} item
* @return {?}
*/
function (item) { return item.id == id; }))) {
_this.listData.forEach((/**
* @param {?} item
* @param {?} index
* @param {?} object
* @return {?}
*/
function (item, index, object) {
if (item.id == id) {
_this.listDataSelectedList.push({
id: item.id,
name: item.name
});
}
}));
}
}
else {
_this.listDataSelectedList.forEach((/**
* @param {?} item
* @param {?} index
* @param {?} object
* @return {?}
*/
function (item, index, object) {
if (item.id == id) {
object.splice(index, 1);
}
}));
}
}));
this.checkChangeEvent.emit(this.listDataSelectedList);
};
/**
* @return {?}
*/
KreFormPrivateTable.prototype.selectAllClear = /**
* @return {?}
*/
function () {
this.isAllChecked = false;
this.isIndeterminate = false;
this.listDataCheckedId = {};
this.listDataSelectedList = [];
};
/**
* @param {?} id
* @return {?}
*/
KreFormPrivateTable.prototype.selectClearById = /**
* @param {?} id
* @return {?}
*/
function (id) {
this.listDataCheckedId[id] = false;
this.setCheckStatus();
};
KreFormPrivateTable.decorators = [
{ type: Component, args: [{
selector: "kreform-private-table",
template: "<div class=\"kre-form-table\">\n <div class=\"kre-form-table-header\">\n <div class=\"header-button\">\n <nz-input-group nzSearch [nzAddOnAfter]=\"suffixIconButton\">\n <input type=\"text\" nz-input placeholder=\"\u8BF7\u8F93\u5165\u5173\u952E\u5B57\u641C\u7D22\" maxlength=\"50\" [(ngModel)]=\"query.keyWord\" />\n </nz-input-group>\n <ng-template #suffixIconButton>\n <button nz-button nzType=\"primary\" nzSearch (click)=\"queryChange()\"><i nz-icon nzType=\"search\"></i></button>\n </ng-template>\n <ng-content></ng-content>\n </div>\n <div class=\"header-pagination\">\n <nz-pagination [nzTotal]=\"query.total\" [nzPageIndex]=\"query.pageIndex\" [nzPageSize]=\"query.pageSize\" [nzSize]=\"'small'\" (nzPageIndexChange)=\"pageIndexChange($event)\"></nz-pagination>\n </div>\n </div>\n <div class=\"kre-form-table-content\">\n <nz-table [nzFrontPagination]=\"false\" nzShowPagination nzShowSizeChanger #rowSelectionTable [nzData]=\"listData\" [nzScroll]=\"tableScroll\">\n <thead>\n <tr>\n <ng-container *ngIf=\"check\">\n <th nzWidth=\"50px\" nzLeft=\"0px\" nzShowCheckbox [(nzChecked)]=\"isAllChecked\" [nzIndeterminate]=\"isIndeterminate\" (nzCheckedChange)=\"setCheckAll($event)\"></th>\n </ng-container>\n <ng-container *ngFor=\"let item of header\">\n <ng-container *ngIf=\"item.hiden!=true && item.action!=true\">\n <th [nzWidth]=\"item.width+'px'\">{{item.name}}</th>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"action!=0\">\n <th nzRight=\"0px\" [nzWidth]=\"'100px'\">\u64CD\u4F5C</th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of rowSelectionTable.data\">\n <ng-container *ngIf=\"check\">\n <td nzShowCheckbox [(nzChecked)]=\"listDataCheckedId[data.id]\" (nzCheckedChange)=\"setCheckStatus()\"></td>\n </ng-container>\n <ng-container *ngFor=\"let item of header\">\n <ng-container *ngIf=\"item.hiden!=true && item.action!=true\">\n <td>{{data[item.key]}}</td>\n </ng-container> \n </ng-container>\n <ng-container *ngIf=\"action==2\">\n <td><span class=\"itemSelect\" (click)=\"itemSelectChange(data)\">\u9009\u62E9</span></td>\n </ng-container>\n\n </tr>\n </tbody>\n </nz-table>\n </div>\n <div class=\"kre-form-table-footer\">\n <div class=\"tag-header\">\n <label>\u5DF2\u9009<span>{{listDataSelectedList.length}}</span></label>\n <label (click)=\"selectAllClear()\">\u6E05\u7A7A</label>\n </div>\n <div class=\"tag-content kreform-scrollbar \"> \n <ng-container *ngFor=\"let item of listDataSelectedList\">\n <nz-tag nzMode=\"closeable\" (nzOnClose)=\"selectClearById(item.id)\">{{item.name}}</nz-tag>\n </ng-container>\n </div>\n </div>\n</div>",
styles: [":host ::ng-deep{width:100%}:host ::ng-deep .kre-form-table{background:#fff;display:flex;flex:1;flex-direction:column}:host ::ng-deep .kre-form-table-header{display:flex;flex-direction:row;padding:10px}:host ::ng-deep .kre-form-table-header .header-button{flex:1}:host ::ng-deep .kre-form-table-header .header-button nz-input-group{width:260px;margin-right:10px}:host ::ng-deep .kre-form-table-header .header-button .ant-input{font-size:12px}:host ::ng-deep .kre-form-table-header .hader-pagination{width:300px}:host ::ng-deep .kre-form-table-content{display:flex;flex-direction:row;flex:1;padding:0 10px}:host ::ng-deep .kre-form-table-content nz-table{flex:1}:host ::ng-deep .kre-form-table-content .ant-table{font-size:12px}:host ::ng-deep .kre-form-table-content .ant-table .ant-table-placeholder{border-bottom:0}:host ::ng-deep .kre-form-table-content .ant-table .ant-empty-normal{margin:115px 0}:host ::ng-deep .kre-form-table-content .ant-table-body{height:332px}:host ::ng-deep .kre-form-table-content .itemSelect{cursor:pointer}:host ::ng-deep .kre-form-table-footer{height:78px;margin:0 10px;padding:10px;background-color:#f6f7fb;display:flex;flex-direction:row}:host ::ng-deep .kre-form-table-footer .tag-header{font-size:12px;font-weight:700;color:#777d93;padding:0 0 20px}:host ::ng-deep .kre-form-table-footer .tag-header span{display:inline-block;padding:0 3px;color:#ff986b;font-weight:400}:host ::ng-deep .kre-form-table-footer .tag-header label:nth-child(1){display:inline-block;width:100%}:host ::ng-deep .kre-form-table-footer .tag-header label:nth-child(2){display:inline-block;width:100%;font-weight:400;color:#6375da;cursor:pointer;margin-top:5px}:host ::ng-deep .kre-form-table-footer .tag-content{flex:1}:host ::ng-deep .kre-form-table-footer .tag-content .ant-tag{color:#6375da;border:0;padding:3px 8px;margin:0 10px 10px 0;background:#fff}:host ::ng-deep .kre-form-table-footer .tag-content .ant-tag i{color:#6375da;font-weight:700}:host ::ng-deep .kre-form-table .ant-table-wrapper{border:1px solid #e8e8e8}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th{padding:6px 10px;background-color:#fff;border-right:1px solid #e8e8e8}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th:nth-last-child(1){border-right:0!important}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th.ant-table-column-has-actions.ant-table-column-has-sorters:hover{background:#fff}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-tbody tr td{border:0;padding:6px 10px}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-tbody tr:nth-child(odd){background-color:#f6f8fd}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body{scrollbar-color:transparent!important;overflow-y:overlay!important}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar{width:6px;height:6px}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar-track{box-shadow:inset 0 0 6px transparent}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar-thumb{background-color:#999;border-radius:6px;outline:#333 solid 1px}:host ::ng-deep .kre-form-table .ant-table-header{background:#fff;margin-bottom:0!important;overflow:hidden!important}:host ::ng-deep .kre-form-table .table-action{background:red;padding:3px 8px;border-radius:12px;color:#fff;font-size:12px;cursor:pointer}"]
}] }
];
/** @nocollapse */
KreFormPrivateTable.ctorParameters = function () { return []; };
KreFormPrivateTable.propDecorators = {
tableIndex: [{ type: Input }],
tableSize: [{ type: Input }],
tableTotal: [{ type: Input }],
id: [{ type: Input }],
check: [{ type: Input }],
action: [{ type: Input }],
header: [{ type: Input }],
body: [{ type: Input }],
buttonlist: [{ type: Input }],
checkid: [{ type: Input }],
checkChangeEvent: [{ type: Output }],
pageIndexEvent: [{ type: Output }],
orderChangeEvent: [{ type: Output }],
filterChangeEvent: [{ type: Output }],
buttonAction: [{ type: Output }]
};
return KreFormPrivateTable;
}());
export { KreFormPrivateTable };
if (false) {
/** @type {?} */
KreFormPrivateTable.prototype.id;
/** @type {?} */
KreFormPrivateTable.prototype.check;
/** @type {?} */
KreFormPrivateTable.prototype.action;
/** @type {?} */
KreFormPrivateTable.prototype.buttonlist;
/** @type {?} */
KreFormPrivateTable.prototype.checkChangeEvent;
/** @type {?} */
KreFormPrivateTable.prototype.pageIndexEvent;
/** @type {?} */
KreFormPrivateTable.prototype.orderChangeEvent;
/** @type {?} */
KreFormPrivateTable.prototype.filterChangeEvent;
/** @type {?} */
KreFormPrivateTable.prototype.buttonAction;
/** @type {?} */
KreFormPrivateTable.prototype.checkIds;
/** @type {?} */
KreFormPrivateTable.prototype._headerData;
/** @type {?} */
KreFormPrivateTable.prototype.isAllChecked;
/** @type {?} */
KreFormPrivateTable.prototype.isIndeterminate;
/** @type {?} */
KreFormPrivateTable.prototype.listData;
/** @type {?} */
KreFormPrivateTable.prototype.listDataCheckedId;
/** @type {?} */
KreFormPrivateTable.prototype.listDataSelectedList;
/** @type {?} */
KreFormPrivateTable.prototype.query;
/** @type {?} */
KreFormPrivateTable.prototype.tableScroll;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL2FudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ByaXZhdGUvdGFibGUvaW5kZXguY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQU1iLE1BQU0sZUFBZSxDQUFDOzs7O0FBRXZCLGlDQVFDOzs7SUFQQyw0QkFBYzs7SUFDZCxnQ0FBa0I7O0lBQ2xCLCtCQUFpQjs7SUFDakIsK0JBQWtCOztJQUNsQixnQ0FBbUI7O0lBQ25CLGdDQUFnQjs7SUFDaEIsOEJBQWU7Ozs7O0FBRWpCLGtDQVlDOzs7SUFYQywyQkFBVTs7SUFDViw0QkFBYzs7SUFFZCw2QkFBZTs7SUFDZixnQ0FBa0I7O0lBQ2xCLGtDQUFpQjs7SUFDakIsb0NBQXVCOztJQUN2QixnQ0FBa0I7O0lBQ2xCLDZCQUFnQjs7SUFDaEIsOEJBQWlCOzs7Ozs7QUFJbkIsa0NBR0M7OztJQUZDLDRCQUFjOztJQUNkLDRCQUFjOztBQUtoQjtJQTZIRTs7UUFoR1MsT0FBRSxHQUFTLEVBQUUsQ0FBQzs7UUFHZCxVQUFLLEdBQUcsS0FBSyxDQUFDOztRQUdkLFdBQU0sR0FBRyxDQUFDLENBQUM7O1FBMENYLGVBQVUsR0FBbUIsRUFBRSxDQUFDOztRQWUvQixxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFFekQsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFFdkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7O1FBRXpELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDOztRQUUxRCxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRy9ELGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBUyxFQUFFLENBQUM7UUFFdkIs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RSwyQ0FBK0Q7O0lBRy9ELHVDQUF3Qjs7SUFDeEIsMENBQXVCOztJQUV2QiwyQ0FBcUI7O0lBQ3JCLDhDQUF3Qjs7SUFFeEIsdUNBQXFCOztJQUNyQixnREFBbUQ7O0lBQ25ELG1EQUFpQzs7SUFFakMsb0NBT0M7O0lBQ0QsMENBRUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZVF1ZXJ5IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFnZUluZGV4OiBudW1iZXI7XG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIHNvcnROYW1lPzogc3RyaW5nO1xuICBzb3J0VmFsdWU/OiBzdHJpbmc7XG4gIHBhcmFtZXRlcj86IGFueTtcbiAga2V5V29yZDpzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUhlYWRlciB7XG4gIGtleT86IGFueTtcbiAgbmFtZT86IHN0cmluZztcbiAgLy9wb3A/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBtaW5XaWR0aD86IG51bWJlcjtcbiAgZmlsdGVyTGlzdD86IGFueTtcbiAgY2hlY2tib3hhYmxlPzogYm9vbGVhbjtcbiAgc29ydGFibGU6IGJvb2xlYW47XG4gIGhpZGVuPzogYm9vbGVhbixcbiAgYWN0aW9uPzogYm9vbGVhbjtcbiAgW2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlQnV0dG9uIHtcbiAgdHlwZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbn1cblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJrcmVmb3JtLXByaXZhdGUtdGFibGVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9pbmRleC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vaW5kZXguY29tcG9uZW50Lmxlc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgS3JlRm9ybVByaXZhdGVUYWJsZSAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgIFxuICBASW5wdXQoKSBzZXQgdGFibGVJbmRleCh2YWx1ZTpudW1iZXIpe1xuICAgIHRoaXMucXVlcnkucGFnZUluZGV4PXZhbHVlO1xuICB9XG4gIGdldCB0YWJsZUluZGV4KCl7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkucGFnZUluZGV4O1xuICB9XG4gIFxuICBASW5wdXQoKSBzZXQgdGFibGVTaXplKHZhbHVlOm51bWJlcil7XG4gICAgdGhpcy5xdWVyeS5wYWdlU2l6ZT12YWx1ZTtcbiAgfVxuICBnZXQgdGFibGVTaXplKCl7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkucGFnZVNpemU7XG4gIH1cbiAgXG4gIEBJbnB1dCgpIHNldCB0YWJsZVRvdGFsKHZhbHVlOm51bWJlcil7XG4gICAgdGhpcy5xdWVyeS50b3RhbD12YWx1ZTtcbiAgfVxuICBnZXQgdGFibGVUb3RhbCgpe1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5LnRvdGFsO1xuICB9XG5cbiAgLy90YWJsZUlkXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc9XCJcIjtcblxuICAvL+aYr+WQpuimgeWkmumAiVxuICBASW5wdXQoKSBjaGVjayA9IGZhbHNlO1xuXG4gIC8v5piv5ZCm5pyJ5pON5L2c5YiXMCDmsqHmnInmk43kvZzliJfvvJsxIOWkmuS4quaTjeS9nOaMiemSriAyIOmAieaLqVxuICBASW5wdXQoKSBhY3Rpb24gPSAwO1xuXG4gIC8vdGFibGUg5aS06YOo5L+h5oGvXG4gIEBJbnB1dCgpXG4gIHNldCBoZWFkZXIodmFsdWU6IElUYWJsZUhlYWRlcltdKSB7XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdmFsdWUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5wcm9wID0gaXRlbS5rZXk7XG4gICAgICAgIGlmIChpdGVtLmNoZWNrYm94YWJsZSkge1xuICAgICAgICAgIGl0ZW0ubmFtZT1cIlwiO1xuICAgICAgICAgIGl0ZW0ud2lkdGg9NTA7XG4gICAgICAgICAgaXRlbS5jYW5BdXRvUmVzaXplID0gZmFsc2U7XG4gICAgICAgICAgaXRlbS5yZXNpemVhYmxlID0gZmFsc2U7XG4gICAgICAgICAgaXRlbS5mcm96ZW5MZWZ0ID0gdHJ1ZTtcbiAgICAgICAgICBpdGVtLmNoZWNrYm94YWJsZSA9IHRydWU7XG4gICAgICAgICAgaXRlbS5oZWFkZXJDaGVja2JveGFibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmKGl0ZW0uYWN0aW9uKXsgXG4gICAgICAgICAgaXRlbS5mcm96ZW5SaWdodD10cnVlO1xuICAgICAgICAgIGl0ZW0uY2FuQXV0b1Jlc2l6ZT1mYWxzZTtcbiAgICAgICAgICBpdGVtLnJlc2l6ZWFibGU9ZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGVhZGVyRGF0YS5wdXNoKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldCBoZWFkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlckRhdGE7XG4gIH1cblxuICAvL3RhYmxlIOihjOaVsOaNrlxuICBASW5wdXQoKVxuICBzZXQgYm9keSh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLmxpc3REYXRhID0gdmFsdWU7XG4gICAgaWYodGhpcy5saXN0RGF0YT09bnVsbCB8fCB0aGlzLmxpc3REYXRhLmxlbmd0aD09MCl7XG4gICAgICB0aGlzLnRhYmxlU2Nyb2xsLnk9XCIwcHhcIjtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMudGFibGVTY3JvbGwueT1cIjMzMnB4XCI7XG4gICAgfVxuICB9XG5cbiAgLy/mjInpkq7liJfooahcbiAgQElucHV0KCkgYnV0dG9ubGlzdDogSVRhYmxlQnV0dG9uW10gPSBbXTtcblxuICAvL+m7mOiupOmAieS4rUlkXG4gIEBJbnB1dCgpXG4gIHNldCBjaGVja2lkKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3Q9W107XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdmFsdWUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5saXN0RGF0YUNoZWNrZWRJZFtpdGVtLmlkXSA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3QucHVzaChpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8v6YCJ5Lit5LqL5Lu2XG4gIEBPdXRwdXQoKSBjaGVja0NoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy/nv7vpobXkuovku7ZcbiAgQE91dHB1dCgpIHBhZ2VJbmRleEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy/mjpLluo/kuovku7ZcbiAgQE91dHB1dCgpIG9yZGVyQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvL+i/h+a7pOS6i+S7tlxuICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvL+aTjeS9nOS6i+S7tlxuICBAT3V0cHV0KCkgYnV0dG9uQWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIGNoZWNrSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBfaGVhZGVyRGF0YTphbnlbXSA9IFtdO1xuXG4gIGlzQWxsQ2hlY2tlZCA9IGZhbHNlO1xuICBpc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTsgXG5cbiAgbGlzdERhdGE6IGFueVtdID0gW107XG4gIGxpc3REYXRhQ2hlY2tlZElkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICBsaXN0RGF0YVNlbGVjdGVkTGlzdDogYW55W10gPSBbXTtcblxuICBxdWVyeTogSVRhYmxlUXVlcnkgPSB7XG4gICAgdG90YWw6IDAsXG4gICAgcGFnZUluZGV4OjEsXG4gICAgcGFnZVNpemU6IDE1LFxuICAgIHNvcnROYW1lOiBcIlwiLFxuICAgIHNvcnRWYWx1ZTogXCJcIixcbiAgICBrZXlXb3JkOlwiXCJcbiAgfVxuICB0YWJsZVNjcm9sbCA9IHtcbiAgICB5OiAnMzMycHgnXG4gIH07XG4gXG4gIGNvbnN0cnVjdG9yKCkge31cbiBcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7fVxuIFxuXG4gIG5nT25Jbml0KCkge1xuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcblxuICB9XG5cbiAgLy/lhajpgIl85YWo5LiN6YCJXG4gIHNldENoZWNrQWxsKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5saXN0RGF0YS5mb3JFYWNoKGl0ZW0gPT4gKHRoaXMubGlzdERhdGFDaGVja2VkSWRbaXRlbS5pZF0gPSB2YWx1ZSkpO1xuICAgIHRoaXMuc2V0Q2hlY2tTdGF0dXMoKTtcbiAgfVxuXG4gIC8v6K6+572u5p+Q5Liq6YCJ5oupfOWPlua2iOmAieS4rVxuICBzZXRDaGVja1N0YXR1cygpOiB2b2lkIHsgXG4gICAgdGhpcy5pc0FsbENoZWNrZWQgPSB0aGlzLmxpc3REYXRhLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5saXN0RGF0YUNoZWNrZWRJZFtpdGVtLmlkXSk7XG4gICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPSB0aGlzLmxpc3REYXRhLnNvbWUoaXRlbSA9PiB0aGlzLmxpc3REYXRhQ2hlY2tlZElkW2l0ZW0uaWRdKSAmJiAhdGhpcy5pc0FsbENoZWNrZWQ7XG4gICAgdGhpcy5zYXZlU2VsZWN0ZWQoKTtcbiAgfVxuICBcbiBcbiAgLy/ngrnlh7vmn6Xor6JcbiAgcXVlcnlDaGFuZ2UoKVxuICB7XG4gICAgdGhpcy5wYWdlSW5kZXhFdmVudC5lbWl0KHRoaXMucXVlcnkpOyAgXG4gIH1cblxuICAvL+eCueWHu+e/u+mhtVxuICBwYWdlSW5kZXhDaGFuZ2UoZTpudW1iZXIpIHtcbiAgICB0aGlzLnF1ZXJ5LnBhZ2VJbmRleCA9IGU7XG4gICAgdGhpcy5wYWdlSW5kZXhFdmVudC5lbWl0KHRoaXMucXVlcnkpO1xuICB9XG5cbiAgLy/ngrnlh7vmjpLluo9cbiAgdGFibGVTb3J0KHNvcnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMucXVlcnkuc29ydE5hbWUgPSBzb3J0LmtleTtcbiAgICB0aGlzLnF1ZXJ5LnNvcnRWYWx1ZSA9IHNvcnQudmFsdWU7XG4gICAgdGhpcy5vcmRlckNoYW5nZUV2ZW50LmVtaXQodGhpcy5xdWVyeSk7XG4gIH0gXG5cbiAgLy/ljZXlh7vpgInkuK1cbiAgaXRlbVNlbGVjdENoYW5nZShldmVudDphbnkpe1xuICAgIHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3Quc2hpZnQoKTtcbiAgICB0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0LnB1c2goe1xuICAgICAgXCJpZFwiOmV2ZW50LmlkLFxuICAgICAgXCJuYW1lXCI6ZXZlbnQubmFtZVxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tDaGFuZ2VFdmVudC5lbWl0KHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3QpO1xuICB9XG4gXG4gIC8v5L+d5a2Y6YCJ5LitXG4gIHNhdmVTZWxlY3RlZCgpeyBcbiAgICBPYmplY3Qua2V5cyh0aGlzLmxpc3REYXRhQ2hlY2tlZElkKS5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMubGlzdERhdGFDaGVja2VkSWRbaWRdO1xuICAgICAgICBpZih2YWx1ZSl7XG4gICAgICAgICBpZighdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5zb21lKGl0ZW09PntyZXR1cm4gaXRlbS5pZD09aWR9KSl7XG4gICAgICAgICAgdGhpcy5saXN0RGF0YS5mb3JFYWNoKChpdGVtLGluZGV4LG9iamVjdCk9PntcbiAgICAgICAgICAgIGlmKGl0ZW0uaWQ9PWlkKXtcbiAgICAgICAgICAgICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDppdGVtLmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6aXRlbS5uYW1lXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5mb3JFYWNoKChpdGVtLGluZGV4LG9iamVjdCk9PntcbiAgICAgICAgICAgIGlmKGl0ZW0uaWQ9PWlkKXtcbiAgICAgICAgICAgICAgb2JqZWN0LnNwbGljZShpbmRleCwxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY2hlY2tDaGFuZ2VFdmVudC5lbWl0KHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3QpOyBcbiAgfVxuICBcbiAgc2VsZWN0QWxsQ2xlYXIoKXtcbiAgICB0aGlzLmlzQWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNJbmRldGVybWluYXRlID0gZmFsc2U7IFxuICAgIHRoaXMubGlzdERhdGFDaGVja2VkSWQ9e307XG4gICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdD1bXTsgXG4gIH1cblxuICBzZWxlY3RDbGVhckJ5SWQoaWQ6YW55KXtcbiAgICB0aGlzLmxpc3REYXRhQ2hlY2tlZElkW2lkXT1mYWxzZTtcbiAgICB0aGlzLnNldENoZWNrU3RhdHVzKCk7XG4gIH1cbn1cbiJdfQ==