@kre-form/ant
Version:
338 lines • 40.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, } from "@angular/core";
import { FieldArrayType, FormGlobalService } from "@kre-form/core";
import * as _ from "lodash";
import { KreFormAntService } from "../../tools/service";
export class KreFormFieldRepeat extends FieldArrayType {
/**
* @param {?} dyService
* @param {?} globalService
*/
constructor(dyService, globalService) {
super();
this.globalService = globalService;
this.titles = [];
this.showXScroll = true;
this.screenTableWidth = window.screen.width - 162;
this.tableWidth = 0;
this.length = 0;
this.chartresize = (/**
* @return {?}
*/
() => {
this.changeWidth();
});
this.service = dyService;
}
/**
* @return {?}
*/
ngAfterContentChecked() {
if (_.isEmpty(this.field.fieldGroup)) {
this.showXScroll = false;
}
else {
this.showXScroll = true;
}
}
/**
* @return {?}
*/
ngOnInit() {
if (this.formControl) {
this.formControl.valueChanges.subscribe((/**
* @param {?} res
* @return {?}
*/
(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 {?}
*/
(repeatKeyIndex) => {
/** @type {?} */
let index = Number(repeatKeyIndex.substr(repeatKeyIndex.lastIndexOf("$") + 1));
if (!!this.field.fieldGroup) {
this.field.fieldGroup.forEach((/**
* @param {?} field
* @param {?} ind
* @return {?}
*/
(field, ind) => {
if (index === ind) {
field.fieldGroup.forEach((/**
* @param {?} repeatField
* @return {?}
*/
(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 {?}
*/
ngOnDestroy() {
window.removeEventListener("resize", this.chartresize, true);
}
/**
* @param {?} sign
* @return {?}
*/
fieldOperational(sign) {
this.service.fieldOperational(sign, this.field);
}
/**
* @param {?} type
* @return {?}
*/
groupOperational(type) {
this.service.groupOperational(type, this.field);
}
/**
* @param {?} i
* @return {?}
*/
delete(i) {
if (this.field.fieldGroup && this.field.fieldGroup.length > 1) {
this.remove(i);
}
else {
}
}
/**
* @return {?}
*/
changeWidth() {
/** @type {?} */
let 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 {?} */
let length = (/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ (this.field)).fieldArray)).fieldGroup)).filter((/**
* @param {?} title
* @return {?}
*/
(title) => this.checkFieldShow(title))).length;
width = length * 245 + 120;
}
this.tableWidth = width;
if (_.isEmpty(this.field.fieldGroup)) {
this.showXScroll = false;
}
else {
// this.showXScroll = true;
}
}
/**
* @return {?}
*/
addIndex() {
this.showXScroll = true;
((/** @type {?} */ (this.field.fieldGroup))).forEach((/**
* @param {?} el
* @param {?} index
* @return {?}
*/
(el, index) => {
el.fieldGroup.forEach((/**
* @param {?} ele
* @return {?}
*/
(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 {?}
*/
isRemoved(f) {
/** @type {?} */
let result = true;
if (this.editor === false) {
result = false;
}
if ((/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ (f)).fieldGroup)).filter((/**
* @param {?} el
* @return {?}
*/
(el) => el.type !== "line" && el.type !== "htmlcontent")))).every((/**
* @param {?} el
* @return {?}
*/
(el) => !!(/** @type {?} */ (el)).editProperty && !!(/** @type {?} */ ((/** @type {?} */ (el)).editProperty)).delete))) {
result = false;
}
return result;
}
/**
* @param {?} i
* @param {?} isRemove
* @return {?}
*/
removed(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 {?}
*/
showErrors() {
/** @type {?} */
let that = this;
return that.showError;
}
/**
* @param {?} i
* @return {?}
*/
newRowId(i) {
return `${this.field.id}_${i}`;
}
/**
* @return {?}
*/
newRepeatClass() {
return `${this.field.id}_repeat`;
}
/**
* @param {?} field
* @return {?}
*/
checkFieldShow(field) {
/** @type {?} */
let 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 = () => [
{ type: KreFormAntService },
{ type: FormGlobalService }
];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa3JlLWZvcm0vYW50LyIsInNvdXJjZXMiOlsibGliL3RlbXBsYXRlcy9yZXBlYXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEdBSVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT25FLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVXhELE1BQU0sT0FBTyxrQkFDWCxTQUFRLGNBQWM7Ozs7O0lBVXRCLFlBQ0UsU0FBNEIsRUFDcEIsYUFBZ0M7UUFFeEMsS0FBSyxFQUFFLENBQUM7UUFGQSxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFSMUMsV0FBTSxHQUE2QixFQUFFLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQzdDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBcUlYLGdCQUFXOzs7UUFBRyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsRUFBQztRQWhJQSxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDOzs7O0lBQ0QscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjtJQUNILENBQUM7Ozs7SUFDRCxR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QixLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFDeEI7WUFDQSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNwQjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDekIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDekMsTUFBTSxHQUFHLG1CQUFBLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBVyxDQUFDO2FBQzNDO1NBQ0Y7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ25CO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7O1lBM1FGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixnN05BQTJCO2dCQUMzQixJQUFJLEVBQUU7b0JBQ0osU0FBUyxFQUFFLHVCQUF1QjtvQkFDbEMsT0FBTyxFQUFFLEVBQUU7aUJBQ1o7YUFDRjs7OztZQVRRLGlCQUFpQjtZQVJELGlCQUFpQjs7OztJQXNCeEMscUNBQWE7O0lBQ2Isb0NBQXNDOztJQUN0Qyx5Q0FBbUI7O0lBQ25CLDhDQUE2Qzs7SUFDN0Msd0NBQWU7O0lBQ2Ysb0NBQVc7O0lBcUlYLHlDQUVFOzs7OztJQW5JQSwyQ0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRmllbGRBcnJheVR5cGUsIEZvcm1HbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIkBrcmUtZm9ybS9jb3JlXCI7XG5pbXBvcnQge1xuICBLcmVGb3JtQ29tbW9uU2VydmljZSxcbiAgS3JlRm9ybVRlbXBsYXRlT3B0aW9ucyxcbiAgS3JlRm9ybUZpZWxkQ29uZmlnLFxufSBmcm9tIFwiQGtyZS1mb3JtL2NvcmVcIjtcblxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgeyBLcmVGb3JtQW50U2VydmljZSB9IGZyb20gXCIuLi8uLi90b29scy9zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJrcmVmb3JtLXJlcGVhdFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4Lmh0bWxcIixcbiAgaG9zdDoge1xuICAgIFwiW2NsYXNzXVwiOiAnZmllbGQuY2xhc3NOYW1lIHx8IFwiXCInLFxuICAgIGNka0RyYWc6IFwiXCIsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEtyZUZvcm1GaWVsZFJlcGVhdFxuICBleHRlbmRzIEZpZWxkQXJyYXlUeXBlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWRcbntcbiAgc2VydmljZTogYW55O1xuICB0aXRsZXM6IEtyZUZvcm1UZW1wbGF0ZU9wdGlvbnNbXSA9IFtdO1xuICBzaG93WFNjcm9sbCA9IHRydWU7XG4gIHNjcmVlblRhYmxlV2lkdGggPSB3aW5kb3cuc2NyZWVuLndpZHRoIC0gMTYyO1xuICB0YWJsZVdpZHRoID0gMDtcbiAgbGVuZ3RoID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkeVNlcnZpY2U6IEtyZUZvcm1BbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogRm9ybUdsb2JhbFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNlcnZpY2UgPSBkeVNlcnZpY2U7XG4gIH1cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5maWVsZC5maWVsZEdyb3VwKSkge1xuICAgICAgdGhpcy5zaG93WFNjcm9sbCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dYU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoICE9PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubGVuZ3RoID0gcmVzLmxlbmd0aDtcbiAgICAgICAgICBpZiAodGhpcy50byEuZW5hYmxlSW50ZXJmYWNlKSB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uubm90aWZ5RGF0YUNoYW5nZWQoXCJyZXBlYXRMZW5ndGhDaGFuZ2VcIiwge1xuICAgICAgICAgICAgICByZG06IE1hdGgucmFuZG9tKCksXG4gICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5maWVsZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpZWxkIS5maWVsZEdyb3VwKSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZmllbGQhLmZpZWxkR3JvdXAhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAoISEodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXSkge1xuICAgICAgT2JqZWN0LmtleXMoKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl0pLmZvckVhY2goXG4gICAgICAgIChyZXBlYXRLZXlJbmRleDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBOdW1iZXIoXG4gICAgICAgICAgICByZXBlYXRLZXlJbmRleC5zdWJzdHIocmVwZWF0S2V5SW5kZXgubGFzdEluZGV4T2YoXCIkXCIpICsgMSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCEhdGhpcy5maWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLmZpZWxkR3JvdXAuZm9yRWFjaCgoZmllbGQ6IGFueSwgaW5kOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBpbmQpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwLmZvckVhY2goKHJlcGVhdEZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgISEodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQua2V5XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC50ZW1wbGF0ZU9wdGlvbnMgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQudGVtcGxhdGVPcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmVkaXRQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQuZWRpdFByb3BlcnR5ID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmVkaXRQcm9wZXJ0eSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLnRlbXBsYXRlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQudGVtcGxhdGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIGFueSlbXCJyZXBlYXRSb2xlXCJdW3JlcGVhdEtleUluZGV4XVtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmtleVxuICAgICAgICAgICAgICAgICAgICAgIF0udGVtcGxhdGVPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdW1wiZWRpdG9yXCJdID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIGFueSlbXCJyZXBlYXRSb2xlXCJdW3JlcGVhdEtleUluZGV4XVtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmtleVxuICAgICAgICAgICAgICAgICAgICAgIF1bXCJlZGl0b3JcIl0gPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQuZWRpdG9yID0gKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRLZXlJbmRleFxuICAgICAgICAgICAgICAgICAgICAgIF1bcmVwZWF0RmllbGQua2V5XVtcImVkaXRvclwiXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdW1wic2hvd1wiXSA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdW1wic2hvd1wiXSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5zaG93ID0gKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRLZXlJbmRleFxuICAgICAgICAgICAgICAgICAgICAgIF1bcmVwZWF0RmllbGQua2V5XVtcInNob3dcIl07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5lZGl0UHJvcGVydHkgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmVkaXRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdLmVkaXRQcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCEhdGhpcy5maWVsZFtcInNob3dcIl0pIHtcbiAgICAgIHRoaXMuZmllbGQuaGlkZSA9ICF0aGlzLmZpZWxkW1wic2hvd1wiXTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VXaWR0aCgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuY2hhcnRyZXNpemUsIHRydWUpO1xuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuY2hhcnRyZXNpemUsIHRydWUpO1xuICB9XG4gIGZpZWxkT3BlcmF0aW9uYWwoc2lnbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmZpZWxkT3BlcmF0aW9uYWwoc2lnbiwgdGhpcy5maWVsZCk7XG4gIH1cblxuICBncm91cE9wZXJhdGlvbmFsKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VydmljZS5ncm91cE9wZXJhdGlvbmFsKHR5cGUsIHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZGVsZXRlKGk6IGFueSkge1xuICAgIGlmICh0aGlzLmZpZWxkLmZpZWxkR3JvdXAgJiYgdGhpcy5maWVsZC5maWVsZEdyb3VwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGkpO1xuICAgIH0gZWxzZSB7XG4gICAgfVxuICB9XG5cbiAgY2hhcnRyZXNpemUgPSAoKSA9PiB7XG4gICAgdGhpcy5jaGFuZ2VXaWR0aCgpO1xuICB9O1xuICBjaGFuZ2VXaWR0aCgpIHtcbiAgICBsZXQgd2lkdGggPSAzMDA7XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWVsZCAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZmllbGQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5ICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheS5maWVsZEdyb3VwICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5LmZpZWxkR3JvdXAgIT0gbnVsbFxuICAgICAgLy8gJiYgIV8uaXNFbXB0eSh0aGlzLmZpZWxkLmZpZWxkR3JvdXApXG4gICAgKSB7XG4gICAgICBsZXQgbGVuZ3RoID0gdGhpcy5maWVsZCEuZmllbGRBcnJheSEuZmllbGRHcm91cCEuZmlsdGVyKCh0aXRsZSkgPT5cbiAgICAgICAgdGhpcy5jaGVja0ZpZWxkU2hvdyh0aXRsZSlcbiAgICAgICkubGVuZ3RoO1xuICAgICAgd2lkdGggPSBsZW5ndGggKiAyNDUgKyAxMjA7XG4gICAgfVxuICAgIHRoaXMudGFibGVXaWR0aCA9IHdpZHRoO1xuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmZpZWxkLmZpZWxkR3JvdXApKSB7XG4gICAgICB0aGlzLnNob3dYU2Nyb2xsID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMuc2hvd1hTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBhZGRJbmRleCgpIHtcbiAgICB0aGlzLnNob3dYU2Nyb2xsID0gdHJ1ZTtcbiAgICAodGhpcy5maWVsZC5maWVsZEdyb3VwIGFzIGFueVtdKS5mb3JFYWNoKChlbDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBlbC5maWVsZEdyb3VwLmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICAgIGVsZS50ZW1wbGF0ZU9wdGlvbnMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZmllbGQgJiZcbiAgICAgICAgICB0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucyAmJlxuICAgICAgICAgICghIXRoaXMuZmllbGQudGVtcGxhdGVPcHRpb25zLmluZGV4IHx8XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucy5pbmRleCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZWxlLnRlbXBsYXRlT3B0aW9ucy5wSW5kZXggPSB0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucy5pbmRleDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgaXNSZW1vdmVkKGY6IEtyZUZvcm1GaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGlmICh0aGlzLmVkaXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGYhXG4gICAgICAgIC5maWVsZEdyb3VwIS5maWx0ZXIoXG4gICAgICAgICAgKGVsKSA9PiBlbC50eXBlICE9PSBcImxpbmVcIiAmJiBlbC50eXBlICE9PSBcImh0bWxjb250ZW50XCJcbiAgICAgICAgKSFcbiAgICAgICAgLmV2ZXJ5KChlbDogYW55KSA9PiAhIWVsIS5lZGl0UHJvcGVydHkgJiYgISFlbCEuZWRpdFByb3BlcnR5IS5kZWxldGUpXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZW1vdmVkKGk6IG51bWJlciwgaXNSZW1vdmU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIWlzUmVtb3ZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlKGkpO1xuICAgIGlmICghIXRoaXMub3BlcmF0aW9uUHJvcGVydHkgJiYgISF0aGlzLm9wZXJhdGlvblByb3BlcnR5LmRlbGV0ZUV2ZW50KSB7XG4gICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uubm90aWZ5RGF0YUNoYW5nZWQoXCJGaWVsZFdyYXBwZXJDbGlja1wiLCB7XG4gICAgICAgIHJkbTogTWF0aC5yYW5kb20oKSxcbiAgICAgICAgY29uZmlnOiB0aGlzLmZpZWxkLFxuICAgICAgICB0eXBlOiBcInJlcGVhdFwiLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLm5vdGlmeURhdGFDaGFuZ2VkKFwicmVwZWF0RGVsZXRlXCIsIHtcbiAgICAgIHJkbTogTWF0aC5yYW5kb20oKSxcbiAgICAgIGluZGV4OiBpLFxuICAgICAgY29uZmlnOiB0aGlzLmZpZWxkLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkSW5kZXgoKTtcblxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5maWVsZC5maWVsZEdyb3VwKSkge1xuICAgICAgdGhpcy5zaG93WFNjcm9sbCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzaG93RXJyb3JzKCkge1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdC5zaG93RXJyb3I7XG4gIH1cbiAgbmV3Um93SWQoaTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5maWVsZC5pZH1fJHtpfWA7XG4gIH1cbiAgbmV3UmVwZWF0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5maWVsZC5pZH1fcmVwZWF0YDtcbiAgfVxuXG4gIGNoZWNrRmllbGRTaG93KGZpZWxkOiBLcmVGb3JtRmllbGRDb25maWcpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICAoIWZpZWxkIHx8XG4gICAgICAgICFmaWVsZC50eXBlIHx8XG4gICAgICAgIGZpZWxkLnR5cGUgPT09IFwibGluZVwiIHx8XG4gICAgICAgIGZpZWxkLnR5cGUgPT09IFwiaHRtbGNvbnRlbnRcIikgJiZcbiAgICAgIGZpZWxkLnNob3cgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgZmllbGQuc2hvdyA9IHRydWU7XG4gICAgICBmaWVsZC5oaWRlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1TdGF0dXMgPT09IDApIHtcbiAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC5oYXNPd25Qcm9wZXJ0eShcInNob3dcIikpIHtcbiAgICAgICAgcmVzdWx0ID0gKGZpZWxkLnNob3cgfHwgZmFsc2UpIGFzIGJvb2xlYW47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWVsZC5zaG93ID09PSBmYWxzZSkge1xuICAgICAgZmllbGQuaGlkZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19