@kre-form/ant
Version:
394 lines • 42.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, } from "@angular/core";
import { FieldArrayType, FormGlobalService } from "@kre-form/core";
import * as _ from "lodash";
import { KreFormAntService } from "../../tools/service";
var KreFormFieldRepeat = /** @class */ (function (_super) {
tslib_1.__extends(KreFormFieldRepeat, _super);
function KreFormFieldRepeat(dyService, globalService) {
var _this = _super.call(this) || this;
_this.globalService = globalService;
_this.titles = [];
_this.showXScroll = true;
_this.screenTableWidth = window.screen.width - 162;
_this.tableWidth = 0;
_this.length = 0;
_this.chartresize = (/**
* @return {?}
*/
function () {
_this.changeWidth();
});
_this.service = dyService;
return _this;
}
/**
* @return {?}
*/
KreFormFieldRepeat.prototype.ngAfterContentChecked = /**
* @return {?}
*/
function () {
if (_.isEmpty(this.field.fieldGroup)) {
this.showXScroll = false;
}
else {
this.showXScroll = true;
}
};
/**
* @return {?}
*/
KreFormFieldRepeat.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
if (this.formControl) {
this.formControl.valueChanges.subscribe((/**
* @param {?} res
* @return {?}
*/
function (res) {
if (res.length !== _this.length) {
_this.length = res.length;
if ((/** @type {?} */ (_this.to)).enableInterface) {
_this.globalService.notifyDataChanged("repeatLengthChange", {
rdm: Math.random(),
config: _this.field,
});
}
}
}));
}
if ((/** @type {?} */ (this.field)).fieldGroup) {
this.length = (/** @type {?} */ ((/** @type {?} */ (this.field)).fieldGroup)).length;
}
if (!!((/** @type {?} */ (this.field)))["repeatRole"]) {
Object.keys(((/** @type {?} */ (this.field)))["repeatRole"]).forEach((/**
* @param {?} repeatKeyIndex
* @return {?}
*/
function (repeatKeyIndex) {
/** @type {?} */
var index = Number(repeatKeyIndex.substr(repeatKeyIndex.lastIndexOf("$") + 1));
if (!!_this.field.fieldGroup) {
_this.field.fieldGroup.forEach((/**
* @param {?} field
* @param {?} ind
* @return {?}
*/
function (field, ind) {
if (index === ind) {
field.fieldGroup.forEach((/**
* @param {?} repeatField
* @return {?}
*/
function (repeatField) {
if (!!((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]) {
if (repeatField.templateOptions === undefined ||
repeatField.templateOptions === null) {
repeatField.templateOptions = {};
}
if (repeatField.editProperty === undefined ||
repeatField.editProperty === null) {
repeatField.editProperty = {};
}
repeatField.templateOptions = Object.assign(repeatField.templateOptions, ((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key].templateOptions);
if (((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["editor"] === false ||
((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["editor"] === true) {
repeatField.editor = ((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["editor"];
}
if (((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["show"] === false ||
((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["show"] === true) {
repeatField.show = ((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["show"];
}
repeatField.editProperty = Object.assign(repeatField.editProperty, ((/** @type {?} */ (_this.field)))["repeatRole"][repeatKeyIndex][repeatField.key].editProperty);
}
}));
}
}));
}
}));
}
if (!!this.field["show"]) {
this.field.hide = !this.field["show"];
}
this.changeWidth();
window.addEventListener("resize", this.chartresize, true);
};
/**
* @return {?}
*/
KreFormFieldRepeat.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
window.removeEventListener("resize", this.chartresize, true);
};
/**
* @param {?} sign
* @return {?}
*/
KreFormFieldRepeat.prototype.fieldOperational = /**
* @param {?} sign
* @return {?}
*/
function (sign) {
this.service.fieldOperational(sign, this.field);
};
/**
* @param {?} type
* @return {?}
*/
KreFormFieldRepeat.prototype.groupOperational = /**
* @param {?} type
* @return {?}
*/
function (type) {
this.service.groupOperational(type, this.field);
};
/**
* @param {?} i
* @return {?}
*/
KreFormFieldRepeat.prototype.delete = /**
* @param {?} i
* @return {?}
*/
function (i) {
if (this.field.fieldGroup && this.field.fieldGroup.length > 1) {
this.remove(i);
}
else {
}
};
/**
* @return {?}
*/
KreFormFieldRepeat.prototype.changeWidth = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var width = 300;
if (this.field != undefined &&
this.field != null &&
this.field.fieldArray != undefined &&
this.field.fieldArray != null &&
this.field.fieldArray.fieldGroup != undefined &&
this.field.fieldArray.fieldGroup != null
// && !_.isEmpty(this.field.fieldGroup)
) {
/** @type {?} */
var length_1 = (/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ (this.field)).fieldArray)).fieldGroup)).filter((/**
* @param {?} title
* @return {?}
*/
function (title) {
return _this.checkFieldShow(title);
})).length;
width = length_1 * 245 + 120;
}
this.tableWidth = width;
if (_.isEmpty(this.field.fieldGroup)) {
this.showXScroll = false;
}
else {
// this.showXScroll = true;
}
};
/**
* @return {?}
*/
KreFormFieldRepeat.prototype.addIndex = /**
* @return {?}
*/
function () {
var _this = this;
this.showXScroll = true;
((/** @type {?} */ (this.field.fieldGroup))).forEach((/**
* @param {?} el
* @param {?} index
* @return {?}
*/
function (el, index) {
el.fieldGroup.forEach((/**
* @param {?} ele
* @return {?}
*/
function (ele) {
ele.templateOptions.index = index;
if (_this.field &&
_this.field.templateOptions &&
(!!_this.field.templateOptions.index ||
_this.field.templateOptions.index === 0)) {
ele.templateOptions.pIndex = _this.field.templateOptions.index;
}
}));
}));
};
/**
* @param {?} f
* @return {?}
*/
KreFormFieldRepeat.prototype.isRemoved = /**
* @param {?} f
* @return {?}
*/
function (f) {
/** @type {?} */
var result = true;
if (this.editor === false) {
result = false;
}
if ((/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ (f)).fieldGroup)).filter((/**
* @param {?} el
* @return {?}
*/
function (el) { return el.type !== "line" && el.type !== "htmlcontent"; })))).every((/**
* @param {?} el
* @return {?}
*/
function (el) { return !!(/** @type {?} */ (el)).editProperty && !!(/** @type {?} */ ((/** @type {?} */ (el)).editProperty)).delete; }))) {
result = false;
}
return result;
};
/**
* @param {?} i
* @param {?} isRemove
* @return {?}
*/
KreFormFieldRepeat.prototype.removed = /**
* @param {?} i
* @param {?} isRemove
* @return {?}
*/
function (i, isRemove) {
if (!isRemove) {
return;
}
this.remove(i);
if (!!this.operationProperty && !!this.operationProperty.deleteEvent) {
this.globalService.notifyDataChanged("FieldWrapperClick", {
rdm: Math.random(),
config: this.field,
type: "repeat",
});
}
this.globalService.notifyDataChanged("repeatDelete", {
rdm: Math.random(),
index: i,
config: this.field,
});
this.addIndex();
if (_.isEmpty(this.field.fieldGroup)) {
this.showXScroll = false;
}
};
/**
* @return {?}
*/
KreFormFieldRepeat.prototype.showErrors = /**
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return that.showError;
};
/**
* @param {?} i
* @return {?}
*/
KreFormFieldRepeat.prototype.newRowId = /**
* @param {?} i
* @return {?}
*/
function (i) {
return this.field.id + "_" + i;
};
/**
* @return {?}
*/
KreFormFieldRepeat.prototype.newRepeatClass = /**
* @return {?}
*/
function () {
return this.field.id + "_repeat";
};
/**
* @param {?} field
* @return {?}
*/
KreFormFieldRepeat.prototype.checkFieldShow = /**
* @param {?} field
* @return {?}
*/
function (field) {
/** @type {?} */
var result = true;
if ((!field ||
!field.type ||
field.type === "line" ||
field.type === "htmlcontent") &&
field.show === undefined) {
field.show = true;
field.hide = false;
}
if (this.formStatus === 0) {
if (field && field.hasOwnProperty("show")) {
result = (/** @type {?} */ ((field.show || false)));
}
}
if (field.show === false) {
field.hide = true;
}
return result;
};
KreFormFieldRepeat.decorators = [
{ type: Component, args: [{
selector: "kreform-repeat",
template: "<ng-container *ngIf=\"formStatus !== 0\">\n <div class=\"fieldOperational\">\n <div\n class=\"reportControl\"\n [class.hide-header]=\"!(field?.editProperty?.config !== false) \"\n >\n <div class=\"report-header\" *ngIf=\"field?.editProperty?.config !== false \">\n <div class=\"left\">\n <ul>\n <li>\n <label\n nz-checkbox\n [(ngModel)]=\"field.checked\"\n [nzDisabled]=\"\n !!field.editProperty &&\n field.editProperty.canMove !== undefined &&\n field.editProperty.canMove === false\n \"\n ></label>\n </li>\n <li (click)=\"groupOperational('item')\">\n <i class=\"icon-TianJiaZiDuan\"></i>\u6DFB\u52A0\u5B57\u6BB5\n </li>\n <li (click)=\"groupOperational('remark')\">\n <i class=\"icon-other-WenBen\"></i>\u6DFB\u52A0\u6587\u672C\n </li>\n <li (click)=\"groupOperational('line')\">\n <i class=\"icon-FenGeXian\"></i>\u6DFB\u52A0\u5206\u5272\u7EBF\n </li>\n </ul>\n </div>\n <div class=\"right\">\n <ul>\n <li (click)=\"groupOperational('edit')\">\n <i class=\"icon-Edit03\"></i>\u7F16\u8F91\n </li>\n <li (click)=\"groupOperational('delete')\">\n <i class=\"icon-N_delete2\"></i>\u5220\u9664\n </li>\n <li (click)=\"groupOperational('up')\">\n <i class=\"icon-ShangYi\"></i>\u4E0A\u79FB\n </li>\n <li (click)=\"groupOperational('down')\">\n <i class=\"icon-XiaYi\"></i>\u4E0B\u79FB\n </li>\n <ng-container\n *ngIf=\"to && to.isButintin && to.isButintin==true;else tdDelete\"\n >\n <li></li>\n </ng-container>\n <ng-template #tdDelete>\n <li (click)=\"fieldOperational('delete')\">\n <button class=\"btnDel\">\n <i class=\"icon-KT-Close\"></i>\n </button>\n </li>\n </ng-template>\n </ul>\n </div>\n </div>\n <div class=\"report-body\">\n <ng-container\n *ngIf=\"field.fieldGroup?.length && field.fieldArray?.fieldGroup?.length ; else fieldWarp\"\n >\n <ng-container *ngFor=\"let field of field.fieldGroup; let i = index\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n </ng-container>\n <ng-template #fieldWarp>\n <div class=\"img-box\"></div>\n <p class=\"ant-empty-description\">\u6682\u65E0\u6570\u636E</p>\n </ng-template>\n </div>\n </div>\n <div class=\"field-hide\" *ngIf=\"field.hide == true\">\n <div class=\"field-hide-content\">\u5DF2\u9690\u85CF</div>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"formStatus === 0\">\n <ng-container *ngIf=\"to.type=='table';else cardTmp\">\n <div class=\"mb-2 add-box\">\n <div *ngIf=\"isAdd\" class=\"flex-h new-flex-1 flex-justify-end\">\n <span class=\"add-button w-5\" (click)=\"add();addIndex()\">\n <i class=\"icon-tianjin\"></i>\n \u65B0\u589E\n </span>\n </div>\n </div>\n <div class=\"w-100\">\n <nz-table\n #basicTable\n nzShowPagination=\"false\"\n nzSize=\"small\"\n [nzData]=\"field.fieldGroup\"\n [nzScroll]=\"{\n x: showXScroll ? tableWidth + 'px' : null,y:'210px'\n }\"\n [nzPageSize]=\"field?.fieldGroup?.length\"\n [class.showScroll]=\"showXScroll\"\n >\n <thead>\n <tr>\n <th nzWidth=\"50px\" class=\"select-box td\" nzLeft=\"0px\">\u5E8F\u53F7</th>\n <ng-container *ngFor=\"let title of field?.fieldArray?.fieldGroup\">\n <!-- *ngIf=\"title && title.type!==undefined && title.type!==null && (title.type!=='line' && title.type!=='htmlcontent') && title.hide !=true\" -->\n <th *ngIf=\"checkFieldShow(title)\">\n <div class=\"new-flex-1 repeat-table-title\">\n <ng-container\n *ngIf=\"title && title.templateOptions!==undefined && title.templateOptions!==null\"\n >\n <span\n *ngIf=\"title.templateOptions.required\"\n class=\"required\"\n >*</span\n >\n {{ title.templateOptions.label }}\n </ng-container>\n </div>\n </th>\n </ng-container>\n <th nzRight=\"0px\" class=\"select-box td td-th\" *ngIf=\"isDelete\">\n <span class=\"\">\u64CD\u4F5C </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let field of basicTable.data; let i = index\" class=\"tr\">\n <td nzLeft=\"0px\" class=\"td-bg\">\n <span class=\"serial\">{{ i + 1 }}</span>\n </td>\n <ng-container *ngFor=\"let f of field.fieldGroup\">\n <!-- *ngIf=\"f && f.type!==undefined && f.type!==null &&(f.type!=='line' && f.type!=='htmlcontent') && f.hide!=true\" -->\n <td class=\"w-100-td\" *ngIf=\"checkFieldShow(f)\">\n <kreform-field [field]=\"f\"></kreform-field>\n </td>\n </ng-container>\n <td\n *ngIf=\"isDelete\"\n nzRight=\"0px\"\n class=\"select-box td\"\n [class.isRemoved]=\"!isRemoved(field)\"\n (click)=\"removed(i , isRemoved(field))\"\n >\n <span class=\"select\">\u5220\u9664</span>\n </td>\n </tr>\n </tbody>\n </nz-table>\n </div>\n </ng-container>\n <ng-template #cardTmp>\n <ng-container\n *ngIf=\"field.fieldGroup!==undefined && field.fieldGroup!==null && field.fieldGroup.length>0;else cardEmpty\"\n >\n <div\n *ngFor=\"let field of field.fieldGroup; let i = index\"\n class=\"row {{ newRepeatClass() }} \"\n [id]=\"newRowId(i)\"\n >\n <ng-container *ngIf=\"field.hide!=true\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n <span\n (click)=\"removed(i , isRemoved(field))\"\n class=\"del\"\n *ngIf=\"isRemoved(field) && isDelete\"\n >\u5220\u9664</span\n >\n\n <div class=\"tips\"></div>\n </div>\n </ng-container>\n <ng-template #cardEmpty>\n <div class=\"repeat-card-empty\">\n <div class=\"repeat-empty-image\"></div>\n <p class=\"ant-empty-description\">\u6682\u65E0\u6570\u636E</p>\n </div>\n </ng-template>\n <div class=\"add\" *ngIf=\"isAdd\">\n <span (click)=\"add();addIndex()\">\u65B0\u589E</span>\n </div>\n </ng-template>\n</ng-container>\n",
host: {
"[class]": 'field.className || ""',
cdkDrag: "",
}
}] }
];
/** @nocollapse */
KreFormFieldRepeat.ctorParameters = function () { return [
{ type: KreFormAntService },
{ type: FormGlobalService }
]; };
return KreFormFieldRepeat;
}(FieldArrayType));
export { KreFormFieldRepeat };
if (false) {
/** @type {?} */
KreFormFieldRepeat.prototype.service;
/** @type {?} */
KreFormFieldRepeat.prototype.titles;
/** @type {?} */
KreFormFieldRepeat.prototype.showXScroll;
/** @type {?} */
KreFormFieldRepeat.prototype.screenTableWidth;
/** @type {?} */
KreFormFieldRepeat.prototype.tableWidth;
/** @type {?} */
KreFormFieldRepeat.prototype.length;
/** @type {?} */
KreFormFieldRepeat.prototype.chartresize;
/**
* @type {?}
* @private
*/
KreFormFieldRepeat.prototype.globalService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa3JlLWZvcm0vYW50LyIsInNvdXJjZXMiOlsibGliL3RlbXBsYXRlcy9yZXBlYXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU9uRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RDtJQVNVLDhDQUFjO0lBVXRCLDRCQUNFLFNBQTRCLEVBQ3BCLGFBQWdDO1FBRjFDLFlBSUUsaUJBQU8sU0FFUjtRQUpTLG1CQUFhLEdBQWIsYUFBYSxDQUFtQjtRQVIxQyxZQUFNLEdBQTZCLEVBQUUsQ0FBQztRQUN0QyxpQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixzQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDN0MsZ0JBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixZQUFNLEdBQUcsQ0FBQyxDQUFDO1FBcUlYLGlCQUFXOzs7UUFBRztZQUNaLEtBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLEVBQUM7UUFoSUEsS0FBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7O0lBQzNCLENBQUM7Ozs7SUFDRCxrREFBcUI7OztJQUFyQjtRQUNFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjtJQUNILENBQUM7Ozs7SUFDRCxxQ0FBUTs7O0lBQVI7UUFBQSxp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Q0FBQyxJQUFJO1lBQ1gsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNO1lBQ3JCLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDO1lBQy9CLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUN4QjtZQUNBLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUN6QixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLEdBQUcsbUJBQUEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFXLENBQUM7YUFDM0M7U0FDRjtRQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDeEIsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDbkI7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztnQkEzUUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLGc3TkFBMkI7b0JBQzNCLElBQUksRUFBRTt3QkFDSixTQUFTLEVBQUUsdUJBQXVCO3dCQUNsQyxPQUFPLEVBQUUsRUFBRTtxQkFDWjtpQkFDRjs7OztnQkFUUSxpQkFBaUI7Z0JBUkQsaUJBQWlCOztJQXNSMUMseUJBQUM7Q0FBQSxBQTVRRCxDQVNVLGNBQWMsR0FtUXZCO1NBcFFZLGtCQUFrQjs7O0lBSTdCLHFDQUFhOztJQUNiLG9DQUFzQzs7SUFDdEMseUNBQW1COztJQUNuQiw4Q0FBNkM7O0lBQzdDLHdDQUFlOztJQUNmLG9DQUFXOztJQXFJWCx5Q0FFRTs7Ozs7SUFuSUEsMkNBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZpZWxkQXJyYXlUeXBlLCBGb3JtR2xvYmFsU2VydmljZSB9IGZyb20gXCJAa3JlLWZvcm0vY29yZVwiO1xuaW1wb3J0IHtcbiAgS3JlRm9ybUNvbW1vblNlcnZpY2UsXG4gIEtyZUZvcm1UZW1wbGF0ZU9wdGlvbnMsXG4gIEtyZUZvcm1GaWVsZENvbmZpZyxcbn0gZnJvbSBcIkBrcmUtZm9ybS9jb3JlXCI7XG5cbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgS3JlRm9ybUFudFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdG9vbHMvc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3JlZm9ybS1yZXBlYXRcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9pbmRleC5odG1sXCIsXG4gIGhvc3Q6IHtcbiAgICBcIltjbGFzc11cIjogJ2ZpZWxkLmNsYXNzTmFtZSB8fCBcIlwiJyxcbiAgICBjZGtEcmFnOiBcIlwiLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBLcmVGb3JtRmllbGRSZXBlYXRcbiAgZXh0ZW5kcyBGaWVsZEFycmF5VHlwZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRDaGVja2VkXG57XG4gIHNlcnZpY2U6IGFueTtcbiAgdGl0bGVzOiBLcmVGb3JtVGVtcGxhdGVPcHRpb25zW10gPSBbXTtcbiAgc2hvd1hTY3JvbGwgPSB0cnVlO1xuICBzY3JlZW5UYWJsZVdpZHRoID0gd2luZG93LnNjcmVlbi53aWR0aCAtIDE2MjtcbiAgdGFibGVXaWR0aCA9IDA7XG4gIGxlbmd0aCA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZHlTZXJ2aWNlOiBLcmVGb3JtQW50U2VydmljZSxcbiAgICBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IEZvcm1HbG9iYWxTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zZXJ2aWNlID0gZHlTZXJ2aWNlO1xuICB9XG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuZmllbGQuZmllbGRHcm91cCkpIHtcbiAgICAgIHRoaXMuc2hvd1hTY3JvbGwgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93WFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICB9XG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCAhPT0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmxlbmd0aCA9IHJlcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKHRoaXMudG8hLmVuYWJsZUludGVyZmFjZSkge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLm5vdGlmeURhdGFDaGFuZ2VkKFwicmVwZWF0TGVuZ3RoQ2hhbmdlXCIsIHtcbiAgICAgICAgICAgICAgcmRtOiBNYXRoLnJhbmRvbSgpLFxuICAgICAgICAgICAgICBjb25maWc6IHRoaXMuZmllbGQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWVsZCEuZmllbGRHcm91cCkge1xuICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmZpZWxkIS5maWVsZEdyb3VwIS5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKCEhKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl0pIHtcbiAgICAgIE9iamVjdC5rZXlzKCh0aGlzLmZpZWxkIGFzIGFueSlbXCJyZXBlYXRSb2xlXCJdKS5mb3JFYWNoKFxuICAgICAgICAocmVwZWF0S2V5SW5kZXg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gTnVtYmVyKFxuICAgICAgICAgICAgcmVwZWF0S2V5SW5kZXguc3Vic3RyKHJlcGVhdEtleUluZGV4Lmxhc3RJbmRleE9mKFwiJFwiKSArIDEpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghIXRoaXMuZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC5maWVsZEdyb3VwLmZvckVhY2goKGZpZWxkOiBhbnksIGluZDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gaW5kKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZmllbGRHcm91cC5mb3JFYWNoKChyZXBlYXRGaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEhKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bcmVwZWF0S2V5SW5kZXhdW1xuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmtleVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQudGVtcGxhdGVPcHRpb25zID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLnRlbXBsYXRlT3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5lZGl0UHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmVkaXRQcm9wZXJ0eSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5lZGl0UHJvcGVydHkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC50ZW1wbGF0ZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLnRlbXBsYXRlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdLnRlbXBsYXRlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bcmVwZWF0S2V5SW5kZXhdW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgXVtcImVkaXRvclwiXSA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdW1wiZWRpdG9yXCJdID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmVkaXRvciA9ICh0aGlzLmZpZWxkIGFzIGFueSlbXCJyZXBlYXRSb2xlXCJdW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0S2V5SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICBdW3JlcGVhdEZpZWxkLmtleV1bXCJlZGl0b3JcIl07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bcmVwZWF0S2V5SW5kZXhdW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgXVtcInNob3dcIl0gPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bcmVwZWF0S2V5SW5kZXhdW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgXVtcInNob3dcIl0gPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQuc2hvdyA9ICh0aGlzLmZpZWxkIGFzIGFueSlbXCJyZXBlYXRSb2xlXCJdW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0S2V5SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICBdW3JlcGVhdEZpZWxkLmtleV1bXCJzaG93XCJdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQuZWRpdFByb3BlcnR5ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5lZGl0UHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bcmVwZWF0S2V5SW5kZXhdW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgXS5lZGl0UHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghIXRoaXMuZmllbGRbXCJzaG93XCJdKSB7XG4gICAgICB0aGlzLmZpZWxkLmhpZGUgPSAhdGhpcy5maWVsZFtcInNob3dcIl07XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlV2lkdGgoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLmNoYXJ0cmVzaXplLCB0cnVlKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLmNoYXJ0cmVzaXplLCB0cnVlKTtcbiAgfVxuICBmaWVsZE9wZXJhdGlvbmFsKHNpZ246IHN0cmluZykge1xuICAgIHRoaXMuc2VydmljZS5maWVsZE9wZXJhdGlvbmFsKHNpZ24sIHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZ3JvdXBPcGVyYXRpb25hbCh0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ3JvdXBPcGVyYXRpb25hbCh0eXBlLCB0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGRlbGV0ZShpOiBhbnkpIHtcbiAgICBpZiAodGhpcy5maWVsZC5maWVsZEdyb3VwICYmIHRoaXMuZmllbGQuZmllbGRHcm91cC5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLnJlbW92ZShpKTtcbiAgICB9IGVsc2Uge1xuICAgIH1cbiAgfVxuXG4gIGNoYXJ0cmVzaXplID0gKCkgPT4ge1xuICAgIHRoaXMuY2hhbmdlV2lkdGgoKTtcbiAgfTtcbiAgY2hhbmdlV2lkdGgoKSB7XG4gICAgbGV0IHdpZHRoID0gMzAwO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmllbGQgIT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZpZWxkICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheSAhPSBudWxsICYmXG4gICAgICB0aGlzLmZpZWxkLmZpZWxkQXJyYXkuZmllbGRHcm91cCAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheS5maWVsZEdyb3VwICE9IG51bGxcbiAgICAgIC8vICYmICFfLmlzRW1wdHkodGhpcy5maWVsZC5maWVsZEdyb3VwKVxuICAgICkge1xuICAgICAgbGV0IGxlbmd0aCA9IHRoaXMuZmllbGQhLmZpZWxkQXJyYXkhLmZpZWxkR3JvdXAhLmZpbHRlcigodGl0bGUpID0+XG4gICAgICAgIHRoaXMuY2hlY2tGaWVsZFNob3codGl0bGUpXG4gICAgICApLmxlbmd0aDtcbiAgICAgIHdpZHRoID0gbGVuZ3RoICogMjQ1ICsgMTIwO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlV2lkdGggPSB3aWR0aDtcblxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5maWVsZC5maWVsZEdyb3VwKSkge1xuICAgICAgdGhpcy5zaG93WFNjcm9sbCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnNob3dYU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgYWRkSW5kZXgoKSB7XG4gICAgdGhpcy5zaG93WFNjcm9sbCA9IHRydWU7XG4gICAgKHRoaXMuZmllbGQuZmllbGRHcm91cCBhcyBhbnlbXSkuZm9yRWFjaCgoZWw6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgZWwuZmllbGRHcm91cC5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBlbGUudGVtcGxhdGVPcHRpb25zLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmZpZWxkICYmXG4gICAgICAgICAgdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMgJiZcbiAgICAgICAgICAoISF0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucy5pbmRleCB8fFxuICAgICAgICAgICAgdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMuaW5kZXggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIGVsZS50ZW1wbGF0ZU9wdGlvbnMucEluZGV4ID0gdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMuaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGlzUmVtb3ZlZChmOiBLcmVGb3JtRmllbGRDb25maWcpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5lZGl0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmIVxuICAgICAgICAuZmllbGRHcm91cCEuZmlsdGVyKFxuICAgICAgICAgIChlbCkgPT4gZWwudHlwZSAhPT0gXCJsaW5lXCIgJiYgZWwudHlwZSAhPT0gXCJodG1sY29udGVudFwiXG4gICAgICAgICkhXG4gICAgICAgIC5ldmVyeSgoZWw6IGFueSkgPT4gISFlbCEuZWRpdFByb3BlcnR5ICYmICEhZWwhLmVkaXRQcm9wZXJ0eSEuZGVsZXRlKVxuICAgICkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmVtb3ZlZChpOiBudW1iZXIsIGlzUmVtb3ZlOiBib29sZWFuKSB7XG4gICAgaWYgKCFpc1JlbW92ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZShpKTtcbiAgICBpZiAoISF0aGlzLm9wZXJhdGlvblByb3BlcnR5ICYmICEhdGhpcy5vcGVyYXRpb25Qcm9wZXJ0eS5kZWxldGVFdmVudCkge1xuICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLm5vdGlmeURhdGFDaGFuZ2VkKFwiRmllbGRXcmFwcGVyQ2xpY2tcIiwge1xuICAgICAgICByZG06IE1hdGgucmFuZG9tKCksXG4gICAgICAgIGNvbmZpZzogdGhpcy5maWVsZCxcbiAgICAgICAgdHlwZTogXCJyZXBlYXRcIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5ub3RpZnlEYXRhQ2hhbmdlZChcInJlcGVhdERlbGV0ZVwiLCB7XG4gICAgICByZG06IE1hdGgucmFuZG9tKCksXG4gICAgICBpbmRleDogaSxcbiAgICAgIGNvbmZpZzogdGhpcy5maWVsZCxcbiAgICB9KTtcbiAgICB0aGlzLmFkZEluZGV4KCk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuZmllbGQuZmllbGRHcm91cCkpIHtcbiAgICAgIHRoaXMuc2hvd1hTY3JvbGwgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc2hvd0Vycm9ycygpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQuc2hvd0Vycm9yO1xuICB9XG4gIG5ld1Jvd0lkKGk6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZmllbGQuaWR9XyR7aX1gO1xuICB9XG4gIG5ld1JlcGVhdENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZmllbGQuaWR9X3JlcGVhdGA7XG4gIH1cblxuICBjaGVja0ZpZWxkU2hvdyhmaWVsZDogS3JlRm9ybUZpZWxkQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IHRydWU7XG4gICAgaWYgKFxuICAgICAgKCFmaWVsZCB8fFxuICAgICAgICAhZmllbGQudHlwZSB8fFxuICAgICAgICBmaWVsZC50eXBlID09PSBcImxpbmVcIiB8fFxuICAgICAgICBmaWVsZC50eXBlID09PSBcImh0bWxjb250ZW50XCIpICYmXG4gICAgICBmaWVsZC5zaG93ID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGZpZWxkLnNob3cgPSB0cnVlO1xuICAgICAgZmllbGQuaGlkZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtU3RhdHVzID09PSAwKSB7XG4gICAgICBpZiAoZmllbGQgJiYgZmllbGQuaGFzT3duUHJvcGVydHkoXCJzaG93XCIpKSB7XG4gICAgICAgIHJlc3VsdCA9IChmaWVsZC5zaG93IHx8IGZhbHNlKSBhcyBib29sZWFuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmllbGQuc2hvdyA9PT0gZmFsc2UpIHtcbiAgICAgIGZpZWxkLmhpZGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==