@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
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./ModelHelper"], function (Log, KeepAliveRefreshTypes, ModelHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var PATH_TO_STORE = KeepAliveRefreshTypes.PATH_TO_STORE;
|
|
9
8
|
var RefreshStrategyType = KeepAliveRefreshTypes.RefreshStrategyType;
|
|
9
|
+
var PATH_TO_STORE = KeepAliveRefreshTypes.PATH_TO_STORE;
|
|
10
10
|
|
|
11
11
|
// Private functions - start
|
|
12
12
|
var _fnSimplifyEntitySetPath = function (metaModel, entitySetPathToUse) {
|
|
13
13
|
var entitySetPath = ModelHelper.getEntitySetPath(entitySetPathToUse);
|
|
14
14
|
var entitySet = entitySetPath.indexOf("$NavigationPropertyBinding") > -1 && metaModel.getObject(entitySetPath);
|
|
15
|
-
return entitySet ? "/"
|
|
15
|
+
return entitySet ? "/".concat(entitySet) : entitySetPathToUse;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
var _fnIsApplicable = function (primaryPath, key, strategy) {
|
|
@@ -21,17 +21,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
21
21
|
/**
|
|
22
22
|
* Check if given path resides in the context path provided.
|
|
23
23
|
*
|
|
24
|
-
* @param
|
|
25
|
-
* @param
|
|
26
|
-
* @param
|
|
27
|
-
* @param
|
|
28
|
-
* @returns
|
|
24
|
+
* @param metaModel MetaModel to be used
|
|
25
|
+
* @param contextPath Context path to be used
|
|
26
|
+
* @param path Path to be used
|
|
27
|
+
* @param strategy Strategy, it could be 'self' | 'includingDependents'
|
|
28
|
+
* @returns Returns true if the context path is applicable.
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
var _isPathApplicableToContextPath = function (metaModel, contextPath, path, strategy) {
|
|
33
|
-
var contextPathToCheck = contextPath.startsWith("/") ? contextPath : "/"
|
|
34
|
-
pathToCheck = path.startsWith("/") ? path : "/"
|
|
33
|
+
var contextPathToCheck = contextPath.startsWith("/") ? contextPath : "/".concat(contextPath),
|
|
34
|
+
pathToCheck = path.startsWith("/") ? path : "/".concat(path);
|
|
35
35
|
|
|
36
36
|
if (!_fnIsApplicable(contextPathToCheck, pathToCheck, strategy)) {
|
|
37
37
|
contextPathToCheck = _fnSimplifyEntitySetPath(metaModel, contextPathToCheck);
|
|
@@ -49,9 +49,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
49
49
|
/**
|
|
50
50
|
* Get controls to refresh in a view.
|
|
51
51
|
*
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
54
|
-
* @returns
|
|
52
|
+
* @param view View of the controls
|
|
53
|
+
* @param controls Context path to be used
|
|
54
|
+
* @returns Returns controls that need to be refreshed.
|
|
55
55
|
*/
|
|
56
56
|
|
|
57
57
|
|
|
@@ -80,9 +80,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
80
80
|
/**
|
|
81
81
|
* Get refresh strategy for the control for a context path.
|
|
82
82
|
*
|
|
83
|
-
* @param
|
|
84
|
-
* @param
|
|
85
|
-
* @returns
|
|
83
|
+
* @param control Control from which refresh info is needed
|
|
84
|
+
* @param contextPath ContextPath for properities
|
|
85
|
+
* @returns Returns strategy for control refresh.
|
|
86
86
|
*/
|
|
87
87
|
|
|
88
88
|
|
|
@@ -111,28 +111,28 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
111
111
|
/**
|
|
112
112
|
* Get refresh info from view.
|
|
113
113
|
*
|
|
114
|
-
* @param
|
|
115
|
-
* @returns
|
|
114
|
+
* @param view View from which refresh info is needed
|
|
115
|
+
* @returns Returns strategy for view refresh.
|
|
116
116
|
*/
|
|
117
117
|
|
|
118
118
|
|
|
119
119
|
var getViewRefreshInfo = function (view) {
|
|
120
120
|
var viewData = view.getViewData(),
|
|
121
|
-
contextPath = viewData && ((viewData === null || viewData === void 0 ? void 0 : viewData.contextPath) || "/"
|
|
121
|
+
contextPath = viewData && ((viewData === null || viewData === void 0 ? void 0 : viewData.contextPath) || "/".concat(viewData === null || viewData === void 0 ? void 0 : viewData.entitySet));
|
|
122
122
|
return KeepAliveHelper.getControlRefreshStrategyForContextPath(view, contextPath);
|
|
123
123
|
};
|
|
124
124
|
/**
|
|
125
125
|
* Get refresh strategy for an intent.
|
|
126
126
|
*
|
|
127
|
-
* @param
|
|
128
|
-
* @param
|
|
129
|
-
* @param
|
|
130
|
-
* @returns
|
|
127
|
+
* @param refreshStrategies RefreshStrategies to consider
|
|
128
|
+
* @param semanticObject Outbound Semantic Object
|
|
129
|
+
* @param action Outbound Action
|
|
130
|
+
* @returns Returns refresh strategies to use for the intent.
|
|
131
131
|
*/
|
|
132
132
|
|
|
133
133
|
|
|
134
134
|
var getRefreshStrategyForIntent = function (refreshStrategies, semanticObject, action) {
|
|
135
|
-
var soAction = semanticObject && action && semanticObject
|
|
135
|
+
var soAction = semanticObject && action && "".concat(semanticObject, "-").concat(action);
|
|
136
136
|
var intents = refreshStrategies.intents;
|
|
137
137
|
var soActionIntentMatch = intents && soAction && intents[soAction];
|
|
138
138
|
var soIntentMatch = !soActionIntentMatch && intents && semanticObject && intents[semanticObject];
|
|
@@ -141,8 +141,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
141
141
|
/**
|
|
142
142
|
* Store control refresh strategy for hash in the internal model.
|
|
143
143
|
*
|
|
144
|
-
* @param
|
|
145
|
-
* @param
|
|
144
|
+
* @param control Control for the refresh strategy
|
|
145
|
+
* @param hash Shell hash object
|
|
146
146
|
*/
|
|
147
147
|
|
|
148
148
|
|
|
@@ -161,8 +161,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
161
161
|
/**
|
|
162
162
|
* Method to refresh and restore the view if neccessary.
|
|
163
163
|
*
|
|
164
|
-
* @param
|
|
165
|
-
* @returns
|
|
164
|
+
* @param view Control for the refresh strategy
|
|
165
|
+
* @returns A promise after view refresh and restore are triggered
|
|
166
166
|
*/
|
|
167
167
|
|
|
168
168
|
|
|
@@ -176,9 +176,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
176
176
|
if (viewState.refreshViewBindings) {
|
|
177
177
|
refreshBindings = viewState.refreshViewBindings();
|
|
178
178
|
refreshBindings.then(function () {
|
|
179
|
-
Log.info("FE V4: Refresh was triggered successfull: "
|
|
179
|
+
Log.info("FE V4: Refresh was triggered successfull: ".concat(view.getId()));
|
|
180
180
|
}).catch(function (err) {
|
|
181
|
-
Log.warning("FE V4: Refresh was unsuccessfull: "
|
|
181
|
+
Log.warning("FE V4: Refresh was unsuccessfull: ".concat(view.getId()), err);
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
|
|
@@ -186,7 +186,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
186
186
|
viewState.onRestore();
|
|
187
187
|
internalModelContext.setProperty("restoreStatus", "done");
|
|
188
188
|
}).catch(function (error) {
|
|
189
|
-
Log.warning("FE V4: Restore was unsuccessfull: "
|
|
189
|
+
Log.warning("FE V4: Restore was unsuccessfull: ".concat(view.getId()), error);
|
|
190
190
|
});
|
|
191
191
|
}
|
|
192
192
|
|
|
@@ -207,4 +207,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
|
|
|
207
207
|
};
|
|
208
208
|
return KeepAliveHelper;
|
|
209
209
|
}, false);
|
|
210
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktlZXBBbGl2ZUhlbHBlci50cyJdLCJuYW1lcyI6WyJfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoVG9Vc2UiLCJlbnRpdHlTZXRQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZW50aXR5U2V0IiwiaW5kZXhPZiIsImdldE9iamVjdCIsIl9mbklzQXBwbGljYWJsZSIsInByaW1hcnlQYXRoIiwia2V5Iiwic3RyYXRlZ3kiLCJSZWZyZXNoU3RyYXRlZ3lUeXBlIiwiSW5jbHVkaW5nRGVwZW5kZW50cyIsInN0YXJ0c1dpdGgiLCJfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsInBhdGgiLCJjb250ZXh0UGF0aFRvQ2hlY2siLCJwYXRoVG9DaGVjayIsImdldENvbnRyb2xzRm9yUmVmcmVzaCIsInZpZXciLCJjb250cm9scyIsImNvbnRyb2xzRm9yUmVmcmVzaCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW50ZXJuYWxNb2RlbCIsInJlZnJlc2hTdHJhdGVneSIsImdldFByb3BlcnR5IiwiUEFUSF9UT19TVE9SRSIsImZvckVhY2giLCJjb250cm9sIiwiZGF0YSIsInB1c2giLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJzdHJhdGVneVRvQ2hlY2siLCJnZXRWaWV3UmVmcmVzaEluZm8iLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50IiwicmVmcmVzaFN0cmF0ZWdpZXMiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInNvQWN0aW9uIiwiaW50ZW50cyIsInNvQWN0aW9uSW50ZW50TWF0Y2giLCJzb0ludGVudE1hdGNoIiwiZGVmYXVsdEJlaGF2aW9yIiwiX2ZlRGVmYXVsdCIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJoYXNoIiwic2V0UHJvcGVydHkiLCJyZXN0b3JlVmlldyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJlZnJlc2hCaW5kaW5ncyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVmcmVzaFZpZXdCaW5kaW5ncyIsInRoZW4iLCJMb2ciLCJpbmZvIiwiZ2V0SWQiLCJjYXRjaCIsImVyciIsIndhcm5pbmciLCJvblJlc3RvcmUiLCJlcnJvciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7OztBQWFBO0FBQ0EsTUFBTUEsd0JBQXdCLEdBQUcsVUFBU0MsU0FBVCxFQUFvQ0Msa0JBQXBDLEVBQXdFO0FBQ3hHLFFBQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyxnQkFBWixDQUE2Qkgsa0JBQTdCLENBQXRCO0FBQ0EsUUFBTUksU0FBUyxHQUFHSCxhQUFhLENBQUNJLE9BQWQsQ0FBc0IsNEJBQXRCLElBQXNELENBQUMsQ0FBdkQsSUFBNEROLFNBQVMsQ0FBQ08sU0FBVixDQUFvQkwsYUFBcEIsQ0FBOUU7QUFDQSxXQUFPRyxTQUFTLEdBQUcsTUFBTUEsU0FBVCxHQUFxQkosa0JBQXJDO0FBQ0EsR0FKRDs7QUFLQSxNQUFNTyxlQUFlLEdBQUcsVUFBU0MsV0FBVCxFQUE4QkMsR0FBOUIsRUFBMkNDLFFBQTNDLEVBQW1GO0FBQzFHLFdBQU9GLFdBQVcsS0FBS0MsR0FBaEIsSUFBd0JDLFFBQVEsS0FBS0MsbUJBQW1CLENBQUNDLG1CQUFqQyxJQUF3REosV0FBVyxDQUFDSyxVQUFaLENBQXVCSixHQUF2QixDQUF2RjtBQUNBLEdBRkQ7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLE1BQU1LLDhCQUE4QixHQUFHLFVBQ3RDZixTQURzQyxFQUV0Q2dCLFdBRnNDLEVBR3RDQyxJQUhzQyxFQUl0Q04sUUFKc0MsRUFLNUI7QUFDVixRQUFJ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QUFBQSx1Q0FBdUMsRUFBdkNBLHVDQUZ1QjtBQUd2QkUsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFIdUI7QUFJdkJJLElBQUFBLDJCQUEyQixFQUEzQkEsMkJBSnVCO0FBS3ZCVSxJQUFBQSxrQ0FBa0MsRUFBbENBLGtDQUx1QjtBQU12QkcsSUFBQUEsV0FBVyxFQUFYQTtBQU51QixHQUF4QjtTQVFlZCxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHtcblx0UmVmcmVzaFN0cmF0ZWd5VHlwZSxcblx0U09SZWZyZXNoU3RyYXRlZ3ksXG5cdFJlZnJlc2hTdHJhdGVnaWVzLFxuXHRQQVRIX1RPX1NUT1JFLFxuXHRTT0FjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCBNb2RlbEhlbHBlciwgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbi8vIFByaXZhdGUgZnVuY3Rpb25zIC0gc3RhcnRcbmNvbnN0IF9mblNpbXBsaWZ5RW50aXR5U2V0UGF0aCA9IGZ1bmN0aW9uKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGhUb1VzZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5U2V0UGF0aFRvVXNlKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gZW50aXR5U2V0UGF0aC5pbmRleE9mKFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIikgPiAtMSAmJiBtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGgpO1xuXHRyZXR1cm4gZW50aXR5U2V0ID8gXCIvXCIgKyBlbnRpdHlTZXQgOiBlbnRpdHlTZXRQYXRoVG9Vc2U7XG59O1xuY29uc3QgX2ZuSXNBcHBsaWNhYmxlID0gZnVuY3Rpb24ocHJpbWFyeVBhdGg6IHN0cmluZywga2V5OiBzdHJpbmcsIHN0cmF0ZWd5OiBSZWZyZXNoU3RyYXRlZ3lUeXBlKTogYm9vbGVhbiB7XG5cdHJldHVybiBwcmltYXJ5UGF0aCA9PT0ga2V5IHx8IChzdHJhdGVneSA9PT0gUmVmcmVzaFN0cmF0ZWd5VHlwZS5JbmNsdWRpbmdEZXBlbmRlbnRzICYmIHByaW1hcnlQYXRoLnN0YXJ0c1dpdGgoa2V5KSk7XG59O1xuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiBwYXRoIHJlc2lkZXMgaW4gdGhlIGNvbnRleHQgcGF0aCBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge09EYXRhTWV0YU1vZGVsfSBtZXRhTW9kZWwgTWV0YU1vZGVsIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aCBDb250ZXh0IHBhdGggdG8gYmUgdXNlZFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCB0byBiZSB1c2VkXG4gKiBAcGFyYW0ge1JlZnJlc2hTdHJhdGVneVR5cGV9IHN0cmF0ZWd5IFN0cmF0ZWd5LCBpdCBjb3VsZCBiZSAnc2VsZicgfCAnaW5jbHVkaW5nRGVwZW5kZW50cydcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgcGF0aCBpcyBhcHBsaWNhYmxlLlxuICovXG5jb25zdCBfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGggPSBmdW5jdGlvbihcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0cGF0aDogc3RyaW5nLFxuXHRzdHJhdGVneTogUmVmcmVzaFN0cmF0ZWd5VHlwZVxuKTogYm9vbGVhbiB7XG5cdGxldCBjb250ZXh0UGF0aFRvQ2hlY2sgPSBjb250ZXh0UGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IGNvbnRleHRQYXRoIDogXCIvXCIgKyBjb250ZXh0UGF0aCxcblx0XHRwYXRoVG9DaGVjayA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoO1xuXHRpZiAoIV9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSkpIHtcblx0XHRjb250ZXh0UGF0aFRvQ2hlY2sgPSBfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgobWV0YU1vZGVsLCBjb250ZXh0UGF0aFRvQ2hlY2spO1xuXHRcdGlmICghX2ZuSXNBcHBsaWNhYmxlKGNvbnRleHRQYXRoVG9DaGVjaywgcGF0aFRvQ2hlY2ssIHN0cmF0ZWd5KSkge1xuXHRcdFx0cGF0aFRvQ2hlY2sgPSBfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgobWV0YU1vZGVsLCBwYXRoVG9DaGVjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gX2ZuSXNBcHBsaWNhYmxlKGNvbnRleHRQYXRoVG9DaGVjaywgcGF0aFRvQ2hlY2ssIHN0cmF0ZWd5KTtcbn07XG4vLyBQcml2YXRlIGZ1bmN0aW9ucyAtIGVuZFxuLyoqXG4gKiBHZXQgY29udHJvbHMgdG8gcmVmcmVzaCBpbiBhIHZpZXcuXG4gKlxuICogQHBhcmFtIHtWaWV3fSB2aWV3IFZpZXcgb2YgdGhlIGNvbnRyb2xzXG4gKiBAcGFyYW0ge0NvbnRyb2xbXX0gY29udHJvbHMgQ29udGV4dCBwYXRoIHRvIGJlIHVzZWRcbiAqIEByZXR1cm5zIHtDb250cm9sW119IFJldHVybnMgY29udHJvbHMgdGhhdCBuZWVkIHRvIGJlIHJlZnJlc2hlZC5cbiAqL1xuY29uc3QgZ2V0Q29udHJvbHNGb3JSZWZyZXNoID0gZnVuY3Rpb24odmlldzogVmlldywgY29udHJvbHM6IENvbnRyb2xbXSk6IENvbnRyb2xbXSB7XG5cdGNvbnN0IGNvbnRyb2xzRm9yUmVmcmVzaDogQ29udHJvbFtdID0gW107XG5cdGNvbnN0IG1ldGFNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgcmVmcmVzaFN0cmF0ZWd5ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShQQVRIX1RPX1NUT1JFKSB8fCB7fTtcblx0aWYgKGNvbnRyb2xzKSB7XG5cdFx0Y29udHJvbHMuZm9yRWFjaChmdW5jdGlvbihjb250cm9sKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRyb2wuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gcmVmcmVzaFN0cmF0ZWd5KSB7XG5cdFx0XHRcdGNvbnN0IHN0cmF0ZWd5ID0gcmVmcmVzaFN0cmF0ZWd5W2tleV07XG5cdFx0XHRcdGlmIChjb250cm9sc0ZvclJlZnJlc2guaW5kZXhPZihjb250cm9sKSA9PT0gLTEgJiYgX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGgsIGtleSwgc3RyYXRlZ3kpKSB7XG5cdFx0XHRcdFx0Y29udHJvbHNGb3JSZWZyZXNoLnB1c2goY29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gY29udHJvbHNGb3JSZWZyZXNoO1xufTtcbi8qKlxuICogR2V0IHJlZnJlc2ggc3RyYXRlZ3kgZm9yIHRoZSBjb250cm9sIGZvciBhIGNvbnRleHQgcGF0aC5cbiAqXG4gKiBAcGFyYW0ge0NvbnRyb2x9IGNvbnRyb2wgQ29udHJvbCBmcm9tIHdoaWNoIHJlZnJlc2ggaW5mbyBpcyBuZWVkZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aCBDb250ZXh0UGF0aCBmb3IgcHJvcGVyaXRpZXNcbiAqIEByZXR1cm5zIHtSZWZyZXNoU3RyYXRlZ3lUeXBlfSBSZXR1cm5zIHN0cmF0ZWd5IGZvciBjb250cm9sIHJlZnJlc2guXG4gKi9cbmNvbnN0IGdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCA9IGZ1bmN0aW9uKGNvbnRyb2w6IENvbnRyb2wsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBSZWZyZXNoU3RyYXRlZ3lUeXBlIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gY29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRjb25zdCBpbnRlcm5hbE1vZGVsID0gY29udHJvbC5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRjb25zdCByZWZyZXNoU3RyYXRlZ3kgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFBBVEhfVE9fU1RPUkUpIHx8IHt9O1xuXHRsZXQgc3RyYXRlZ3k7XG5cdGlmIChjb250ZXh0UGF0aCkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHJlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0Y29uc3Qgc3RyYXRlZ3lUb0NoZWNrID0gcmVmcmVzaFN0cmF0ZWd5W2tleV07XG5cdFx0XHRpZiAoX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGgsIGtleSwgc3RyYXRlZ3lUb0NoZWNrKSkge1xuXHRcdFx0XHRzdHJhdGVneSA9IHN0cmF0ZWd5VG9DaGVjaztcblx0XHRcdFx0aWYgKHN0cmF0ZWd5ID09PSBcImluY2x1ZGluZ0RlcGVuZGVudHNcIikge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzdHJhdGVneTtcbn07XG4vKipcbiAqIEdldCByZWZyZXNoIGluZm8gZnJvbSB2aWV3LlxuICpcbiAqIEBwYXJhbSB7Vmlld30gdmlldyBWaWV3IGZyb20gd2hpY2ggcmVmcmVzaCBpbmZvIGlzIG5lZWRlZFxuICogQHJldHVybnMge1JlZnJlc2hTdHJhdGVneVR5cGUgfCB1bmRlZmluZWR9IFJldHVybnMgc3RyYXRlZ3kgZm9yIHZpZXcgcmVmcmVzaC5cbiAqL1xuY29uc3QgZ2V0Vmlld1JlZnJlc2hJbmZvID0gZnVuY3Rpb24odmlldzogVmlldyk6IFJlZnJlc2hTdHJhdGVneVR5cGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRjb250ZXh0UGF0aCA9IHZpZXdEYXRhICYmICh2aWV3RGF0YT8uY29udGV4dFBhdGggfHwgXCIvXCIgKyB2aWV3RGF0YT8uZW50aXR5U2V0KTtcblx0cmV0dXJuIEtlZXBBbGl2ZUhlbHBlci5nZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgodmlldywgY29udGV4dFBhdGgpO1xufTtcblxuLyoqXG4gKiBHZXQgcmVmcmVzaCBzdHJhdGVneSBmb3IgYW4gaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7UmVmcmVzaFN0cmF0ZWdpZXN9IHJlZnJlc2hTdHJhdGVnaWVzIFJlZnJlc2hTdHJhdGVnaWVzIHRvIGNvbnNpZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VtYW50aWNPYmplY3QgT3V0Ym91bmQgU2VtYW50aWMgT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIE91dGJvdW5kIEFjdGlvblxuICogQHJldHVybnMge1NPUmVmcmVzaFN0cmF0ZWd5IHwgdW5kZWZpbmVkfSBSZXR1cm5zIHJlZnJlc2ggc3RyYXRlZ2llcyB0byB1c2UgZm9yIHRoZSBpbnRlbnQuXG4gKi9cbmNvbnN0IGdldFJlZnJlc2hTdHJhdGVneUZvckludGVudCA9IGZ1bmN0aW9uKFxuXHRyZWZyZXNoU3RyYXRlZ2llczogUmVmcmVzaFN0cmF0ZWdpZXMsXG5cdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nLFxuXHRhY3Rpb24/OiBzdHJpbmdcbik6IFNPUmVmcmVzaFN0cmF0ZWd5IHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc29BY3Rpb24gPSBzZW1hbnRpY09iamVjdCAmJiBhY3Rpb24gJiYgc2VtYW50aWNPYmplY3QgKyBcIi1cIiArIGFjdGlvbjtcblx0Y29uc3QgaW50ZW50cyA9IHJlZnJlc2hTdHJhdGVnaWVzLmludGVudHM7XG5cdGNvbnN0IHNvQWN0aW9uSW50ZW50TWF0Y2ggPSBpbnRlbnRzICYmIHNvQWN0aW9uICYmIGludGVudHNbc29BY3Rpb25dO1xuXHRjb25zdCBzb0ludGVudE1hdGNoID0gIXNvQWN0aW9uSW50ZW50TWF0Y2ggJiYgaW50ZW50cyAmJiBzZW1hbnRpY09iamVjdCAmJiBpbnRlbnRzW3NlbWFudGljT2JqZWN0XTtcblxuXHRyZXR1cm4gc29BY3Rpb25JbnRlbnRNYXRjaCB8fCBzb0ludGVudE1hdGNoIHx8IHJlZnJlc2hTdHJhdGVnaWVzPy5kZWZhdWx0QmVoYXZpb3IgfHwgcmVmcmVzaFN0cmF0ZWdpZXM/Ll9mZURlZmF1bHQ7XG59O1xuLyoqXG4gKiBTdG9yZSBjb250cm9sIHJlZnJlc2ggc3RyYXRlZ3kgZm9yIGhhc2ggaW4gdGhlIGludGVybmFsIG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7Q29udHJvbH0gY29udHJvbCBDb250cm9sIGZvciB0aGUgcmVmcmVzaCBzdHJhdGVneVxuICogQHBhcmFtIHtTT0FjdGlvbn0gaGFzaCBTaGVsbCBoYXNoIG9iamVjdFxuICovXG5jb25zdCBzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoID0gZnVuY3Rpb24oY29udHJvbDogQ29udHJvbCwgaGFzaDogU09BY3Rpb24pOiB2b2lkIHtcblx0aWYgKGNvbnRyb2wgJiYgY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpICYmIGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSkge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpO1xuXHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVnaWVzOiBSZWZyZXNoU3RyYXRlZ2llcyA9IHZpZXdEYXRhLmdldFByb3BlcnR5KFBBVEhfVE9fU1RPUkUpO1xuXHRcdGlmIChyZWZyZXNoU3RyYXRlZ2llcykge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVneTogU09SZWZyZXNoU3RyYXRlZ3kgfCB1bmRlZmluZWQgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50KFxuXHRcdFx0XHRyZWZyZXNoU3RyYXRlZ2llcyxcblx0XHRcdFx0aGFzaD8uc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdGhhc2g/LmFjdGlvblxuXHRcdFx0KTtcblx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoUEFUSF9UT19TVE9SRSwgcmVmcmVzaFN0cmF0ZWd5KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIHJlZnJlc2ggYW5kIHJlc3RvcmUgdGhlIHZpZXcgaWYgbmVjY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdmlldyBDb250cm9sIGZvciB0aGUgcmVmcmVzaCBzdHJhdGVneVxuICogQHJldHVybnMge29iamVjdH0gQSBwcm9taXNlIGFmdGVyIHZpZXcgcmVmcmVzaCBhbmQgcmVzdG9yZSBhcmUgdHJpZ2dlcmVkXG4gKi9cbmNvbnN0IHJlc3RvcmVWaWV3ID0gZnVuY3Rpb24odmlldzogVmlldyk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cdGNvbnN0IHZpZXdTdGF0ZSA9IChjb250cm9sbGVyIGFzIGFueSk/LnZpZXdTdGF0ZTtcblx0bGV0IHJlZnJlc2hCaW5kaW5ncyA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQgJiYgaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJyZXN0b3JlU3RhdHVzXCIpID09PSBcInBlbmRpbmdcIikge1xuXHRcdGlmICh2aWV3U3RhdGUucmVmcmVzaFZpZXdCaW5kaW5ncykge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmdzID0gdmlld1N0YXRlLnJlZnJlc2hWaWV3QmluZGluZ3MoKTtcblx0XHRcdHJlZnJlc2hCaW5kaW5nc1xuXHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRMb2cuaW5mbyhcIkZFIFY0OiBSZWZyZXNoIHdhcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGw6IFwiICsgdmlldy5nZXRJZCgpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRkUgVjQ6IFJlZnJlc2ggd2FzIHVuc3VjY2Vzc2Z1bGw6IFwiICsgdmlldy5nZXRJZCgpLCBlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmVmcmVzaEJpbmRpbmdzID0gcmVmcmVzaEJpbmRpbmdzXG5cdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0dmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlc3RvcmVTdGF0dXNcIiwgXCJkb25lXCIpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkZFIFY0OiBSZXN0b3JlIHdhcyB1bnN1Y2Nlc3NmdWxsOiBcIiArIHZpZXcuZ2V0SWQoKSwgZXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblx0cmV0dXJuIHJlZnJlc2hCaW5kaW5ncztcbn07XG5cbi8qKlxuICogaGVscGVyIGNsYXNzIGZvciBLZWVwQWxpdmUgZmVhdHVyZSBpbiBzYXAuZmUuXG4gKi9cbmNvbnN0IEtlZXBBbGl2ZUhlbHBlciA9IHtcblx0Z2V0Q29udHJvbHNGb3JSZWZyZXNoLFxuXHRnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgsXG5cdGdldFZpZXdSZWZyZXNoSW5mbyxcblx0Z2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50LFxuXHRzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoLFxuXHRyZXN0b3JlVmlld1xufTtcbmV4cG9ydCBkZWZhdWx0IEtlZXBBbGl2ZUhlbHBlcjtcbiJdfQ==
|
|
210
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktlZXBBbGl2ZUhlbHBlci50cyJdLCJuYW1lcyI6WyJfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoVG9Vc2UiLCJlbnRpdHlTZXRQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZW50aXR5U2V0IiwiaW5kZXhPZiIsImdldE9iamVjdCIsIl9mbklzQXBwbGljYWJsZSIsInByaW1hcnlQYXRoIiwia2V5Iiwic3RyYXRlZ3kiLCJSZWZyZXNoU3RyYXRlZ3lUeXBlIiwiSW5jbHVkaW5nRGVwZW5kZW50cyIsInN0YXJ0c1dpdGgiLCJfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsInBhdGgiLCJjb250ZXh0UGF0aFRvQ2hlY2siLCJwYXRoVG9DaGVjayIsImdldENvbnRyb2xzRm9yUmVmcmVzaCIsInZpZXciLCJjb250cm9scyIsImNvbnRyb2xzRm9yUmVmcmVzaCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW50ZXJuYWxNb2RlbCIsInJlZnJlc2hTdHJhdGVneSIsImdldFByb3BlcnR5IiwiUEFUSF9UT19TVE9SRSIsImZvckVhY2giLCJjb250cm9sIiwiZGF0YSIsInB1c2giLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJzdHJhdGVneVRvQ2hlY2siLCJnZXRWaWV3UmVmcmVzaEluZm8iLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50IiwicmVmcmVzaFN0cmF0ZWdpZXMiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInNvQWN0aW9uIiwiaW50ZW50cyIsInNvQWN0aW9uSW50ZW50TWF0Y2giLCJzb0ludGVudE1hdGNoIiwiZGVmYXVsdEJlaGF2aW9yIiwiX2ZlRGVmYXVsdCIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJoYXNoIiwic2V0UHJvcGVydHkiLCJyZXN0b3JlVmlldyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJlZnJlc2hCaW5kaW5ncyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVmcmVzaFZpZXdCaW5kaW5ncyIsInRoZW4iLCJMb2ciLCJpbmZvIiwiZ2V0SWQiLCJjYXRjaCIsImVyciIsIndhcm5pbmciLCJvblJlc3RvcmUiLCJlcnJvciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7OztBQVNBO0FBQ0EsTUFBTUEsd0JBQXdCLEdBQUcsVUFBVUMsU0FBVixFQUFxQ0Msa0JBQXJDLEVBQXlFO0FBQ3pHLFFBQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyxnQkFBWixDQUE2Qkgsa0JBQTdCLENBQXRCO0FBQ0EsUUFBTUksU0FBUyxHQUFHSCxhQUFhLENBQUNJLE9BQWQsQ0FBc0IsNEJBQXRCLElBQXNELENBQUMsQ0FBdkQsSUFBNEROLFNBQVMsQ0FBQ08sU0FBVixDQUFvQkwsYUFBcEIsQ0FBOUU7QUFDQSxXQUFPRyxTQUFTLGNBQU9BLFNBQVAsSUFBcUJKLGtCQUFyQztBQUNBLEdBSkQ7O0FBS0EsTUFBTU8sZUFBZSxHQUFHLFVBQVVDLFdBQVYsRUFBK0JDLEdBQS9CLEVBQTRDQyxRQUE1QyxFQUFvRjtBQUMzRyxXQUFPRixXQUFXLEtBQUtDLEdBQWhCLElBQXdCQyxRQUFRLEtBQUtDLG1CQUFtQixDQUFDQyxtQkFBakMsSUFBd0RKLFdBQVcsQ0FBQ0ssVUFBWixDQUF1QkosR0FBdkIsQ0FBdkY7QUFDQSxHQUZEO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxNQUFNSyw4QkFBOEIsR0FBRyxVQUN0Q2YsU0FEc0MsRUFFdENnQixXQUZzQyxFQUd0Q0MsSUFIc0MsRUFJdENOLFFBSnNDLEVBSzVCO0FBQ1YsUUFBSU8sa0JB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QjtBQUd2QkUsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFIdUI7QUFJdkJJLElBQUFBLDJCQUEyQixFQUEzQkEsMkJBSnVCO0FBS3ZCVSxJQUFBQSxrQ0FBa0MsRUFBbENBLGtDQUx1QjtBQU12QkcsSUFBQUEsV0FBVyxFQUFYQTtBQU51QixHQUF4QjtTQVFlZCxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFJlZnJlc2hTdHJhdGVnaWVzLCBTT0FjdGlvbiwgU09SZWZyZXNoU3RyYXRlZ3kgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCB7IFBBVEhfVE9fU1RPUkUsIFJlZnJlc2hTdHJhdGVneVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vTW9kZWxIZWxwZXJcIjtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBzdGFydFxuY29uc3QgX2ZuU2ltcGxpZnlFbnRpdHlTZXRQYXRoID0gZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGhUb1VzZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5U2V0UGF0aFRvVXNlKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gZW50aXR5U2V0UGF0aC5pbmRleE9mKFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIikgPiAtMSAmJiBtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGgpO1xuXHRyZXR1cm4gZW50aXR5U2V0ID8gYC8ke2VudGl0eVNldH1gIDogZW50aXR5U2V0UGF0aFRvVXNlO1xufTtcbmNvbnN0IF9mbklzQXBwbGljYWJsZSA9IGZ1bmN0aW9uIChwcmltYXJ5UGF0aDogc3RyaW5nLCBrZXk6IHN0cmluZywgc3RyYXRlZ3k6IFJlZnJlc2hTdHJhdGVneVR5cGUpOiBib29sZWFuIHtcblx0cmV0dXJuIHByaW1hcnlQYXRoID09PSBrZXkgfHwgKHN0cmF0ZWd5ID09PSBSZWZyZXNoU3RyYXRlZ3lUeXBlLkluY2x1ZGluZ0RlcGVuZGVudHMgJiYgcHJpbWFyeVBhdGguc3RhcnRzV2l0aChrZXkpKTtcbn07XG4vKipcbiAqIENoZWNrIGlmIGdpdmVuIHBhdGggcmVzaWRlcyBpbiB0aGUgY29udGV4dCBwYXRoIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSBtZXRhTW9kZWwgTWV0YU1vZGVsIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSBjb250ZXh0UGF0aCBDb250ZXh0IHBhdGggdG8gYmUgdXNlZFxuICogQHBhcmFtIHBhdGggUGF0aCB0byBiZSB1c2VkXG4gKiBAcGFyYW0gc3RyYXRlZ3kgU3RyYXRlZ3ksIGl0IGNvdWxkIGJlICdzZWxmJyB8ICdpbmNsdWRpbmdEZXBlbmRlbnRzJ1xuICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZXh0IHBhdGggaXMgYXBwbGljYWJsZS5cbiAqL1xuY29uc3QgX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoID0gZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjb250ZXh0UGF0aDogc3RyaW5nLFxuXHRwYXRoOiBzdHJpbmcsXG5cdHN0cmF0ZWd5OiBSZWZyZXNoU3RyYXRlZ3lUeXBlXG4pOiBib29sZWFuIHtcblx0bGV0IGNvbnRleHRQYXRoVG9DaGVjayA9IGNvbnRleHRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gY29udGV4dFBhdGggOiBgLyR7Y29udGV4dFBhdGh9YCxcblx0XHRwYXRoVG9DaGVjayA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogYC8ke3BhdGh9YDtcblx0aWYgKCFfZm5Jc0FwcGxpY2FibGUoY29udGV4dFBhdGhUb0NoZWNrLCBwYXRoVG9DaGVjaywgc3RyYXRlZ3kpKSB7XG5cdFx0Y29udGV4dFBhdGhUb0NoZWNrID0gX2ZuU2ltcGxpZnlFbnRpdHlTZXRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGhUb0NoZWNrKTtcblx0XHRpZiAoIV9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSkpIHtcblx0XHRcdHBhdGhUb0NoZWNrID0gX2ZuU2ltcGxpZnlFbnRpdHlTZXRQYXRoKG1ldGFNb2RlbCwgcGF0aFRvQ2hlY2spO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIF9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSk7XG59O1xuLy8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBlbmRcbi8qKlxuICogR2V0IGNvbnRyb2xzIHRvIHJlZnJlc2ggaW4gYSB2aWV3LlxuICpcbiAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIGNvbnRyb2xzXG4gKiBAcGFyYW0gY29udHJvbHMgQ29udGV4dCBwYXRoIHRvIGJlIHVzZWRcbiAqIEByZXR1cm5zIFJldHVybnMgY29udHJvbHMgdGhhdCBuZWVkIHRvIGJlIHJlZnJlc2hlZC5cbiAqL1xuY29uc3QgZ2V0Q29udHJvbHNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHZpZXc6IFZpZXcsIGNvbnRyb2xzOiBDb250cm9sW10pOiBDb250cm9sW10ge1xuXHRjb25zdCBjb250cm9sc0ZvclJlZnJlc2g6IENvbnRyb2xbXSA9IFtdO1xuXHRjb25zdCBtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IHJlZnJlc2hTdHJhdGVneSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoUEFUSF9UT19TVE9SRSkgfHwge307XG5cdGlmIChjb250cm9scykge1xuXHRcdGNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2wpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udHJvbC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiByZWZyZXNoU3RyYXRlZ3kpIHtcblx0XHRcdFx0Y29uc3Qgc3RyYXRlZ3kgPSByZWZyZXNoU3RyYXRlZ3lba2V5XTtcblx0XHRcdFx0aWYgKGNvbnRyb2xzRm9yUmVmcmVzaC5pbmRleE9mKGNvbnRyb2wpID09PSAtMSAmJiBfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGgobWV0YU1vZGVsLCBjb250ZXh0UGF0aCwga2V5LCBzdHJhdGVneSkpIHtcblx0XHRcdFx0XHRjb250cm9sc0ZvclJlZnJlc2gucHVzaChjb250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBjb250cm9sc0ZvclJlZnJlc2g7XG59O1xuLyoqXG4gKiBHZXQgcmVmcmVzaCBzdHJhdGVneSBmb3IgdGhlIGNvbnRyb2wgZm9yIGEgY29udGV4dCBwYXRoLlxuICpcbiAqIEBwYXJhbSBjb250cm9sIENvbnRyb2wgZnJvbSB3aGljaCByZWZyZXNoIGluZm8gaXMgbmVlZGVkXG4gKiBAcGFyYW0gY29udGV4dFBhdGggQ29udGV4dFBhdGggZm9yIHByb3Blcml0aWVzXG4gKiBAcmV0dXJucyBSZXR1cm5zIHN0cmF0ZWd5IGZvciBjb250cm9sIHJlZnJlc2guXG4gKi9cbmNvbnN0IGdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCA9IGZ1bmN0aW9uIChjb250cm9sOiBDb250cm9sLCBjb250ZXh0UGF0aDogc3RyaW5nKTogUmVmcmVzaFN0cmF0ZWd5VHlwZSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgcmVmcmVzaFN0cmF0ZWd5ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShQQVRIX1RPX1NUT1JFKSB8fCB7fTtcblx0bGV0IHN0cmF0ZWd5O1xuXHRpZiAoY29udGV4dFBhdGgpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiByZWZyZXNoU3RyYXRlZ3kpIHtcblx0XHRcdGNvbnN0IHN0cmF0ZWd5VG9DaGVjayA9IHJlZnJlc2hTdHJhdGVneVtrZXldO1xuXHRcdFx0aWYgKF9pc1BhdGhBcHBsaWNhYmxlVG9Db250ZXh0UGF0aChtZXRhTW9kZWwsIGNvbnRleHRQYXRoLCBrZXksIHN0cmF0ZWd5VG9DaGVjaykpIHtcblx0XHRcdFx0c3RyYXRlZ3kgPSBzdHJhdGVneVRvQ2hlY2s7XG5cdFx0XHRcdGlmIChzdHJhdGVneSA9PT0gXCJpbmNsdWRpbmdEZXBlbmRlbnRzXCIpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RyYXRlZ3k7XG59O1xuLyoqXG4gKiBHZXQgcmVmcmVzaCBpbmZvIGZyb20gdmlldy5cbiAqXG4gKiBAcGFyYW0gdmlldyBWaWV3IGZyb20gd2hpY2ggcmVmcmVzaCBpbmZvIGlzIG5lZWRlZFxuICogQHJldHVybnMgUmV0dXJucyBzdHJhdGVneSBmb3IgdmlldyByZWZyZXNoLlxuICovXG5jb25zdCBnZXRWaWV3UmVmcmVzaEluZm8gPSBmdW5jdGlvbiAodmlldzogVmlldyk6IFJlZnJlc2hTdHJhdGVneVR5cGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRjb250ZXh0UGF0aCA9IHZpZXdEYXRhICYmICh2aWV3RGF0YT8uY29udGV4dFBhdGggfHwgYC8ke3ZpZXdEYXRhPy5lbnRpdHlTZXR9YCk7XG5cdHJldHVybiBLZWVwQWxpdmVIZWxwZXIuZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoKHZpZXcsIGNvbnRleHRQYXRoKTtcbn07XG5cbi8qKlxuICogR2V0IHJlZnJlc2ggc3RyYXRlZ3kgZm9yIGFuIGludGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmcmVzaFN0cmF0ZWdpZXMgUmVmcmVzaFN0cmF0ZWdpZXMgdG8gY29uc2lkZXJcbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBPdXRib3VuZCBTZW1hbnRpYyBPYmplY3RcbiAqIEBwYXJhbSBhY3Rpb24gT3V0Ym91bmQgQWN0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIHJlZnJlc2ggc3RyYXRlZ2llcyB0byB1c2UgZm9yIHRoZSBpbnRlbnQuXG4gKi9cbmNvbnN0IGdldFJlZnJlc2hTdHJhdGVneUZvckludGVudCA9IGZ1bmN0aW9uIChcblx0cmVmcmVzaFN0cmF0ZWdpZXM6IFJlZnJlc2hTdHJhdGVnaWVzLFxuXHRzZW1hbnRpY09iamVjdD86IHN0cmluZyxcblx0YWN0aW9uPzogc3RyaW5nXG4pOiBTT1JlZnJlc2hTdHJhdGVneSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNvQWN0aW9uID0gc2VtYW50aWNPYmplY3QgJiYgYWN0aW9uICYmIGAke3NlbWFudGljT2JqZWN0fS0ke2FjdGlvbn1gO1xuXHRjb25zdCBpbnRlbnRzID0gcmVmcmVzaFN0cmF0ZWdpZXMuaW50ZW50cztcblx0Y29uc3Qgc29BY3Rpb25JbnRlbnRNYXRjaCA9IGludGVudHMgJiYgc29BY3Rpb24gJiYgaW50ZW50c1tzb0FjdGlvbl07XG5cdGNvbnN0IHNvSW50ZW50TWF0Y2ggPSAhc29BY3Rpb25JbnRlbnRNYXRjaCAmJiBpbnRlbnRzICYmIHNlbWFudGljT2JqZWN0ICYmIGludGVudHNbc2VtYW50aWNPYmplY3RdO1xuXG5cdHJldHVybiBzb0FjdGlvbkludGVudE1hdGNoIHx8IHNvSW50ZW50TWF0Y2ggfHwgcmVmcmVzaFN0cmF0ZWdpZXM/LmRlZmF1bHRCZWhhdmlvciB8fCByZWZyZXNoU3RyYXRlZ2llcz8uX2ZlRGVmYXVsdDtcbn07XG4vKipcbiAqIFN0b3JlIGNvbnRyb2wgcmVmcmVzaCBzdHJhdGVneSBmb3IgaGFzaCBpbiB0aGUgaW50ZXJuYWwgbW9kZWwuXG4gKlxuICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbCBmb3IgdGhlIHJlZnJlc2ggc3RyYXRlZ3lcbiAqIEBwYXJhbSBoYXNoIFNoZWxsIGhhc2ggb2JqZWN0XG4gKi9cbmNvbnN0IHN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2ggPSBmdW5jdGlvbiAoY29udHJvbDogQ29udHJvbCwgaGFzaDogU09BY3Rpb24pOiB2b2lkIHtcblx0aWYgKGNvbnRyb2wgJiYgY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpICYmIGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSkge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpO1xuXHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVnaWVzOiBSZWZyZXNoU3RyYXRlZ2llcyA9IHZpZXdEYXRhLmdldFByb3BlcnR5KFBBVEhfVE9fU1RPUkUpO1xuXHRcdGlmIChyZWZyZXNoU3RyYXRlZ2llcykge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVneTogU09SZWZyZXNoU3RyYXRlZ3kgfCB1bmRlZmluZWQgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50KFxuXHRcdFx0XHRyZWZyZXNoU3RyYXRlZ2llcyxcblx0XHRcdFx0aGFzaD8uc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdGhhc2g/LmFjdGlvblxuXHRcdFx0KTtcblx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoUEFUSF9UT19TVE9SRSwgcmVmcmVzaFN0cmF0ZWd5KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIHJlZnJlc2ggYW5kIHJlc3RvcmUgdGhlIHZpZXcgaWYgbmVjY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gdmlldyBDb250cm9sIGZvciB0aGUgcmVmcmVzaCBzdHJhdGVneVxuICogQHJldHVybnMgQSBwcm9taXNlIGFmdGVyIHZpZXcgcmVmcmVzaCBhbmQgcmVzdG9yZSBhcmUgdHJpZ2dlcmVkXG4gKi9cbmNvbnN0IHJlc3RvcmVWaWV3ID0gZnVuY3Rpb24gKHZpZXc6IFZpZXcpOiBQcm9taXNlPGFueT4ge1xuXHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRjb25zdCB2aWV3U3RhdGUgPSAoY29udHJvbGxlciBhcyBhbnkpPy52aWV3U3RhdGU7XG5cdGxldCByZWZyZXNoQmluZGluZ3MgPSBQcm9taXNlLnJlc29sdmUoKTtcblx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0ICYmIGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwicmVzdG9yZVN0YXR1c1wiKSA9PT0gXCJwZW5kaW5nXCIpIHtcblx0XHRpZiAodmlld1N0YXRlLnJlZnJlc2hWaWV3QmluZGluZ3MpIHtcblx0XHRcdHJlZnJlc2hCaW5kaW5ncyA9IHZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKCk7XG5cdFx0XHRyZWZyZXNoQmluZGluZ3Ncblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdExvZy5pbmZvKGBGRSBWNDogUmVmcmVzaCB3YXMgdHJpZ2dlcmVkIHN1Y2Nlc3NmdWxsOiAke3ZpZXcuZ2V0SWQoKX1gKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhgRkUgVjQ6IFJlZnJlc2ggd2FzIHVuc3VjY2Vzc2Z1bGw6ICR7dmlldy5nZXRJZCgpfWAsIGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZWZyZXNoQmluZGluZ3MgPSByZWZyZXNoQmluZGluZ3Ncblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlc3RvcmVTdGF0dXNcIiwgXCJkb25lXCIpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoYEZFIFY0OiBSZXN0b3JlIHdhcyB1bnN1Y2Nlc3NmdWxsOiAke3ZpZXcuZ2V0SWQoKX1gLCBlcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRyZXR1cm4gcmVmcmVzaEJpbmRpbmdzO1xufTtcblxuLyoqXG4gKiBoZWxwZXIgY2xhc3MgZm9yIEtlZXBBbGl2ZSBmZWF0dXJlIGluIHNhcC5mZS5cbiAqL1xuY29uc3QgS2VlcEFsaXZlSGVscGVyID0ge1xuXHRnZXRDb250cm9sc0ZvclJlZnJlc2gsXG5cdGdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCxcblx0Z2V0Vmlld1JlZnJlc2hJbmZvLFxuXHRnZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQsXG5cdHN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gsXG5cdHJlc3RvcmVWaWV3XG59O1xuZXhwb3J0IGRlZmF1bHQgS2VlcEFsaXZlSGVscGVyO1xuIl19
|
|
@@ -1,44 +1,40 @@
|
|
|
1
|
-
import Control from "sap/ui/core/Control";
|
|
2
|
-
import View from "sap/ui/core/mvc/View";
|
|
3
1
|
import Log from "sap/base/Log";
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from "sap/fe/core/helpers/KeepAliveRefreshTypes";
|
|
14
|
-
import ModelHelper, { InternalModelContext } from "./ModelHelper";
|
|
2
|
+
import type { BaseManifestSettings } from "sap/fe/core/converters/ManifestSettings";
|
|
3
|
+
import type { RefreshStrategies, SOAction, SORefreshStrategy } from "sap/fe/core/helpers/KeepAliveRefreshTypes";
|
|
4
|
+
import { PATH_TO_STORE, RefreshStrategyType } from "sap/fe/core/helpers/KeepAliveRefreshTypes";
|
|
5
|
+
import type Control from "sap/ui/core/Control";
|
|
6
|
+
import type View from "sap/ui/core/mvc/View";
|
|
7
|
+
import type JSONModel from "sap/ui/model/json/JSONModel";
|
|
8
|
+
import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
9
|
+
import type { InternalModelContext } from "./ModelHelper";
|
|
10
|
+
import ModelHelper from "./ModelHelper";
|
|
15
11
|
|
|
16
12
|
// Private functions - start
|
|
17
|
-
const _fnSimplifyEntitySetPath = function(metaModel: ODataMetaModel, entitySetPathToUse: string): string {
|
|
13
|
+
const _fnSimplifyEntitySetPath = function (metaModel: ODataMetaModel, entitySetPathToUse: string): string {
|
|
18
14
|
const entitySetPath = ModelHelper.getEntitySetPath(entitySetPathToUse);
|
|
19
15
|
const entitySet = entitySetPath.indexOf("$NavigationPropertyBinding") > -1 && metaModel.getObject(entitySetPath);
|
|
20
|
-
return entitySet ?
|
|
16
|
+
return entitySet ? `/${entitySet}` : entitySetPathToUse;
|
|
21
17
|
};
|
|
22
|
-
const _fnIsApplicable = function(primaryPath: string, key: string, strategy: RefreshStrategyType): boolean {
|
|
18
|
+
const _fnIsApplicable = function (primaryPath: string, key: string, strategy: RefreshStrategyType): boolean {
|
|
23
19
|
return primaryPath === key || (strategy === RefreshStrategyType.IncludingDependents && primaryPath.startsWith(key));
|
|
24
20
|
};
|
|
25
21
|
/**
|
|
26
22
|
* Check if given path resides in the context path provided.
|
|
27
23
|
*
|
|
28
|
-
* @param
|
|
29
|
-
* @param
|
|
30
|
-
* @param
|
|
31
|
-
* @param
|
|
32
|
-
* @returns
|
|
24
|
+
* @param metaModel MetaModel to be used
|
|
25
|
+
* @param contextPath Context path to be used
|
|
26
|
+
* @param path Path to be used
|
|
27
|
+
* @param strategy Strategy, it could be 'self' | 'includingDependents'
|
|
28
|
+
* @returns Returns true if the context path is applicable.
|
|
33
29
|
*/
|
|
34
|
-
const _isPathApplicableToContextPath = function(
|
|
30
|
+
const _isPathApplicableToContextPath = function (
|
|
35
31
|
metaModel: ODataMetaModel,
|
|
36
32
|
contextPath: string,
|
|
37
33
|
path: string,
|
|
38
34
|
strategy: RefreshStrategyType
|
|
39
35
|
): boolean {
|
|
40
|
-
let contextPathToCheck = contextPath.startsWith("/") ? contextPath :
|
|
41
|
-
pathToCheck = path.startsWith("/") ? path :
|
|
36
|
+
let contextPathToCheck = contextPath.startsWith("/") ? contextPath : `/${contextPath}`,
|
|
37
|
+
pathToCheck = path.startsWith("/") ? path : `/${path}`;
|
|
42
38
|
if (!_fnIsApplicable(contextPathToCheck, pathToCheck, strategy)) {
|
|
43
39
|
contextPathToCheck = _fnSimplifyEntitySetPath(metaModel, contextPathToCheck);
|
|
44
40
|
if (!_fnIsApplicable(contextPathToCheck, pathToCheck, strategy)) {
|
|
@@ -53,17 +49,17 @@ const _isPathApplicableToContextPath = function(
|
|
|
53
49
|
/**
|
|
54
50
|
* Get controls to refresh in a view.
|
|
55
51
|
*
|
|
56
|
-
* @param
|
|
57
|
-
* @param
|
|
58
|
-
* @returns
|
|
52
|
+
* @param view View of the controls
|
|
53
|
+
* @param controls Context path to be used
|
|
54
|
+
* @returns Returns controls that need to be refreshed.
|
|
59
55
|
*/
|
|
60
|
-
const getControlsForRefresh = function(view: View, controls: Control[]): Control[] {
|
|
56
|
+
const getControlsForRefresh = function (view: View, controls: Control[]): Control[] {
|
|
61
57
|
const controlsForRefresh: Control[] = [];
|
|
62
58
|
const metaModel = view.getModel().getMetaModel() as ODataMetaModel;
|
|
63
59
|
const internalModel = view.getModel("internal");
|
|
64
60
|
const refreshStrategy = internalModel.getProperty(PATH_TO_STORE) || {};
|
|
65
61
|
if (controls) {
|
|
66
|
-
controls.forEach(function(control) {
|
|
62
|
+
controls.forEach(function (control) {
|
|
67
63
|
const contextPath = control.data("targetCollectionPath");
|
|
68
64
|
for (const key in refreshStrategy) {
|
|
69
65
|
const strategy = refreshStrategy[key];
|
|
@@ -78,11 +74,11 @@ const getControlsForRefresh = function(view: View, controls: Control[]): Control
|
|
|
78
74
|
/**
|
|
79
75
|
* Get refresh strategy for the control for a context path.
|
|
80
76
|
*
|
|
81
|
-
* @param
|
|
82
|
-
* @param
|
|
83
|
-
* @returns
|
|
77
|
+
* @param control Control from which refresh info is needed
|
|
78
|
+
* @param contextPath ContextPath for properities
|
|
79
|
+
* @returns Returns strategy for control refresh.
|
|
84
80
|
*/
|
|
85
|
-
const getControlRefreshStrategyForContextPath = function(control: Control, contextPath: string): RefreshStrategyType | undefined {
|
|
81
|
+
const getControlRefreshStrategyForContextPath = function (control: Control, contextPath: string): RefreshStrategyType | undefined {
|
|
86
82
|
const metaModel = control.getModel().getMetaModel() as ODataMetaModel;
|
|
87
83
|
const internalModel = control.getModel("internal");
|
|
88
84
|
const refreshStrategy = internalModel.getProperty(PATH_TO_STORE) || {};
|
|
@@ -103,29 +99,29 @@ const getControlRefreshStrategyForContextPath = function(control: Control, conte
|
|
|
103
99
|
/**
|
|
104
100
|
* Get refresh info from view.
|
|
105
101
|
*
|
|
106
|
-
* @param
|
|
107
|
-
* @returns
|
|
102
|
+
* @param view View from which refresh info is needed
|
|
103
|
+
* @returns Returns strategy for view refresh.
|
|
108
104
|
*/
|
|
109
|
-
const getViewRefreshInfo = function(view: View): RefreshStrategyType | undefined {
|
|
105
|
+
const getViewRefreshInfo = function (view: View): RefreshStrategyType | undefined {
|
|
110
106
|
const viewData = view.getViewData() as BaseManifestSettings,
|
|
111
|
-
contextPath = viewData && (viewData?.contextPath ||
|
|
107
|
+
contextPath = viewData && (viewData?.contextPath || `/${viewData?.entitySet}`);
|
|
112
108
|
return KeepAliveHelper.getControlRefreshStrategyForContextPath(view, contextPath);
|
|
113
109
|
};
|
|
114
110
|
|
|
115
111
|
/**
|
|
116
112
|
* Get refresh strategy for an intent.
|
|
117
113
|
*
|
|
118
|
-
* @param
|
|
119
|
-
* @param
|
|
120
|
-
* @param
|
|
121
|
-
* @returns
|
|
114
|
+
* @param refreshStrategies RefreshStrategies to consider
|
|
115
|
+
* @param semanticObject Outbound Semantic Object
|
|
116
|
+
* @param action Outbound Action
|
|
117
|
+
* @returns Returns refresh strategies to use for the intent.
|
|
122
118
|
*/
|
|
123
|
-
const getRefreshStrategyForIntent = function(
|
|
119
|
+
const getRefreshStrategyForIntent = function (
|
|
124
120
|
refreshStrategies: RefreshStrategies,
|
|
125
121
|
semanticObject?: string,
|
|
126
122
|
action?: string
|
|
127
123
|
): SORefreshStrategy | undefined {
|
|
128
|
-
const soAction = semanticObject && action && semanticObject
|
|
124
|
+
const soAction = semanticObject && action && `${semanticObject}-${action}`;
|
|
129
125
|
const intents = refreshStrategies.intents;
|
|
130
126
|
const soActionIntentMatch = intents && soAction && intents[soAction];
|
|
131
127
|
const soIntentMatch = !soActionIntentMatch && intents && semanticObject && intents[semanticObject];
|
|
@@ -135,10 +131,10 @@ const getRefreshStrategyForIntent = function(
|
|
|
135
131
|
/**
|
|
136
132
|
* Store control refresh strategy for hash in the internal model.
|
|
137
133
|
*
|
|
138
|
-
* @param
|
|
139
|
-
* @param
|
|
134
|
+
* @param control Control for the refresh strategy
|
|
135
|
+
* @param hash Shell hash object
|
|
140
136
|
*/
|
|
141
|
-
const storeControlRefreshStrategyForHash = function(control: Control, hash: SOAction): void {
|
|
137
|
+
const storeControlRefreshStrategyForHash = function (control: Control, hash: SOAction): void {
|
|
142
138
|
if (control && control.getModel("viewData") && control.getModel("internal")) {
|
|
143
139
|
const viewData = control.getModel("viewData");
|
|
144
140
|
const refreshStrategies: RefreshStrategies = viewData.getProperty(PATH_TO_STORE);
|
|
@@ -157,10 +153,10 @@ const storeControlRefreshStrategyForHash = function(control: Control, hash: SOAc
|
|
|
157
153
|
/**
|
|
158
154
|
* Method to refresh and restore the view if neccessary.
|
|
159
155
|
*
|
|
160
|
-
* @param
|
|
161
|
-
* @returns
|
|
156
|
+
* @param view Control for the refresh strategy
|
|
157
|
+
* @returns A promise after view refresh and restore are triggered
|
|
162
158
|
*/
|
|
163
|
-
const restoreView = function(view: View): Promise<any> {
|
|
159
|
+
const restoreView = function (view: View): Promise<any> {
|
|
164
160
|
const internalModelContext = view.getBindingContext("internal") as InternalModelContext;
|
|
165
161
|
const controller = view.getController();
|
|
166
162
|
const viewState = (controller as any)?.viewState;
|
|
@@ -169,20 +165,20 @@ const restoreView = function(view: View): Promise<any> {
|
|
|
169
165
|
if (viewState.refreshViewBindings) {
|
|
170
166
|
refreshBindings = viewState.refreshViewBindings();
|
|
171
167
|
refreshBindings
|
|
172
|
-
.then(function() {
|
|
173
|
-
Log.info(
|
|
168
|
+
.then(function () {
|
|
169
|
+
Log.info(`FE V4: Refresh was triggered successfull: ${view.getId()}`);
|
|
174
170
|
})
|
|
175
|
-
.catch(function(err) {
|
|
176
|
-
Log.warning(
|
|
171
|
+
.catch(function (err) {
|
|
172
|
+
Log.warning(`FE V4: Refresh was unsuccessfull: ${view.getId()}`, err);
|
|
177
173
|
});
|
|
178
174
|
}
|
|
179
175
|
refreshBindings = refreshBindings
|
|
180
|
-
.then(function() {
|
|
176
|
+
.then(function () {
|
|
181
177
|
viewState.onRestore();
|
|
182
178
|
internalModelContext.setProperty("restoreStatus", "done");
|
|
183
179
|
})
|
|
184
|
-
.catch(function(error) {
|
|
185
|
-
Log.warning(
|
|
180
|
+
.catch(function (error) {
|
|
181
|
+
Log.warning(`FE V4: Restore was unsuccessfull: ${view.getId()}`, error);
|
|
186
182
|
});
|
|
187
183
|
}
|
|
188
184
|
return refreshBindings;
|