@sapui5/sap.fe.core 1.102.0 → 1.103.0
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/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +62 -26
- package/src/sap/fe/core/AppComponent.ts +56 -40
- package/src/sap/fe/core/AppStateHandler.js +10 -10
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +236 -109
- package/src/sap/fe/core/CommonUtils.ts +252 -136
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +22 -22
- package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
- package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
- package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
- package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
- package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
- package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +49 -35
- package/src/sap/fe/core/messagebundle_ar.properties +13 -5
- package/src/sap/fe/core/messagebundle_bg.properties +13 -5
- package/src/sap/fe/core/messagebundle_ca.properties +13 -5
- package/src/sap/fe/core/messagebundle_cs.properties +13 -5
- package/src/sap/fe/core/messagebundle_cy.properties +14 -6
- package/src/sap/fe/core/messagebundle_da.properties +13 -5
- package/src/sap/fe/core/messagebundle_de.properties +15 -7
- package/src/sap/fe/core/messagebundle_el.properties +14 -6
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
- package/src/sap/fe/core/messagebundle_es.properties +13 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
- package/src/sap/fe/core/messagebundle_et.properties +13 -5
- package/src/sap/fe/core/messagebundle_fi.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
- package/src/sap/fe/core/messagebundle_hi.properties +14 -6
- package/src/sap/fe/core/messagebundle_hr.properties +14 -6
- package/src/sap/fe/core/messagebundle_hu.properties +13 -5
- package/src/sap/fe/core/messagebundle_id.properties +13 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -25
- package/src/sap/fe/core/messagebundle_iw.properties +13 -5
- package/src/sap/fe/core/messagebundle_ja.properties +14 -6
- package/src/sap/fe/core/messagebundle_kk.properties +13 -5
- package/src/sap/fe/core/messagebundle_ko.properties +13 -5
- package/src/sap/fe/core/messagebundle_lt.properties +13 -5
- package/src/sap/fe/core/messagebundle_lv.properties +14 -6
- package/src/sap/fe/core/messagebundle_ms.properties +13 -5
- package/src/sap/fe/core/messagebundle_nl.properties +13 -5
- package/src/sap/fe/core/messagebundle_no.properties +13 -5
- package/src/sap/fe/core/messagebundle_pl.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
- package/src/sap/fe/core/messagebundle_ro.properties +13 -5
- package/src/sap/fe/core/messagebundle_ru.properties +13 -5
- package/src/sap/fe/core/messagebundle_sh.properties +13 -5
- package/src/sap/fe/core/messagebundle_sk.properties +13 -5
- package/src/sap/fe/core/messagebundle_sl.properties +17 -9
- package/src/sap/fe/core/messagebundle_sv.properties +14 -6
- package/src/sap/fe/core/messagebundle_th.properties +13 -5
- package/src/sap/fe/core/messagebundle_tr.properties +13 -5
- package/src/sap/fe/core/messagebundle_uk.properties +13 -5
- package/src/sap/fe/core/messagebundle_vi.properties +13 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
- package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +10 -9
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +148 -93
- package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -12,10 +12,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
12
12
|
/**
|
|
13
13
|
* Applies the median scale to the chart data.
|
|
14
14
|
*
|
|
15
|
-
* @param
|
|
16
|
-
* @param
|
|
17
|
-
* @param
|
|
18
|
-
* @param
|
|
15
|
+
* @param oInteractiveChart InteractiveChart in the VisualFilter control
|
|
16
|
+
* @param oView Instance of the view
|
|
17
|
+
* @param sVFId VisualFilter control ID
|
|
18
|
+
* @param sInfoPath Internal model context path to store info.
|
|
19
19
|
*/
|
|
20
20
|
applyMedianScaleToChartData: function (oInteractiveChart, oView, sVFId, sInfoPath) {
|
|
21
21
|
var oData = [];
|
|
@@ -30,13 +30,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
30
30
|
var scaleFactor = this._getMedianScaleFactor(oData, sMeasure);
|
|
31
31
|
|
|
32
32
|
if (scaleFactor && scaleFactor.iShortRefNumber && scaleFactor.scale) {
|
|
33
|
-
oInternalModelContext.setProperty("scalefactor/"
|
|
34
|
-
oInternalModelContext.setProperty("scalefactorNumber/"
|
|
33
|
+
oInternalModelContext.setProperty("scalefactor/".concat(sInfoPath), scaleFactor.scale);
|
|
34
|
+
oInternalModelContext.setProperty("scalefactorNumber/".concat(sInfoPath), scaleFactor.iShortRefNumber);
|
|
35
35
|
} else {
|
|
36
|
-
oInternalModelContext.setProperty("scalefactor/"
|
|
37
|
-
oInternalModelContext.setProperty("scalefactorNumber/"
|
|
38
|
-
var oScaleTitle = oView.byId(sVFId
|
|
39
|
-
var oMeasureDimensionTitle = oView.byId(sVFId
|
|
36
|
+
oInternalModelContext.setProperty("scalefactor/".concat(sInfoPath), "");
|
|
37
|
+
oInternalModelContext.setProperty("scalefactorNumber/".concat(sInfoPath), "");
|
|
38
|
+
var oScaleTitle = oView.byId("".concat(sVFId, "::ScaleUoMTitle"));
|
|
39
|
+
var oMeasureDimensionTitle = oView.byId("".concat(sVFId, "::MeasureDimensionTitle"));
|
|
40
40
|
var sText = oScaleTitle.getText();
|
|
41
41
|
|
|
42
42
|
if (sText === " | ") {
|
|
@@ -49,9 +49,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
49
49
|
/**
|
|
50
50
|
* Returns the median scale factor.
|
|
51
51
|
*
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
54
|
-
* @returns
|
|
52
|
+
* @param oData VisualFilter data
|
|
53
|
+
* @param sMeasureField Path of the measure
|
|
54
|
+
* @returns Object containing scale and iShortRefNumber
|
|
55
55
|
*/
|
|
56
56
|
_getMedianScaleFactor: function (oData, sMeasureField) {
|
|
57
57
|
var i;
|
|
@@ -115,11 +115,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
115
115
|
/**
|
|
116
116
|
* Returns the formatted number according to the rules of VisualChartFilters.
|
|
117
117
|
*
|
|
118
|
-
* @param
|
|
119
|
-
* @param
|
|
120
|
-
* @param
|
|
121
|
-
* @param
|
|
122
|
-
* @returns
|
|
118
|
+
* @param value Value which needs to be formatted
|
|
119
|
+
* @param scaleFactor ScaleFactor to which the value needs to be scaled
|
|
120
|
+
* @param numberOfFractionalDigits NumberOfFractionalDigits digits in the decimals according to scale
|
|
121
|
+
* @param currency Currency code
|
|
122
|
+
* @returns The formatted number
|
|
123
123
|
*/
|
|
124
124
|
getFormattedNumber: function (value, scaleFactor, numberOfFractionalDigits, currency) {
|
|
125
125
|
var fixedInteger;
|
|
@@ -150,10 +150,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
150
150
|
/**
|
|
151
151
|
* Applies the UOM to the title of the visual filter control.
|
|
152
152
|
*
|
|
153
|
-
* @param
|
|
154
|
-
* @param
|
|
155
|
-
* @param
|
|
156
|
-
* @param
|
|
153
|
+
* @param oInteractiveChart InteractiveChart in the VisualFilter control
|
|
154
|
+
* @param oContextData Data of the VisualFilter
|
|
155
|
+
* @param oView Instance of the view
|
|
156
|
+
* @param sInfoPath Internal model context path to store info.
|
|
157
157
|
*/
|
|
158
158
|
applyUOMToTitle: function (oInteractiveChart, oContextData, oView, sInfoPath) {
|
|
159
159
|
var vUOM = oInteractiveChart.data("uom");
|
|
@@ -170,10 +170,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
170
170
|
if (sUOM) {
|
|
171
171
|
var sUOMValue = sUOM.$Path ? oContextData[sUOM.$Path] : sUOM;
|
|
172
172
|
var oInternalModelContext = oView.getBindingContext("internal");
|
|
173
|
-
oInternalModelContext.setProperty("uom/"
|
|
173
|
+
oInternalModelContext.setProperty("uom/".concat(sInfoPath), sUOMValue);
|
|
174
174
|
|
|
175
175
|
if (sCurrency) {
|
|
176
|
-
oInternalModelContext.setProperty("currency/"
|
|
176
|
+
oInternalModelContext.setProperty("currency/".concat(sInfoPath), sUOMValue);
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
},
|
|
@@ -181,10 +181,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
181
181
|
/**
|
|
182
182
|
* Updates the scale factor in the title of the visual filter.
|
|
183
183
|
*
|
|
184
|
-
* @param
|
|
185
|
-
* @param
|
|
186
|
-
* @param
|
|
187
|
-
* @param
|
|
184
|
+
* @param oInteractiveChart InteractiveChart in the VisualFilter control
|
|
185
|
+
* @param oView Instance of the view
|
|
186
|
+
* @param sVFId VisualFilter control ID
|
|
187
|
+
* @param sInfoPath Internal model context path to store info.
|
|
188
188
|
*/
|
|
189
189
|
updateChartScaleFactorTitle: function (oInteractiveChart, oView, sVFId, sInfoPath) {
|
|
190
190
|
if (!oInteractiveChart.data("scalefactor")) {
|
|
@@ -196,16 +196,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
196
196
|
shortRefNumber: oInteractiveChart.data("scalefactor")
|
|
197
197
|
});
|
|
198
198
|
var oInternalModelContext = oView.getBindingContext("internal");
|
|
199
|
-
oInternalModelContext.setProperty("scalefactor/"
|
|
199
|
+
oInternalModelContext.setProperty("scalefactor/".concat(sInfoPath), fixedInteger.getScale());
|
|
200
200
|
}
|
|
201
201
|
},
|
|
202
202
|
|
|
203
203
|
/**
|
|
204
204
|
*
|
|
205
|
-
* @param
|
|
206
|
-
* @param
|
|
207
|
-
* @param
|
|
208
|
-
* @param
|
|
205
|
+
* @param s18nMessageTitle Text of the error message title.
|
|
206
|
+
* @param s18nMessage Text of the error message description.
|
|
207
|
+
* @param sInfoPath Internal model context path to store info.
|
|
208
|
+
* @param oView Instance of the view.
|
|
209
209
|
*/
|
|
210
210
|
applyErrorMessageAndTitle: function (s18nMessageTitle, s18nMessage, sInfoPath, oView) {
|
|
211
211
|
var oInternalModelContext = oView.getBindingContext("internal");
|
|
@@ -220,9 +220,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
220
220
|
/**
|
|
221
221
|
* Checks if multiple units are present.
|
|
222
222
|
*
|
|
223
|
-
* @param
|
|
224
|
-
* @param
|
|
225
|
-
* @returns
|
|
223
|
+
* @param oContexts Contexts of the VisualFilter
|
|
224
|
+
* @param sUnitfield The path of the unit field
|
|
225
|
+
* @returns Returns if multiple units are configured or not
|
|
226
226
|
*/
|
|
227
227
|
checkMulitUnit: function (oContexts, sUnitfield) {
|
|
228
228
|
var aData = [];
|
|
@@ -242,11 +242,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
242
242
|
/**
|
|
243
243
|
* Sets an error message if multiple UOM are present.
|
|
244
244
|
*
|
|
245
|
-
* @param
|
|
246
|
-
* @param
|
|
247
|
-
* @param
|
|
248
|
-
* @param
|
|
249
|
-
* @param
|
|
245
|
+
* @param oData Data of the VisualFilter control
|
|
246
|
+
* @param oInteractiveChart InteractiveChart in the VisualFilter control
|
|
247
|
+
* @param sInfoPath Internal model context path to store info.
|
|
248
|
+
* @param oResourceBundle The resource bundle
|
|
249
|
+
* @param oView Instance of the view
|
|
250
250
|
*/
|
|
251
251
|
setMultiUOMMessage: function (oData, oInteractiveChart, sInfoPath, oResourceBundle, oView) {
|
|
252
252
|
var vUOM = oInteractiveChart.data("uom");
|
|
@@ -261,12 +261,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
261
261
|
s18nMessageTitle = oResourceBundle.getText("M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE");
|
|
262
262
|
s18nMessage = oResourceBundle.getText("M_VISUAL_FILTERS_MULTIPLE_CURRENCY", sUnitfield);
|
|
263
263
|
this.applyErrorMessageAndTitle(s18nMessageTitle, s18nMessage, sInfoPath, oView);
|
|
264
|
-
Log.warning("Filter is set for multiple Currency for"
|
|
264
|
+
Log.warning("Filter is set for multiple Currency for".concat(sUnitfield));
|
|
265
265
|
} else if (sIsUnit) {
|
|
266
266
|
s18nMessageTitle = oResourceBundle.getText("M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE");
|
|
267
267
|
s18nMessage = oResourceBundle.getText("M_VISUAL_FILTERS_MULTIPLE_UNIT", sUnitfield);
|
|
268
268
|
this.applyErrorMessageAndTitle(s18nMessageTitle, s18nMessage, sInfoPath, oView);
|
|
269
|
-
Log.warning("Filter is set for multiple UOMs for"
|
|
269
|
+
Log.warning("Filter is set for multiple UOMs for".concat(sUnitfield));
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
272
|
}
|
|
@@ -275,9 +275,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
275
275
|
/**
|
|
276
276
|
* Sets an error message if response data is empty.
|
|
277
277
|
*
|
|
278
|
-
* @param
|
|
279
|
-
* @param
|
|
280
|
-
* @param
|
|
278
|
+
* @param sInfoPath Internal model context path to store info.
|
|
279
|
+
* @param oResourceBundle The resource bundle
|
|
280
|
+
* @param oView Instance of the view
|
|
281
281
|
*/
|
|
282
282
|
setNoDataMessage: function (sInfoPath, oResourceBundle, oView) {
|
|
283
283
|
var s18nMessageTitle = oResourceBundle.getText("M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE");
|
|
@@ -336,4 +336,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/templating/FilterHelper", "sap/ui/co
|
|
|
336
336
|
};
|
|
337
337
|
return VisualFilterUtils;
|
|
338
338
|
}, false);
|
|
339
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlclV0aWxzLnRzIl0sIm5hbWVzIjpbIlZpc3VhbEZpbHRlclV0aWxzIiwiYXBwbHlNZWRpYW5TY2FsZVRvQ2hhcnREYXRhIiwib0ludGVyYWN0aXZlQ2hhcnQiLCJvVmlldyIsInNWRklkIiwic0luZm9QYXRoIiwib0RhdGEiLCJzTWVhc3VyZSIsImRhdGEiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImFBZ2dyZWdhdGlvbiIsImdldFBvaW50cyIsImdldEJhcnMiLCJnZXRTZWdtZW50cyIsImkiLCJsZW5ndGgiLCJwdXNoIiwiZ2V0T2JqZWN0Iiwic2NhbGVGYWN0b3IiLCJfZ2V0TWVkaWFuU2NhbGVGYWN0b3IiLCJpU2hvcnRSZWZOdW1iZXIiLCJzY2FsZSIsInNldFByb3BlcnR5Iiwib1NjYWxlVGl0bGUiLCJieUlkIiwib01lYXN1cmVEaW1lbnNpb25UaXRsZSIsInNUZXh0IiwiZ2V0VGV4dCIsInNldFZpc2libGUiLCJzZXRUb29sdGlwIiwic01lYXN1cmVGaWVsZCIsInNvcnQiLCJhIiwiYiIsIk51bWJlciIsImlNaWQiLCJpTWVkaWFuIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJmbG9vciIsInZhbCIsInBvdyIsInJvdW5kIiwiYWJzIiwiZml4ZWRJbnRlZ2VyIiwiTnVtYmVyRm9ybWF0IiwiZ2V0SW50ZWdlckluc3RhbmNlIiwic3R5bGUiLCJzaG93U2NhbGUiLCJzaG9ydFJlZk51bWJlciIsImFEYXRhIiwic1NjYWxlZFZhbHVlIiwiZm9ybWF0IiwiYVNjYWxlZFZhbHVlUGFydHMiLCJzcGxpdCIsInBhcnNlSW50IiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsImdldFNjYWxlIiwiZ2V0Rm9ybWF0dGVkTnVtYmVyIiwidmFsdWUiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJjdXJyZW5jeSIsInJlcGxhY2UiLCJjdXJyZW5jeUZvcm1hdCIsImdldEN1cnJlbmN5SW5zdGFuY2UiLCJzaG93TWVhc3VyZSIsImdldEZsb2F0SW5zdGFuY2UiLCJzaG9ydERlY2ltYWxzIiwiZGVjaW1hbHMiLCJhcHBseVVPTVRvVGl0bGUiLCJvQ29udGV4dERhdGEiLCJ2VU9NIiwic1VPTSIsInNDdXJyZW5jeSIsIiRQYXRoIiwic1VPTVZhbHVlIiwidXBkYXRlQ2hhcnRTY2FsZUZhY3RvclRpdGxlIiwiYXBwbHlFcnJvck1lc3NhZ2VBbmRUaXRsZSIsInMxOG5NZXNzYWdlVGl0bGUiLCJzMThuTWVzc2FnZSIsImNoZWNrTXVsaXRVbml0Iiwib0NvbnRleHRzIiwic1VuaXRmaWVsZCIsImFDb250ZXh0RGF0YSIsInJlZHVjZSIsImtleSIsIk5hTiIsInNldE11bHRpVU9NTWVzc2FnZSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNJc0N1cnJlbmN5Iiwic0lzVW5pdCIsIkxvZyIsIndhcm5pbmciLCJzZXROb0RhdGFNZXNzYWdlIiwiY29udmVydEZpbHRlckNvbmRpb25zIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJvQ29udmVydGVkQ29uZGl0aW9ucyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic0tleSIsImFDb252ZXJ0ZWRDb25kaXRpb25zIiwiYUNvbmRpdGlvbnMiLCJ2YWx1ZXMiLCJ2YWx1ZTIiLCJ2YWx1ZTEiLCJDb25kaXRpb24iLCJjcmVhdGVDb25kaXRpb24iLCJvcGVyYXRvciIsImdldEN1c3RvbUNvbmRpdGlvbnMiLCJSYW5nZSIsIm9WYWxpZFByb3BlcnR5Iiwic1Byb3BlcnR5TmFtZSIsIiRUeXBlIiwiX3BhcnNlRGF0ZVRpbWUiLCJnZXRUeXBlQ29tcGxpYW50VmFsdWUiLCJfZm9ybWF0RGF0ZVRpbWUiLCJMb3ciLCJIaWdoIiwiT3B0aW9uIiwiZ2V0T3BlcmF0b3IiLCIkRW51bU1lbWJlciIsInBhdGgiLCJzVmFsdWUiLCJfZ2V0RGF0ZVRpbWVUeXBlSW5zdGFuY2UiLCJwYXJzZVZhbHVlIiwiZm9ybWF0VmFsdWUiLCJEYXRlVGltZU9mZnNldCIsInBhdHRlcm4iLCJjYWxlbmRhclR5cGUiLCJW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MUIsR0FBdUUsSUFEM0U7QUFFTmQsUUFBQUEsTUFBTSxFQUFFQSxNQUZGO0FBR05ELFFBQUFBLE1BQU0sRUFBRUEsTUFIRjtBQUlOa0IsUUFBQUEsSUFBSSxFQUFFVjtBQUpBLE9BQVA7QUFNQSxLQW5Ud0I7QUFvVHpCRSxJQUFBQSxjQUFjLEVBQUUsVUFBVVMsTUFBVixFQUF1QjtBQUN0QyxhQUFPLEtBQUtDLHdCQUFMLEdBQWdDQyxVQUFoQyxDQUEyQ0YsTUFBM0MsRUFBbUQsUUFBbkQsQ0FBUDtBQUNBLEtBdFR3QjtBQXVUekJQLElBQUFBLGVBQWUsRUFBRSxVQUFVTyxNQUFWLEVBQXVCO0FBQ3ZDLGFBQU8sS0FBS0Msd0JBQUwsR0FBZ0NFLFdBQWhDLENBQTRDSCxNQUE1QyxFQUFvRCxRQUFwRCxDQUFQO0FBQ0EsS0F6VHdCO0FBMFR6QkMsSUFBQUEsd0JBQXdCLEVBQUUsWUFBWTtBQUNyQyxhQUFPLElBQUlHLGNBQUosQ0FBbUI7QUFBRUMsUUFBQUEsT0FBTyxFQUFFLHNCQUFYO0FBQW1DQyxRQUFBQSxZQUFZLEVBQUU7QUFBakQsT0FBbkIsRUFBbUY7QUFBRUMsUUFBQUEsRUFBRSxFQUFFO0FBQU4sT0FBbkYsQ0FBUDtBQUNBO0FBNVR3QixHQUExQjtTQStUZXBJLGlCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0T3BlcmF0b3IsIGdldFR5cGVDb21wbGlhbnRWYWx1ZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlckhlbHBlclwiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvbS9UaXRsZVwiO1xuaW1wb3J0IE51bWJlckZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L051bWJlckZvcm1hdFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29uZGl0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBDb25kaXRpb25WYWxpZGF0ZWQgZnJvbSBcInNhcC91aS9tZGMvZW51bS9Db25kaXRpb25WYWxpZGF0ZWRcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IERhdGVUaW1lT2Zmc2V0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9EYXRlVGltZU9mZnNldFwiO1xuXG5jb25zdCBWaXN1YWxGaWx0ZXJVdGlscyA9IHtcblx0LyoqXG5cdCAqIEFwcGxpZXMgdGhlIG1lZGlhbiBzY2FsZSB0byB0aGUgY2hhcnQgZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9JbnRlcmFjdGl2ZUNoYXJ0IEludGVyYWN0aXZlQ2hhcnQgaW4gdGhlIFZpc3VhbEZpbHRlciBjb250cm9sXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvVmlldyBJbnN0YW5jZSBvZiB0aGUgdmlld1xuXHQgKiBAcGFyYW0ge29iamVjdH0gc1ZGSWQgVmlzdWFsRmlsdGVyIGNvbnRyb2wgSURcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJbmZvUGF0aCBJbnRlcm5hbCBtb2RlbCBjb250ZXh0IHBhdGggdG8gc3RvcmUgaW5mby5cblx0ICovXG5cdGFwcGx5TWVkaWFuU2NhbGVUb0NoYXJ0RGF0YTogZnVuY3Rpb24gKG9JbnRlcmFjdGl2ZUNoYXJ0OiBhbnksIG9WaWV3OiBWaWV3LCBzVkZJZDogc3RyaW5nLCBzSW5mb1BhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9EYXRhID0gW107XG5cdFx0Y29uc3Qgc01lYXN1cmUgPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwibWVhc3VyZVwiKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGlvbiA9XG5cdFx0XHQob0ludGVyYWN0aXZlQ2hhcnQuZ2V0UG9pbnRzICYmIG9JbnRlcmFjdGl2ZUNoYXJ0LmdldFBvaW50cygpKSB8fFxuXHRcdFx0KG9JbnRlcmFjdGl2ZUNoYXJ0LmdldEJhcnMgJiYgb0ludGVyYWN0aXZlQ2hhcnQuZ2V0QmFycygpKSB8fFxuXHRcdFx0KG9JbnRlcmFjdGl2ZUNoYXJ0LmdldFNlZ21lbnRzICYmIG9JbnRlcmFjdGl2ZUNoYXJ0LmdldFNlZ21lbnRzKCkpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUFnZ3JlZ2F0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvRGF0YS5wdXNoKGFBZ2dyZWdhdGlvbltpXS5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE9iamVjdCgpKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2NhbGVGYWN0b3IgPSB0aGlzLl9nZXRNZWRpYW5TY2FsZUZhY3RvcihvRGF0YSwgc01lYXN1cmUpO1xuXHRcdGlmIChzY2FsZUZhY3RvciAmJiBzY2FsZUZhY3Rvci5pU2hvcnRSZWZOdW1iZXIgJiYgc2NhbGVGYWN0b3Iuc2NhbGUpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yL1wiICsgc0luZm9QYXRoLCBzY2FsZUZhY3Rvci5zY2FsZSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlci9cIiArIHNJbmZvUGF0aCwgc2NhbGVGYWN0b3IuaVNob3J0UmVmTnVtYmVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3IvXCIgKyBzSW5mb1BhdGgsIFwiXCIpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JOdW1iZXIvXCIgKyBzSW5mb1BhdGgsIFwiXCIpO1xuXHRcdFx0Y29uc3Qgb1NjYWxlVGl0bGUgPSBvVmlldy5ieUlkKHNWRklkICsgXCI6OlNjYWxlVW9NVGl0bGVcIikgYXMgVGl0bGU7XG5cdFx0XHRjb25zdCBvTWVhc3VyZURpbWVuc2lvblRpdGxlID0gb1ZpZXcuYnlJZChzVkZJZCArIFwiOjpNZWFzdXJlRGltZW5zaW9uVGl0bGVcIikgYXMgVGl0bGU7XG5cdFx0XHRjb25zdCBzVGV4dCA9IG9TY2FsZVRpdGxlLmdldFRleHQoKTtcblx0XHRcdGlmIChzVGV4dCA9PT0gXCIgfCBcIikge1xuXHRcdFx0XHRvU2NhbGVUaXRsZS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0b01lYXN1cmVEaW1lbnNpb25UaXRsZS5zZXRUb29sdGlwKG9NZWFzdXJlRGltZW5zaW9uVGl0bGUuZ2V0VGV4dCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1lZGlhbiBzY2FsZSBmYWN0b3IuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRGF0YSBWaXN1YWxGaWx0ZXIgZGF0YVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc01lYXN1cmVGaWVsZCBQYXRoIG9mIHRoZSBtZWFzdXJlXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHNjYWxlIGFuZCBpU2hvcnRSZWZOdW1iZXJcblx0ICovXG5cdF9nZXRNZWRpYW5TY2FsZUZhY3RvcjogZnVuY3Rpb24gKG9EYXRhOiBhbnlbXSwgc01lYXN1cmVGaWVsZDogc3RyaW5nKSB7XG5cdFx0bGV0IGk7XG5cdFx0bGV0IHNjYWxlRmFjdG9yO1xuXHRcdG9EYXRhLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0XHRpZiAoTnVtYmVyKGFbc01lYXN1cmVGaWVsZF0pIDwgTnVtYmVyKGJbc01lYXN1cmVGaWVsZF0pKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdGlmIChOdW1iZXIoYVtzTWVhc3VyZUZpZWxkXSkgPiBOdW1iZXIoYltzTWVhc3VyZUZpZWxkXSkpIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9KTtcblx0XHRpZiAob0RhdGEubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gZ2V0IG1lZGlhbiBpbmRleFxuXHRcdFx0Y29uc3QgaU1pZCA9IG9EYXRhLmxlbmd0aCAvIDIsIC8vIGdldCBtaWQgb2YgYXJyYXlcblx0XHRcdFx0Ly8gaWYgaU1pZCBpcyB3aG9sZSBudW1iZXIsIGFycmF5IGxlbmd0aCBpcyBldmVuLCBjYWxjdWxhdGUgbWVkaWFuXG5cdFx0XHRcdC8vIGlmIGlNaWQgaXMgbm90IHdob2xlIG51bWJlciwgYXJyYXkgbGVuZ3RoIGlzIG9kZCwgdGFrZSBtZWRpYW4gYXMgaU1pZCAtIDFcblx0XHRcdFx0aU1lZGlhbiA9XG5cdFx0XHRcdFx0aU1pZCAlIDEgPT09IDBcblx0XHRcdFx0XHRcdD8gKHBhcnNlRmxvYXQob0RhdGFbaU1pZCAtIDFdW3NNZWFzdXJlRmllbGRdKSArIHBhcnNlRmxvYXQob0RhdGFbaU1pZF1bc01lYXN1cmVGaWVsZF0pKSAvIDJcblx0XHRcdFx0XHRcdDogcGFyc2VGbG9hdChvRGF0YVtNYXRoLmZsb29yKGlNaWQpXVtzTWVhc3VyZUZpZWxkXSksXG5cdFx0XHRcdC8vIGdldCBzY2FsZSBmYWN0b3Igb24gbWVkaWFuXG5cdFx0XHRcdHZhbCA9IGlNZWRpYW47XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykge1xuXHRcdFx0XHRzY2FsZUZhY3RvciA9IE1hdGgucG93KDEwLCBpKTtcblx0XHRcdFx0aWYgKE1hdGgucm91bmQoTWF0aC5hYnModmFsKSAvIHNjYWxlRmFjdG9yKSA8IDEwKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBmaXhlZEludGVnZXIgPSBOdW1iZXJGb3JtYXQuZ2V0SW50ZWdlckluc3RhbmNlKHtcblx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0c2hvcnRSZWZOdW1iZXI6IHNjYWxlRmFjdG9yXG5cdFx0fSk7XG5cblx0XHQvLyBhcHBseSBzY2FsZSBmYWN0b3IgdG8gb3RoZXIgdmFsdWVzIGFuZCBjaGVja1xuXHRcdGZvciAoaSA9IDA7IGkgPCBvRGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYURhdGEgPSBvRGF0YVtpXSxcblx0XHRcdFx0c1NjYWxlZFZhbHVlID0gZml4ZWRJbnRlZ2VyLmZvcm1hdChhRGF0YVtzTWVhc3VyZUZpZWxkXSkgYXMgYW55LFxuXHRcdFx0XHRhU2NhbGVkVmFsdWVQYXJ0cyA9IHNTY2FsZWRWYWx1ZS5zcGxpdChcIi5cIik7XG5cdFx0XHQvLyBpZiBzY2FsZWQgdmFsdWUgaGFzIG9ubHkgMCBiZWZvcmUgZGVjaW1hbCBvciAwIGFmdGVyIGRlY2ltYWwgKGV4YW1wbGU6IDAuMDIpXG5cdFx0XHQvLyB0aGVuIGlnbm9yZSB0aGlzIHNjYWxlIGZhY3RvciBlbHNlIHByb2NlZWQgd2l0aCB0aGlzIHNjYWxlIGZhY3RvclxuXHRcdFx0Ly8gaWYgc2NhbGVkIHZhbHVlIGRpdmlkZWQgYnkgMTAwMCBpcyA+PSAxMDAwIHRoZW4gYWxzbyBpZ25vcmUgc2NhbGUgZmFjdG9yXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCghYVNjYWxlZFZhbHVlUGFydHNbMV0gJiYgcGFyc2VJbnQoYVNjYWxlZFZhbHVlUGFydHNbMF0sIDEwKSA9PT0gMCkgfHxcblx0XHRcdFx0KGFTY2FsZWRWYWx1ZVBhcnRzWzFdICYmIHBhcnNlSW50KGFTY2FsZWRWYWx1ZVBhcnRzWzBdLCAxMCkgPT09IDAgJiYgYVNjYWxlZFZhbHVlUGFydHNbMV0uaW5kZXhPZihcIjBcIikgPT09IDApIHx8XG5cdFx0XHRcdHNTY2FsZWRWYWx1ZSAvIDEwMDAgPj0gMTAwMFxuXHRcdFx0KSB7XG5cdFx0XHRcdHNjYWxlRmFjdG9yID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlTaG9ydFJlZk51bWJlcjogc2NhbGVGYWN0b3IsXG5cdFx0XHRzY2FsZTogc2NhbGVGYWN0b3IgPyAoZml4ZWRJbnRlZ2VyIGFzIGFueSkuZ2V0U2NhbGUoKSA6IFwiXCJcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBmb3JtYXR0ZWQgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgVmlzdWFsQ2hhcnRGaWx0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gdmFsdWUgVmFsdWUgd2hpY2ggbmVlZHMgdG8gYmUgZm9ybWF0dGVkXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZUZhY3RvciBTY2FsZUZhY3RvciB0byB3aGljaCB0aGUgdmFsdWUgbmVlZHMgdG8gYmUgc2NhbGVkXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIGRpZ2l0cyBpbiB0aGUgZGVjaW1hbHMgYWNjb3JkaW5nIHRvIHNjYWxlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW5jeSBDdXJyZW5jeSBjb2RlXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBmb3JtYXR0ZWQgbnVtYmVyXG5cdCAqL1xuXHRnZXRGb3JtYXR0ZWROdW1iZXI6IGZ1bmN0aW9uICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCBzY2FsZUZhY3Rvcj86IG51bWJlciwgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzPzogbnVtYmVyLCBjdXJyZW5jeT86IHN0cmluZykge1xuXHRcdGxldCBmaXhlZEludGVnZXI7XG5cdFx0dmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBOdW1iZXIodmFsdWUucmVwbGFjZSgvLC9nLCBcIlwiKSkgOiB2YWx1ZTtcblxuXHRcdGlmIChjdXJyZW5jeSkge1xuXHRcdFx0Y29uc3QgY3VycmVuY3lGb3JtYXQgPSBOdW1iZXJGb3JtYXQuZ2V0Q3VycmVuY3lJbnN0YW5jZSh7XG5cdFx0XHRcdHNob3dNZWFzdXJlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY3VycmVuY3lGb3JtYXQuZm9ybWF0KHBhcnNlRmxvYXQodmFsdWUgYXMgYW55KSwgY3VycmVuY3kpO1xuXHRcdFx0Ly8gcGFyc2VGbG9hdCh2YWx1ZSkgaXMgcmVxdWlyZWQgb3RoZXJ3aXNlIC12ZSB2YWx1ZSBhcmUgd3JvbmdseSByb3VuZGVkIG9mZlxuXHRcdFx0Ly8gRXhhbXBsZTogXCItMS45XCIgcm91bmRzIG9mZiB0byAtMSBpbnN0ZWFkIG9mIC0yLiBob3dldmVyIC0xLjkgcm91bmRzIG9mZiB0byAtMlxuXHRcdH0gZWxzZSBpZiAoc2NhbGVGYWN0b3IpIHtcblx0XHRcdGZpeGVkSW50ZWdlciA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZSxcblx0XHRcdFx0c2hvcnRSZWZOdW1iZXI6IHNjYWxlRmFjdG9yLFxuXHRcdFx0XHRzaG9ydERlY2ltYWxzOiBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHNcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZpeGVkSW50ZWdlci5mb3JtYXQocGFyc2VGbG9hdCh2YWx1ZSBhcyBhbnkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zml4ZWRJbnRlZ2VyID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2Uoe1xuXHRcdFx0XHRkZWNpbWFsczogbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmaXhlZEludGVnZXIuZm9ybWF0KHBhcnNlRmxvYXQodmFsdWUgYXMgYW55KSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBVT00gdG8gdGhlIHRpdGxlIG9mIHRoZSB2aXN1YWwgZmlsdGVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvSW50ZXJhY3RpdmVDaGFydCBJbnRlcmFjdGl2ZUNoYXJ0IGluIHRoZSBWaXN1YWxGaWx0ZXIgY29udHJvbFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRleHREYXRhIERhdGEgb2YgdGhlIFZpc3VhbEZpbHRlclxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1ZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJbmZvUGF0aCBJbnRlcm5hbCBtb2RlbCBjb250ZXh0IHBhdGggdG8gc3RvcmUgaW5mby5cblx0ICovXG5cdGFwcGx5VU9NVG9UaXRsZTogZnVuY3Rpb24gKG9JbnRlcmFjdGl2ZUNoYXJ0OiBhbnksIG9Db250ZXh0RGF0YTogYW55LCBvVmlldzogVmlldywgc0luZm9QYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCB2VU9NID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInVvbVwiKTtcblx0XHRsZXQgc1VPTTtcblx0XHRsZXQgc0N1cnJlbmN5O1xuXHRcdGlmICh2VU9NICYmIHZVT01bXCJJU09DdXJyZW5jeVwiXSkge1xuXHRcdFx0c1VPTSA9IHZVT01bXCJJU09DdXJyZW5jeVwiXTtcblx0XHRcdHNDdXJyZW5jeSA9IHNVT00uJFBhdGggPyBvQ29udGV4dERhdGFbc1VPTS4kUGF0aF0gOiBzVU9NO1xuXHRcdH0gZWxzZSBpZiAodlVPTSAmJiB2VU9NW1wiVW5pdFwiXSkge1xuXHRcdFx0c1VPTSA9IHZVT01bXCJVbml0XCJdO1xuXHRcdH1cblx0XHRpZiAoc1VPTSkge1xuXHRcdFx0Y29uc3Qgc1VPTVZhbHVlID0gc1VPTS4kUGF0aCA/IG9Db250ZXh0RGF0YVtzVU9NLiRQYXRoXSA6IHNVT007XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwidW9tL1wiICsgc0luZm9QYXRoLCBzVU9NVmFsdWUpO1xuXHRcdFx0aWYgKHNDdXJyZW5jeSkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXJyZW5jeS9cIiArIHNJbmZvUGF0aCwgc1VPTVZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBzY2FsZSBmYWN0b3IgaW4gdGhlIHRpdGxlIG9mIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ludGVyYWN0aXZlQ2hhcnQgSW50ZXJhY3RpdmVDaGFydCBpbiB0aGUgVmlzdWFsRmlsdGVyIGNvbnRyb2xcblx0ICogQHBhcmFtIHtvYmplY3R9IG9WaWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzVkZJZCBWaXN1YWxGaWx0ZXIgY29udHJvbCBJRFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0luZm9QYXRoIEludGVybmFsIG1vZGVsIGNvbnRleHQgcGF0aCB0byBzdG9yZSBpbmZvLlxuXHQgKi9cblx0dXBkYXRlQ2hhcnRTY2FsZUZhY3RvclRpdGxlOiBmdW5jdGlvbiAob0ludGVyYWN0aXZlQ2hhcnQ6IGFueSwgb1ZpZXc6IFZpZXcsIHNWRklkOiBzdHJpbmcsIHNJbmZvUGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKCFvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwic2NhbGVmYWN0b3JcIikpIHtcblx0XHRcdHRoaXMuYXBwbHlNZWRpYW5TY2FsZVRvQ2hhcnREYXRhKG9JbnRlcmFjdGl2ZUNoYXJ0LCBvVmlldywgc1ZGSWQsIHNJbmZvUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGZpeGVkSW50ZWdlciA9IE51bWJlckZvcm1hdC5nZXRJbnRlZ2VySW5zdGFuY2Uoe1xuXHRcdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRzaG9ydFJlZk51bWJlcjogb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInNjYWxlZmFjdG9yXCIpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvci9cIiArIHNJbmZvUGF0aCwgKGZpeGVkSW50ZWdlciBhcyBhbnkpLmdldFNjYWxlKCkpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHMxOG5NZXNzYWdlVGl0bGUgVGV4dCBvZiB0aGUgZXJyb3IgbWVzc2FnZSB0aXRsZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHMxOG5NZXNzYWdlIFRleHQgb2YgdGhlIGVycm9yIG1lc3NhZ2UgZGVzY3JpcHRpb24uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSW5mb1BhdGggSW50ZXJuYWwgbW9kZWwgY29udGV4dCBwYXRoIHRvIHN0b3JlIGluZm8uXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvVmlldyBJbnN0YW5jZSBvZiB0aGUgdmlldy5cblx0ICovXG5cdGFwcGx5RXJyb3JNZXNzYWdlQW5kVGl0bGU6IGZ1bmN0aW9uIChzMThuTWVzc2FnZVRpdGxlOiBzdHJpbmcsIHMxOG5NZXNzYWdlOiBzdHJpbmcsIHNJbmZvUGF0aDogc3RyaW5nLCBvVmlldzogVmlldykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNJbmZvUGF0aCwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzSW5mb1BhdGgsIHtcblx0XHRcdFwiZXJyb3JNZXNzYWdlVGl0bGVcIjogczE4bk1lc3NhZ2VUaXRsZSxcblx0XHRcdFwiZXJyb3JNZXNzYWdlXCI6IHMxOG5NZXNzYWdlLFxuXHRcdFx0XCJzaG93RXJyb3JcIjogdHJ1ZVxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2tzIGlmIG11bHRpcGxlIHVuaXRzIGFyZSBwcmVzZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRleHRzIENvbnRleHRzIG9mIHRoZSBWaXN1YWxGaWx0ZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNVbml0ZmllbGQgVGhlIHBhdGggb2YgdGhlIHVuaXQgZmllbGRcblx0ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgaWYgbXVsdGlwbGUgdW5pdHMgYXJlIGNvbmZpZ3VyZWQgb3Igbm90XG5cdCAqL1xuXHRjaGVja011bGl0VW5pdDogZnVuY3Rpb24gKG9Db250ZXh0czogQ29udGV4dFtdLCBzVW5pdGZpZWxkOiBzdHJpbmcpIHtcblx0XHRjb25zdCBhRGF0YSA9IFtdO1xuXHRcdGlmIChvQ29udGV4dHMgJiYgc1VuaXRmaWVsZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgYUNvbnRleHREYXRhID0gb0NvbnRleHRzW2ldICYmIChvQ29udGV4dHNbaV0uZ2V0T2JqZWN0KCkgYXMgYW55KTtcblx0XHRcdFx0YURhdGEucHVzaChhQ29udGV4dERhdGFbc1VuaXRmaWVsZF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gISFhRGF0YS5yZWR1Y2UoZnVuY3Rpb24gKGRhdGE6IGFueSwga2V5OiBhbnkpIHtcblx0XHRcdHJldHVybiBkYXRhID09PSBrZXkgPyBkYXRhIDogTmFOO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXRzIGFuIGVycm9yIG1lc3NhZ2UgaWYgbXVsdGlwbGUgVU9NIGFyZSBwcmVzZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0RhdGEgRGF0YSBvZiB0aGUgVmlzdWFsRmlsdGVyIGNvbnRyb2xcblx0ICogQHBhcmFtIHtvYmplY3R9IG9JbnRlcmFjdGl2ZUNoYXJ0IEludGVyYWN0aXZlQ2hhcnQgaW4gdGhlIFZpc3VhbEZpbHRlciBjb250cm9sXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSW5mb1BhdGggSW50ZXJuYWwgbW9kZWwgY29udGV4dCBwYXRoIHRvIHN0b3JlIGluZm8uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvUmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb1ZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICovXG5cdHNldE11bHRpVU9NTWVzc2FnZTogZnVuY3Rpb24gKFxuXHRcdG9EYXRhOiBDb250ZXh0W10sXG5cdFx0b0ludGVyYWN0aXZlQ2hhcnQ6IGFueSxcblx0XHRzSW5mb1BhdGg6IHN0cmluZyxcblx0XHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLFxuXHRcdG9WaWV3OiBWaWV3XG5cdCkge1xuXHRcdGNvbnN0IHZVT00gPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwidW9tXCIpO1xuXHRcdGNvbnN0IHNJc0N1cnJlbmN5ID0gdlVPTSAmJiB2VU9NW1wiSVNPQ3VycmVuY3lcIl0gJiYgdlVPTVtcIklTT0N1cnJlbmN5XCJdLiRQYXRoO1xuXHRcdGNvbnN0IHNJc1VuaXQgPSB2VU9NICYmIHZVT01bXCJVbml0XCJdICYmIHZVT01bXCJVbml0XCJdLiRQYXRoO1xuXHRcdGNvbnN0IHNVbml0ZmllbGQgPSBzSXNDdXJyZW5jeSB8fCBzSXNVbml0O1xuXHRcdGxldCBzMThuTWVzc2FnZVRpdGxlLCBzMThuTWVzc2FnZTtcblx0XHRpZiAoc1VuaXRmaWVsZCkge1xuXHRcdFx0aWYgKCF0aGlzLmNoZWNrTXVsaXRVbml0KG9EYXRhLCBzVW5pdGZpZWxkKSkge1xuXHRcdFx0XHRpZiAoc0lzQ3VycmVuY3kpIHtcblx0XHRcdFx0XHRzMThuTWVzc2FnZVRpdGxlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJTX0VSUk9SX01FU1NBR0VfVElUTEVcIik7XG5cdFx0XHRcdFx0czE4bk1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfTVVMVElQTEVfQ1VSUkVOQ1lcIiwgc1VuaXRmaWVsZCk7XG5cdFx0XHRcdFx0dGhpcy5hcHBseUVycm9yTWVzc2FnZUFuZFRpdGxlKHMxOG5NZXNzYWdlVGl0bGUsIHMxOG5NZXNzYWdlLCBzSW5mb1BhdGgsIG9WaWV3KTtcblx0XHRcdFx0XHRMb2cud2FybmluZyhcIkZpbHRlciBpcyBzZXQgZm9yIG11bHRpcGxlIEN1cnJlbmN5IGZvclwiICsgc1VuaXRmaWVsZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc0lzVW5pdCkge1xuXHRcdFx0XHRcdHMxOG5NZXNzYWdlVGl0bGUgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfRVJST1JfTUVTU0FHRV9USVRMRVwiKTtcblx0XHRcdFx0XHRzMThuTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9WSVNVQUxfRklMVEVSU19NVUxUSVBMRV9VTklUXCIsIHNVbml0ZmllbGQpO1xuXHRcdFx0XHRcdHRoaXMuYXBwbHlFcnJvck1lc3NhZ2VBbmRUaXRsZShzMThuTWVzc2FnZVRpdGxlLCBzMThuTWVzc2FnZSwgc0luZm9QYXRoLCBvVmlldyk7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJGaWx0ZXIgaXMgc2V0IGZvciBtdWx0aXBsZSBVT01zIGZvclwiICsgc1VuaXRmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldHMgYW4gZXJyb3IgbWVzc2FnZSBpZiByZXNwb25zZSBkYXRhIGlzIGVtcHR5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0luZm9QYXRoIEludGVybmFsIG1vZGVsIGNvbnRleHQgcGF0aCB0byBzdG9yZSBpbmZvLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb1Jlc291cmNlQnVuZGxlIFRoZSByZXNvdXJjZSBidW5kbGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9WaWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqL1xuXHRzZXROb0RhdGFNZXNzYWdlOiBmdW5jdGlvbiAoc0luZm9QYXRoOiBzdHJpbmcsIG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIG9WaWV3OiBWaWV3KSB7XG5cdFx0Y29uc3QgczE4bk1lc3NhZ2VUaXRsZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9WSVNVQUxfRklMVEVSU19FUlJPUl9NRVNTQUdFX1RJVExFXCIpO1xuXHRcdGNvbnN0IHMxOG5NZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJfTk9fREFUQV9URVhUXCIpO1xuXHRcdHRoaXMuYXBwbHlFcnJvck1lc3NhZ2VBbmRUaXRsZShzMThuTWVzc2FnZVRpdGxlLCBzMThuTWVzc2FnZSwgc0luZm9QYXRoLCBvVmlldyk7XG5cdH0sXG5cdGNvbnZlcnRGaWx0ZXJDb25kaW9uczogZnVuY3Rpb24gKG9GaWx0ZXJDb25kaXRpb25zOiBhbnkpIHtcblx0XHRjb25zdCBvQ29udmVydGVkQ29uZGl0aW9uczogYW55ID0ge307XG5cdFx0T2JqZWN0LmtleXMob0ZpbHRlckNvbmRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0Y29uc3QgYUNvbnZlcnRlZENvbmRpdGlvbnMgPSBbXTtcblx0XHRcdGNvbnN0IGFDb25kaXRpb25zID0gb0ZpbHRlckNvbmRpdGlvbnNbc0tleV07XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFDb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlcyA9IGFDb25kaXRpb25zW2ldLnZhbHVlMiA/IFthQ29uZGl0aW9uc1tpXS52YWx1ZTEsIGFDb25kaXRpb25zW2ldLnZhbHVlMl0gOiBbYUNvbmRpdGlvbnNbaV0udmFsdWUxXTtcblx0XHRcdFx0YUNvbnZlcnRlZENvbmRpdGlvbnMucHVzaChcblx0XHRcdFx0XHRDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKGFDb25kaXRpb25zW2ldLm9wZXJhdG9yLCB2YWx1ZXMsIG51bGwsIG51bGwsIFwiVmFsaWRhdGVkXCIgYXMgQ29uZGl0aW9uVmFsaWRhdGVkKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGFDb252ZXJ0ZWRDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRvQ29udmVydGVkQ29uZGl0aW9uc1tzS2V5XSA9IGFDb252ZXJ0ZWRDb25kaXRpb25zO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvQ29udmVydGVkQ29uZGl0aW9ucztcblx0fSxcblx0Z2V0Q3VzdG9tQ29uZGl0aW9uczogZnVuY3Rpb24gKFJhbmdlOiBhbnksIG9WYWxpZFByb3BlcnR5OiBhbnksIHNQcm9wZXJ0eU5hbWU6IGFueSkge1xuXHRcdGxldCB2YWx1ZTEsIHZhbHVlMjtcblx0XHRpZiAob1ZhbGlkUHJvcGVydHkuJFR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdHZhbHVlMSA9IHRoaXMuX3BhcnNlRGF0ZVRpbWUoZ2V0VHlwZUNvbXBsaWFudFZhbHVlKHRoaXMuX2Zvcm1hdERhdGVUaW1lKFJhbmdlLkxvdyksIG9WYWxpZFByb3BlcnR5LiRUeXBlKSk7XG5cdFx0XHR2YWx1ZTIgPSBSYW5nZS5IaWdoID8gdGhpcy5fcGFyc2VEYXRlVGltZShnZXRUeXBlQ29tcGxpYW50VmFsdWUodGhpcy5fZm9ybWF0RGF0ZVRpbWUoUmFuZ2UuSGlnaCksIG9WYWxpZFByb3BlcnR5LiRUeXBlKSkgOiBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZTEgPSBSYW5nZS5Mb3c7XG5cdFx0XHR2YWx1ZTIgPSBSYW5nZS5IaWdoID8gUmFuZ2UuSGlnaCA6IG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRvcGVyYXRvcjogUmFuZ2UuT3B0aW9uID8gZ2V0T3BlcmF0b3IoUmFuZ2UuT3B0aW9uLiRFbnVtTWVtYmVyIHx8IFJhbmdlLk9wdGlvbikgOiBudWxsLFxuXHRcdFx0dmFsdWUxOiB2YWx1ZTEsXG5cdFx0XHR2YWx1ZTI6IHZhbHVlMixcblx0XHRcdHBhdGg6IHNQcm9wZXJ0eU5hbWVcblx0XHR9O1xuXHR9LFxuXHRfcGFyc2VEYXRlVGltZTogZnVuY3Rpb24gKHNWYWx1ZTogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldERhdGVUaW1lVHlwZUluc3RhbmNlKCkucGFyc2VWYWx1ZShzVmFsdWUsIFwic3RyaW5nXCIpO1xuXHR9LFxuXHRfZm9ybWF0RGF0ZVRpbWU6IGZ1bmN0aW9uIChzVmFsdWU6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLl9nZXREYXRlVGltZVR5cGVJbnN0YW5jZSgpLmZvcm1hdFZhbHVlKHNWYWx1ZSwgXCJzdHJpbmdcIik7XG5cdH0sXG5cdF9nZXREYXRlVGltZVR5cGVJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBuZXcgRGF0ZVRpbWVPZmZzZXQoeyBwYXR0ZXJuOiBcInl5eXktTU0tZGRUSEg6bW06c3NaXCIsIGNhbGVuZGFyVHlwZTogXCJHcmVnb3JpYW5cIiB9LCB7IFY0OiB0cnVlIH0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWaXN1YWxGaWx0ZXJVdGlscztcbiJdfQ==
|
|
339
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlclV0aWxzLnRzIl0sIm5hbWVzIjpbIlZpc3VhbEZpbHRlclV0aWxzIiwiYXBwbHlNZWRpYW5TY2FsZVRvQ2hhcnREYXRhIiwib0ludGVyYWN0aXZlQ2hhcnQiLCJvVmlldyIsInNWRklkIiwic0luZm9QYXRoIiwib0RhdGEiLCJzTWVhc3VyZSIsImRhdGEiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImFBZ2dyZWdhdGlvbiIsImdldFBvaW50cyIsImdldEJhcnMiLCJnZXRTZWdtZW50cyIsImkiLCJsZW5ndGgiLCJwdXNoIiwiZ2V0T2JqZWN0Iiwic2NhbGVGYWN0b3IiLCJfZ2V0TWVkaWFuU2NhbGVGYWN0b3IiLCJpU2hvcnRSZWZOdW1iZXIiLCJzY2FsZSIsInNldFByb3BlcnR5Iiwib1NjYWxlVGl0bGUiLCJieUlkIiwib01lYXN1cmVEaW1lbnNpb25UaXRsZSIsInNUZXh0IiwiZ2V0VGV4dCIsInNldFZpc2libGUiLCJzZXRUb29sdGlwIiwic01lYXN1cmVGaWVsZCIsInNvcnQiLCJhIiwiYiIsIk51bWJlciIsImlNaWQiLCJpTWVkaWFuIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJmbG9vciIsInZhbCIsInBvdyIsInJvdW5kIiwiYWJzIiwiZml4ZWRJbnRlZ2VyIiwiTnVtYmVyRm9ybWF0IiwiZ2V0SW50ZWdlckluc3RhbmNlIiwic3R5bGUiLCJzaG93U2NhbGUiLCJzaG9ydFJlZk51bWJlciIsImFEYXRhIiwic1NjYWxlZFZhbHVlIiwiZm9ybWF0IiwiYVNjYWxlZFZhbHVlUGFydHMiLCJzcGxpdCIsInBhcnNlSW50IiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsImdldFNjYWxlIiwiZ2V0Rm9ybWF0dGVkTnVtYmVyIiwidmFsdWUiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJjdXJyZW5jeSIsInJlcGxhY2UiLCJjdXJyZW5jeUZvcm1hdCIsImdldEN1cnJlbmN5SW5zdGFuY2UiLCJzaG93TWVhc3VyZSIsImdldEZsb2F0SW5zdGFuY2UiLCJzaG9ydERlY2ltYWxzIiwiZGVjaW1hbHMiLCJhcHBseVVPTVRvVGl0bGUiLCJvQ29udGV4dERhdGEiLCJ2VU9NIiwic1VPTSIsInNDdXJyZW5jeSIsIiRQYXRoIiwic1VPTVZhbHVlIiwidXBkYXRlQ2hhcnRTY2FsZUZhY3RvclRpdGxlIiwiYXBwbHlFcnJvck1lc3NhZ2VBbmRUaXRsZSIsInMxOG5NZXNzYWdlVGl0bGUiLCJzMThuTWVzc2FnZSIsImNoZWNrTXVsaXRVbml0Iiwib0NvbnRleHRzIiwic1VuaXRmaWVsZCIsImFDb250ZXh0RGF0YSIsInJlZHVjZSIsImtleSIsIk5hTiIsInNldE11bHRpVU9NTWVzc2FnZSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNJc0N1cnJlbmN5Iiwic0lzVW5pdCIsIkxvZyIsIndhcm5pbmciLCJzZXROb0RhdGFNZXNzYWdlIiwiY29udmVydEZpbHRlckNvbmRpb25zIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJvQ29udmVydGVkQ29uZGl0aW9ucyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic0tleSIsImFDb252ZXJ0ZWRDb25kaXRpb25zIiwiYUNvbmRpdGlvbnMiLCJ2YWx1ZXMiLCJ2YWx1ZTIiLCJ2YWx1ZTEiLCJDb25kaXRpb24iLCJjcmVhdGVDb25kaXRpb24iLCJvcGVyYXRvciIsImdldEN1c3RvbUNvbmRpdGlvbnMiLCJSYW5nZSIsIm9WYWxpZFByb3BlcnR5Iiwic1Byb3BlcnR5TmFtZSIsIiRUeXBlIiwiX3BhcnNlRGF0ZVRpbWUiLCJnZXRUeXBlQ29tcGxpYW50VmFsdWUiLCJfZm9ybWF0RGF0ZVRpbWUiLCJMb3ciLCJIaWdoIiwiT3B0aW9uIiwiZ2V0T3BlcmF0b3IiLCIkRW51bU1lbWJlciIsInBhdGgiLCJzVmFsdWUiLCJfZ2V0RGF0ZVRpbWVUeXBlSW5zdGFuY2UiLCJwYXJzZVZhbHVlIiwiZm9ybWF0VmFsdWUiLCJEYXRlVGltZU9mZnNldCIsInBhdHRlcm4iLCJjYWxlbmRhclR5cGUiLCJW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QUFJTmtCLFFBQUFBLElBQUksRUFBRVY7QUFKQSxPQUFQO0FBTUEsS0FuVHdCO0FBb1R6QkUsSUFBQUEsY0FBYyxFQUFFLFVBQVVTLE1BQVYsRUFBdUI7QUFDdEMsYUFBTyxLQUFLQyx3QkFBTCxHQUFnQ0MsVUFBaEMsQ0FBMkNGLE1BQTNDLEVBQW1ELFFBQW5ELENBQVA7QUFDQSxLQXRUd0I7QUF1VHpCUCxJQUFBQSxlQUFlLEVBQUUsVUFBVU8sTUFBVixFQUF1QjtBQUN2QyxhQUFPLEtBQUtDLHdCQUFMLEdBQWdDRSxXQUFoQyxDQUE0Q0gsTUFBNUMsRUFBb0QsUUFBcEQsQ0FBUDtBQUNBLEtBelR3QjtBQTBUekJDLElBQUFBLHdCQUF3QixFQUFFLFlBQVk7QUFDckMsYUFBTyxJQUFJRyxjQUFKLENBQW1CO0FBQUVDLFFBQUFBLE9BQU8sRUFBRSxzQkFBWDtBQUFtQ0MsUUFBQUEsWUFBWSxFQUFFO0FBQWpELE9BQW5CLEVBQW1GO0FBQUVDLFFBQUFBLEVBQUUsRUFBRTtBQUFOLE9BQW5GLENBQVA7QUFDQTtBQTVUd0IsR0FBMUI7U0ErVGVwSSxpQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRPcGVyYXRvciwgZ2V0VHlwZUNvbXBsaWFudFZhbHVlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmlsdGVySGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCBOdW1iZXJGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9OdW1iZXJGb3JtYXRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29uZGl0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCB0eXBlIENvbmRpdGlvblZhbGlkYXRlZCBmcm9tIFwic2FwL3VpL21kYy9lbnVtL0NvbmRpdGlvblZhbGlkYXRlZFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcblxuY29uc3QgVmlzdWFsRmlsdGVyVXRpbHMgPSB7XG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBtZWRpYW4gc2NhbGUgdG8gdGhlIGNoYXJ0IGRhdGEuXG5cdCAqXG5cdCAqIEBwYXJhbSBvSW50ZXJhY3RpdmVDaGFydCBJbnRlcmFjdGl2ZUNoYXJ0IGluIHRoZSBWaXN1YWxGaWx0ZXIgY29udHJvbFxuXHQgKiBAcGFyYW0gb1ZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICogQHBhcmFtIHNWRklkIFZpc3VhbEZpbHRlciBjb250cm9sIElEXG5cdCAqIEBwYXJhbSBzSW5mb1BhdGggSW50ZXJuYWwgbW9kZWwgY29udGV4dCBwYXRoIHRvIHN0b3JlIGluZm8uXG5cdCAqL1xuXHRhcHBseU1lZGlhblNjYWxlVG9DaGFydERhdGE6IGZ1bmN0aW9uIChvSW50ZXJhY3RpdmVDaGFydDogYW55LCBvVmlldzogVmlldywgc1ZGSWQ6IHN0cmluZywgc0luZm9QYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvRGF0YSA9IFtdO1xuXHRcdGNvbnN0IHNNZWFzdXJlID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcIm1lYXN1cmVcIik7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBhQWdncmVnYXRpb24gPVxuXHRcdFx0KG9JbnRlcmFjdGl2ZUNoYXJ0LmdldFBvaW50cyAmJiBvSW50ZXJhY3RpdmVDaGFydC5nZXRQb2ludHMoKSkgfHxcblx0XHRcdChvSW50ZXJhY3RpdmVDaGFydC5nZXRCYXJzICYmIG9JbnRlcmFjdGl2ZUNoYXJ0LmdldEJhcnMoKSkgfHxcblx0XHRcdChvSW50ZXJhY3RpdmVDaGFydC5nZXRTZWdtZW50cyAmJiBvSW50ZXJhY3RpdmVDaGFydC5nZXRTZWdtZW50cygpKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFBZ2dyZWdhdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0b0RhdGEucHVzaChhQWdncmVnYXRpb25baV0uZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRPYmplY3QoKSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNjYWxlRmFjdG9yID0gdGhpcy5fZ2V0TWVkaWFuU2NhbGVGYWN0b3Iob0RhdGEsIHNNZWFzdXJlKTtcblx0XHRpZiAoc2NhbGVGYWN0b3IgJiYgc2NhbGVGYWN0b3IuaVNob3J0UmVmTnVtYmVyICYmIHNjYWxlRmFjdG9yLnNjYWxlKSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYHNjYWxlZmFjdG9yLyR7c0luZm9QYXRofWAsIHNjYWxlRmFjdG9yLnNjYWxlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgc2NhbGVmYWN0b3JOdW1iZXIvJHtzSW5mb1BhdGh9YCwgc2NhbGVGYWN0b3IuaVNob3J0UmVmTnVtYmVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBzY2FsZWZhY3Rvci8ke3NJbmZvUGF0aH1gLCBcIlwiKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgc2NhbGVmYWN0b3JOdW1iZXIvJHtzSW5mb1BhdGh9YCwgXCJcIik7XG5cdFx0XHRjb25zdCBvU2NhbGVUaXRsZSA9IG9WaWV3LmJ5SWQoYCR7c1ZGSWR9OjpTY2FsZVVvTVRpdGxlYCkgYXMgVGl0bGU7XG5cdFx0XHRjb25zdCBvTWVhc3VyZURpbWVuc2lvblRpdGxlID0gb1ZpZXcuYnlJZChgJHtzVkZJZH06Ok1lYXN1cmVEaW1lbnNpb25UaXRsZWApIGFzIFRpdGxlO1xuXHRcdFx0Y29uc3Qgc1RleHQgPSBvU2NhbGVUaXRsZS5nZXRUZXh0KCk7XG5cdFx0XHRpZiAoc1RleHQgPT09IFwiIHwgXCIpIHtcblx0XHRcdFx0b1NjYWxlVGl0bGUuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHRcdG9NZWFzdXJlRGltZW5zaW9uVGl0bGUuc2V0VG9vbHRpcChvTWVhc3VyZURpbWVuc2lvblRpdGxlLmdldFRleHQoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZWRpYW4gc2NhbGUgZmFjdG9yLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0RhdGEgVmlzdWFsRmlsdGVyIGRhdGFcblx0ICogQHBhcmFtIHNNZWFzdXJlRmllbGQgUGF0aCBvZiB0aGUgbWVhc3VyZVxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBzY2FsZSBhbmQgaVNob3J0UmVmTnVtYmVyXG5cdCAqL1xuXHRfZ2V0TWVkaWFuU2NhbGVGYWN0b3I6IGZ1bmN0aW9uIChvRGF0YTogYW55W10sIHNNZWFzdXJlRmllbGQ6IHN0cmluZykge1xuXHRcdGxldCBpO1xuXHRcdGxldCBzY2FsZUZhY3Rvcjtcblx0XHRvRGF0YS5zb3J0KGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSkge1xuXHRcdFx0aWYgKE51bWJlcihhW3NNZWFzdXJlRmllbGRdKSA8IE51bWJlcihiW3NNZWFzdXJlRmllbGRdKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRpZiAoTnVtYmVyKGFbc01lYXN1cmVGaWVsZF0pID4gTnVtYmVyKGJbc01lYXN1cmVGaWVsZF0pKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fSk7XG5cdFx0aWYgKG9EYXRhLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIGdldCBtZWRpYW4gaW5kZXhcblx0XHRcdGNvbnN0IGlNaWQgPSBvRGF0YS5sZW5ndGggLyAyLCAvLyBnZXQgbWlkIG9mIGFycmF5XG5cdFx0XHRcdC8vIGlmIGlNaWQgaXMgd2hvbGUgbnVtYmVyLCBhcnJheSBsZW5ndGggaXMgZXZlbiwgY2FsY3VsYXRlIG1lZGlhblxuXHRcdFx0XHQvLyBpZiBpTWlkIGlzIG5vdCB3aG9sZSBudW1iZXIsIGFycmF5IGxlbmd0aCBpcyBvZGQsIHRha2UgbWVkaWFuIGFzIGlNaWQgLSAxXG5cdFx0XHRcdGlNZWRpYW4gPVxuXHRcdFx0XHRcdGlNaWQgJSAxID09PSAwXG5cdFx0XHRcdFx0XHQ/IChwYXJzZUZsb2F0KG9EYXRhW2lNaWQgLSAxXVtzTWVhc3VyZUZpZWxkXSkgKyBwYXJzZUZsb2F0KG9EYXRhW2lNaWRdW3NNZWFzdXJlRmllbGRdKSkgLyAyXG5cdFx0XHRcdFx0XHQ6IHBhcnNlRmxvYXQob0RhdGFbTWF0aC5mbG9vcihpTWlkKV1bc01lYXN1cmVGaWVsZF0pLFxuXHRcdFx0XHQvLyBnZXQgc2NhbGUgZmFjdG9yIG9uIG1lZGlhblxuXHRcdFx0XHR2YWwgPSBpTWVkaWFuO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHtcblx0XHRcdFx0c2NhbGVGYWN0b3IgPSBNYXRoLnBvdygxMCwgaSk7XG5cdFx0XHRcdGlmIChNYXRoLnJvdW5kKE1hdGguYWJzKHZhbCkgLyBzY2FsZUZhY3RvcikgPCAxMCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgZml4ZWRJbnRlZ2VyID0gTnVtYmVyRm9ybWF0LmdldEludGVnZXJJbnN0YW5jZSh7XG5cdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0c2hvd1NjYWxlOiBmYWxzZSxcblx0XHRcdHNob3J0UmVmTnVtYmVyOiBzY2FsZUZhY3RvclxuXHRcdH0pO1xuXG5cdFx0Ly8gYXBwbHkgc2NhbGUgZmFjdG9yIHRvIG90aGVyIHZhbHVlcyBhbmQgY2hlY2tcblx0XHRmb3IgKGkgPSAwOyBpIDwgb0RhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGFEYXRhID0gb0RhdGFbaV0sXG5cdFx0XHRcdHNTY2FsZWRWYWx1ZSA9IGZpeGVkSW50ZWdlci5mb3JtYXQoYURhdGFbc01lYXN1cmVGaWVsZF0pIGFzIGFueSxcblx0XHRcdFx0YVNjYWxlZFZhbHVlUGFydHMgPSBzU2NhbGVkVmFsdWUuc3BsaXQoXCIuXCIpO1xuXHRcdFx0Ly8gaWYgc2NhbGVkIHZhbHVlIGhhcyBvbmx5IDAgYmVmb3JlIGRlY2ltYWwgb3IgMCBhZnRlciBkZWNpbWFsIChleGFtcGxlOiAwLjAyKVxuXHRcdFx0Ly8gdGhlbiBpZ25vcmUgdGhpcyBzY2FsZSBmYWN0b3IgZWxzZSBwcm9jZWVkIHdpdGggdGhpcyBzY2FsZSBmYWN0b3Jcblx0XHRcdC8vIGlmIHNjYWxlZCB2YWx1ZSBkaXZpZGVkIGJ5IDEwMDAgaXMgPj0gMTAwMCB0aGVuIGFsc28gaWdub3JlIHNjYWxlIGZhY3RvclxuXHRcdFx0aWYgKFxuXHRcdFx0XHQoIWFTY2FsZWRWYWx1ZVBhcnRzWzFdICYmIHBhcnNlSW50KGFTY2FsZWRWYWx1ZVBhcnRzWzBdLCAxMCkgPT09IDApIHx8XG5cdFx0XHRcdChhU2NhbGVkVmFsdWVQYXJ0c1sxXSAmJiBwYXJzZUludChhU2NhbGVkVmFsdWVQYXJ0c1swXSwgMTApID09PSAwICYmIGFTY2FsZWRWYWx1ZVBhcnRzWzFdLmluZGV4T2YoXCIwXCIpID09PSAwKSB8fFxuXHRcdFx0XHRzU2NhbGVkVmFsdWUgLyAxMDAwID49IDEwMDBcblx0XHRcdCkge1xuXHRcdFx0XHRzY2FsZUZhY3RvciA9IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRpU2hvcnRSZWZOdW1iZXI6IHNjYWxlRmFjdG9yLFxuXHRcdFx0c2NhbGU6IHNjYWxlRmFjdG9yID8gKGZpeGVkSW50ZWdlciBhcyBhbnkpLmdldFNjYWxlKCkgOiBcIlwiXG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZm9ybWF0dGVkIG51bWJlciBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIFZpc3VhbENoYXJ0RmlsdGVycy5cblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIFZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGZvcm1hdHRlZFxuXHQgKiBAcGFyYW0gc2NhbGVGYWN0b3IgU2NhbGVGYWN0b3IgdG8gd2hpY2ggdGhlIHZhbHVlIG5lZWRzIHRvIGJlIHNjYWxlZFxuXHQgKiBAcGFyYW0gbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIE51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyBkaWdpdHMgaW4gdGhlIGRlY2ltYWxzIGFjY29yZGluZyB0byBzY2FsZVxuXHQgKiBAcGFyYW0gY3VycmVuY3kgQ3VycmVuY3kgY29kZVxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIG51bWJlclxuXHQgKi9cblx0Z2V0Rm9ybWF0dGVkTnVtYmVyOiBmdW5jdGlvbiAodmFsdWU6IHN0cmluZyB8IG51bWJlciwgc2NhbGVGYWN0b3I/OiBudW1iZXIsIG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cz86IG51bWJlciwgY3VycmVuY3k/OiBzdHJpbmcpIHtcblx0XHRsZXQgZml4ZWRJbnRlZ2VyO1xuXHRcdHZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gTnVtYmVyKHZhbHVlLnJlcGxhY2UoLywvZywgXCJcIikpIDogdmFsdWU7XG5cblx0XHRpZiAoY3VycmVuY3kpIHtcblx0XHRcdGNvbnN0IGN1cnJlbmN5Rm9ybWF0ID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2Uoe1xuXHRcdFx0XHRzaG93TWVhc3VyZTogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGN1cnJlbmN5Rm9ybWF0LmZvcm1hdChwYXJzZUZsb2F0KHZhbHVlIGFzIGFueSksIGN1cnJlbmN5KTtcblx0XHRcdC8vIHBhcnNlRmxvYXQodmFsdWUpIGlzIHJlcXVpcmVkIG90aGVyd2lzZSAtdmUgdmFsdWUgYXJlIHdyb25nbHkgcm91bmRlZCBvZmZcblx0XHRcdC8vIEV4YW1wbGU6IFwiLTEuOVwiIHJvdW5kcyBvZmYgdG8gLTEgaW5zdGVhZCBvZiAtMi4gaG93ZXZlciAtMS45IHJvdW5kcyBvZmYgdG8gLTJcblx0XHR9IGVsc2UgaWYgKHNjYWxlRmFjdG9yKSB7XG5cdFx0XHRmaXhlZEludGVnZXIgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZSh7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2UsXG5cdFx0XHRcdHNob3J0UmVmTnVtYmVyOiBzY2FsZUZhY3Rvcixcblx0XHRcdFx0c2hvcnREZWNpbWFsczogbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmaXhlZEludGVnZXIuZm9ybWF0KHBhcnNlRmxvYXQodmFsdWUgYXMgYW55KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpeGVkSW50ZWdlciA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKHtcblx0XHRcdFx0ZGVjaW1hbHM6IG51bWJlck9mRnJhY3Rpb25hbERpZ2l0c1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZml4ZWRJbnRlZ2VyLmZvcm1hdChwYXJzZUZsb2F0KHZhbHVlIGFzIGFueSkpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgVU9NIHRvIHRoZSB0aXRsZSBvZiB0aGUgdmlzdWFsIGZpbHRlciBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0ludGVyYWN0aXZlQ2hhcnQgSW50ZXJhY3RpdmVDaGFydCBpbiB0aGUgVmlzdWFsRmlsdGVyIGNvbnRyb2xcblx0ICogQHBhcmFtIG9Db250ZXh0RGF0YSBEYXRhIG9mIHRoZSBWaXN1YWxGaWx0ZXJcblx0ICogQHBhcmFtIG9WaWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEBwYXJhbSBzSW5mb1BhdGggSW50ZXJuYWwgbW9kZWwgY29udGV4dCBwYXRoIHRvIHN0b3JlIGluZm8uXG5cdCAqL1xuXHRhcHBseVVPTVRvVGl0bGU6IGZ1bmN0aW9uIChvSW50ZXJhY3RpdmVDaGFydDogYW55LCBvQ29udGV4dERhdGE6IGFueSwgb1ZpZXc6IFZpZXcsIHNJbmZvUGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgdlVPTSA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJ1b21cIik7XG5cdFx0bGV0IHNVT007XG5cdFx0bGV0IHNDdXJyZW5jeTtcblx0XHRpZiAodlVPTSAmJiB2VU9NW1wiSVNPQ3VycmVuY3lcIl0pIHtcblx0XHRcdHNVT00gPSB2VU9NW1wiSVNPQ3VycmVuY3lcIl07XG5cdFx0XHRzQ3VycmVuY3kgPSBzVU9NLiRQYXRoID8gb0NvbnRleHREYXRhW3NVT00uJFBhdGhdIDogc1VPTTtcblx0XHR9IGVsc2UgaWYgKHZVT00gJiYgdlVPTVtcIlVuaXRcIl0pIHtcblx0XHRcdHNVT00gPSB2VU9NW1wiVW5pdFwiXTtcblx0XHR9XG5cdFx0aWYgKHNVT00pIHtcblx0XHRcdGNvbnN0IHNVT01WYWx1ZSA9IHNVT00uJFBhdGggPyBvQ29udGV4dERhdGFbc1VPTS4kUGF0aF0gOiBzVU9NO1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgdW9tLyR7c0luZm9QYXRofWAsIHNVT01WYWx1ZSk7XG5cdFx0XHRpZiAoc0N1cnJlbmN5KSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgY3VycmVuY3kvJHtzSW5mb1BhdGh9YCwgc1VPTVZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBzY2FsZSBmYWN0b3IgaW4gdGhlIHRpdGxlIG9mIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0ludGVyYWN0aXZlQ2hhcnQgSW50ZXJhY3RpdmVDaGFydCBpbiB0aGUgVmlzdWFsRmlsdGVyIGNvbnRyb2xcblx0ICogQHBhcmFtIG9WaWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEBwYXJhbSBzVkZJZCBWaXN1YWxGaWx0ZXIgY29udHJvbCBJRFxuXHQgKiBAcGFyYW0gc0luZm9QYXRoIEludGVybmFsIG1vZGVsIGNvbnRleHQgcGF0aCB0byBzdG9yZSBpbmZvLlxuXHQgKi9cblx0dXBkYXRlQ2hhcnRTY2FsZUZhY3RvclRpdGxlOiBmdW5jdGlvbiAob0ludGVyYWN0aXZlQ2hhcnQ6IGFueSwgb1ZpZXc6IFZpZXcsIHNWRklkOiBzdHJpbmcsIHNJbmZvUGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKCFvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwic2NhbGVmYWN0b3JcIikpIHtcblx0XHRcdHRoaXMuYXBwbHlNZWRpYW5TY2FsZVRvQ2hhcnREYXRhKG9JbnRlcmFjdGl2ZUNoYXJ0LCBvVmlldywgc1ZGSWQsIHNJbmZvUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGZpeGVkSW50ZWdlciA9IE51bWJlckZvcm1hdC5nZXRJbnRlZ2VySW5zdGFuY2Uoe1xuXHRcdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRzaG9ydFJlZk51bWJlcjogb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInNjYWxlZmFjdG9yXCIpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYHNjYWxlZmFjdG9yLyR7c0luZm9QYXRofWAsIChmaXhlZEludGVnZXIgYXMgYW55KS5nZXRTY2FsZSgpKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBzMThuTWVzc2FnZVRpdGxlIFRleHQgb2YgdGhlIGVycm9yIG1lc3NhZ2UgdGl0bGUuXG5cdCAqIEBwYXJhbSBzMThuTWVzc2FnZSBUZXh0IG9mIHRoZSBlcnJvciBtZXNzYWdlIGRlc2NyaXB0aW9uLlxuXHQgKiBAcGFyYW0gc0luZm9QYXRoIEludGVybmFsIG1vZGVsIGNvbnRleHQgcGF0aCB0byBzdG9yZSBpbmZvLlxuXHQgKiBAcGFyYW0gb1ZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXcuXG5cdCAqL1xuXHRhcHBseUVycm9yTWVzc2FnZUFuZFRpdGxlOiBmdW5jdGlvbiAoczE4bk1lc3NhZ2VUaXRsZTogc3RyaW5nLCBzMThuTWVzc2FnZTogc3RyaW5nLCBzSW5mb1BhdGg6IHN0cmluZywgb1ZpZXc6IFZpZXcpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzSW5mb1BhdGgsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0luZm9QYXRoLCB7XG5cdFx0XHRcImVycm9yTWVzc2FnZVRpdGxlXCI6IHMxOG5NZXNzYWdlVGl0bGUsXG5cdFx0XHRcImVycm9yTWVzc2FnZVwiOiBzMThuTWVzc2FnZSxcblx0XHRcdFwic2hvd0Vycm9yXCI6IHRydWVcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrcyBpZiBtdWx0aXBsZSB1bml0cyBhcmUgcHJlc2VudC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0cyBDb250ZXh0cyBvZiB0aGUgVmlzdWFsRmlsdGVyXG5cdCAqIEBwYXJhbSBzVW5pdGZpZWxkIFRoZSBwYXRoIG9mIHRoZSB1bml0IGZpZWxkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgaWYgbXVsdGlwbGUgdW5pdHMgYXJlIGNvbmZpZ3VyZWQgb3Igbm90XG5cdCAqL1xuXHRjaGVja011bGl0VW5pdDogZnVuY3Rpb24gKG9Db250ZXh0czogQ29udGV4dFtdLCBzVW5pdGZpZWxkOiBzdHJpbmcpIHtcblx0XHRjb25zdCBhRGF0YSA9IFtdO1xuXHRcdGlmIChvQ29udGV4dHMgJiYgc1VuaXRmaWVsZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgYUNvbnRleHREYXRhID0gb0NvbnRleHRzW2ldICYmIChvQ29udGV4dHNbaV0uZ2V0T2JqZWN0KCkgYXMgYW55KTtcblx0XHRcdFx0YURhdGEucHVzaChhQ29udGV4dERhdGFbc1VuaXRmaWVsZF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gISFhRGF0YS5yZWR1Y2UoZnVuY3Rpb24gKGRhdGE6IGFueSwga2V5OiBhbnkpIHtcblx0XHRcdHJldHVybiBkYXRhID09PSBrZXkgPyBkYXRhIDogTmFOO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXRzIGFuIGVycm9yIG1lc3NhZ2UgaWYgbXVsdGlwbGUgVU9NIGFyZSBwcmVzZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0RhdGEgRGF0YSBvZiB0aGUgVmlzdWFsRmlsdGVyIGNvbnRyb2xcblx0ICogQHBhcmFtIG9JbnRlcmFjdGl2ZUNoYXJ0IEludGVyYWN0aXZlQ2hhcnQgaW4gdGhlIFZpc3VhbEZpbHRlciBjb250cm9sXG5cdCAqIEBwYXJhbSBzSW5mb1BhdGggSW50ZXJuYWwgbW9kZWwgY29udGV4dCBwYXRoIHRvIHN0b3JlIGluZm8uXG5cdCAqIEBwYXJhbSBvUmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKiBAcGFyYW0gb1ZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICovXG5cdHNldE11bHRpVU9NTWVzc2FnZTogZnVuY3Rpb24gKFxuXHRcdG9EYXRhOiBDb250ZXh0W10sXG5cdFx0b0ludGVyYWN0aXZlQ2hhcnQ6IGFueSxcblx0XHRzSW5mb1BhdGg6IHN0cmluZyxcblx0XHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLFxuXHRcdG9WaWV3OiBWaWV3XG5cdCkge1xuXHRcdGNvbnN0IHZVT00gPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwidW9tXCIpO1xuXHRcdGNvbnN0IHNJc0N1cnJlbmN5ID0gdlVPTSAmJiB2VU9NW1wiSVNPQ3VycmVuY3lcIl0gJiYgdlVPTVtcIklTT0N1cnJlbmN5XCJdLiRQYXRoO1xuXHRcdGNvbnN0IHNJc1VuaXQgPSB2VU9NICYmIHZVT01bXCJVbml0XCJdICYmIHZVT01bXCJVbml0XCJdLiRQYXRoO1xuXHRcdGNvbnN0IHNVbml0ZmllbGQgPSBzSXNDdXJyZW5jeSB8fCBzSXNVbml0O1xuXHRcdGxldCBzMThuTWVzc2FnZVRpdGxlLCBzMThuTWVzc2FnZTtcblx0XHRpZiAoc1VuaXRmaWVsZCkge1xuXHRcdFx0aWYgKCF0aGlzLmNoZWNrTXVsaXRVbml0KG9EYXRhLCBzVW5pdGZpZWxkKSkge1xuXHRcdFx0XHRpZiAoc0lzQ3VycmVuY3kpIHtcblx0XHRcdFx0XHRzMThuTWVzc2FnZVRpdGxlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJTX0VSUk9SX01FU1NBR0VfVElUTEVcIik7XG5cdFx0XHRcdFx0czE4bk1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfTVVMVElQTEVfQ1VSUkVOQ1lcIiwgc1VuaXRmaWVsZCk7XG5cdFx0XHRcdFx0dGhpcy5hcHBseUVycm9yTWVzc2FnZUFuZFRpdGxlKHMxOG5NZXNzYWdlVGl0bGUsIHMxOG5NZXNzYWdlLCBzSW5mb1BhdGgsIG9WaWV3KTtcblx0XHRcdFx0XHRMb2cud2FybmluZyhgRmlsdGVyIGlzIHNldCBmb3IgbXVsdGlwbGUgQ3VycmVuY3kgZm9yJHtzVW5pdGZpZWxkfWApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNJc1VuaXQpIHtcblx0XHRcdFx0XHRzMThuTWVzc2FnZVRpdGxlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJTX0VSUk9SX01FU1NBR0VfVElUTEVcIik7XG5cdFx0XHRcdFx0czE4bk1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfTVVMVElQTEVfVU5JVFwiLCBzVW5pdGZpZWxkKTtcblx0XHRcdFx0XHR0aGlzLmFwcGx5RXJyb3JNZXNzYWdlQW5kVGl0bGUoczE4bk1lc3NhZ2VUaXRsZSwgczE4bk1lc3NhZ2UsIHNJbmZvUGF0aCwgb1ZpZXcpO1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKGBGaWx0ZXIgaXMgc2V0IGZvciBtdWx0aXBsZSBVT01zIGZvciR7c1VuaXRmaWVsZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0cyBhbiBlcnJvciBtZXNzYWdlIGlmIHJlc3BvbnNlIGRhdGEgaXMgZW1wdHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBzSW5mb1BhdGggSW50ZXJuYWwgbW9kZWwgY29udGV4dCBwYXRoIHRvIHN0b3JlIGluZm8uXG5cdCAqIEBwYXJhbSBvUmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKiBAcGFyYW0gb1ZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICovXG5cdHNldE5vRGF0YU1lc3NhZ2U6IGZ1bmN0aW9uIChzSW5mb1BhdGg6IHN0cmluZywgb1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgb1ZpZXc6IFZpZXcpIHtcblx0XHRjb25zdCBzMThuTWVzc2FnZVRpdGxlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJTX0VSUk9SX01FU1NBR0VfVElUTEVcIik7XG5cdFx0Y29uc3QgczE4bk1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUl9OT19EQVRBX1RFWFRcIik7XG5cdFx0dGhpcy5hcHBseUVycm9yTWVzc2FnZUFuZFRpdGxlKHMxOG5NZXNzYWdlVGl0bGUsIHMxOG5NZXNzYWdlLCBzSW5mb1BhdGgsIG9WaWV3KTtcblx0fSxcblx0Y29udmVydEZpbHRlckNvbmRpb25zOiBmdW5jdGlvbiAob0ZpbHRlckNvbmRpdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IG9Db252ZXJ0ZWRDb25kaXRpb25zOiBhbnkgPSB7fTtcblx0XHRPYmplY3Qua2V5cyhvRmlsdGVyQ29uZGl0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBhQ29udmVydGVkQ29uZGl0aW9ucyA9IFtdO1xuXHRcdFx0Y29uc3QgYUNvbmRpdGlvbnMgPSBvRmlsdGVyQ29uZGl0aW9uc1tzS2V5XTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUNvbmRpdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgdmFsdWVzID0gYUNvbmRpdGlvbnNbaV0udmFsdWUyID8gW2FDb25kaXRpb25zW2ldLnZhbHVlMSwgYUNvbmRpdGlvbnNbaV0udmFsdWUyXSA6IFthQ29uZGl0aW9uc1tpXS52YWx1ZTFdO1xuXHRcdFx0XHRhQ29udmVydGVkQ29uZGl0aW9ucy5wdXNoKFxuXHRcdFx0XHRcdENvbmRpdGlvbi5jcmVhdGVDb25kaXRpb24oYUNvbmRpdGlvbnNbaV0ub3BlcmF0b3IsIHZhbHVlcywgbnVsbCwgbnVsbCwgXCJWYWxpZGF0ZWRcIiBhcyBDb25kaXRpb25WYWxpZGF0ZWQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYUNvbnZlcnRlZENvbmRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdG9Db252ZXJ0ZWRDb25kaXRpb25zW3NLZXldID0gYUNvbnZlcnRlZENvbmRpdGlvbnM7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9Db252ZXJ0ZWRDb25kaXRpb25zO1xuXHR9LFxuXHRnZXRDdXN0b21Db25kaXRpb25zOiBmdW5jdGlvbiAoUmFuZ2U6IGFueSwgb1ZhbGlkUHJvcGVydHk6IGFueSwgc1Byb3BlcnR5TmFtZTogYW55KSB7XG5cdFx0bGV0IHZhbHVlMSwgdmFsdWUyO1xuXHRcdGlmIChvVmFsaWRQcm9wZXJ0eS4kVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0dmFsdWUxID0gdGhpcy5fcGFyc2VEYXRlVGltZShnZXRUeXBlQ29tcGxpYW50VmFsdWUodGhpcy5fZm9ybWF0RGF0ZVRpbWUoUmFuZ2UuTG93KSwgb1ZhbGlkUHJvcGVydHkuJFR5cGUpKTtcblx0XHRcdHZhbHVlMiA9IFJhbmdlLkhpZ2ggPyB0aGlzLl9wYXJzZURhdGVUaW1lKGdldFR5cGVDb21wbGlhbnRWYWx1ZSh0aGlzLl9mb3JtYXREYXRlVGltZShSYW5nZS5IaWdoKSwgb1ZhbGlkUHJvcGVydHkuJFR5cGUpKSA6IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlMSA9IFJhbmdlLkxvdztcblx0XHRcdHZhbHVlMiA9IFJhbmdlLkhpZ2ggPyBSYW5nZS5IaWdoIDogbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdG9wZXJhdG9yOiBSYW5nZS5PcHRpb24gPyBnZXRPcGVyYXRvcihSYW5nZS5PcHRpb24uJEVudW1NZW1iZXIgfHwgUmFuZ2UuT3B0aW9uKSA6IG51bGwsXG5cdFx0XHR2YWx1ZTE6IHZhbHVlMSxcblx0XHRcdHZhbHVlMjogdmFsdWUyLFxuXHRcdFx0cGF0aDogc1Byb3BlcnR5TmFtZVxuXHRcdH07XG5cdH0sXG5cdF9wYXJzZURhdGVUaW1lOiBmdW5jdGlvbiAoc1ZhbHVlOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0RGF0ZVRpbWVUeXBlSW5zdGFuY2UoKS5wYXJzZVZhbHVlKHNWYWx1ZSwgXCJzdHJpbmdcIik7XG5cdH0sXG5cdF9mb3JtYXREYXRlVGltZTogZnVuY3Rpb24gKHNWYWx1ZTogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldERhdGVUaW1lVHlwZUluc3RhbmNlKCkuZm9ybWF0VmFsdWUoc1ZhbHVlLCBcInN0cmluZ1wiKTtcblx0fSxcblx0X2dldERhdGVUaW1lVHlwZUluc3RhbmNlOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlVGltZU9mZnNldCh7IHBhdHRlcm46IFwieXl5eS1NTS1kZFRISDptbTpzc1pcIiwgY2FsZW5kYXJUeXBlOiBcIkdyZWdvcmlhblwiIH0sIHsgVjQ6IHRydWUgfSk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZpc3VhbEZpbHRlclV0aWxzO1xuIl19
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
1
|
+
import type ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
2
2
|
import Log from "sap/base/Log";
|
|
3
|
-
import { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
3
|
+
import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
4
4
|
import { getOperator, getTypeCompliantValue } from "sap/fe/core/templating/FilterHelper";
|
|
5
|
-
import Title from "sap/m/Title";
|
|
5
|
+
import type Title from "sap/m/Title";
|
|
6
6
|
import NumberFormat from "sap/ui/core/format/NumberFormat";
|
|
7
|
-
import View from "sap/ui/core/mvc/View";
|
|
7
|
+
import type View from "sap/ui/core/mvc/View";
|
|
8
8
|
import Condition from "sap/ui/mdc/condition/Condition";
|
|
9
|
-
import ConditionValidated from "sap/ui/mdc/enum/ConditionValidated";
|
|
10
|
-
import Context from "sap/ui/model/Context";
|
|
9
|
+
import type ConditionValidated from "sap/ui/mdc/enum/ConditionValidated";
|
|
10
|
+
import type Context from "sap/ui/model/Context";
|
|
11
11
|
import DateTimeOffset from "sap/ui/model/odata/type/DateTimeOffset";
|
|
12
12
|
|
|
13
13
|
const VisualFilterUtils = {
|
|
14
14
|
/**
|
|
15
15
|
* Applies the median scale to the chart data.
|
|
16
16
|
*
|
|
17
|
-
* @param
|
|
18
|
-
* @param
|
|
19
|
-
* @param
|
|
20
|
-
* @param
|
|
17
|
+
* @param oInteractiveChart InteractiveChart in the VisualFilter control
|
|
18
|
+
* @param oView Instance of the view
|
|
19
|
+
* @param sVFId VisualFilter control ID
|
|
20
|
+
* @param sInfoPath Internal model context path to store info.
|
|
21
21
|
*/
|
|
22
22
|
applyMedianScaleToChartData: function (oInteractiveChart: any, oView: View, sVFId: string, sInfoPath: string) {
|
|
23
23
|
const oData = [];
|
|
@@ -32,13 +32,13 @@ const VisualFilterUtils = {
|
|
|
32
32
|
}
|
|
33
33
|
const scaleFactor = this._getMedianScaleFactor(oData, sMeasure);
|
|
34
34
|
if (scaleFactor && scaleFactor.iShortRefNumber && scaleFactor.scale) {
|
|
35
|
-
oInternalModelContext.setProperty(
|
|
36
|
-
oInternalModelContext.setProperty(
|
|
35
|
+
oInternalModelContext.setProperty(`scalefactor/${sInfoPath}`, scaleFactor.scale);
|
|
36
|
+
oInternalModelContext.setProperty(`scalefactorNumber/${sInfoPath}`, scaleFactor.iShortRefNumber);
|
|
37
37
|
} else {
|
|
38
|
-
oInternalModelContext.setProperty(
|
|
39
|
-
oInternalModelContext.setProperty(
|
|
40
|
-
const oScaleTitle = oView.byId(sVFId
|
|
41
|
-
const oMeasureDimensionTitle = oView.byId(sVFId
|
|
38
|
+
oInternalModelContext.setProperty(`scalefactor/${sInfoPath}`, "");
|
|
39
|
+
oInternalModelContext.setProperty(`scalefactorNumber/${sInfoPath}`, "");
|
|
40
|
+
const oScaleTitle = oView.byId(`${sVFId}::ScaleUoMTitle`) as Title;
|
|
41
|
+
const oMeasureDimensionTitle = oView.byId(`${sVFId}::MeasureDimensionTitle`) as Title;
|
|
42
42
|
const sText = oScaleTitle.getText();
|
|
43
43
|
if (sText === " | ") {
|
|
44
44
|
oScaleTitle.setVisible(false);
|
|
@@ -50,9 +50,9 @@ const VisualFilterUtils = {
|
|
|
50
50
|
/**
|
|
51
51
|
* Returns the median scale factor.
|
|
52
52
|
*
|
|
53
|
-
* @param
|
|
54
|
-
* @param
|
|
55
|
-
* @returns
|
|
53
|
+
* @param oData VisualFilter data
|
|
54
|
+
* @param sMeasureField Path of the measure
|
|
55
|
+
* @returns Object containing scale and iShortRefNumber
|
|
56
56
|
*/
|
|
57
57
|
_getMedianScaleFactor: function (oData: any[], sMeasureField: string) {
|
|
58
58
|
let i;
|
|
@@ -117,11 +117,11 @@ const VisualFilterUtils = {
|
|
|
117
117
|
/**
|
|
118
118
|
* Returns the formatted number according to the rules of VisualChartFilters.
|
|
119
119
|
*
|
|
120
|
-
* @param
|
|
121
|
-
* @param
|
|
122
|
-
* @param
|
|
123
|
-
* @param
|
|
124
|
-
* @returns
|
|
120
|
+
* @param value Value which needs to be formatted
|
|
121
|
+
* @param scaleFactor ScaleFactor to which the value needs to be scaled
|
|
122
|
+
* @param numberOfFractionalDigits NumberOfFractionalDigits digits in the decimals according to scale
|
|
123
|
+
* @param currency Currency code
|
|
124
|
+
* @returns The formatted number
|
|
125
125
|
*/
|
|
126
126
|
getFormattedNumber: function (value: string | number, scaleFactor?: number, numberOfFractionalDigits?: number, currency?: string) {
|
|
127
127
|
let fixedInteger;
|
|
@@ -153,10 +153,10 @@ const VisualFilterUtils = {
|
|
|
153
153
|
/**
|
|
154
154
|
* Applies the UOM to the title of the visual filter control.
|
|
155
155
|
*
|
|
156
|
-
* @param
|
|
157
|
-
* @param
|
|
158
|
-
* @param
|
|
159
|
-
* @param
|
|
156
|
+
* @param oInteractiveChart InteractiveChart in the VisualFilter control
|
|
157
|
+
* @param oContextData Data of the VisualFilter
|
|
158
|
+
* @param oView Instance of the view
|
|
159
|
+
* @param sInfoPath Internal model context path to store info.
|
|
160
160
|
*/
|
|
161
161
|
applyUOMToTitle: function (oInteractiveChart: any, oContextData: any, oView: View, sInfoPath: string) {
|
|
162
162
|
const vUOM = oInteractiveChart.data("uom");
|
|
@@ -171,19 +171,19 @@ const VisualFilterUtils = {
|
|
|
171
171
|
if (sUOM) {
|
|
172
172
|
const sUOMValue = sUOM.$Path ? oContextData[sUOM.$Path] : sUOM;
|
|
173
173
|
const oInternalModelContext = oView.getBindingContext("internal") as InternalModelContext;
|
|
174
|
-
oInternalModelContext.setProperty(
|
|
174
|
+
oInternalModelContext.setProperty(`uom/${sInfoPath}`, sUOMValue);
|
|
175
175
|
if (sCurrency) {
|
|
176
|
-
oInternalModelContext.setProperty(
|
|
176
|
+
oInternalModelContext.setProperty(`currency/${sInfoPath}`, sUOMValue);
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
},
|
|
180
180
|
/**
|
|
181
181
|
* Updates the scale factor in the title of the visual filter.
|
|
182
182
|
*
|
|
183
|
-
* @param
|
|
184
|
-
* @param
|
|
185
|
-
* @param
|
|
186
|
-
* @param
|
|
183
|
+
* @param oInteractiveChart InteractiveChart in the VisualFilter control
|
|
184
|
+
* @param oView Instance of the view
|
|
185
|
+
* @param sVFId VisualFilter control ID
|
|
186
|
+
* @param sInfoPath Internal model context path to store info.
|
|
187
187
|
*/
|
|
188
188
|
updateChartScaleFactorTitle: function (oInteractiveChart: any, oView: View, sVFId: string, sInfoPath: string) {
|
|
189
189
|
if (!oInteractiveChart.data("scalefactor")) {
|
|
@@ -195,16 +195,16 @@ const VisualFilterUtils = {
|
|
|
195
195
|
shortRefNumber: oInteractiveChart.data("scalefactor")
|
|
196
196
|
});
|
|
197
197
|
const oInternalModelContext = oView.getBindingContext("internal") as InternalModelContext;
|
|
198
|
-
oInternalModelContext.setProperty(
|
|
198
|
+
oInternalModelContext.setProperty(`scalefactor/${sInfoPath}`, (fixedInteger as any).getScale());
|
|
199
199
|
}
|
|
200
200
|
},
|
|
201
201
|
|
|
202
202
|
/**
|
|
203
203
|
*
|
|
204
|
-
* @param
|
|
205
|
-
* @param
|
|
206
|
-
* @param
|
|
207
|
-
* @param
|
|
204
|
+
* @param s18nMessageTitle Text of the error message title.
|
|
205
|
+
* @param s18nMessage Text of the error message description.
|
|
206
|
+
* @param sInfoPath Internal model context path to store info.
|
|
207
|
+
* @param oView Instance of the view.
|
|
208
208
|
*/
|
|
209
209
|
applyErrorMessageAndTitle: function (s18nMessageTitle: string, s18nMessage: string, sInfoPath: string, oView: View) {
|
|
210
210
|
const oInternalModelContext = oView.getBindingContext("internal") as InternalModelContext;
|
|
@@ -218,9 +218,9 @@ const VisualFilterUtils = {
|
|
|
218
218
|
/**
|
|
219
219
|
* Checks if multiple units are present.
|
|
220
220
|
*
|
|
221
|
-
* @param
|
|
222
|
-
* @param
|
|
223
|
-
* @returns
|
|
221
|
+
* @param oContexts Contexts of the VisualFilter
|
|
222
|
+
* @param sUnitfield The path of the unit field
|
|
223
|
+
* @returns Returns if multiple units are configured or not
|
|
224
224
|
*/
|
|
225
225
|
checkMulitUnit: function (oContexts: Context[], sUnitfield: string) {
|
|
226
226
|
const aData = [];
|
|
@@ -238,11 +238,11 @@ const VisualFilterUtils = {
|
|
|
238
238
|
/**
|
|
239
239
|
* Sets an error message if multiple UOM are present.
|
|
240
240
|
*
|
|
241
|
-
* @param
|
|
242
|
-
* @param
|
|
243
|
-
* @param
|
|
244
|
-
* @param
|
|
245
|
-
* @param
|
|
241
|
+
* @param oData Data of the VisualFilter control
|
|
242
|
+
* @param oInteractiveChart InteractiveChart in the VisualFilter control
|
|
243
|
+
* @param sInfoPath Internal model context path to store info.
|
|
244
|
+
* @param oResourceBundle The resource bundle
|
|
245
|
+
* @param oView Instance of the view
|
|
246
246
|
*/
|
|
247
247
|
setMultiUOMMessage: function (
|
|
248
248
|
oData: Context[],
|
|
@@ -262,12 +262,12 @@ const VisualFilterUtils = {
|
|
|
262
262
|
s18nMessageTitle = oResourceBundle.getText("M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE");
|
|
263
263
|
s18nMessage = oResourceBundle.getText("M_VISUAL_FILTERS_MULTIPLE_CURRENCY", sUnitfield);
|
|
264
264
|
this.applyErrorMessageAndTitle(s18nMessageTitle, s18nMessage, sInfoPath, oView);
|
|
265
|
-
Log.warning(
|
|
265
|
+
Log.warning(`Filter is set for multiple Currency for${sUnitfield}`);
|
|
266
266
|
} else if (sIsUnit) {
|
|
267
267
|
s18nMessageTitle = oResourceBundle.getText("M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE");
|
|
268
268
|
s18nMessage = oResourceBundle.getText("M_VISUAL_FILTERS_MULTIPLE_UNIT", sUnitfield);
|
|
269
269
|
this.applyErrorMessageAndTitle(s18nMessageTitle, s18nMessage, sInfoPath, oView);
|
|
270
|
-
Log.warning(
|
|
270
|
+
Log.warning(`Filter is set for multiple UOMs for${sUnitfield}`);
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
}
|
|
@@ -276,9 +276,9 @@ const VisualFilterUtils = {
|
|
|
276
276
|
/**
|
|
277
277
|
* Sets an error message if response data is empty.
|
|
278
278
|
*
|
|
279
|
-
* @param
|
|
280
|
-
* @param
|
|
281
|
-
* @param
|
|
279
|
+
* @param sInfoPath Internal model context path to store info.
|
|
280
|
+
* @param oResourceBundle The resource bundle
|
|
281
|
+
* @param oView Instance of the view
|
|
282
282
|
*/
|
|
283
283
|
setNoDataMessage: function (sInfoPath: string, oResourceBundle: ResourceBundle, oView: View) {
|
|
284
284
|
const s18nMessageTitle = oResourceBundle.getText("M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE");
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
xmlns:f="sap.ui.layout.form"
|
|
9
9
|
xmlns:l="sap.ui.layout"
|
|
10
10
|
template:require="{
|
|
11
|
-
|
|
11
|
+
MED: 'sap/fe/core/helpers/MassEditHelper'
|
|
12
12
|
}"
|
|
13
13
|
>
|
|
14
|
-
<f:Form>
|
|
14
|
+
<f:Form visible="{= MED.helpers.hasEditableFieldsBinding(${dataFieldModel>}, true) }">
|
|
15
15
|
<f:layout>
|
|
16
16
|
<f:ResponsiveGridLayout
|
|
17
17
|
labelSpanXL="4"
|
|
@@ -63,4 +63,10 @@
|
|
|
63
63
|
</f:FormContainer>
|
|
64
64
|
</f:formContainers>
|
|
65
65
|
</f:Form>
|
|
66
|
+
<Text
|
|
67
|
+
visible="{= MED.helpers.hasEditableFieldsBinding(${dataFieldModel>}, false) }"
|
|
68
|
+
text="{fieldsInfo>/noFields}"
|
|
69
|
+
class="sapUiSmallMargin"
|
|
70
|
+
/>
|
|
71
|
+
/>
|
|
66
72
|
</core:FragmentDefinition>
|