@kre-form/ant
Version:
424 lines • 34.6 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;
}
export class KreFormPrivateTable {
constructor() {
//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'
};
}
/**
* @param {?} value
* @return {?}
*/
set tableIndex(value) {
this.query.pageIndex = value;
}
/**
* @return {?}
*/
get tableIndex() {
return this.query.pageIndex;
}
/**
* @param {?} value
* @return {?}
*/
set tableSize(value) {
this.query.pageSize = value;
}
/**
* @return {?}
*/
get tableSize() {
return this.query.pageSize;
}
/**
* @param {?} value
* @return {?}
*/
set tableTotal(value) {
this.query.total = value;
}
/**
* @return {?}
*/
get tableTotal() {
return this.query.total;
}
//table 头部信息
/**
* @param {?} value
* @return {?}
*/
set header(value) {
if (value != null && value.length > 0) {
value.forEach((/**
* @param {?} item
* @return {?}
*/
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);
}));
}
}
/**
* @return {?}
*/
get header() {
return this._headerData;
}
//table 行数据
/**
* @param {?} value
* @return {?}
*/
set body(value) {
this.listData = value;
if (this.listData == null || this.listData.length == 0) {
this.tableScroll.y = "0px";
}
else {
this.tableScroll.y = "332px";
}
}
//默认选中Id
/**
* @param {?} value
* @return {?}
*/
set checkid(value) {
this.listDataSelectedList = [];
if (value != null && value.length > 0) {
value.forEach((/**
* @param {?} item
* @return {?}
*/
item => {
this.listDataCheckedId[item.id] = true;
this.listDataSelectedList.push(item);
}));
}
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) { }
/**
* @return {?}
*/
ngOnInit() {
}
/**
* @return {?}
*/
ngOnDestroy() {
}
//全选|全不选
/**
* @param {?} value
* @return {?}
*/
setCheckAll(value) {
this.listData.forEach((/**
* @param {?} item
* @return {?}
*/
item => (this.listDataCheckedId[item.id] = value)));
this.setCheckStatus();
}
//设置某个选择|取消选中
/**
* @return {?}
*/
setCheckStatus() {
this.isAllChecked = this.listData.every((/**
* @param {?} item
* @return {?}
*/
item => this.listDataCheckedId[item.id]));
this.isIndeterminate = this.listData.some((/**
* @param {?} item
* @return {?}
*/
item => this.listDataCheckedId[item.id])) && !this.isAllChecked;
this.saveSelected();
}
//点击查询
/**
* @return {?}
*/
queryChange() {
this.pageIndexEvent.emit(this.query);
}
//点击翻页
/**
* @param {?} e
* @return {?}
*/
pageIndexChange(e) {
this.query.pageIndex = e;
this.pageIndexEvent.emit(this.query);
}
//点击排序
/**
* @param {?} sort
* @return {?}
*/
tableSort(sort) {
this.query.sortName = sort.key;
this.query.sortValue = sort.value;
this.orderChangeEvent.emit(this.query);
}
//单击选中
/**
* @param {?} event
* @return {?}
*/
itemSelectChange(event) {
this.listDataSelectedList.shift();
this.listDataSelectedList.push({
"id": event.id,
"name": event.name
});
this.checkChangeEvent.emit(this.listDataSelectedList);
}
//保存选中
/**
* @return {?}
*/
saveSelected() {
Object.keys(this.listDataCheckedId).forEach((/**
* @param {?} id
* @return {?}
*/
id => {
/** @type {?} */
let value = this.listDataCheckedId[id];
if (value) {
if (!this.listDataSelectedList.some((/**
* @param {?} item
* @return {?}
*/
item => { return item.id == id; }))) {
this.listData.forEach((/**
* @param {?} item
* @param {?} index
* @param {?} object
* @return {?}
*/
(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 {?}
*/
(item, index, object) => {
if (item.id == id) {
object.splice(index, 1);
}
}));
}
}));
this.checkChangeEvent.emit(this.listDataSelectedList);
}
/**
* @return {?}
*/
selectAllClear() {
this.isAllChecked = false;
this.isIndeterminate = false;
this.listDataCheckedId = {};
this.listDataSelectedList = [];
}
/**
* @param {?} id
* @return {?}
*/
selectClearById(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 = () => [];
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 }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL2FudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ByaXZhdGUvdGFibGUvaW5kZXguY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQU1iLE1BQU0sZUFBZSxDQUFDOzs7O0FBRXZCLGlDQVFDOzs7SUFQQyw0QkFBYzs7SUFDZCxnQ0FBa0I7O0lBQ2xCLCtCQUFpQjs7SUFDakIsK0JBQWtCOztJQUNsQixnQ0FBbUI7O0lBQ25CLGdDQUFnQjs7SUFDaEIsOEJBQWU7Ozs7O0FBRWpCLGtDQVlDOzs7SUFYQywyQkFBVTs7SUFDViw0QkFBYzs7SUFFZCw2QkFBZTs7SUFDZixnQ0FBa0I7O0lBQ2xCLGtDQUFpQjs7SUFDakIsb0NBQXVCOztJQUN2QixnQ0FBa0I7O0lBQ2xCLDZCQUFnQjs7SUFDaEIsOEJBQWlCOzs7Ozs7QUFJbkIsa0NBR0M7OztJQUZDLDRCQUFjOztJQUNkLDRCQUFjOztBQVVoQixNQUFNLE9BQU8sbUJBQW1CO0lBd0g5Qjs7UUFoR1MsT0FBRSxHQUFTLEVBQUUsQ0FBQzs7UUFHZCxVQUFLLEdBQUcsS0FBSyxDQUFDOztRQUdkLFdBQU0sR0FBRyxDQUFDLENBQUM7O1FBMENYLGVBQVUsR0FBbUIsRUFBRSxDQUFDOztRQWUvQixxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFFekQsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFFdkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7O1FBRXpELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDOztRQUUxRCxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRy9ELGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FB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R0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFDLEVBQUUsQ0FBQztJQUMvQixDQUFDOzs7OztJQUVELGVBQWUsQ0FBQyxFQUFNO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7OztZQTVORixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMseTJHQUFxQzs7YUFFdEM7Ozs7O3lCQUdFLEtBQUs7d0JBT0wsS0FBSzt5QkFPTCxLQUFLO2lCQVFMLEtBQUs7b0JBR0wsS0FBSztxQkFHTCxLQUFLO3FCQUdMLEtBQUs7bUJBNEJMLEtBQUs7eUJBV0wsS0FBSztzQkFHTCxLQUFLOytCQVlMLE1BQU07NkJBRU4sTUFBTTsrQkFFTixNQUFNO2dDQUVOLE1BQU07MkJBRU4sTUFBTTs7OztJQXZFUCxpQ0FBdUI7O0lBR3ZCLG9DQUF1Qjs7SUFHdkIscUNBQW9COztJQTBDcEIseUNBQXlDOztJQWV6QywrQ0FBbUU7O0lBRW5FLDZDQUFpRTs7SUFFakUsK0NBQW1FOztJQUVuRSxnREFBb0U7O0lBRXBFLDJDQUErRDs7SUFHL0QsdUNBQXdCOztJQUN4QiwwQ0FBdUI7O0lBRXZCLDJDQUFxQjs7SUFDckIsOENBQXdCOztJQUV4Qix1Q0FBcUI7O0lBQ3JCLGdEQUFtRDs7SUFDbkQsbURBQWlDOztJQUVqQyxvQ0FPQzs7SUFDRCwwQ0FFRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlUXVlcnkge1xuICB0b3RhbDogbnVtYmVyO1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgc29ydE5hbWU/OiBzdHJpbmc7XG4gIHNvcnRWYWx1ZT86IHN0cmluZztcbiAgcGFyYW1ldGVyPzogYW55O1xuICBrZXlXb3JkOnN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlSGVhZGVyIHtcbiAga2V5PzogYW55O1xuICBuYW1lPzogc3RyaW5nO1xuICAvL3BvcD86IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXI7XG4gIG1pbldpZHRoPzogbnVtYmVyO1xuICBmaWx0ZXJMaXN0PzogYW55O1xuICBjaGVja2JveGFibGU/OiBib29sZWFuO1xuICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgaGlkZW4/OiBib29sZWFuLFxuICBhY3Rpb24/OiBib29sZWFuO1xuICBbYWRkaXRpb25hbFByb3BlcnRpZXM6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVCdXR0b24ge1xuICB0eXBlPzogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nO1xufVxuXG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImtyZWZvcm0tcHJpdmF0ZS10YWJsZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9pbmRleC5jb21wb25lbnQubGVzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBLcmVGb3JtUHJpdmF0ZVRhYmxlICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgXG4gIEBJbnB1dCgpIHNldCB0YWJsZUluZGV4KHZhbHVlOm51bWJlcil7XG4gICAgdGhpcy5xdWVyeS5wYWdlSW5kZXg9dmFsdWU7XG4gIH1cbiAgZ2V0IHRhYmxlSW5kZXgoKXtcbiAgICByZXR1cm4gdGhpcy5xdWVyeS5wYWdlSW5kZXg7XG4gIH1cbiAgXG4gIEBJbnB1dCgpIHNldCB0YWJsZVNpemUodmFsdWU6bnVtYmVyKXtcbiAgICB0aGlzLnF1ZXJ5LnBhZ2VTaXplPXZhbHVlO1xuICB9XG4gIGdldCB0YWJsZVNpemUoKXtcbiAgICByZXR1cm4gdGhpcy5xdWVyeS5wYWdlU2l6ZTtcbiAgfVxuICBcbiAgQElucHV0KCkgc2V0IHRhYmxlVG90YWwodmFsdWU6bnVtYmVyKXtcbiAgICB0aGlzLnF1ZXJ5LnRvdGFsPXZhbHVlO1xuICB9XG4gIGdldCB0YWJsZVRvdGFsKCl7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkudG90YWw7XG4gIH1cblxuICAvL3RhYmxlSWRcbiAgQElucHV0KCkgaWQ6IHN0cmluZz1cIlwiO1xuXG4gIC8v5piv5ZCm6KaB5aSa6YCJXG4gIEBJbnB1dCgpIGNoZWNrID0gZmFsc2U7XG5cbiAgLy/mmK/lkKbmnInmk43kvZzliJcwIOayoeacieaTjeS9nOWIl++8mzEg5aSa5Liq5pON5L2c5oyJ6ZKuIDIg6YCJ5oupXG4gIEBJbnB1dCgpIGFjdGlvbiA9IDA7XG5cbiAgLy90YWJsZSDlpLTpg6jkv6Hmga9cbiAgQElucHV0KClcbiAgc2V0IGhlYWRlcih2YWx1ZTogSVRhYmxlSGVhZGVyW10pIHtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnByb3AgPSBpdGVtLmtleTtcbiAgICAgICAgaWYgKGl0ZW0uY2hlY2tib3hhYmxlKSB7XG4gICAgICAgICAgaXRlbS5uYW1lPVwiXCI7XG4gICAgICAgICAgaXRlbS53aWR0aD01MDtcbiAgICAgICAgICBpdGVtLmNhbkF1dG9SZXNpemUgPSBmYWxzZTtcbiAgICAgICAgICBpdGVtLnJlc2l6ZWFibGUgPSBmYWxzZTtcbiAgICAgICAgICBpdGVtLmZyb3plbkxlZnQgPSB0cnVlO1xuICAgICAgICAgIGl0ZW0uY2hlY2tib3hhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBpdGVtLmhlYWRlckNoZWNrYm94YWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXRlbS5hY3Rpb24peyBcbiAgICAgICAgICBpdGVtLmZyb3plblJpZ2h0PXRydWU7XG4gICAgICAgICAgaXRlbS5jYW5BdXRvUmVzaXplPWZhbHNlO1xuICAgICAgICAgIGl0ZW0ucmVzaXplYWJsZT1mYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oZWFkZXJEYXRhLnB1c2goaXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0IGhlYWRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyRGF0YTtcbiAgfVxuXG4gIC8vdGFibGUg6KGM5pWw5o2uXG4gIEBJbnB1dCgpXG4gIHNldCBib2R5KHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMubGlzdERhdGEgPSB2YWx1ZTtcbiAgICBpZih0aGlzLmxpc3REYXRhPT1udWxsIHx8IHRoaXMubGlzdERhdGEubGVuZ3RoPT0wKXtcbiAgICAgIHRoaXMudGFibGVTY3JvbGwueT1cIjBweFwiO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy50YWJsZVNjcm9sbC55PVwiMzMycHhcIjtcbiAgICB9XG4gIH1cblxuICAvL+aMiemSruWIl+ihqFxuICBASW5wdXQoKSBidXR0b25saXN0OiBJVGFibGVCdXR0b25bXSA9IFtdO1xuXG4gIC8v6buY6K6k6YCJ5LitSWRcbiAgQElucHV0KClcbiAgc2V0IGNoZWNraWQodmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdD1bXTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0aGlzLmxpc3REYXRhQ2hlY2tlZElkW2l0ZW0uaWRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy/pgInkuK3kuovku7ZcbiAgQE91dHB1dCgpIGNoZWNrQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvL+e/u+mhteS6i+S7tlxuICBAT3V0cHV0KCkgcGFnZUluZGV4RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvL+aOkuW6j+S6i+S7tlxuICBAT3V0cHV0KCkgb3JkZXJDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8v6L+H5ruk5LqL5Lu2XG4gIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8v5pON5L2c5LqL5Lu2XG4gIEBPdXRwdXQoKSBidXR0b25BY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgY2hlY2tJZHM6IHN0cmluZ1tdID0gW107XG4gIF9oZWFkZXJEYXRhOmFueVtdID0gW107XG5cbiAgaXNBbGxDaGVja2VkID0gZmFsc2U7XG4gIGlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlOyBcblxuICBsaXN0RGF0YTogYW55W10gPSBbXTtcbiAgbGlzdERhdGFDaGVja2VkSWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIGxpc3REYXRhU2VsZWN0ZWRMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIHF1ZXJ5OiBJVGFibGVRdWVyeSA9IHtcbiAgICB0b3RhbDogMCxcbiAgICBwYWdlSW5kZXg6MSxcbiAgICBwYWdlU2l6ZTogMTUsXG4gICAgc29ydE5hbWU6IFwiXCIsXG4gICAgc29ydFZhbHVlOiBcIlwiLFxuICAgIGtleVdvcmQ6XCJcIlxuICB9XG4gIHRhYmxlU2Nyb2xsID0ge1xuICAgIHk6ICczMzJweCdcbiAgfTtcbiBcbiAgY29uc3RydWN0b3IoKSB7fVxuIFxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHt9XG4gXG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuXG4gIH1cblxuICAvL+WFqOmAiXzlhajkuI3pgIlcbiAgc2V0Q2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3REYXRhLmZvckVhY2goaXRlbSA9PiAodGhpcy5saXN0RGF0YUNoZWNrZWRJZFtpdGVtLmlkXSA9IHZhbHVlKSk7XG4gICAgdGhpcy5zZXRDaGVja1N0YXR1cygpO1xuICB9XG5cbiAgLy/orr7nva7mn5DkuKrpgInmi6l85Y+W5raI6YCJ5LitXG4gIHNldENoZWNrU3RhdHVzKCk6IHZvaWQgeyBcbiAgICB0aGlzLmlzQWxsQ2hlY2tlZCA9IHRoaXMubGlzdERhdGEuZXZlcnkoaXRlbSA9PiB0aGlzLmxpc3REYXRhQ2hlY2tlZElkW2l0ZW0uaWRdKTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMubGlzdERhdGEuc29tZShpdGVtID0+IHRoaXMubGlzdERhdGFDaGVja2VkSWRbaXRlbS5pZF0pICYmICF0aGlzLmlzQWxsQ2hlY2tlZDtcbiAgICB0aGlzLnNhdmVTZWxlY3RlZCgpO1xuICB9XG4gIFxuIFxuICAvL+eCueWHu+afpeivolxuICBxdWVyeUNoYW5nZSgpXG4gIHtcbiAgICB0aGlzLnBhZ2VJbmRleEV2ZW50LmVtaXQodGhpcy5xdWVyeSk7ICBcbiAgfVxuXG4gIC8v54K55Ye757+76aG1XG4gIHBhZ2VJbmRleENoYW5nZShlOm51bWJlcikge1xuICAgIHRoaXMucXVlcnkucGFnZUluZGV4ID0gZTtcbiAgICB0aGlzLnBhZ2VJbmRleEV2ZW50LmVtaXQodGhpcy5xdWVyeSk7XG4gIH1cblxuICAvL+eCueWHu+aOkuW6j1xuICB0YWJsZVNvcnQoc29ydDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeS5zb3J0TmFtZSA9IHNvcnQua2V5O1xuICAgIHRoaXMucXVlcnkuc29ydFZhbHVlID0gc29ydC52YWx1ZTtcbiAgICB0aGlzLm9yZGVyQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnF1ZXJ5KTtcbiAgfSBcblxuICAvL+WNleWHu+mAieS4rVxuICBpdGVtU2VsZWN0Q2hhbmdlKGV2ZW50OmFueSl7XG4gICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5zaGlmdCgpO1xuICAgIHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3QucHVzaCh7XG4gICAgICBcImlkXCI6ZXZlbnQuaWQsXG4gICAgICBcIm5hbWVcIjpldmVudC5uYW1lXG4gICAgfSk7XG4gICAgdGhpcy5jaGVja0NoYW5nZUV2ZW50LmVtaXQodGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdCk7XG4gIH1cbiBcbiAgLy/kv53lrZjpgInkuK1cbiAgc2F2ZVNlbGVjdGVkKCl7IFxuICAgIE9iamVjdC5rZXlzKHRoaXMubGlzdERhdGFDaGVja2VkSWQpLmZvckVhY2goaWQgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5saXN0RGF0YUNoZWNrZWRJZFtpZF07XG4gICAgICAgIGlmKHZhbHVlKXtcbiAgICAgICAgIGlmKCF0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0LnNvbWUoaXRlbT0+e3JldHVybiBpdGVtLmlkPT1pZH0pKXtcbiAgICAgICAgICB0aGlzLmxpc3REYXRhLmZvckVhY2goKGl0ZW0saW5kZXgsb2JqZWN0KT0+e1xuICAgICAgICAgICAgaWYoaXRlbS5pZD09aWQpe1xuICAgICAgICAgICAgICB0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOml0ZW0uaWQsXG4gICAgICAgICAgICAgICAgbmFtZTppdGVtLm5hbWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0LmZvckVhY2goKGl0ZW0saW5kZXgsb2JqZWN0KT0+e1xuICAgICAgICAgICAgaWYoaXRlbS5pZD09aWQpe1xuICAgICAgICAgICAgICBvYmplY3Quc3BsaWNlKGluZGV4LDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jaGVja0NoYW5nZUV2ZW50LmVtaXQodGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdCk7IFxuICB9XG4gIFxuICBzZWxlY3RBbGxDbGVhcigpe1xuICAgIHRoaXMuaXNBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTsgXG4gICAgdGhpcy5saXN0RGF0YUNoZWNrZWRJZD17fTtcbiAgICB0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0PVtdOyBcbiAgfVxuXG4gIHNlbGVjdENsZWFyQnlJZChpZDphbnkpe1xuICAgIHRoaXMubGlzdERhdGFDaGVja2VkSWRbaWRdPWZhbHNlO1xuICAgIHRoaXMuc2V0Q2hlY2tTdGF0dXMoKTtcbiAgfVxufVxuIl19