@kre-form/ant
Version:
334 lines • 36.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 { KreFormAntService } from "../../tools/service";
var DeonFieldOverTime = /** @class */ (function (_super) {
tslib_1.__extends(DeonFieldOverTime, _super);
function DeonFieldOverTime(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.chartresize = (/**
* @return {?}
*/
function () {
_this.changeWidth();
});
_this.service = dyService;
return _this;
}
/**
* @return {?}
*/
DeonFieldOverTime.prototype.ngOnChanges = /**
* @return {?}
*/
function () { };
/**
* @return {?}
*/
DeonFieldOverTime.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (!!((/** @type {?} */ (this.field)))["repeatRole"]) {
// this.initProperty(
// (this.field as any)["repeatRole"],
// this.field.fieldGroup
// );
}
if (!!this.field["show"]) {
this.field.hide = !this.field["show"];
}
this.changeWidth();
window.addEventListener("resize", this.chartresize, true);
};
/**
* @param {?} overTimeRole
* @param {?} fieldGroups
* @return {?}
*/
DeonFieldOverTime.prototype.initProperty = /**
* @param {?} overTimeRole
* @param {?} fieldGroups
* @return {?}
*/
function (overTimeRole, fieldGroups) {
var _this = this;
Object.keys(overTimeRole).forEach((/**
* @param {?} overtimeItemKey
* @return {?}
*/
function (overtimeItemKey) {
/** @type {?} */
var index = Number(overtimeItemKey.substr(overtimeItemKey.lastIndexOf("$") + 1));
if (!!fieldGroups) {
fieldGroups.forEach((/**
* @param {?} overtimes
* @param {?} ind
* @return {?}
*/
function (overtimes, ind) {
if (index === ind) {
overtimes.fieldGroup.forEach((/**
* @param {?} overtime
* @return {?}
*/
function (overtime) {
if (!!overTimeRole[overtimeItemKey][overtime.key]) {
if ((overtime.templateOptions === undefined ||
overtime.templateOptions === null) &&
overtime.type !== "repeat") {
overtime.templateOptions = {};
}
if (overtime.editProperty === undefined ||
overtime.editProperty === null) {
overtime.editProperty = {};
}
overtime.templateOptions = Object.assign(overtime.templateOptions, overTimeRole[overtimeItemKey][overtime.key].templateOptions);
if (overTimeRole[overtimeItemKey][overtime.key]["editor"] ===
false ||
overTimeRole[overtimeItemKey][overtime.key]["editor"] === true) {
overtime.editor =
overTimeRole[overtimeItemKey][overtime.key]["editor"];
}
if (overTimeRole[overtimeItemKey][overtime.key]["show"] ===
false ||
overTimeRole[overtimeItemKey][overtime.key]["show"] === true) {
overtime.show =
overTimeRole[overtimeItemKey][overtime.key]["show"];
}
overtime.editProperty = Object.assign(overtime.editProperty, overTimeRole[overtimeItemKey][overtime.key].editProperty);
if (overtime.type === "repeat") {
/** @type {?} */
var repeatRole = overTimeRole[overtimeItemKey][overtime.key];
console.log(repeatRole);
/** @type {?} */
var fieldGroups_1 = (/** @type {?} */ (((/** @type {?} */ (overtime)))
.fieldGroup));
_this.initProperty(repeatRole, fieldGroups_1);
}
}
}));
}
}));
}
}));
};
/**
* @return {?}
*/
DeonFieldOverTime.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
window.removeEventListener("resize", this.chartresize, true);
};
/**
* @return {?}
*/
DeonFieldOverTime.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () { };
/**
* @param {?} sign
* @return {?}
*/
DeonFieldOverTime.prototype.fieldOperational = /**
* @param {?} sign
* @return {?}
*/
function (sign) {
this.service.fieldOperational(sign, this.field);
};
/**
* @param {?} type
* @return {?}
*/
DeonFieldOverTime.prototype.groupOperational = /**
* @param {?} type
* @return {?}
*/
function (type) {
this.service.groupOperational(type, this.field);
};
/**
* @param {?} i
* @return {?}
*/
DeonFieldOverTime.prototype.delete = /**
* @param {?} i
* @return {?}
*/
function (i) {
if (this.field.fieldGroup && this.field.fieldGroup.length > 1) {
this.remove(i);
}
else {
}
};
/**
* @return {?}
*/
DeonFieldOverTime.prototype.changeWidth = /**
* @return {?}
*/
function () {
/** @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) {
width = this.field.fieldArray.fieldGroup.length * 245 + 120;
}
this.tableWidth = width;
};
/**
* @return {?}
*/
DeonFieldOverTime.prototype.addIndex = /**
* @return {?}
*/
function () {
var _this = this;
((/** @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 {?}
*/
DeonFieldOverTime.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 {?}
*/
DeonFieldOverTime.prototype.removed = /**
* @param {?} i
* @param {?} isRemove
* @return {?}
*/
function (i, isRemove) {
if (!isRemove) {
return;
}
this.remove(i);
this.addIndex();
};
/**
* @return {?}
*/
DeonFieldOverTime.prototype.showErrors = /**
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return that.showError;
};
/**
* @param {?} i
* @return {?}
*/
DeonFieldOverTime.prototype.newRowId = /**
* @param {?} i
* @return {?}
*/
function (i) {
return this.field.id + "_" + i;
};
/**
* @return {?}
*/
DeonFieldOverTime.prototype.newRepeatClass = /**
* @return {?}
*/
function () {
return this.field.id + "_overTime";
};
DeonFieldOverTime.decorators = [
{ type: Component, args: [{
selector: "kreform-overTime",
template: "<!-- <ng-container *ngIf=\"formStatus === 0\">\n <ng-container\n *ngIf=\"field.fieldGroup!==undefined && field.fieldGroup!==null && field.fieldGroup.length>0;else cardEmpty\"\n >\n <div *ngFor=\"let field of field.fieldGroup; let i = index\" class=\"row\">\n <ng-container *ngIf=\"field.hide!=true\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n <span class=\"del\" (click)=\"remove(i)\">\u5220\u9664</span>\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\" (click)=\"add();addIndex()\">\n <span>\u65B0\u589E</span>\n </div>\n</ng-container>\n<ng-container *ngIf=\"formStatus !== 0\">\n <div class=\"fieldOperational\">\n <div class=\"reportControl\">\n <div class=\"report-header\" *ngIf=\"field?.editProperty?.config !== false \">\n <div class=\"left\">\n <ul>\n <li>\n <label nz-checkbox [(ngModel)]=\"field.checked\"></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 *ngFor=\"let field of field.fieldGroup; let i = index\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n </div>\n </div>\n <div class=\"field-hide\" *ngIf=\"field.hide == true\">\u5DF2\u9690\u85CF</div>\n </div>\n</ng-container> -->\n<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 *ngFor=\"let field of field.fieldGroup; let i = index\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\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 <th\n *ngIf=\"title && title.type!==undefined && title.type!==null && (title.type!=='line' && title.type!=='htmlcontent') && title.hide !=true\"\n >\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=\"\"> </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 <td\n class=\"w-100-td\"\n *ngIf=\"f && f.type!==undefined && f.type!==null &&(f.type!=='line' && f.type!=='htmlcontent') && f.hide!=true\"\n >\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 *ngFor=\"let field of field.fieldGroup; let i = index\" class=\"row\">\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"
}] }
];
/** @nocollapse */
DeonFieldOverTime.ctorParameters = function () { return [
{ type: KreFormAntService },
{ type: FormGlobalService }
]; };
return DeonFieldOverTime;
}(FieldArrayType));
export { DeonFieldOverTime };
if (false) {
/** @type {?} */
DeonFieldOverTime.prototype.service;
/** @type {?} */
DeonFieldOverTime.prototype.titles;
/** @type {?} */
DeonFieldOverTime.prototype.showXScroll;
/** @type {?} */
DeonFieldOverTime.prototype.screenTableWidth;
/** @type {?} */
DeonFieldOverTime.prototype.tableWidth;
/** @type {?} */
DeonFieldOverTime.prototype.chartresize;
/**
* @type {?}
* @private
*/
DeonFieldOverTime.prototype.globalService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa3JlLWZvcm0vYW50LyIsInNvdXJjZXMiOlsibGliL3RlbXBsYXRlcy9vdmVydGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEdBTVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hEO0lBS1UsNkNBQWM7SUFRdEIsMkJBQ0UsU0FBNEIsRUFDcEIsYUFBZ0M7UUFGMUMsWUFJRSxpQkFBTyxTQUVSO1FBSlMsbUJBQWEsR0FBYixhQUFhLENBQW1CO1FBTjFDLFlBQU0sR0FBNkIsRUFBRSxDQUFDO1FBQ3RDLGlCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLHNCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUM3QyxnQkFBVSxHQUFHLENBQUMsQ0FBQztRQTJHZixpQkFBVzs7O1FBQUc7WUFDWixLQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxFQUFDO1FBdkdBLEtBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDOztJQUMzQixDQUFDOzs7O0lBQ0QsdUNBQVc7OztJQUFYLGNBQWUsQ0FBQzs7OztJQUNoQixvQ0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxLQUFLLEVBQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3ZDLHFCQUFxQjtZQUNyQix1Q0FBdUM7WUFDdkMsMEJBQTBCO1lBQzFCLEtBQUs7U0FDTjtRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdB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QUFLLENBQUMsRUFBRSxjQUFXLENBQUM7SUFDckMsQ0FBQzs7Z0JBekxGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixvaVRBQTJCO2lCQUM1Qjs7OztnQkFKUSxpQkFBaUI7Z0JBUEQsaUJBQWlCOztJQWtNMUMsd0JBQUM7Q0FBQSxBQTFMRCxDQUtVLGNBQWMsR0FxTHZCO1NBdExZLGlCQUFpQjs7O0lBSTVCLG9DQUFhOztJQUNiLG1DQUFzQzs7SUFDdEMsd0NBQW1COztJQUNuQiw2Q0FBNkM7O0lBQzdDLHVDQUFlOztJQTJHZix3Q0FFRTs7Ozs7SUExR0EsMENBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRmllbGRBcnJheVR5cGUsIEZvcm1HbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIkBrcmUtZm9ybS9jb3JlXCI7XG5pbXBvcnQge1xuICBLcmVGb3JtQ29tbW9uU2VydmljZSxcbiAgS3JlRm9ybVRlbXBsYXRlT3B0aW9ucyxcbiAgS3JlRm9ybUZpZWxkQ29uZmlnLFxufSBmcm9tIFwiQGtyZS1mb3JtL2NvcmVcIjtcblxuaW1wb3J0IHsgS3JlRm9ybUFudFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdG9vbHMvc2VydmljZVwiO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImtyZWZvcm0tb3ZlclRpbWVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9pbmRleC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIERlb25GaWVsZE92ZXJUaW1lXG4gIGV4dGVuZHMgRmllbGRBcnJheVR5cGVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzXG57XG4gIHNlcnZpY2U6IGFueTtcbiAgdGl0bGVzOiBLcmVGb3JtVGVtcGxhdGVPcHRpb25zW10gPSBbXTtcbiAgc2hvd1hTY3JvbGwgPSB0cnVlO1xuICBzY3JlZW5UYWJsZVdpZHRoID0gd2luZG93LnNjcmVlbi53aWR0aCAtIDE2MjtcbiAgdGFibGVXaWR0aCA9IDA7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGR5U2VydmljZTogS3JlRm9ybUFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbG9iYWxTZXJ2aWNlOiBGb3JtR2xvYmFsU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2VydmljZSA9IGR5U2VydmljZTtcbiAgfVxuICBuZ09uQ2hhbmdlcygpIHt9XG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghISh0aGlzLmZpZWxkIGFzIGFueSlbXCJyZXBlYXRSb2xlXCJdKSB7XG4gICAgICAvLyB0aGlzLmluaXRQcm9wZXJ0eShcbiAgICAgIC8vICAgKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl0sXG4gICAgICAvLyAgIHRoaXMuZmllbGQuZmllbGRHcm91cFxuICAgICAgLy8gKTtcbiAgICB9XG5cbiAgICBpZiAoISF0aGlzLmZpZWxkW1wic2hvd1wiXSkge1xuICAgICAgdGhpcy5maWVsZC5oaWRlID0gIXRoaXMuZmllbGRbXCJzaG93XCJdO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVdpZHRoKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5jaGFydHJlc2l6ZSwgdHJ1ZSk7XG4gIH1cblxuICBpbml0UHJvcGVydHkob3ZlclRpbWVSb2xlOiBhbnksIGZpZWxkR3JvdXBzOiBhbnkpIHtcbiAgICBPYmplY3Qua2V5cyhvdmVyVGltZVJvbGUpLmZvckVhY2goKG92ZXJ0aW1lSXRlbUtleTogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgaW5kZXg6IG51bWJlciA9IE51bWJlcihcbiAgICAgICAgb3ZlcnRpbWVJdGVtS2V5LnN1YnN0cihvdmVydGltZUl0ZW1LZXkubGFzdEluZGV4T2YoXCIkXCIpICsgMSlcbiAgICAgICk7XG4gICAgICBpZiAoISFmaWVsZEdyb3Vwcykge1xuICAgICAgICBmaWVsZEdyb3Vwcy5mb3JFYWNoKChvdmVydGltZXM6IGFueSwgaW5kOiBudW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGluZCkge1xuICAgICAgICAgICAgb3ZlcnRpbWVzLmZpZWxkR3JvdXAuZm9yRWFjaCgob3ZlcnRpbWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoISFvdmVyVGltZVJvbGVbb3ZlcnRpbWVJdGVtS2V5XVtvdmVydGltZS5rZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKG92ZXJ0aW1lLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgIG92ZXJ0aW1lLnRlbXBsYXRlT3B0aW9ucyA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgICAgICAgIG92ZXJ0aW1lLnR5cGUgIT09IFwicmVwZWF0XCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIG92ZXJ0aW1lLnRlbXBsYXRlT3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvdmVydGltZS5lZGl0UHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgb3ZlcnRpbWUuZWRpdFByb3BlcnR5ID09PSBudWxsXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBvdmVydGltZS5lZGl0UHJvcGVydHkgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3ZlcnRpbWUudGVtcGxhdGVPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgIG92ZXJ0aW1lLnRlbXBsYXRlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIG92ZXJUaW1lUm9sZVtvdmVydGltZUl0ZW1LZXldW292ZXJ0aW1lLmtleV0udGVtcGxhdGVPcHRpb25zXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvdmVyVGltZVJvbGVbb3ZlcnRpbWVJdGVtS2V5XVtvdmVydGltZS5rZXldW1wiZWRpdG9yXCJdID09PVxuICAgICAgICAgICAgICAgICAgICBmYWxzZSB8fFxuICAgICAgICAgICAgICAgICAgb3ZlclRpbWVSb2xlW292ZXJ0aW1lSXRlbUtleV1bb3ZlcnRpbWUua2V5XVtcImVkaXRvclwiXSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgb3ZlcnRpbWUuZWRpdG9yID1cbiAgICAgICAgICAgICAgICAgICAgb3ZlclRpbWVSb2xlW292ZXJ0aW1lSXRlbUtleV1bb3ZlcnRpbWUua2V5XVtcImVkaXRvclwiXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgb3ZlclRpbWVSb2xlW292ZXJ0aW1lSXRlbUtleV1bb3ZlcnRpbWUua2V5XVtcInNob3dcIl0gPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgICBvdmVyVGltZVJvbGVbb3ZlcnRpbWVJdGVtS2V5XVtvdmVydGltZS5rZXldW1wic2hvd1wiXSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgb3ZlcnRpbWUuc2hvdyA9XG4gICAgICAgICAgICAgICAgICAgIG92ZXJUaW1lUm9sZVtvdmVydGltZUl0ZW1LZXldW292ZXJ0aW1lLmtleV1bXCJzaG93XCJdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG92ZXJ0aW1lLmVkaXRQcm9wZXJ0eSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAgICBvdmVydGltZS5lZGl0UHJvcGVydHksXG4gICAgICAgICAgICAgICAgICBvdmVyVGltZVJvbGVbb3ZlcnRpbWVJdGVtS2V5XVtvdmVydGltZS5rZXldLmVkaXRQcm9wZXJ0eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG92ZXJ0aW1lLnR5cGUgPT09IFwicmVwZWF0XCIpIHtcbiAgICAgICAgICAgICAgICAgIGxldCByZXBlYXRSb2xlID0gb3ZlclRpbWVSb2xlW292ZXJ0aW1lSXRlbUtleV1bb3ZlcnRpbWUua2V5XTtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcGVhdFJvbGUpO1xuICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkR3JvdXBzID0gKG92ZXJ0aW1lIGFzIEtyZUZvcm1GaWVsZENvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgLmZpZWxkR3JvdXAgYXMgS3JlRm9ybUZpZWxkQ29uZmlnW107XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFByb3BlcnR5KHJlcGVhdFJvbGUsIGZpZWxkR3JvdXBzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLmNoYXJ0cmVzaXplLCB0cnVlKTtcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7fVxuICBmaWVsZE9wZXJhdGlvbmFsKHNpZ246IHN0cmluZykge1xuICAgIHRoaXMuc2VydmljZS5maWVsZE9wZXJhdGlvbmFsKHNpZ24sIHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZ3JvdXBPcGVyYXRpb25hbCh0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ3JvdXBPcGVyYXRpb25hbCh0eXBlLCB0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGRlbGV0ZShpOiBhbnkpIHtcbiAgICBpZiAodGhpcy5maWVsZC5maWVsZEdyb3VwICYmIHRoaXMuZmllbGQuZmllbGRHcm91cC5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLnJlbW92ZShpKTtcbiAgICB9IGVsc2Uge1xuICAgIH1cbiAgfVxuXG4gIGNoYXJ0cmVzaXplID0gKCkgPT4ge1xuICAgIHRoaXMuY2hhbmdlV2lkdGgoKTtcbiAgfTtcbiAgY2hhbmdlV2lkdGgoKSB7XG4gICAgbGV0IHdpZHRoID0gMzAwO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmllbGQgIT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZpZWxkICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheSAhPSBudWxsICYmXG4gICAgICB0aGlzLmZpZWxkLmZpZWxkQXJyYXkuZmllbGRHcm91cCAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheS5maWVsZEdyb3VwICE9IG51bGxcbiAgICApIHtcbiAgICAgIHdpZHRoID0gdGhpcy5maWVsZC5maWVsZEFycmF5LmZpZWxkR3JvdXAubGVuZ3RoICogMjQ1ICsgMTIwO1xuICAgIH1cblxuICAgIHRoaXMudGFibGVXaWR0aCA9IHdpZHRoO1xuICB9XG4gIGFkZEluZGV4KCkge1xuICAgICh0aGlzLmZpZWxkLmZpZWxkR3JvdXAgYXMgYW55W10pLmZvckVhY2goKGVsOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGVsLmZpZWxkR3JvdXAuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgZWxlLnRlbXBsYXRlT3B0aW9ucy5pbmRleCA9IGluZGV4O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5maWVsZCAmJlxuICAgICAgICAgIHRoaXMuZmllbGQudGVtcGxhdGVPcHRpb25zICYmXG4gICAgICAgICAgKCEhdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMuaW5kZXggfHxcbiAgICAgICAgICAgIHRoaXMuZmllbGQudGVtcGxhdGVPcHRpb25zLmluZGV4ID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBlbGUudGVtcGxhdGVPcHRpb25zLnBJbmRleCA9IHRoaXMuZmllbGQudGVtcGxhdGVPcHRpb25zLmluZGV4O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBpc1JlbW92ZWQoZjogS3JlRm9ybUZpZWxkQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgaWYgKHRoaXMuZWRpdG9yID09PSBmYWxzZSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZiFcbiAgICAgICAgLmZpZWxkR3JvdXAhLmZpbHRlcihcbiAgICAgICAgICAoZWwpID0+IGVsLnR5cGUgIT09IFwibGluZVwiICYmIGVsLnR5cGUgIT09IFwiaHRtbGNvbnRlbnRcIlxuICAgICAgICApIVxuICAgICAgICAuZXZlcnkoKGVsOiBhbnkpID0+ICEhZWwhLmVkaXRQcm9wZXJ0eSAmJiAhIWVsIS5lZGl0UHJvcGVydHkhLmRlbGV0ZSlcbiAgICApIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJlbW92ZWQoaTogbnVtYmVyLCBpc1JlbW92ZTogYm9vbGVhbikge1xuICAgIGlmICghaXNSZW1vdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmUoaSk7XG4gICAgdGhpcy5hZGRJbmRleCgpO1xuICB9XG4gIHNob3dFcnJvcnMoKSB7XG4gICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0LnNob3dFcnJvcjtcbiAgfVxuICBuZXdSb3dJZChpOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmZpZWxkLmlkfV8ke2l9YDtcbiAgfVxuICBuZXdSZXBlYXRDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmZpZWxkLmlkfV9vdmVyVGltZWA7XG4gIH1cbn1cbiJdfQ==