@sapui5/sap.fe.core 1.102.3 → 1.105.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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +120 -0
- package/src/sap/fe/core/ActionRuntime.ts +108 -0
- package/src/sap/fe/core/AppComponent.js +81 -35
- package/src/sap/fe/core/AppComponent.ts +68 -44
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +12 -10
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +291 -218
- package/src/sap/fe/core/CommonUtils.ts +315 -251
- package/src/sap/fe/core/ExtensionAPI.js +25 -28
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +5 -5
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +21 -10
- package/src/sap/fe/core/TemplateComponent.ts +9 -6
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
- package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +171 -140
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- 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 +13 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
- package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
- 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 +12 -26
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
- 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 +3 -3
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +9 -4
- package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
- package/src/sap/fe/core/controls/FilterBar.js +7 -3
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
- 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/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- 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 +48 -34
- package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
- 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 +74 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
- 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 +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
- package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
- package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
- 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 +65 -29
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
- package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
- package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
- package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
- 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 +131 -95
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- 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 +8 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- 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 -5
- 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 +53 -75
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
- 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 +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -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/TableFormatterTypes.js +1 -1
- 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/fpm/Component.js +33 -7
- package/src/sap/fe/core/fpm/Component.ts +14 -0
- package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
- package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -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/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- 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/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.support.js +1 -1
- 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 +39 -67
- package/src/sap/fe/core/messagebundle_ar.properties +27 -44
- package/src/sap/fe/core/messagebundle_bg.properties +27 -44
- package/src/sap/fe/core/messagebundle_ca.properties +27 -44
- package/src/sap/fe/core/messagebundle_cs.properties +27 -44
- package/src/sap/fe/core/messagebundle_cy.properties +26 -43
- package/src/sap/fe/core/messagebundle_da.properties +27 -44
- package/src/sap/fe/core/messagebundle_de.properties +25 -42
- package/src/sap/fe/core/messagebundle_el.properties +28 -45
- package/src/sap/fe/core/messagebundle_en.properties +27 -44
- package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
- package/src/sap/fe/core/messagebundle_es.properties +27 -44
- package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
- package/src/sap/fe/core/messagebundle_et.properties +27 -44
- package/src/sap/fe/core/messagebundle_fi.properties +27 -44
- package/src/sap/fe/core/messagebundle_fr.properties +26 -43
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
- package/src/sap/fe/core/messagebundle_hi.properties +27 -44
- package/src/sap/fe/core/messagebundle_hr.properties +27 -44
- package/src/sap/fe/core/messagebundle_hu.properties +27 -44
- package/src/sap/fe/core/messagebundle_id.properties +27 -44
- package/src/sap/fe/core/messagebundle_it.properties +43 -60
- package/src/sap/fe/core/messagebundle_iw.properties +27 -44
- package/src/sap/fe/core/messagebundle_ja.properties +27 -44
- package/src/sap/fe/core/messagebundle_kk.properties +27 -44
- package/src/sap/fe/core/messagebundle_ko.properties +30 -47
- package/src/sap/fe/core/messagebundle_lt.properties +27 -44
- package/src/sap/fe/core/messagebundle_lv.properties +27 -44
- package/src/sap/fe/core/messagebundle_ms.properties +27 -44
- package/src/sap/fe/core/messagebundle_nl.properties +29 -46
- package/src/sap/fe/core/messagebundle_no.properties +27 -44
- package/src/sap/fe/core/messagebundle_pl.properties +28 -45
- package/src/sap/fe/core/messagebundle_pt.properties +28 -45
- package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
- package/src/sap/fe/core/messagebundle_ro.properties +27 -44
- package/src/sap/fe/core/messagebundle_ru.properties +27 -44
- package/src/sap/fe/core/messagebundle_sh.properties +27 -44
- package/src/sap/fe/core/messagebundle_sk.properties +27 -44
- package/src/sap/fe/core/messagebundle_sl.properties +27 -44
- package/src/sap/fe/core/messagebundle_sv.properties +27 -44
- package/src/sap/fe/core/messagebundle_th.properties +25 -42
- package/src/sap/fe/core/messagebundle_tr.properties +27 -44
- package/src/sap/fe/core/messagebundle_uk.properties +27 -44
- package/src/sap/fe/core/messagebundle_vi.properties +27 -44
- package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
- package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- 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/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +90 -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 +23 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
- 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 +18 -17
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- 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 +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/Email.js +3 -3
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -2,20 +2,37 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/helpers/StableIdHelper"], function (deepClone, BuildingBlockRuntime, StableIdHelper) {
|
|
5
|
+
sap.ui.define(["sap/base/util/deepClone", "sap/base/util/merge", "sap/base/util/ObjectPath", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/StableIdHelper", "sap/ui/base/ManagedObject", "sap/ui/core/Component", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "../converters/ConverterContext"], function (deepClone, merge, ObjectPath, BuildingBlockRuntime, CommonUtils, StableIdHelper, ManagedObject, Component, Fragment, XMLPreprocessor, ConverterContext) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
+
var _templateObject, _templateObject2, _templateObject3;
|
|
9
|
+
|
|
8
10
|
var _exports = {};
|
|
9
11
|
var generate = StableIdHelper.generate;
|
|
12
|
+
var xml = BuildingBlockRuntime.xml;
|
|
10
13
|
var registerBuildingBlock = BuildingBlockRuntime.registerBuildingBlock;
|
|
11
14
|
|
|
15
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
16
|
+
|
|
12
17
|
/**
|
|
13
18
|
* Base class for Building Block
|
|
14
19
|
*/
|
|
15
20
|
var BuildingBlockBase = /*#__PURE__*/function () {
|
|
16
|
-
function BuildingBlockBase(oProps) {
|
|
21
|
+
function BuildingBlockBase(oProps, _oControlConfig, _oSettings) {
|
|
17
22
|
var _this = this;
|
|
18
23
|
|
|
24
|
+
this.isPublic = false;
|
|
25
|
+
|
|
26
|
+
this.getConverterContext = function (oVisualizationObjectPath, contextPath, mSettings, mExtraParams) {
|
|
27
|
+
var oAppComponent = mSettings.appComponent;
|
|
28
|
+
var originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
|
|
29
|
+
var viewData = Object.assign({}, originalViewData);
|
|
30
|
+
delete viewData.resourceBundle;
|
|
31
|
+
viewData = deepClone(viewData);
|
|
32
|
+
viewData.controlConfiguration = merge(viewData.controlConfiguration, mExtraParams);
|
|
33
|
+
return ConverterContext.createConverterContextForMacro(oVisualizationObjectPath.startingEntitySet.name, mSettings.models.metaModel, oAppComponent && oAppComponent.getDiagnostics(), merge, oVisualizationObjectPath.contextLocation, viewData);
|
|
34
|
+
};
|
|
35
|
+
|
|
19
36
|
Object.keys(oProps).forEach(function (propName) {
|
|
20
37
|
_this[propName] = oProps[propName];
|
|
21
38
|
});
|
|
@@ -42,51 +59,43 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
|
|
|
42
59
|
}
|
|
43
60
|
|
|
44
61
|
return undefined;
|
|
45
|
-
}
|
|
46
|
-
/*
|
|
47
|
-
// This block is commented out because I am not using them for now / need to change this but still want to keep them around
|
|
48
|
-
static getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
|
|
49
|
-
const oAppComponent = mSettings.appComponent;
|
|
50
|
-
const originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
|
|
51
|
-
let viewData = Object.assign({}, originalViewData);
|
|
52
|
-
delete viewData.resourceBundle;
|
|
53
|
-
viewData = deepClone(viewData);
|
|
54
|
-
viewData.controlConfiguration = merge(viewData.controlConfiguration, mExtraParams);
|
|
55
|
-
return ConverterContext.createConverterContextForMacro(
|
|
56
|
-
oVisualizationObjectPath.startingEntitySet.name,
|
|
57
|
-
mSettings.models.metaModel,
|
|
58
|
-
oAppComponent && oAppComponent.getDiagnostics(),
|
|
59
|
-
merge,
|
|
60
|
-
oVisualizationObjectPath.contextLocation,
|
|
61
|
-
viewData
|
|
62
|
-
);
|
|
63
|
-
};
|
|
64
|
-
static getMetadata() {
|
|
65
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
66
|
-
// @ts-ignore
|
|
67
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
68
|
-
return {
|
|
69
|
-
getAllProperties(this: BuildingBlockDefinition) {
|
|
70
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
71
|
-
// @ts-ignore
|
|
72
|
-
return this.metadata.properties;
|
|
73
|
-
},
|
|
74
|
-
getName(this: BuildingBlockDefinition) {
|
|
75
|
-
return `${this.namespace}.${this.name}`;
|
|
76
|
-
},
|
|
77
|
-
getAllAggregations() {
|
|
78
|
-
return {};
|
|
79
|
-
},
|
|
80
|
-
getDefaultAggregationName() {
|
|
81
|
-
return "";
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
}*/
|
|
62
|
+
} // This block is commented out because I am not using them for now / need to change this but still want to keep them around
|
|
85
63
|
;
|
|
86
64
|
|
|
65
|
+
_proto.getProperties = function getProperties() {
|
|
66
|
+
var allProperties = {};
|
|
67
|
+
|
|
68
|
+
for (var oInstanceKey in this) {
|
|
69
|
+
if (this.hasOwnProperty(oInstanceKey)) {
|
|
70
|
+
allProperties[oInstanceKey] = this[oInstanceKey];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return allProperties;
|
|
75
|
+
};
|
|
76
|
+
|
|
87
77
|
BuildingBlockBase.register = function register() {// To be overriden
|
|
88
78
|
};
|
|
89
79
|
|
|
80
|
+
BuildingBlockBase.unregister = function unregister() {// To be overriden
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
_proto.addConditionally = function addConditionally(condition, partToAdd) {
|
|
84
|
+
if (condition) {
|
|
85
|
+
return partToAdd;
|
|
86
|
+
} else {
|
|
87
|
+
return "";
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
_proto.attr = function attr(attributeName, value) {
|
|
92
|
+
if (value !== undefined) {
|
|
93
|
+
return "".concat(attributeName, "=\"").concat(value, "\"");
|
|
94
|
+
} else {
|
|
95
|
+
return "";
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
90
99
|
return BuildingBlockBase;
|
|
91
100
|
}();
|
|
92
101
|
|
|
@@ -140,9 +149,31 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
|
|
|
140
149
|
return propertyDescriptor;
|
|
141
150
|
};
|
|
142
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
|
|
154
|
+
*
|
|
155
|
+
* @param aggregationDefinition
|
|
156
|
+
* @returns The decorated property
|
|
157
|
+
*/
|
|
158
|
+
|
|
143
159
|
|
|
144
160
|
_exports.xmlEvent = xmlEvent;
|
|
145
161
|
|
|
162
|
+
function xmlAggregation(aggregationDefinition) {
|
|
163
|
+
return function (target, propertyKey, propertyDescriptor) {
|
|
164
|
+
var metadata = ensureMetadata(target.constructor);
|
|
165
|
+
delete propertyDescriptor.initializer;
|
|
166
|
+
|
|
167
|
+
if (!metadata.aggregations[propertyKey]) {
|
|
168
|
+
metadata.aggregations[propertyKey] = aggregationDefinition;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return propertyDescriptor;
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
_exports.xmlAggregation = xmlAggregation;
|
|
176
|
+
|
|
146
177
|
function defineBuildingBlock(oBuildingBlockDefinition) {
|
|
147
178
|
return function (classDefinition) {
|
|
148
179
|
ensureMetadata(classDefinition);
|
|
@@ -151,15 +182,138 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
|
|
|
151
182
|
classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
|
|
152
183
|
classDefinition.fragment = oBuildingBlockDefinition.fragment;
|
|
153
184
|
classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
|
|
185
|
+
classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
|
|
154
186
|
classDefinition.apiVersion = 2;
|
|
155
187
|
|
|
188
|
+
if (classDefinition.isRuntime) {
|
|
189
|
+
classDefinition.prototype.getTemplate = function () {
|
|
190
|
+
var className = "".concat(oBuildingBlockDefinition.namespace, ".").concat(oBuildingBlockDefinition.name).replace(/\./g, "/");
|
|
191
|
+
var extraProps = [];
|
|
192
|
+
|
|
193
|
+
for (var propertiesKey in classDefinition.metadata.properties) {
|
|
194
|
+
var propertyValue = this[propertiesKey];
|
|
195
|
+
|
|
196
|
+
if (propertyValue !== undefined) {
|
|
197
|
+
var _propertyValue$isA, _propertyValue;
|
|
198
|
+
|
|
199
|
+
if ((_propertyValue$isA = (_propertyValue = propertyValue).isA) !== null && _propertyValue$isA !== void 0 && _propertyValue$isA.call(_propertyValue, "sap.ui.model.Context")) {
|
|
200
|
+
propertyValue = propertyValue.getPath();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
extraProps.push(xml(_templateObject || (_templateObject = _taggedTemplateLiteral(["feBB:", "=\"", "\""])), propertiesKey, propertyValue));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
for (var eventsKey in classDefinition.metadata.events) {
|
|
208
|
+
var eventsValue = this[eventsKey];
|
|
209
|
+
|
|
210
|
+
if (eventsValue !== undefined) {
|
|
211
|
+
extraProps.push(xml(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["feBB:", "=\"", "\""])), eventsKey, eventsValue));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return xml(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["<core:Fragment\n\t\t\t\t\txmlns:core=\"sap.ui.core\"\n\t\t\t\t\txmlns:feBB=\"sap.fe.core.buildingBlocks\"\n\t\t\t\t\tfragmentName=\"", "\"\n\t\t\t\t\tid=\"{this>id}\"\n\t\t\t\t\ttype=\"FE_COMPONENTS\"\n\t\t\t\t\t", "\n\t\t\t\t>\n\t\t\t\t</core:Fragment>"])), className, extraProps);
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
156
219
|
classDefinition.register = function () {
|
|
157
220
|
registerBuildingBlock(classDefinition);
|
|
158
221
|
};
|
|
222
|
+
|
|
223
|
+
classDefinition.unregister = function () {
|
|
224
|
+
XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
|
|
225
|
+
XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
|
|
226
|
+
};
|
|
159
227
|
};
|
|
160
228
|
}
|
|
161
229
|
|
|
162
230
|
_exports.defineBuildingBlock = defineBuildingBlock;
|
|
231
|
+
Fragment.registerType("FE_COMPONENTS", {
|
|
232
|
+
load: function (mSettings) {
|
|
233
|
+
try {
|
|
234
|
+
var fnResolve;
|
|
235
|
+
var fnReject;
|
|
236
|
+
var loaderPromise = new Promise(function (resolve, reject) {
|
|
237
|
+
fnResolve = resolve;
|
|
238
|
+
fnReject = reject;
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
sap.ui.require([mSettings.fragmentName], function (fragmentClass) {
|
|
242
|
+
if (!fragmentClass) {
|
|
243
|
+
fnReject("Could not load " + mSettings.fragmentName);
|
|
244
|
+
} else {
|
|
245
|
+
fnResolve(fragmentClass);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
return Promise.resolve(loaderPromise);
|
|
250
|
+
} catch (e) {
|
|
251
|
+
return Promise.reject(e);
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
init: function (mSettings) {
|
|
255
|
+
try {
|
|
256
|
+
var _mSettings$customData, _mSettings$customData2, _mSettings$customData3, _mSettings$customData4;
|
|
257
|
+
|
|
258
|
+
var myClass = mSettings.fragmentContent;
|
|
259
|
+
var classSettings = {};
|
|
260
|
+
var feCustomData = (mSettings === null || mSettings === void 0 ? void 0 : (_mSettings$customData = mSettings.customData) === null || _mSettings$customData === void 0 ? void 0 : (_mSettings$customData2 = _mSettings$customData[0]) === null || _mSettings$customData2 === void 0 ? void 0 : (_mSettings$customData3 = _mSettings$customData2.mProperties) === null || _mSettings$customData3 === void 0 ? void 0 : (_mSettings$customData4 = _mSettings$customData3.value) === null || _mSettings$customData4 === void 0 ? void 0 : _mSettings$customData4["sap.fe.core.buildingBlocks"]) || {};
|
|
261
|
+
delete mSettings.customData;
|
|
262
|
+
var pageComponent = Component.getOwnerComponentFor(mSettings.containingView);
|
|
263
|
+
var appComponent = CommonUtils.getAppComponent(mSettings.containingView);
|
|
264
|
+
var metaModel = appComponent.getMetaModel();
|
|
265
|
+
var pageModel = pageComponent.getModel("_pageModel");
|
|
266
|
+
|
|
267
|
+
for (var propertyName in myClass.metadata.properties) {
|
|
268
|
+
var propertyMetadata = myClass.metadata.properties[propertyName];
|
|
269
|
+
|
|
270
|
+
if (propertyMetadata.type === "sap.ui.model.Context") {
|
|
271
|
+
classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
|
|
272
|
+
|
|
273
|
+
if (classSettings[propertyName].getObject()) {
|
|
274
|
+
classSettings[propertyName] = classSettings[propertyName].getObject();
|
|
275
|
+
} else {
|
|
276
|
+
// bind to metamodel
|
|
277
|
+
classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
|
|
278
|
+
}
|
|
279
|
+
} else {
|
|
280
|
+
classSettings[propertyName] = feCustomData[propertyName];
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
for (var eventName in myClass.metadata.events) {
|
|
285
|
+
if (feCustomData[eventName] && feCustomData[eventName].startsWith(".")) {
|
|
286
|
+
classSettings[eventName] = ObjectPath.get(feCustomData[eventName].substring(1), mSettings.containingView.getController());
|
|
287
|
+
} else {
|
|
288
|
+
classSettings[eventName] = ""; // For now, might need to resolve more stuff
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return Promise.resolve(ManagedObject.runWithPreprocessors(function () {
|
|
293
|
+
return new myClass(classSettings).render();
|
|
294
|
+
}, {
|
|
295
|
+
id: function (sId) {
|
|
296
|
+
return mSettings.containingView.createId(sId);
|
|
297
|
+
},
|
|
298
|
+
settings: function (controlSettings) {
|
|
299
|
+
var allAssociations = this.getMetadata().getAssociations();
|
|
300
|
+
|
|
301
|
+
for (var _i = 0, _Object$keys = Object.keys(allAssociations); _i < _Object$keys.length; _i++) {
|
|
302
|
+
var associationDetailName = _Object$keys[_i];
|
|
303
|
+
|
|
304
|
+
if (controlSettings.hasOwnProperty(associationDetailName)) {
|
|
305
|
+
controlSettings[associationDetailName] = mSettings.containingView.createId(controlSettings[associationDetailName]);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return controlSettings;
|
|
310
|
+
}
|
|
311
|
+
}));
|
|
312
|
+
} catch (e) {
|
|
313
|
+
return Promise.reject(e);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
});
|
|
163
317
|
return _exports;
|
|
164
318
|
}, false);
|
|
165
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwibmFtZXMiOlsiQnVpbGRpbmdCbG9ja0Jhc2UiLCJvUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BOYW1lIiwiY3JlYXRlSWQiLCJpZCIsInN0cmluZ1BhcnRzIiwiZ2VuZXJhdGUiLCJ1bmRlZmluZWQiLCJyZWdpc3RlciIsImVuc3VyZU1ldGFkYXRhIiwidGFyZ2V0IiwiaGFzT3duUHJvcGVydHkiLCJtZXRhZGF0YSIsImRlZXBDbG9uZSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJldmVudHMiLCJ4bWxBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVEZWZpbml0aW9uIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxpemVyIiwieG1sRXZlbnQiLCJ0eXBlIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiIsImNsYXNzRGVmaW5pdGlvbiIsInhtbFRhZyIsIm5hbWUiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJmcmFnbWVudCIsImlzT3BlbiIsImFwaVZlcnNpb24iLCJyZWdpc3RlckJ1aWxkaW5nQmxvY2siXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO01BQ2FBLGlCO0FBQ1osK0JBQVlDLE1BQVosRUFBeUM7QUFBQTs7QUFDeENDLE1BQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZRixNQUFaLEVBQW9CRyxPQUFwQixDQUE0QixVQUFDQyxRQUFELEVBQWM7QUFDekMsUUFBQSxLQUFJLENBQUNBLFFBQUQsQ0FBSixHQUErQkosTUFBTSxDQUFDSSxRQUFELENBQXJDO0FBQ0EsT0FGRDtBQUdBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7V0FDUUMsUSxHQUFQLG9CQUEwQztBQUN6QztBQUNBLFVBQUssSUFBRCxDQUFjQyxFQUFs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LE1BQUFBLGVBQWUsQ0FBQ25CLFFBQWhCLEdBQTJCLFlBQVk7QUFDdEMyQixRQUFBQSxxQkFBcUIsQ0FBQ1IsZUFBRCxDQUFyQjtBQUNBLE9BRkQ7QUFHQSxLQVhEO0FBWUEiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyByZWdpc3RlckJ1aWxkaW5nQmxvY2sgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1J1bnRpbWVcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQnVpbGRpbmcgQmxvY2tcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1aWxkaW5nQmxvY2tCYXNlIHtcblx0Y29uc3RydWN0b3Iob1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmtleXMob1Byb3BzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0dGhpc1twcm9wTmFtZSBhcyBrZXlvZiB0aGlzXSA9IG9Qcm9wc1twcm9wTmFtZV07XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB0aGUgZ2l2ZW4gbG9jYWwgZWxlbWVudCBJRCB0byBhIGdsb2JhbGx5IHVuaXF1ZSBJRCBieSBwcmVmaXhpbmcgd2l0aCB0aGUgQnVpbGRpbmcgQmxvY2sgSUQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdHJpbmdQYXJ0c1xuXHQgKiBAcmV0dXJucyBFaXRoZXIgdGhlIGdsb2JhbCBJRCBvciB1bmRlZmluZWQgaWYgdGhlIEJ1aWxkaW5nIEJsb2NrIGRvZXNuJ3QgaGF2ZSBhbiBJRFxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUlkKC4uLnN0cmluZ1BhcnRzOiBzdHJpbmdbXSkge1xuXHRcdC8vIElmIHRoZSBjaGlsZCBpbnN0YW5jZSBoYXMgYW4gSUQgcHJvcGVydHkgdXNlIGl0IG90aGVyd2lzZSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0aWYgKCh0aGlzIGFzIGFueSkuaWQpIHtcblx0XHRcdHJldHVybiBnZW5lcmF0ZShbKHRoaXMgYXMgYW55KS5pZCwgLi4uc3RyaW5nUGFydHNdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHQvKlxuXHQvLyBUaGlzIGJsb2NrIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBJIGFtIG5vdCB1c2luZyB0aGVtIGZvciBub3cgLyBuZWVkIHRvIGNoYW5nZSB0aGlzIGJ1dCBzdGlsbCB3YW50IHRvIGtlZXAgdGhlbSBhcm91bmRcblx0c3RhdGljIGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoOiBhbnksIGNvbnRleHRQYXRoOiBhbnksIG1TZXR0aW5nczogYW55LCBtRXh0cmFQYXJhbXM/OiBhbnkpIHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gbVNldHRpbmdzLmFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvcmlnaW5hbFZpZXdEYXRhID0gbVNldHRpbmdzLm1vZGVscy52aWV3RGF0YSAmJiBtU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhLmdldERhdGEoKTtcblx0XHRsZXQgdmlld0RhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbFZpZXdEYXRhKTtcblx0XHRkZWxldGUgdmlld0RhdGEucmVzb3VyY2VCdW5kbGU7XG5cdFx0dmlld0RhdGEgPSBkZWVwQ2xvbmUodmlld0RhdGEpO1xuXHRcdHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uID0gbWVyZ2Uodmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sIG1FeHRyYVBhcmFtcyk7XG5cdFx0cmV0dXJuIENvbnZlcnRlckNvbnRleHQuY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUsXG5cdFx0XHRtU2V0dGluZ3MubW9kZWxzLm1ldGFNb2RlbCxcblx0XHRcdG9BcHBDb21wb25lbnQgJiYgb0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpLFxuXHRcdFx0bWVyZ2UsXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0dmlld0RhdGFcblx0XHQpO1xuXHR9O1xuXHRzdGF0aWMgZ2V0TWV0YWRhdGEoKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRyZXR1cm4ge1xuXHRcdFx0Z2V0QWxsUHJvcGVydGllcyh0aGlzOiBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbikge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0cmV0dXJuIHRoaXMubWV0YWRhdGEucHJvcGVydGllcztcblx0XHRcdH0sXG5cdFx0XHRnZXROYW1lKHRoaXM6IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBgJHt0aGlzLm5hbWVzcGFjZX0uJHt0aGlzLm5hbWV9YDtcblx0XHRcdH0sXG5cdFx0XHRnZXRBbGxBZ2dyZWdhdGlvbnMoKSB7XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH0sXG5cdFx0XHRnZXREZWZhdWx0QWdncmVnYXRpb25OYW1lKCkge1xuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdH1cblx0XHR9O1xuXHR9Ki9cblx0c3RhdGljIHJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24gPSB7XG5cdHR5cGU6IHN0cmluZztcblx0aXNQdWJsaWM/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiBhbnk7XG5cdGNvbXB1dGVkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHQka2luZD86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlzUHVibGljPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRjb21wdXRlZD86IGJvb2xlYW47XG5cdCRUeXBlPzogc3RyaW5nW107XG5cdCRraW5kPzogc3RyaW5nW107XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0V2ZW50ID0ge307XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uID0ge1xuXHRpc1B1YmxpYz86IGJvb2xlYW47XG5cdHR5cGU6IHN0cmluZztcblx0c2xvdD86IHN0cmluZztcbn07XG50eXBlIENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0ge1xuXHRuYW1lc3BhY2U6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHR4bWxUYWc/OiBzdHJpbmc7XG5cdGZyYWdtZW50Pzogc3RyaW5nO1xuXHRwdWJsaWNOYW1lc3BhY2U/OiBzdHJpbmc7XG5cblx0aXNPcGVuPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYyID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJlxuXHR0eXBlb2YgQnVpbGRpbmdCbG9ja0Jhc2UgJiB7XG5cdFx0YXBpVmVyc2lvbjogMjtcblx0XHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xuXHR9O1xuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJiB7XG5cdG5hbWU6IHN0cmluZztcblx0YXBpVmVyc2lvbj86IDE7XG5cdGNyZWF0ZT86IEZ1bmN0aW9uO1xuXHRnZXRUZW1wbGF0ZT86IEZ1bmN0aW9uO1xuXHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0gQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMiB8IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjE7XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEgPSB7XG5cdGV2ZW50czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0V2ZW50Pjtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja1Byb3BlcnR5RGVmaW5pdGlvbj47XG5cdGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj47XG59O1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSk6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcblx0XHR0YXJnZXQubWV0YWRhdGEgPSBkZWVwQ2xvbmUoXG5cdFx0XHR0YXJnZXQubWV0YWRhdGEgfHwge1xuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdFx0ZXZlbnRzOiB7fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIHByb3BlcnR5IHNoYWxsIGJlIGRlY2xhcmVkIGFzIGFuIHhtbCBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBmcm9tIHRoZSBvdXRzaWRlIG9mIHRoZSBidWlsZGluZyBibG9jay5cbiAqXG4gKiBAcGFyYW0gYXR0cmlidXRlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sQXR0cmlidXRlKGF0dHJpYnV0ZURlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBCdWlsZGluZ0Jsb2NrQmFzZSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnQoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSA9IHsgdHlwZTogXCJGdW5jdGlvblwiIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCdWlsZGluZ0Jsb2NrKG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbjogQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjbGFzc0RlZmluaXRpb246IGFueSkge1xuXHRcdGVuc3VyZU1ldGFkYXRhKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnhtbFRhZyA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5uYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ucHVibGljTmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5mcmFnbWVudCA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5mcmFnbWVudDtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNPcGVuID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzT3Blbjtcblx0XHRjbGFzc0RlZmluaXRpb24uYXBpVmVyc2lvbiA9IDI7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVnaXN0ZXJCdWlsZGluZ0Jsb2NrKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0fTtcblx0fTtcbn1cbiJdfQ==
|
|
319
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIm9Qcm9wcyIsIl9vQ29udHJvbENvbmZpZyIsIl9vU2V0dGluZ3MiLCJpc1B1YmxpYyIsImdldENvbnZlcnRlckNvbnRleHQiLCJvVmlzdWFsaXphdGlvbk9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsIm1TZXR0aW5ncyIsIm1FeHRyYVBhcmFtcyIsIm9BcHBDb21wb25lbnQiLCJhcHBDb21wb25lbnQiLCJvcmlnaW5hbFZpZXdEYXRhIiwibW9kZWxzIiwidmlld0RhdGEiLCJnZXREYXRhIiwiT2JqZWN0IiwiYXNzaWduIiwicmVzb3VyY2VCdW5kbGUiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsIm1lcmdlIiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmFtZSIsIm1ldGFNb2RlbCIsImdldERpYWdub3N0aWNzIiwiY29udGV4dExvY2F0aW9uIiwia2V5cyIsImZvckVhY2giLCJwcm9wTmFtZSIsImNyZWF0ZUlkIiwiaWQiLCJzdHJpbmdQYXJ0cyIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwiZ2V0UHJvcGVydGllcyIsImFsbFByb3BlcnRpZXMiLCJvSW5zdGFuY2VLZXkiLCJoYXNPd25Qcm9wZXJ0eSIsInJlZ2lzdGVyIiwidW5yZWdpc3RlciIsImFkZENvbmRpdGlvbmFsbHkiLCJjb25kaXRpb24iLCJwYXJ0VG9BZGQiLCJhdHRyIiwiYXR0cmlidXRlTmFtZSIsInZhbHVlIiwiZW5zdXJlTWV0YWRhdGEiLCJ0YXJnZXQiLCJtZXRhZGF0YSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJldmVudHMiLCJ4bWxBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVEZWZpbml0aW9uIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxpemVyIiwieG1sRXZlbnQiLCJ0eXBlIiwieG1sQWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJkZWZpbmVCdWlsZGluZ0Jsb2NrIiwib0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uIiwiY2xhc3NEZWZpbml0aW9uIiwieG1sVGFnIiwibmFtZXNwYWNlIiwicHVibGljTmFtZXNwYWNlIiwiZnJhZ21lbnQiLCJpc09wZW4iLCJpc1J1bnRpbWUiLCJhcGlWZXJzaW9uIiwicHJvdG90eXBlIiwiZ2V0VGVtcGxhdGUiLCJjbGFzc05hbWUiLCJyZXBsYWNlIiwiZXh0cmFQcm9wcyIsInByb3BlcnRpZXNLZXkiLCJwcm9wZXJ0eVZhbHVlIiwiaXNBIiwiZ2V0UGF0aCIsInB1c2giLCJ4bWwiLCJldmVudHNLZXkiLCJldmVudHNWYWx1ZSIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsIlhNTFByZXByb2Nlc3NvciIsInBsdWdJbiIsIkZyYWdtZW50IiwicmVnaXN0ZXJUeXBlIiwibG9hZCIsImZuUmVzb2x2ZSIsImZuUmVqZWN0IiwibG9hZGVyUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiZnJhZ21lbnROYW1lIiwiZnJhZ21lbnRDbGFzcyIsImluaXQiLCJteUNsYXNzIiwiZnJhZ21lbnRDb250ZW50IiwiY2xhc3NTZXR0aW5ncyIsImZlQ3VzdG9tRGF0YSIsImN1c3RvbURhdGEiLCJtUHJvcGVydGllcyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImNvbnRhaW5pbmdWaWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNZXRhTW9kZWwiLCJwYWdlTW9kZWwiLCJnZXRNb2RlbCIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5TWV0YWRhdGEiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdCIsImV2ZW50TmFtZSIsInN0YXJ0c1dpdGgiLCJPYmplY3RQYXRoIiwiZ2V0Iiwic3Vic3RyaW5nIiwiZ2V0Q29udHJvbGxlciIsIk1hbmFnZWRPYmplY3QiLCJydW5XaXRoUHJlcHJvY2Vzc29ycyIsInJlbmRlciIsInNJZCIsInNldHRpbmdzIiwiY29udHJvbFNldHRpbmdzIiwiYWxsQXNzb2NpYXRpb25zIiwiZ2V0TWV0YWRhdGEiLCJnZXRBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbkRldGFpbE5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrLCB4bWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1J1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZWRPYmplY3RFeCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQnVpbGRpbmcgQmxvY2tcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1aWxkaW5nQmxvY2tCYXNlIHtcblx0cHJvdGVjdGVkIGlzUHVibGljID0gZmFsc2U7XG5cdHByb3RlY3RlZCBpZCE6IHN0cmluZztcblx0Y29uc3RydWN0b3Iob1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBfb0NvbnRyb2xDb25maWc/OiBhbnksIF9vU2V0dGluZ3M/OiBhbnkpIHtcblx0XHRPYmplY3Qua2V5cyhvUHJvcHMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG5cdFx0XHR0aGlzW3Byb3BOYW1lIGFzIGtleW9mIHRoaXNdID0gb1Byb3BzW3Byb3BOYW1lXTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBlbGVtZW50IElEIHRvIGEgZ2xvYmFsbHkgdW5pcXVlIElEIGJ5IHByZWZpeGluZyB3aXRoIHRoZSBCdWlsZGluZyBCbG9jayBJRC5cblx0ICpcblx0ICogQHBhcmFtIHN0cmluZ1BhcnRzXG5cdCAqIEByZXR1cm5zIEVpdGhlciB0aGUgZ2xvYmFsIElEIG9yIHVuZGVmaW5lZCBpZiB0aGUgQnVpbGRpbmcgQmxvY2sgZG9lc24ndCBoYXZlIGFuIElEXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlSWQoLi4uc3RyaW5nUGFydHM6IHN0cmluZ1tdKSB7XG5cdFx0Ly8gSWYgdGhlIGNoaWxkIGluc3RhbmNlIGhhcyBhbiBJRCBwcm9wZXJ0eSB1c2UgaXQgb3RoZXJ3aXNlIHJldHVybiB1bmRlZmluZWRcblx0XHRpZiAoKHRoaXMgYXMgYW55KS5pZCkge1xuXHRcdFx0cmV0dXJuIGdlbmVyYXRlKFsodGhpcyBhcyBhbnkpLmlkLCAuLi5zdHJpbmdQYXJ0c10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8vIFRoaXMgYmxvY2sgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIEkgYW0gbm90IHVzaW5nIHRoZW0gZm9yIG5vdyAvIG5lZWQgdG8gY2hhbmdlIHRoaXMgYnV0IHN0aWxsIHdhbnQgdG8ga2VlcCB0aGVtIGFyb3VuZFxuXHRwcm90ZWN0ZWQgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uIChvVmlzdWFsaXphdGlvbk9iamVjdFBhdGg6IGFueSwgY29udGV4dFBhdGg6IGFueSwgbVNldHRpbmdzOiBhbnksIG1FeHRyYVBhcmFtcz86IGFueSkge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBtU2V0dGluZ3MuYXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9yaWdpbmFsVmlld0RhdGEgPSBtU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhICYmIG1TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEuZ2V0RGF0YSgpO1xuXHRcdGxldCB2aWV3RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsVmlld0RhdGEpO1xuXHRcdGRlbGV0ZSB2aWV3RGF0YS5yZXNvdXJjZUJ1bmRsZTtcblx0XHR2aWV3RGF0YSA9IGRlZXBDbG9uZSh2aWV3RGF0YSk7XG5cdFx0dmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24gPSBtZXJnZSh2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiwgbUV4dHJhUGFyYW1zKTtcblx0XHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRcdG1TZXR0aW5ncy5tb2RlbHMubWV0YU1vZGVsLFxuXHRcdFx0b0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRtZXJnZSxcblx0XHRcdG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sXG5cdFx0XHR2aWV3RGF0YVxuXHRcdCk7XG5cdH07XG5cdHB1YmxpYyBnZXRQcm9wZXJ0aWVzKCkge1xuXHRcdGNvbnN0IGFsbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IG9JbnN0YW5jZUtleSBpbiB0aGlzKSB7XG5cdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShvSW5zdGFuY2VLZXkpKSB7XG5cdFx0XHRcdGFsbFByb3BlcnRpZXNbb0luc3RhbmNlS2V5XSA9IHRoaXNbb0luc3RhbmNlS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFsbFByb3BlcnRpZXM7XG5cdH1cblx0c3RhdGljIHJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cdHN0YXRpYyB1bnJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cdHB1YmxpYyBhZGRDb25kaXRpb25hbGx5KGNvbmRpdGlvbj86IGJvb2xlYW4sIHBhcnRUb0FkZD86IGFueSkge1xuXHRcdGlmIChjb25kaXRpb24pIHtcblx0XHRcdHJldHVybiBwYXJ0VG9BZGQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxuXHRwcm90ZWN0ZWQgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGAke2F0dHJpYnV0ZU5hbWV9PVwiJHt2YWx1ZX1cImA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlzUHVibGljPzogYm9vbGVhbjtcblx0ZGVmYXVsdFZhbHVlPzogYW55O1xuXHRjb21wdXRlZD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0JGtpbmQ/OiBzdHJpbmdbXTtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbiA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRpc1B1YmxpYz86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0Y29tcHV0ZWQ/OiBib29sZWFuO1xuXHQkVHlwZT86IHN0cmluZ1tdO1xuXHQka2luZD86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tFdmVudCA9IHt9O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IHtcblx0aXNQdWJsaWM/OiBib29sZWFuO1xuXHR0eXBlOiBzdHJpbmc7XG5cdHNsb3Q/OiBzdHJpbmc7XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG59O1xudHlwZSBDb21tb25CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiA9IHtcblx0bmFtZXNwYWNlOiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0eG1sVGFnPzogc3RyaW5nO1xuXHRmcmFnbWVudD86IHN0cmluZztcblx0cHVibGljTmFtZXNwYWNlPzogc3RyaW5nO1xuXG5cdGlzUnVudGltZT86IGJvb2xlYW47XG5cdGlzT3Blbj86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMiA9IENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uICZcblx0dHlwZW9mIEJ1aWxkaW5nQmxvY2tCYXNlICYge1xuXHRcdGFwaVZlcnNpb246IDI7XG5cdFx0bWV0YWRhdGE6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YTtcblx0fTtcblxuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMSA9IENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uICYge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFwaVZlcnNpb24/OiAxO1xuXHRjcmVhdGU/OiBGdW5jdGlvbjtcblx0Z2V0VGVtcGxhdGU/OiBGdW5jdGlvbjtcblx0bWV0YWRhdGE6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YTtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiA9IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjIgfCBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxO1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja01ldGFkYXRhID0ge1xuXHRldmVudHM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tFdmVudD47XG5cdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24+O1xufTtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBhbnkpOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEge1xuXHRpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShcIm1ldGFkYXRhXCIpKSB7XG5cdFx0dGFyZ2V0Lm1ldGFkYXRhID0gZGVlcENsb25lKFxuXHRcdFx0dGFyZ2V0Lm1ldGFkYXRhIHx8IHtcblx0XHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uczoge30sXG5cdFx0XHRcdGV2ZW50czoge31cblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cdHJldHVybiB0YXJnZXQubWV0YWRhdGE7XG59O1xuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBwcm9wZXJ0eSBzaGFsbCBiZSBkZWNsYXJlZCBhcyBhbiB4bWwgYXR0cmlidXRlIHRoYXQgY2FuIGJlIHVzZWQgZnJvbSB0aGUgb3V0c2lkZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2suXG4gKlxuICogQHBhcmFtIGF0dHJpYnV0ZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhtbEF0dHJpYnV0ZShhdHRyaWJ1dGVEZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHhtbEV2ZW50KCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IEJ1aWxkaW5nQmxvY2tCYXNlLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldC5jb25zdHJ1Y3Rvcik7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmV2ZW50c1twcm9wZXJ0eUtleV0gPSB7IHR5cGU6IFwiRnVuY3Rpb25cIiB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4geG1sIGFnZ3JlZ2F0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZnJvbSB0aGUgb3V0c2lkZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2suXG4gKlxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sQWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCdWlsZGluZ0Jsb2NrKG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbjogQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjbGFzc0RlZmluaXRpb246IGFueSkge1xuXHRcdGVuc3VyZU1ldGFkYXRhKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnhtbFRhZyA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5uYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ucHVibGljTmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5mcmFnbWVudCA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5mcmFnbWVudDtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNPcGVuID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzT3Blbjtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNSdW50aW1lID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzUnVudGltZTtcblx0XHRjbGFzc0RlZmluaXRpb24uYXBpVmVyc2lvbiA9IDI7XG5cdFx0aWYgKGNsYXNzRGVmaW5pdGlvbi5pc1J1bnRpbWUpIHtcblx0XHRcdGNsYXNzRGVmaW5pdGlvbi5wcm90b3R5cGUuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbiAodGhpczogYW55KSB7XG5cdFx0XHRcdGNvbnN0IGNsYXNzTmFtZSA9IGAke29CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2V9LiR7b0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWV9YC5yZXBsYWNlKC9cXC4vZywgXCIvXCIpO1xuXHRcdFx0XHRjb25zdCBleHRyYVByb3BzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcGVydGllc0tleSBpbiBjbGFzc0RlZmluaXRpb24ubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gdGhpc1twcm9wZXJ0aWVzS2V5XTtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5pc0E/LihcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGV4dHJhUHJvcHMucHVzaCh4bWxgZmVCQjoke3Byb3BlcnRpZXNLZXl9PVwiJHtwcm9wZXJ0eVZhbHVlfVwiYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgZXZlbnRzS2V5IGluIGNsYXNzRGVmaW5pdGlvbi5tZXRhZGF0YS5ldmVudHMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudHNWYWx1ZSA9IHRoaXNbZXZlbnRzS2V5XTtcblx0XHRcdFx0XHRpZiAoZXZlbnRzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0ZXh0cmFQcm9wcy5wdXNoKHhtbGBmZUJCOiR7ZXZlbnRzS2V5fT1cIiR7ZXZlbnRzVmFsdWV9XCJgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHhtbGA8Y29yZTpGcmFnbWVudFxuXHRcdFx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHRcdFx0eG1sbnM6ZmVCQj1cInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzXCJcblx0XHRcdFx0XHRmcmFnbWVudE5hbWU9XCIke2NsYXNzTmFtZX1cIlxuXHRcdFx0XHRcdGlkPVwie3RoaXM+aWR9XCJcblx0XHRcdFx0XHR0eXBlPVwiRkVfQ09NUE9ORU5UU1wiXG5cdFx0XHRcdFx0JHtleHRyYVByb3BzfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdDwvY29yZTpGcmFnbWVudD5gO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjbGFzc0RlZmluaXRpb24ucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZWdpc3RlckJ1aWxkaW5nQmxvY2soY2xhc3NEZWZpbml0aW9uKTtcblx0XHR9O1xuXHRcdGNsYXNzRGVmaW5pdGlvbi51bnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBjbGFzc0RlZmluaXRpb24ubmFtZXNwYWNlLCBjbGFzc0RlZmluaXRpb24ubmFtZSk7XG5cdFx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UsIGNsYXNzRGVmaW5pdGlvbi5uYW1lKTtcblx0XHR9O1xuXHR9O1xufVxuXG5GcmFnbWVudC5yZWdpc3RlclR5cGUoXCJGRV9DT01QT05FTlRTXCIsIHtcblx0bG9hZDogYXN5bmMgZnVuY3Rpb24gKG1TZXR0aW5nczogYW55KSB7XG5cdFx0bGV0IGZuUmVzb2x2ZTogYW55O1xuXHRcdGxldCBmblJlamVjdDogYW55O1xuXHRcdGNvbnN0IGxvYWRlclByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRmblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zm5SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0c2FwLnVpLnJlcXVpcmUoW21TZXR0aW5ncy5mcmFnbWVudE5hbWVdLCAoZnJhZ21lbnRDbGFzczogYW55KSA9PiB7XG5cdFx0XHRpZiAoIWZyYWdtZW50Q2xhc3MpIHtcblx0XHRcdFx0Zm5SZWplY3QoXCJDb3VsZCBub3QgbG9hZCBcIiArIG1TZXR0aW5ncy5mcmFnbWVudE5hbWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm5SZXNvbHZlKGZyYWdtZW50Q2xhc3MpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBsb2FkZXJQcm9taXNlO1xuXHR9LFxuXHRpbml0OiBhc3luYyBmdW5jdGlvbiAobVNldHRpbmdzOiBhbnkpIHtcblx0XHRjb25zdCBteUNsYXNzID0gbVNldHRpbmdzLmZyYWdtZW50Q29udGVudDtcblx0XHRjb25zdCBjbGFzc1NldHRpbmdzOiBhbnkgPSB7fTtcblx0XHRjb25zdCBmZUN1c3RvbURhdGEgPSBtU2V0dGluZ3M/LmN1c3RvbURhdGE/LlswXT8ubVByb3BlcnRpZXM/LnZhbHVlPy5bXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrc1wiXSB8fCB7fTtcblx0XHRkZWxldGUgbVNldHRpbmdzLmN1c3RvbURhdGE7XG5cdFx0Y29uc3QgcGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcpIGFzIGFueTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQobVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3KTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgcGFnZU1vZGVsID0gcGFnZUNvbXBvbmVudC5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gbXlDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU1ldGFkYXRhID0gbXlDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAocHJvcGVydHlNZXRhZGF0YS50eXBlID09PSBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpIHtcblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gcGFnZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdKTtcblx0XHRcdFx0aWYgKGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXS5nZXRPYmplY3QoKSkge1xuXHRcdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXS5nZXRPYmplY3QoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiaW5kIHRvIG1ldGFtb2RlbFxuXHRcdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGV2ZW50TmFtZSBpbiBteUNsYXNzLm1ldGFkYXRhLmV2ZW50cykge1xuXHRcdFx0aWYgKGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdICYmIGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbZXZlbnROYW1lXSA9IE9iamVjdFBhdGguZ2V0KGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdLnN1YnN0cmluZygxKSwgbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbGFzc1NldHRpbmdzW2V2ZW50TmFtZV0gPSBcIlwiOyAvLyBGb3Igbm93LCBtaWdodCBuZWVkIHRvIHJlc29sdmUgbW9yZSBzdHVmZlxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gKE1hbmFnZWRPYmplY3QgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0RXgpLnJ1bldpdGhQcmVwcm9jZXNzb3JzKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IG15Q2xhc3MoY2xhc3NTZXR0aW5ncykucmVuZGVyKCk7XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5jcmVhdGVJZChzSWQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXR0aW5nczogZnVuY3Rpb24gKGNvbnRyb2xTZXR0aW5nczogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3QgYWxsQXNzb2NpYXRpb25zID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldEFzc29jaWF0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYXNzb2NpYXRpb25EZXRhaWxOYW1lIG9mIE9iamVjdC5rZXlzKGFsbEFzc29jaWF0aW9ucykpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoYXNzb2NpYXRpb25EZXRhaWxOYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXSA9IG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5jcmVhdGVJZChcblx0XHRcdFx0XHRcdFx0XHRjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7RUFZQTtBQUNBO0FBQ0E7TUFDYUEsaUI7SUFHWiwyQkFBWUMsTUFBWixFQUF5Q0MsZUFBekMsRUFBZ0VDLFVBQWhFLEVBQWtGO01BQUE7O01BQUEsS0FGeEVDLFFBRXdFLEdBRjdELEtBRTZEOztNQUFBLEtBb0J4RUMsbUJBcEJ3RSxHQW9CbEQsVUFBVUMsd0JBQVYsRUFBeUNDLFdBQXpDLEVBQTJEQyxTQUEzRCxFQUEyRUMsWUFBM0UsRUFBK0Y7UUFDOUgsSUFBTUMsYUFBYSxHQUFHRixTQUFTLENBQUNHLFlBQWhDO1FBQ0EsSUFBTUMsZ0JBQWdCLEdB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
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import deepClone from "sap/base/util/deepClone";
|
|
2
|
-
import
|
|
2
|
+
import merge from "sap/base/util/merge";
|
|
3
|
+
import ObjectPath from "sap/base/util/ObjectPath";
|
|
4
|
+
import { registerBuildingBlock, xml } from "sap/fe/core/buildingBlocks/BuildingBlockRuntime";
|
|
5
|
+
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
3
6
|
import { generate } from "sap/fe/core/helpers/StableIdHelper";
|
|
7
|
+
import ManagedObject from "sap/ui/base/ManagedObject";
|
|
8
|
+
import Component from "sap/ui/core/Component";
|
|
9
|
+
import Fragment from "sap/ui/core/Fragment";
|
|
10
|
+
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
11
|
+
import type { ManagedObjectEx } from "types/extension_types";
|
|
12
|
+
import ConverterContext from "../converters/ConverterContext";
|
|
4
13
|
/**
|
|
5
14
|
* Base class for Building Block
|
|
6
15
|
*/
|
|
7
16
|
export class BuildingBlockBase {
|
|
8
|
-
|
|
17
|
+
protected isPublic = false;
|
|
18
|
+
protected id!: string;
|
|
19
|
+
constructor(oProps: Record<string, any>, _oControlConfig?: any, _oSettings?: any) {
|
|
9
20
|
Object.keys(oProps).forEach((propName) => {
|
|
10
21
|
this[propName as keyof this] = oProps[propName];
|
|
11
22
|
});
|
|
@@ -24,9 +35,8 @@ export class BuildingBlockBase {
|
|
|
24
35
|
}
|
|
25
36
|
return undefined;
|
|
26
37
|
}
|
|
27
|
-
/*
|
|
28
38
|
// This block is commented out because I am not using them for now / need to change this but still want to keep them around
|
|
29
|
-
|
|
39
|
+
protected getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
|
|
30
40
|
const oAppComponent = mSettings.appComponent;
|
|
31
41
|
const originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
|
|
32
42
|
let viewData = Object.assign({}, originalViewData);
|
|
@@ -42,30 +52,35 @@ export class BuildingBlockBase {
|
|
|
42
52
|
viewData
|
|
43
53
|
);
|
|
44
54
|
};
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
getAllProperties(this: BuildingBlockDefinition) {
|
|
51
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
52
|
-
// @ts-ignore
|
|
53
|
-
return this.metadata.properties;
|
|
54
|
-
},
|
|
55
|
-
getName(this: BuildingBlockDefinition) {
|
|
56
|
-
return `${this.namespace}.${this.name}`;
|
|
57
|
-
},
|
|
58
|
-
getAllAggregations() {
|
|
59
|
-
return {};
|
|
60
|
-
},
|
|
61
|
-
getDefaultAggregationName() {
|
|
62
|
-
return "";
|
|
55
|
+
public getProperties() {
|
|
56
|
+
const allProperties: Record<string, any> = {};
|
|
57
|
+
for (const oInstanceKey in this) {
|
|
58
|
+
if (this.hasOwnProperty(oInstanceKey)) {
|
|
59
|
+
allProperties[oInstanceKey] = this[oInstanceKey];
|
|
63
60
|
}
|
|
64
|
-
}
|
|
65
|
-
|
|
61
|
+
}
|
|
62
|
+
return allProperties;
|
|
63
|
+
}
|
|
66
64
|
static register() {
|
|
67
65
|
// To be overriden
|
|
68
66
|
}
|
|
67
|
+
static unregister() {
|
|
68
|
+
// To be overriden
|
|
69
|
+
}
|
|
70
|
+
public addConditionally(condition?: boolean, partToAdd?: any) {
|
|
71
|
+
if (condition) {
|
|
72
|
+
return partToAdd;
|
|
73
|
+
} else {
|
|
74
|
+
return "";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
protected attr(attributeName: string, value: any) {
|
|
78
|
+
if (value !== undefined) {
|
|
79
|
+
return `${attributeName}="${value}"`;
|
|
80
|
+
} else {
|
|
81
|
+
return "";
|
|
82
|
+
}
|
|
83
|
+
}
|
|
69
84
|
}
|
|
70
85
|
|
|
71
86
|
export type BuildingBlockPropertyDefinition = {
|
|
@@ -89,6 +104,7 @@ export type BuildingBlockAggregationDefinition = {
|
|
|
89
104
|
isPublic?: boolean;
|
|
90
105
|
type: string;
|
|
91
106
|
slot?: string;
|
|
107
|
+
isDefault?: boolean;
|
|
92
108
|
};
|
|
93
109
|
type CommonBuildingBlockDefinition = {
|
|
94
110
|
namespace: string;
|
|
@@ -97,6 +113,7 @@ type CommonBuildingBlockDefinition = {
|
|
|
97
113
|
fragment?: string;
|
|
98
114
|
publicNamespace?: string;
|
|
99
115
|
|
|
116
|
+
isRuntime?: boolean;
|
|
100
117
|
isOpen?: boolean;
|
|
101
118
|
};
|
|
102
119
|
export type BuildingBlockDefinitionV2 = CommonBuildingBlockDefinition &
|
|
@@ -161,7 +178,23 @@ export function xmlEvent(): PropertyDecorator {
|
|
|
161
178
|
return propertyDescriptor;
|
|
162
179
|
} as any;
|
|
163
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
|
|
183
|
+
*
|
|
184
|
+
* @param aggregationDefinition
|
|
185
|
+
* @returns The decorated property
|
|
186
|
+
*/
|
|
187
|
+
export function xmlAggregation(aggregationDefinition: BuildingBlockAggregationDefinition): PropertyDecorator {
|
|
188
|
+
return function (target: BuildingBlockBase, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<any>) {
|
|
189
|
+
const metadata = ensureMetadata(target.constructor);
|
|
190
|
+
delete (propertyDescriptor as any).initializer;
|
|
191
|
+
if (!metadata.aggregations[propertyKey]) {
|
|
192
|
+
metadata.aggregations[propertyKey] = aggregationDefinition;
|
|
193
|
+
}
|
|
164
194
|
|
|
195
|
+
return propertyDescriptor;
|
|
196
|
+
} as any;
|
|
197
|
+
}
|
|
165
198
|
export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBlockDefinition) {
|
|
166
199
|
return function (classDefinition: any) {
|
|
167
200
|
ensureMetadata(classDefinition);
|
|
@@ -170,9 +203,116 @@ export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBloc
|
|
|
170
203
|
classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
|
|
171
204
|
classDefinition.fragment = oBuildingBlockDefinition.fragment;
|
|
172
205
|
classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
|
|
206
|
+
classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
|
|
173
207
|
classDefinition.apiVersion = 2;
|
|
208
|
+
if (classDefinition.isRuntime) {
|
|
209
|
+
classDefinition.prototype.getTemplate = function (this: any) {
|
|
210
|
+
const className = `${oBuildingBlockDefinition.namespace}.${oBuildingBlockDefinition.name}`.replace(/\./g, "/");
|
|
211
|
+
const extraProps = [];
|
|
212
|
+
for (const propertiesKey in classDefinition.metadata.properties) {
|
|
213
|
+
let propertyValue = this[propertiesKey];
|
|
214
|
+
if (propertyValue !== undefined) {
|
|
215
|
+
if (propertyValue.isA?.("sap.ui.model.Context")) {
|
|
216
|
+
propertyValue = propertyValue.getPath();
|
|
217
|
+
}
|
|
218
|
+
extraProps.push(xml`feBB:${propertiesKey}="${propertyValue}"`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
for (const eventsKey in classDefinition.metadata.events) {
|
|
222
|
+
const eventsValue = this[eventsKey];
|
|
223
|
+
if (eventsValue !== undefined) {
|
|
224
|
+
extraProps.push(xml`feBB:${eventsKey}="${eventsValue}"`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return xml`<core:Fragment
|
|
228
|
+
xmlns:core="sap.ui.core"
|
|
229
|
+
xmlns:feBB="sap.fe.core.buildingBlocks"
|
|
230
|
+
fragmentName="${className}"
|
|
231
|
+
id="{this>id}"
|
|
232
|
+
type="FE_COMPONENTS"
|
|
233
|
+
${extraProps}
|
|
234
|
+
>
|
|
235
|
+
</core:Fragment>`;
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
174
239
|
classDefinition.register = function () {
|
|
175
240
|
registerBuildingBlock(classDefinition);
|
|
176
241
|
};
|
|
242
|
+
classDefinition.unregister = function () {
|
|
243
|
+
XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
|
|
244
|
+
XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
|
|
245
|
+
};
|
|
177
246
|
};
|
|
178
247
|
}
|
|
248
|
+
|
|
249
|
+
Fragment.registerType("FE_COMPONENTS", {
|
|
250
|
+
load: async function (mSettings: any) {
|
|
251
|
+
let fnResolve: any;
|
|
252
|
+
let fnReject: any;
|
|
253
|
+
const loaderPromise = new Promise((resolve, reject) => {
|
|
254
|
+
fnResolve = resolve;
|
|
255
|
+
fnReject = reject;
|
|
256
|
+
});
|
|
257
|
+
sap.ui.require([mSettings.fragmentName], (fragmentClass: any) => {
|
|
258
|
+
if (!fragmentClass) {
|
|
259
|
+
fnReject("Could not load " + mSettings.fragmentName);
|
|
260
|
+
} else {
|
|
261
|
+
fnResolve(fragmentClass);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
return loaderPromise;
|
|
265
|
+
},
|
|
266
|
+
init: async function (mSettings: any) {
|
|
267
|
+
const myClass = mSettings.fragmentContent;
|
|
268
|
+
const classSettings: any = {};
|
|
269
|
+
const feCustomData = mSettings?.customData?.[0]?.mProperties?.value?.["sap.fe.core.buildingBlocks"] || {};
|
|
270
|
+
delete mSettings.customData;
|
|
271
|
+
const pageComponent = Component.getOwnerComponentFor(mSettings.containingView) as any;
|
|
272
|
+
const appComponent = CommonUtils.getAppComponent(mSettings.containingView);
|
|
273
|
+
const metaModel = appComponent.getMetaModel();
|
|
274
|
+
const pageModel = pageComponent.getModel("_pageModel");
|
|
275
|
+
for (const propertyName in myClass.metadata.properties) {
|
|
276
|
+
const propertyMetadata = myClass.metadata.properties[propertyName];
|
|
277
|
+
if (propertyMetadata.type === "sap.ui.model.Context") {
|
|
278
|
+
classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
|
|
279
|
+
if (classSettings[propertyName].getObject()) {
|
|
280
|
+
classSettings[propertyName] = classSettings[propertyName].getObject();
|
|
281
|
+
} else {
|
|
282
|
+
// bind to metamodel
|
|
283
|
+
classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
|
|
284
|
+
}
|
|
285
|
+
} else {
|
|
286
|
+
classSettings[propertyName] = feCustomData[propertyName];
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
for (const eventName in myClass.metadata.events) {
|
|
290
|
+
if (feCustomData[eventName] && feCustomData[eventName].startsWith(".")) {
|
|
291
|
+
classSettings[eventName] = ObjectPath.get(feCustomData[eventName].substring(1), mSettings.containingView.getController());
|
|
292
|
+
} else {
|
|
293
|
+
classSettings[eventName] = ""; // For now, might need to resolve more stuff
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return (ManagedObject as unknown as ManagedObjectEx).runWithPreprocessors(
|
|
297
|
+
() => {
|
|
298
|
+
return new myClass(classSettings).render();
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
id: function (sId: string) {
|
|
302
|
+
return mSettings.containingView.createId(sId);
|
|
303
|
+
},
|
|
304
|
+
settings: function (controlSettings: any) {
|
|
305
|
+
const allAssociations = this.getMetadata().getAssociations();
|
|
306
|
+
for (const associationDetailName of Object.keys(allAssociations)) {
|
|
307
|
+
if (controlSettings.hasOwnProperty(associationDetailName)) {
|
|
308
|
+
controlSettings[associationDetailName] = mSettings.containingView.createId(
|
|
309
|
+
controlSettings[associationDetailName]
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return controlSettings;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define([], function () {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
return {
|
|
9
|
+
base64Decode: function (base64) {
|
|
10
|
+
return atob(base64);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}, false);
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYXNlNjREZWNvZGUiLCJiYXNlNjQiLCJhdG9iIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCdWlsZGluZ0Jsb2NrRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcblx0YmFzZTY0RGVjb2RlOiAoYmFzZTY0OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gYXRvYihiYXNlNjQpO1xuXHR9XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7O1NBQWU7SUFDZEEsWUFBWSxFQUFFLFVBQUNDLE1BQUQsRUFBb0I7TUFDakMsT0FBT0MsSUFBSSxDQUFDRCxNQUFELENBQVg7SUFDQTtFQUhhLEMifQ==
|