@eqproject/eqp-dynamic-module 2.10.34 → 2.10.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +1 -1
- package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +11 -4
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +3 -3
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +36 -15
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +48 -20
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +48 -20
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/private/action-button-creator/action-button-creator.component.d.ts +2 -1
- package/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.d.ts +6 -1
- package/package.json +1 -1
package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs
CHANGED
|
@@ -326,7 +326,7 @@ export class DynamicModuleFieldFixComponent {
|
|
|
326
326
|
}
|
|
327
327
|
}
|
|
328
328
|
DynamicModuleFieldFixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, deps: [{ token: i1.MatDialog }, { token: i2.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
329
|
-
DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: i18.ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger"] }, { kind: "component", type: i19.ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
|
|
329
|
+
DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: i18.ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger", "recordChange"] }, { kind: "component", type: i19.ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
|
|
330
330
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, decorators: [{
|
|
331
331
|
type: Component,
|
|
332
332
|
args: [{ selector: 'dynamic-module-field-fix', template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"] }]
|
|
@@ -10,6 +10,7 @@ export class ActionButtonFieldTemplateComponent {
|
|
|
10
10
|
this.formulaObject = {};
|
|
11
11
|
this.inConfig = false;
|
|
12
12
|
this.fireTrigger = new EventEmitter();
|
|
13
|
+
this.recordChange = new EventEmitter();
|
|
13
14
|
}
|
|
14
15
|
ngOnInit() {
|
|
15
16
|
this.updateField();
|
|
@@ -31,19 +32,26 @@ export class ActionButtonFieldTemplateComponent {
|
|
|
31
32
|
GlobalService.debugLog("btn InListView - " + this.field.InListView);
|
|
32
33
|
}
|
|
33
34
|
generateAction(actionButton) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
if (actionButton.execution == 'execute_formula') {
|
|
36
|
+
// caso esecuzione semplice
|
|
37
|
+
let res = UtilityHelperService.EvaluateFieldFormula(actionButton.formulas[0].value, this.record, this.formulaObject);
|
|
38
|
+
this.onRecordValueChange();
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
var fireTrigger = new FireTrigger();
|
|
42
|
+
fireTrigger.trigger = new Trigger();
|
|
43
|
+
fireTrigger.trigger.CID = actionButton.ButtonCode;
|
|
44
|
+
fireTrigger.trigger.conditions = null;
|
|
45
|
+
fireTrigger.trigger.description = actionButton.Label;
|
|
46
|
+
fireTrigger.trigger.execution = actionButton.execution;
|
|
47
|
+
fireTrigger.trigger.formulas = actionButton.formulas;
|
|
48
|
+
fireTrigger.form = null; // Verrà impostato a livello superiore
|
|
49
|
+
fireTrigger.formulas = actionButton.formulas;
|
|
50
|
+
fireTrigger.record = this.record;
|
|
51
|
+
fireTrigger.userPatient = null; // Verrà impostato a livello superiore
|
|
52
|
+
fireTrigger.userMedicalExamination = null;
|
|
53
|
+
this.evaluateFormulasAndFireTrigger(fireTrigger);
|
|
54
|
+
}
|
|
47
55
|
}
|
|
48
56
|
evaluateFormulasAndFireTrigger(triggerToFire) {
|
|
49
57
|
const formulas = JSON.parse(JSON.stringify(triggerToFire.formulas));
|
|
@@ -79,9 +87,20 @@ export class ActionButtonFieldTemplateComponent {
|
|
|
79
87
|
triggerToFire.formulas = evaluatedFormulas;
|
|
80
88
|
this.fireTrigger.emit(triggerToFire);
|
|
81
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Metodo per emettere l'evento che il valore del record è cambiato.
|
|
92
|
+
*/
|
|
93
|
+
onRecordValueChange() {
|
|
94
|
+
if (!this.field.Formula) {
|
|
95
|
+
this.recordChange.emit(this.record);
|
|
96
|
+
}
|
|
97
|
+
if (!this.field.VisibleIf) {
|
|
98
|
+
this.recordChange.emit(this.record);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
82
101
|
}
|
|
83
102
|
ActionButtonFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ActionButtonFieldTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
84
|
-
ActionButtonFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { fireTrigger: "fireTrigger" }, ngImport: i0, template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>", styles: [""], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
103
|
+
ActionButtonFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { fireTrigger: "fireTrigger", recordChange: "recordChange" }, ngImport: i0, template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>", styles: [""], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
85
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ActionButtonFieldTemplateComponent, decorators: [{
|
|
86
105
|
type: Component,
|
|
87
106
|
args: [{ selector: 'action-button-field-template', template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>" }]
|
|
@@ -95,5 +114,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
95
114
|
type: Input
|
|
96
115
|
}], fireTrigger: [{
|
|
97
116
|
type: Output
|
|
117
|
+
}], recordChange: [{
|
|
118
|
+
type: Output
|
|
98
119
|
}] } });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBT3BFLE1BQU0sT0FBTyxrQ0FBa0M7SUFZN0M7UUFQUyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXpCLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7SUFJbkUsQ0FBQztJQUVqQixRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsVUFB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QUMsQ0FBQztJQUN2QyxDQUFDOztnSUE1R1Usa0NBQWtDO29IQUFsQyxrQ0FBa0MsaU5DWi9DLHFNQUVTOzRGRFVJLGtDQUFrQztrQkFMOUMsU0FBUzsrQkFDRSw4QkFBOEI7MEVBTy9CLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIsIFRyaWdnZXIsIFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRmllbGRUZW1wbGF0ZUNvbXBvbmVudCB7XHJcblxyXG4gIC8vdmFyaWFiaWxpIGVzdGVybmUgcGVyIGwnaW5wdXQgZGVpIGNhbXBpXHJcbiAgQElucHV0KCkgZmllbGQ6IEFjdGlvbkJ1dHRvbkZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICB9XHJcbiAgaW5pdFN0eWxlcygpIHtcclxuICAgIC8vRnVuemlvbmUgcGVyIHBhcnNhcmUgaWwgY2FtcG8gc3R5bGVjc3MgZGVsbCdvZ2dldHRvIGZpZWxkIGVkIGFwcGxpY2FybG8gYWxsJ2h0bWxcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkZpZWxkc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgIH1cclxuICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IHRoaXMuZmllbGQuSW5MaXN0VmlldyA/IHRydWUgOiBmYWxzZTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJidG4gSW5MaXN0VmlldyAtIFwiICsgdGhpcy5maWVsZC5Jbkxpc3RWaWV3KVxyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVBY3Rpb24oYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b25GaWVsZCkge1xyXG4gICAgdmFyIGZpcmVUcmlnZ2VyOiBGaXJlVHJpZ2dlciA9IG5ldyBGaXJlVHJpZ2dlcigpO1xyXG5cclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIgPSBuZXcgVHJpZ2dlcigpO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5DSUQgPSBhY3Rpb25CdXR0b24uQnV0dG9uQ29kZTtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuY29uZGl0aW9ucyA9IG51bGw7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmRlc2NyaXB0aW9uID0gYWN0aW9uQnV0dG9uLkxhYmVsO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5leGVjdXRpb24gPSBhY3Rpb25CdXR0b24uZXhlY3V0aW9uO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuXHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtID0gbnVsbDsgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuICAgIGZpcmVUcmlnZ2VyLnJlY29yZCA9IHRoaXMucmVjb3JkO1xyXG4gICAgZmlyZVRyaWdnZXIudXNlclBhdGllbnQgPSBudWxsOyAgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICBmaXJlVHJpZ2dlci51c2VyTWVkaWNhbEV4YW1pbmF0aW9uID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmV2YWx1YXRlRm9ybXVsYXNBbmRGaXJlVHJpZ2dlcihmaXJlVHJpZ2dlcik7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUZvcm11bGFzQW5kRmlyZVRyaWdnZXIodHJpZ2dlclRvRmlyZTogRmlyZVRyaWdnZXIpIHtcclxuXHJcbiAgICBjb25zdCBmb3JtdWxhcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodHJpZ2dlclRvRmlyZS5mb3JtdWxhcykpO1xyXG4gICAgY29uc3QgZXZhbHVhdGVkRm9ybXVsYXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTsgLy8gT2dnZXR0byBhc3NvY2lhdGl2b1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gZXZhbHVhdGUgZm9ybXVsYXMgXCIsIGZvcm11bGFzKTtcclxuICAgIGlmIChmb3JtdWxhcyAmJiBPYmplY3Qua2V5cyhmb3JtdWxhcykubGVuZ3RoID4gMCkge1xyXG4gICAgICBPYmplY3Qua2V5cyhmb3JtdWxhcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYU9iaiA9IGZvcm11bGFzW2tleV07XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYSA9IGZvcm11bGFPYmoudmFsdWU7XHJcbiAgICAgICAgbGV0IHRlbXA7XHJcblxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gZm9ybXVsYXNba2V5XSBcIiwgZm9ybXVsYU9iaik7XHJcblxyXG4gICAgICAgIGlmIChmb3JtdWxhT2JqLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRE1NT0RVTEUpIHsgIC8vIGFzc2Vnbm8gaWQvY29kZSBkZWwgbW9kdWxvIHNlbGV6aW9uYXRvXHJcbiAgICAgICAgICB0ZW1wID0gZm9ybXVsYTtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgRE1NT0RVTEUgLSBpZC9jb2RlIFwiLCBmb3JtdWxhKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtdWxhT2JqLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRFJPUERPV05fTElTVCkge1xyXG4gICAgICAgICAgLy8gc2UgbGEgcHJvcHJpZXTDoCBub24gZXNpc3RlIMOoIGFzc2VnbmF0byB2YWx1ZSAtIG1vZGlmaWNhIGRpIHVuYSBjb25maWd1cmF6aW9uZSBkaWNoaWFyYXRhIGluIHByZWNlZGVuemEgY29tZSBzdHJpbmdcclxuXHJcbiAgICAgICAgICB0ZW1wID1cclxuICAgICAgICAgICAgZm9ybXVsYU9iaj8uc2VsZWN0ZWRBbGxvd2VkVmFsdWU/LmtleSA/IGZvcm11bGFPYmouc2VsZWN0ZWRBbGxvd2VkVmFsdWUua2V5XHJcbiAgICAgICAgICAgICAgOiAoXHJcbiAgICAgICAgICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgICAgICAgICAgICAgICAgZm9ybXVsYSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG5cclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgRFJPUERPV05fTElTVC0gIHNlbGVjdGVkQWxsb3dlZFZhbHVlIFwiLCBmb3JtdWxhT2JqLnNlbGVjdGVkQWxsb3dlZFZhbHVlKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHBhc3NvIGFsbCdldmFsIHF1YW5kbyDDqCBzdHJpbmdhIGUgYXNzZWdubyBpbCB2YWxvcmUgY2FsY29sYXRvXHJcbiAgICAgICAgICB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgIGZvcm11bGEsXHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgICAgICB0aGlzLmZvcm11bGFPYmplY3RcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIC0gLnZhbHVlICBmb3JtdWxhIFwiLCBmb3JtdWxhKTtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgPiB2YWx1ZSAgZm9ybXVsYU9iai50eXBlIFwiLCBmb3JtdWxhT2JqKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmFsdWF0ZWRGb3JtdWxhc1tmb3JtdWxhT2JqLmtleV0gPSB0ZW1wO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkLSAgZXZhbHVhdGVkRm9ybXVsYXMgXCIsIGV2YWx1YXRlZEZvcm11bGFzKTtcclxuICAgIHRyaWdnZXJUb0ZpcmUuZm9ybXVsYXMgPSBldmFsdWF0ZWRGb3JtdWxhcztcclxuICAgIHRoaXMuZmlyZVRyaWdnZXIuZW1pdCh0cmlnZ2VyVG9GaXJlKTtcclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGJ1dHRvbiBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiZ2VuZXJhdGVBY3Rpb24oZmllbGQpXCI+XHJcbiAgICA8bWF0LWljb24gKm5nSWY9XCJmaWVsZC5JY29uXCI+e3tmaWVsZC5JY29ufX08L21hdC1pY29uPiB7e2ZpZWxkLkJ1dHRvbkxhYmVsfX1cclxuPC9idXR0b24+Il19
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBT3BFLE1BQU0sT0FBTyxrQ0FBa0M7SUFhN0M7UUFSUyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXpCLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7UUFDekUsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUkxRCxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxD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QUFDO29CQUMvRSxhQUFhLENBQUMsUUFBUSxDQUFDLG9EQUFvRCxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUUxRjtnQkFFRCxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxhQUFhLENBQUMsUUFBUSxDQUFDLCtDQUErQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDM0YsYUFBYSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0Q7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOztnSUFwSVUsa0NBQWtDO29IQUFsQyxrQ0FBa0MsK09DWi9DLHFNQUVTOzRGRFVJLGtDQUFrQztrQkFMOUMsU0FBUzsrQkFDRSw4QkFBOEI7MEVBTy9CLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBGaXJlVHJpZ2dlciwgVHJpZ2dlciwgVHJpZ2dlclByb3BlcnR5VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbkZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9hY3Rpb25CdXR0b24ubW9kZWwnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhY3Rpb24tYnV0dG9uLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CdXR0b25GaWVsZFRlbXBsYXRlQ29tcG9uZW50IHtcclxuXHJcbiAgLy92YXJpYWJpbGkgZXN0ZXJuZSBwZXIgbCdpbnB1dCBkZWkgY2FtcGlcclxuICBASW5wdXQoKSBmaWVsZDogQWN0aW9uQnV0dG9uRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGZpcmVUcmlnZ2VyOiBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4oKTtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgfVxyXG4gIGluaXRTdHlsZXMoKSB7XHJcbiAgICAvL0Z1bnppb25lIHBlciBwYXJzYXJlIGlsIGNhbXBvIHN0eWxlY3NzIGRlbGwnb2dnZXR0byBmaWVsZCBlZCBhcHBsaWNhcmxvIGFsbCdodG1sXHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5GaWVsZHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIGNhbXBvIHF1YW5kbyBxdWVzdG8gw6ggcmFwcHJlc2VudGF0byBkYSB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICB1cGRhdGVGaWVsZCgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiYnRuIEluTGlzdFZpZXcgLSBcIiArIHRoaXMuZmllbGQuSW5MaXN0VmlldylcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQWN0aW9uKGFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uRmllbGQpIHtcclxuICAgIGlmIChhY3Rpb25CdXR0b24uZXhlY3V0aW9uID09ICdleGVjdXRlX2Zvcm11bGEnKSB7XHJcbiAgICAgIC8vIGNhc28gZXNlY3V6aW9uZSBzZW1wbGljZVxyXG4gICAgICBsZXQgcmVzID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgYWN0aW9uQnV0dG9uLmZvcm11bGFzWzBdLnZhbHVlLFxyXG4gICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgIHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBmaXJlVHJpZ2dlcjogRmlyZVRyaWdnZXIgPSBuZXcgRmlyZVRyaWdnZXIoKTtcclxuXHJcbiAgICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIgPSBuZXcgVHJpZ2dlcigpO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLkNJRCA9IGFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmNvbmRpdGlvbnMgPSBudWxsO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmRlc2NyaXB0aW9uID0gYWN0aW9uQnV0dG9uLkxhYmVsO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmV4ZWN1dGlvbiA9IGFjdGlvbkJ1dHRvbi5leGVjdXRpb247XHJcbiAgICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuZm9ybXVsYXMgPSBhY3Rpb25CdXR0b24uZm9ybXVsYXM7XHJcblxyXG4gICAgICBmaXJlVHJpZ2dlci5mb3JtID0gbnVsbDsgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICAgIGZpcmVUcmlnZ2VyLmZvcm11bGFzID0gYWN0aW9uQnV0dG9uLmZvcm11bGFzO1xyXG4gICAgICBmaXJlVHJpZ2dlci5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgICAgZmlyZVRyaWdnZXIudXNlclBhdGllbnQgPSBudWxsOyAgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICAgIGZpcmVUcmlnZ2VyLnVzZXJNZWRpY2FsRXhhbWluYXRpb24gPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5ldmFsdWF0ZUZvcm11bGFzQW5kRmlyZVRyaWdnZXIoZmlyZVRyaWdnZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVGb3JtdWxhc0FuZEZpcmVUcmlnZ2VyKHRyaWdnZXJUb0ZpcmU6IEZpcmVUcmlnZ2VyKSB7XHJcblxyXG4gICAgY29uc3QgZm9ybXVsYXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRyaWdnZXJUb0ZpcmUuZm9ybXVsYXMpKTtcclxuICAgIGNvbnN0IGV2YWx1YXRlZEZvcm11bGFzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307IC8vIE9nZ2V0dG8gYXNzb2NpYXRpdm9cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGV2YWx1YXRlIGZvcm11bGFzIFwiLCBmb3JtdWxhcyk7XHJcbiAgICBpZiAoZm9ybXVsYXMgJiYgT2JqZWN0LmtleXMoZm9ybXVsYXMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgT2JqZWN0LmtleXMoZm9ybXVsYXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm11bGFPYmogPSBmb3JtdWxhc1trZXldO1xyXG4gICAgICAgIGNvbnN0IGZvcm11bGEgPSBmb3JtdWxhT2JqLnZhbHVlO1xyXG4gICAgICAgIGxldCB0ZW1wO1xyXG5cclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGZvcm11bGFzW2tleV0gXCIsIGZvcm11bGFPYmopO1xyXG5cclxuICAgICAgICBpZiAoZm9ybXVsYU9iai50eXBlID09IFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLkRNTU9EVUxFKSB7ICAvLyBhc3NlZ25vIGlkL2NvZGUgZGVsIG1vZHVsbyBzZWxlemlvbmF0b1xyXG4gICAgICAgICAgdGVtcCA9IGZvcm11bGE7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIERNTU9EVUxFIC0gaWQvY29kZSBcIiwgZm9ybXVsYSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYU9iai50eXBlID09IFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLkRST1BET1dOX0xJU1QpIHtcclxuICAgICAgICAgIC8vIHNlIGxhIHByb3ByaWV0w6Agbm9uIGVzaXN0ZSDDqCBhc3NlZ25hdG8gdmFsdWUgLSBtb2RpZmljYSBkaSB1bmEgY29uZmlndXJhemlvbmUgZGljaGlhcmF0YSBpbiBwcmVjZWRlbnphIGNvbWUgc3RyaW5nXHJcblxyXG4gICAgICAgICAgdGVtcCA9XHJcbiAgICAgICAgICAgIGZvcm11bGFPYmo/LnNlbGVjdGVkQWxsb3dlZFZhbHVlPy5rZXkgPyBmb3JtdWxhT2JqLnNlbGVjdGVkQWxsb3dlZFZhbHVlLmtleVxyXG4gICAgICAgICAgICAgIDogKFxyXG4gICAgICAgICAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgICAgICAgIGZvcm11bGEsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm11bGFPYmplY3RcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApO1xyXG5cclxuXHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIERST1BET1dOX0xJU1QtICBzZWxlY3RlZEFsbG93ZWRWYWx1ZSBcIiwgZm9ybXVsYU9iai5zZWxlY3RlZEFsbG93ZWRWYWx1ZSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBwYXNzbyBhbGwnZXZhbCBxdWFuZG8gw6ggc3RyaW5nYSBlIGFzc2Vnbm8gaWwgdmFsb3JlIGNhbGNvbGF0b1xyXG4gICAgICAgICAgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgICAgICAgICBmb3JtdWxhLFxyXG4gICAgICAgICAgICB0aGlzLnJlY29yZCxcclxuICAgICAgICAgICAgdGhpcy5mb3JtdWxhT2JqZWN0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBhc3NpZ25lZCAtIC52YWx1ZSAgZm9ybXVsYSBcIiwgZm9ybXVsYSk7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkID4gdmFsdWUgIGZvcm11bGFPYmoudHlwZSBcIiwgZm9ybXVsYU9iaik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZhbHVhdGVkRm9ybXVsYXNbZm9ybXVsYU9iai5rZXldID0gdGVtcDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBhc3NpZ25lZC0gIGV2YWx1YXRlZEZvcm11bGFzIFwiLCBldmFsdWF0ZWRGb3JtdWxhcyk7XHJcbiAgICB0cmlnZ2VyVG9GaXJlLmZvcm11bGFzID0gZXZhbHVhdGVkRm9ybXVsYXM7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQodHJpZ2dlclRvRmlyZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbWV0dGVyZSBsJ2V2ZW50byBjaGUgaWwgdmFsb3JlIGRlbCByZWNvcmQgw6ggY2FtYmlhdG8uXHJcbiAgICovXHJcbiAgb25SZWNvcmRWYWx1ZUNoYW5nZSgpIHtcclxuICAgIGlmICghdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxidXR0b24gW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImdlbmVyYXRlQWN0aW9uKGZpZWxkKVwiPlxyXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiZmllbGQuSWNvblwiPnt7ZmllbGQuSWNvbn19PC9tYXQtaWNvbj4ge3tmaWVsZC5CdXR0b25MYWJlbH19XHJcbjwvYnV0dG9uPiJdfQ==
|