@sapui5/sap.fe.core 1.103.0 → 1.106.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/ActionRuntime.js +121 -0
- package/src/sap/fe/core/ActionRuntime.ts +122 -0
- package/src/sap/fe/core/AppComponent.js +24 -11
- package/src/sap/fe/core/AppComponent.ts +17 -5
- package/src/sap/fe/core/AppStateHandler.js +74 -62
- package/src/sap/fe/core/AppStateHandler.ts +24 -29
- package/src/sap/fe/core/BaseController.js +2 -2
- package/src/sap/fe/core/CommonUtils.js +147 -180
- package/src/sap/fe/core/CommonUtils.ts +166 -193
- package/src/sap/fe/core/ExtensionAPI.js +2 -2
- package/src/sap/fe/core/PageController.js +2 -2
- package/src/sap/fe/core/TemplateComponent.js +21 -10
- package/src/sap/fe/core/TemplateComponent.ts +3 -0
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +7 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +194 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +162 -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 -227
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +268 -119
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +111 -76
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +96 -76
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +723 -637
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +361 -398
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +83 -55
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +42 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +29 -27
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +171 -74
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +167 -76
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +5 -21
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -17
- package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
- package/src/sap/fe/core/controllerextensions/Paginator.ts +11 -11
- package/src/sap/fe/core/controllerextensions/Placeholder.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +154 -123
- package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
- package/src/sap/fe/core/controllerextensions/SideEffects.js +157 -97
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +151 -95
- package/src/sap/fe/core/controllerextensions/ViewState.js +151 -80
- package/src/sap/fe/core/controllerextensions/ViewState.ts +95 -93
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +9 -9
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +6 -7
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +26 -11
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +30 -11
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -40
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +55 -47
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +31 -32
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1376 -914
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +654 -714
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +372 -326
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +210 -276
- 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 +670 -521
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +537 -535
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +85 -65
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +16 -21
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +25 -13
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +53 -43
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +18 -27
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +9 -15
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +19 -3
- package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +26 -16
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +5 -5
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -3
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.js +8 -3
- package/src/sap/fe/core/controls/FileWrapper.ts +5 -1
- package/src/sap/fe/core/controls/FilterBar.js +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +48 -17
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js +23 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +34 -9
- package/src/sap/fe/core/converters/ManifestSettings.js +19 -18
- package/src/sap/fe/core/converters/ManifestSettings.ts +53 -47
- package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +32 -10
- package/src/sap/fe/core/converters/MetaModelConverter.ts +42 -19
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +69 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +98 -51
- package/src/sap/fe/core/converters/controls/Common/Action.ts +121 -44
- package/src/sap/fe/core/converters/controls/Common/Chart.js +31 -34
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -34
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +43 -7
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -33
- package/src/sap/fe/core/converters/controls/Common/Form.js +8 -6
- package/src/sap/fe/core/converters/controls/Common/Form.ts +11 -14
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
- package/src/sap/fe/core/converters/controls/Common/Table.js +188 -157
- package/src/sap/fe/core/converters/controls/Common/Table.ts +279 -230
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +57 -21
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +71 -18
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +30 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +43 -34
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +37 -25
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +85 -49
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +74 -50
- package/src/sap/fe/core/converters/helpers/Aggregation.js +54 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +56 -8
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +6 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +10 -2
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +182 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +167 -0
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +8 -14
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +6 -9
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +31 -31
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +54 -47
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +44 -15
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +64 -30
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
- package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
- package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- 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 +5 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +4 -3
- package/src/sap/fe/core/helpers/BindingToolkit.js +56 -24
- package/src/sap/fe/core/helpers/BindingToolkit.ts +67 -21
- package/src/sap/fe/core/helpers/ClassSupport.js +31 -3
- package/src/sap/fe/core/helpers/ClassSupport.ts +24 -1
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +39 -0
- package/src/sap/fe/core/helpers/LoaderUtils.ts +14 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +475 -99
- package/src/sap/fe/core/helpers/MassEditHelper.ts +468 -155
- 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 +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +82 -36
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +52 -36
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +146 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +128 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- 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 +119 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +98 -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 +2 -2
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +4 -41
- package/src/sap/fe/core/messagebundle_ar.properties +22 -45
- package/src/sap/fe/core/messagebundle_bg.properties +22 -45
- package/src/sap/fe/core/messagebundle_ca.properties +22 -45
- package/src/sap/fe/core/messagebundle_cs.properties +22 -45
- package/src/sap/fe/core/messagebundle_cy.properties +21 -44
- package/src/sap/fe/core/messagebundle_da.properties +22 -45
- package/src/sap/fe/core/messagebundle_de.properties +22 -45
- package/src/sap/fe/core/messagebundle_el.properties +22 -45
- package/src/sap/fe/core/messagebundle_en.properties +21 -44
- package/src/sap/fe/core/messagebundle_en_GB.properties +21 -44
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -42
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -40
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +21 -42
- package/src/sap/fe/core/messagebundle_es.properties +22 -45
- package/src/sap/fe/core/messagebundle_es_MX.properties +22 -45
- package/src/sap/fe/core/messagebundle_et.properties +22 -45
- package/src/sap/fe/core/messagebundle_fi.properties +22 -45
- package/src/sap/fe/core/messagebundle_fr.properties +21 -44
- package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -43
- package/src/sap/fe/core/messagebundle_hi.properties +22 -45
- package/src/sap/fe/core/messagebundle_hr.properties +22 -45
- package/src/sap/fe/core/messagebundle_hu.properties +22 -45
- package/src/sap/fe/core/messagebundle_id.properties +22 -45
- package/src/sap/fe/core/messagebundle_it.properties +22 -45
- package/src/sap/fe/core/messagebundle_iw.properties +22 -45
- package/src/sap/fe/core/messagebundle_ja.properties +22 -45
- package/src/sap/fe/core/messagebundle_kk.properties +22 -45
- package/src/sap/fe/core/messagebundle_ko.properties +27 -50
- package/src/sap/fe/core/messagebundle_lt.properties +22 -45
- package/src/sap/fe/core/messagebundle_lv.properties +22 -45
- package/src/sap/fe/core/messagebundle_ms.properties +22 -45
- package/src/sap/fe/core/messagebundle_nl.properties +24 -47
- package/src/sap/fe/core/messagebundle_no.properties +22 -45
- package/src/sap/fe/core/messagebundle_pl.properties +23 -46
- package/src/sap/fe/core/messagebundle_pt.properties +23 -46
- package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -45
- package/src/sap/fe/core/messagebundle_ro.properties +22 -45
- package/src/sap/fe/core/messagebundle_ru.properties +22 -45
- package/src/sap/fe/core/messagebundle_sh.properties +22 -45
- package/src/sap/fe/core/messagebundle_sk.properties +22 -45
- package/src/sap/fe/core/messagebundle_sl.properties +22 -45
- package/src/sap/fe/core/messagebundle_sv.properties +22 -45
- package/src/sap/fe/core/messagebundle_th.properties +20 -43
- package/src/sap/fe/core/messagebundle_tr.properties +22 -45
- package/src/sap/fe/core/messagebundle_uk.properties +22 -45
- package/src/sap/fe/core/messagebundle_vi.properties +22 -45
- package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -45
- package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -45
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +102 -74
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +62 -63
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -8
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ShellServicesFactory.js +22 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +251 -200
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +160 -144
- 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 +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +4 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +5 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +5 -2
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +4 -5
- package/src/sap/fe/core/templating/EntitySetHelper.ts +4 -3
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js +34 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +28 -12
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +5 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/Email.js +2 -2
|
@@ -2,20 +2,38 @@
|
|
|
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/BindingToolkit", "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, BindingToolkit, 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 resolveBindingString = BindingToolkit.resolveBindingString;
|
|
13
|
+
var xml = BuildingBlockRuntime.xml;
|
|
10
14
|
var registerBuildingBlock = BuildingBlockRuntime.registerBuildingBlock;
|
|
11
15
|
|
|
16
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
17
|
+
|
|
12
18
|
/**
|
|
13
19
|
* Base class for Building Block
|
|
14
20
|
*/
|
|
15
21
|
var BuildingBlockBase = /*#__PURE__*/function () {
|
|
16
|
-
function BuildingBlockBase(oProps) {
|
|
22
|
+
function BuildingBlockBase(oProps, _oControlConfig, _oSettings) {
|
|
17
23
|
var _this = this;
|
|
18
24
|
|
|
25
|
+
this.isPublic = false;
|
|
26
|
+
|
|
27
|
+
this.getConverterContext = function (oVisualizationObjectPath, contextPath, mSettings, mExtraParams) {
|
|
28
|
+
var oAppComponent = mSettings.appComponent;
|
|
29
|
+
var originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
|
|
30
|
+
var viewData = Object.assign({}, originalViewData);
|
|
31
|
+
delete viewData.resourceBundle;
|
|
32
|
+
viewData = deepClone(viewData);
|
|
33
|
+
viewData.controlConfiguration = merge(viewData.controlConfiguration, mExtraParams);
|
|
34
|
+
return ConverterContext.createConverterContextForMacro(oVisualizationObjectPath.startingEntitySet.name, mSettings.models.metaModel, oAppComponent && oAppComponent.getDiagnostics(), merge, oVisualizationObjectPath.contextLocation, viewData);
|
|
35
|
+
};
|
|
36
|
+
|
|
19
37
|
Object.keys(oProps).forEach(function (propName) {
|
|
20
38
|
_this[propName] = oProps[propName];
|
|
21
39
|
});
|
|
@@ -42,51 +60,43 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
|
|
|
42
60
|
}
|
|
43
61
|
|
|
44
62
|
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
|
-
}*/
|
|
63
|
+
} // 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
64
|
;
|
|
86
65
|
|
|
66
|
+
_proto.getProperties = function getProperties() {
|
|
67
|
+
var allProperties = {};
|
|
68
|
+
|
|
69
|
+
for (var oInstanceKey in this) {
|
|
70
|
+
if (this.hasOwnProperty(oInstanceKey)) {
|
|
71
|
+
allProperties[oInstanceKey] = this[oInstanceKey];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return allProperties;
|
|
76
|
+
};
|
|
77
|
+
|
|
87
78
|
BuildingBlockBase.register = function register() {// To be overriden
|
|
88
79
|
};
|
|
89
80
|
|
|
81
|
+
BuildingBlockBase.unregister = function unregister() {// To be overriden
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
_proto.addConditionally = function addConditionally(condition, partToAdd) {
|
|
85
|
+
if (condition) {
|
|
86
|
+
return partToAdd;
|
|
87
|
+
} else {
|
|
88
|
+
return "";
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
_proto.attr = function attr(attributeName, value) {
|
|
93
|
+
if (value !== undefined) {
|
|
94
|
+
return "".concat(attributeName, "=\"").concat(value, "\"");
|
|
95
|
+
} else {
|
|
96
|
+
return "";
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
90
100
|
return BuildingBlockBase;
|
|
91
101
|
}();
|
|
92
102
|
|
|
@@ -140,9 +150,32 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
|
|
|
140
150
|
return propertyDescriptor;
|
|
141
151
|
};
|
|
142
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
|
|
155
|
+
*
|
|
156
|
+
* @param aggregationDefinition
|
|
157
|
+
* @returns The decorated property
|
|
158
|
+
*/
|
|
159
|
+
|
|
143
160
|
|
|
144
161
|
_exports.xmlEvent = xmlEvent;
|
|
145
162
|
|
|
163
|
+
function xmlAggregation(aggregationDefinition) {
|
|
164
|
+
return function (target, propertyKey, propertyDescriptor) {
|
|
165
|
+
var metadata = ensureMetadata(target.constructor);
|
|
166
|
+
delete propertyDescriptor.initializer;
|
|
167
|
+
|
|
168
|
+
if (!metadata.aggregations[propertyKey]) {
|
|
169
|
+
metadata.aggregations[propertyKey] = aggregationDefinition;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return propertyDescriptor;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
_exports.xmlAggregation = xmlAggregation;
|
|
177
|
+
var RUNTIME_BLOCKS = {};
|
|
178
|
+
|
|
146
179
|
function defineBuildingBlock(oBuildingBlockDefinition) {
|
|
147
180
|
return function (classDefinition) {
|
|
148
181
|
ensureMetadata(classDefinition);
|
|
@@ -151,15 +184,133 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
|
|
|
151
184
|
classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
|
|
152
185
|
classDefinition.fragment = oBuildingBlockDefinition.fragment;
|
|
153
186
|
classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
|
|
187
|
+
classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
|
|
154
188
|
classDefinition.apiVersion = 2;
|
|
155
189
|
|
|
190
|
+
if (classDefinition.isRuntime) {
|
|
191
|
+
classDefinition.prototype.getTemplate = function () {
|
|
192
|
+
var className = "".concat(oBuildingBlockDefinition.namespace, ".").concat(oBuildingBlockDefinition.name);
|
|
193
|
+
var extraProps = [];
|
|
194
|
+
|
|
195
|
+
for (var propertiesKey in classDefinition.metadata.properties) {
|
|
196
|
+
var propertyValue = this[propertiesKey];
|
|
197
|
+
|
|
198
|
+
if (propertyValue !== undefined) {
|
|
199
|
+
var _propertyValue$isA, _propertyValue;
|
|
200
|
+
|
|
201
|
+
if ((_propertyValue$isA = (_propertyValue = propertyValue).isA) !== null && _propertyValue$isA !== void 0 && _propertyValue$isA.call(_propertyValue, "sap.ui.model.Context")) {
|
|
202
|
+
propertyValue = propertyValue.getPath();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
extraProps.push(xml(_templateObject || (_templateObject = _taggedTemplateLiteral(["feBB:", "=\"", "\""])), propertiesKey, propertyValue));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
for (var eventsKey in classDefinition.metadata.events) {
|
|
210
|
+
var eventsValue = this[eventsKey];
|
|
211
|
+
|
|
212
|
+
if (eventsValue !== undefined) {
|
|
213
|
+
extraProps.push(xml(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["feBB:", "=\"", "\""])), eventsKey, eventsValue));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
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);
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
156
221
|
classDefinition.register = function () {
|
|
157
222
|
registerBuildingBlock(classDefinition);
|
|
223
|
+
|
|
224
|
+
if (classDefinition.isRuntime) {
|
|
225
|
+
RUNTIME_BLOCKS[oBuildingBlockDefinition.namespace + "." + oBuildingBlockDefinition.name] = classDefinition;
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
classDefinition.unregister = function () {
|
|
230
|
+
XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
|
|
231
|
+
XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
|
|
158
232
|
};
|
|
159
233
|
};
|
|
160
234
|
}
|
|
161
235
|
|
|
162
236
|
_exports.defineBuildingBlock = defineBuildingBlock;
|
|
237
|
+
Fragment.registerType("FE_COMPONENTS", {
|
|
238
|
+
load: function (mSettings) {
|
|
239
|
+
try {
|
|
240
|
+
return Promise.resolve(RUNTIME_BLOCKS[mSettings.fragmentName]);
|
|
241
|
+
} catch (e) {
|
|
242
|
+
return Promise.reject(e);
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
init: function (mSettings) {
|
|
246
|
+
try {
|
|
247
|
+
var _mSettings$customData, _mSettings$customData2, _mSettings$customData3, _mSettings$customData4;
|
|
248
|
+
|
|
249
|
+
var myClass = mSettings.fragmentContent;
|
|
250
|
+
var classSettings = {};
|
|
251
|
+
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"]) || {};
|
|
252
|
+
delete mSettings.customData;
|
|
253
|
+
var pageComponent = Component.getOwnerComponentFor(mSettings.containingView);
|
|
254
|
+
var appComponent = CommonUtils.getAppComponent(mSettings.containingView);
|
|
255
|
+
var metaModel = appComponent.getMetaModel();
|
|
256
|
+
var pageModel = pageComponent.getModel("_pageModel");
|
|
257
|
+
|
|
258
|
+
for (var propertyName in myClass.metadata.properties) {
|
|
259
|
+
var propertyMetadata = myClass.metadata.properties[propertyName];
|
|
260
|
+
|
|
261
|
+
if (propertyMetadata.type === "sap.ui.model.Context") {
|
|
262
|
+
classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
|
|
263
|
+
|
|
264
|
+
if (classSettings[propertyName].getObject()) {
|
|
265
|
+
classSettings[propertyName] = classSettings[propertyName].getObject();
|
|
266
|
+
} else {
|
|
267
|
+
// bind to metamodel
|
|
268
|
+
classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
|
|
269
|
+
}
|
|
270
|
+
} else {
|
|
271
|
+
var vValue = feCustomData[propertyName];
|
|
272
|
+
|
|
273
|
+
if (typeof vValue === "string") {
|
|
274
|
+
vValue = resolveBindingString(vValue, propertyMetadata.type);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
classSettings[propertyName] = vValue;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
for (var eventName in myClass.metadata.events) {
|
|
282
|
+
if (feCustomData[eventName] && feCustomData[eventName].startsWith(".")) {
|
|
283
|
+
classSettings[eventName] = ObjectPath.get(feCustomData[eventName].substring(1), mSettings.containingView.getController());
|
|
284
|
+
} else {
|
|
285
|
+
classSettings[eventName] = ""; // For now, might need to resolve more stuff
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return Promise.resolve(ManagedObject.runWithPreprocessors(function () {
|
|
290
|
+
return new myClass(classSettings).render(mSettings.containingView, appComponent);
|
|
291
|
+
}, {
|
|
292
|
+
id: function (sId) {
|
|
293
|
+
return mSettings.containingView.createId(sId);
|
|
294
|
+
},
|
|
295
|
+
settings: function (controlSettings) {
|
|
296
|
+
var allAssociations = this.getMetadata().getAssociations();
|
|
297
|
+
|
|
298
|
+
for (var _i = 0, _Object$keys = Object.keys(allAssociations); _i < _Object$keys.length; _i++) {
|
|
299
|
+
var associationDetailName = _Object$keys[_i];
|
|
300
|
+
|
|
301
|
+
if (controlSettings.hasOwnProperty(associationDetailName)) {
|
|
302
|
+
controlSettings[associationDetailName] = mSettings.containingView.createId(controlSettings[associationDetailName]);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return controlSettings;
|
|
307
|
+
}
|
|
308
|
+
}));
|
|
309
|
+
} catch (e) {
|
|
310
|
+
return Promise.reject(e);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
});
|
|
163
314
|
return _exports;
|
|
164
315
|
}, 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==
|
|
316
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIm9Qcm9wcyIsIl9vQ29udHJvbENvbmZpZyIsIl9vU2V0dGluZ3MiLCJpc1B1YmxpYyIsImdldENvbnZlcnRlckNvbnRleHQiLCJvVmlzdWFsaXphdGlvbk9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsIm1TZXR0aW5ncyIsIm1FeHRyYVBhcmFtcyIsIm9BcHBDb21wb25lbnQiLCJhcHBDb21wb25lbnQiLCJvcmlnaW5hbFZpZXdEYXRhIiwibW9kZWxzIiwidmlld0RhdGEiLCJnZXREYXRhIiwiT2JqZWN0IiwiYXNzaWduIiwicmVzb3VyY2VCdW5kbGUiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsIm1lcmdlIiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmFtZSIsIm1ldGFNb2RlbCIsImdldERpYWdub3N0aWNzIiwiY29udGV4dExvY2F0aW9uIiwia2V5cyIsImZvckVhY2giLCJwcm9wTmFtZSIsImNyZWF0ZUlkIiwiaWQiLCJzdHJpbmdQYXJ0cyIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwiZ2V0UHJvcGVydGllcyIsImFsbFByb3BlcnRpZXMiLCJvSW5zdGFuY2VLZXkiLCJoYXNPd25Qcm9wZXJ0eSIsInJlZ2lzdGVyIiwidW5yZWdpc3RlciIsImFkZENvbmRpdGlvbmFsbHkiLCJjb25kaXRpb24iLCJwYXJ0VG9BZGQiLCJhdHRyIiwiYXR0cmlidXRlTmFtZSIsInZhbHVlIiwiZW5zdXJlTWV0YWRhdGEiLCJ0YXJnZXQiLCJtZXRhZGF0YSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJldmVudHMiLCJ4bWxBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVEZWZpbml0aW9uIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxpemVyIiwieG1sRXZlbnQiLCJ0eXBlIiwieG1sQWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJSVU5USU1FX0JMT0NLUyIsImRlZmluZUJ1aWxkaW5nQmxvY2siLCJvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24iLCJjbGFzc0RlZmluaXRpb24iLCJ4bWxUYWciLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJmcmFnbWVudCIsImlzT3BlbiIsImlzUnVudGltZSIsImFwaVZlcnNpb24iLCJwcm90b3R5cGUiLCJnZXRUZW1wbGF0ZSIsImNsYXNzTmFtZSIsImV4dHJhUHJvcHMiLCJwcm9wZXJ0aWVzS2V5IiwicHJvcGVydHlWYWx1ZSIsImlzQSIsImdldFBhdGgiLCJwdXNoIiwieG1sIiwiZXZlbnRzS2V5IiwiZXZlbnRzVmFsdWUiLCJyZWdpc3RlckJ1aWxkaW5nQmxvY2siLCJYTUxQcmVwcm9jZXNzb3IiLCJwbHVnSW4iLCJGcmFnbWVudCIsInJlZ2lzdGVyVHlwZSIsImxvYWQiLCJmcmFnbWVudE5hbWUiLCJpbml0IiwibXlDbGFzcyIsImZyYWdtZW50Q29udGVudCIsImNsYXNzU2V0dGluZ3MiLCJmZUN1c3RvbURhdGEiLCJjdXN0b21EYXRhIiwibVByb3BlcnRpZXMiLCJwYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJjb250YWluaW5nVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0TWV0YU1vZGVsIiwicGFnZU1vZGVsIiwiZ2V0TW9kZWwiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eU1ldGFkYXRhIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3QiLCJ2VmFsdWUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImV2ZW50TmFtZSIsInN0YXJ0c1dpdGgiLCJPYmplY3RQYXRoIiwiZ2V0Iiwic3Vic3RyaW5nIiwiZ2V0Q29udHJvbGxlciIsIk1hbmFnZWRPYmplY3QiLCJydW5XaXRoUHJlcHJvY2Vzc29ycyIsInJlbmRlciIsInNJZCIsInNldHRpbmdzIiwiY29udHJvbFNldHRpbmdzIiwiYWxsQXNzb2NpYXRpb25zIiwiZ2V0TWV0YWRhdGEiLCJnZXRBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbkRldGFpbE5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrLCB4bWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1J1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgTWFuYWdlZE9iamVjdEV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBCdWlsZGluZyBCbG9ja1xuICovXG5leHBvcnQgY2xhc3MgQnVpbGRpbmdCbG9ja0Jhc2Uge1xuXHRwcm90ZWN0ZWQgaXNQdWJsaWMgPSBmYWxzZTtcblx0cHJvdGVjdGVkIGlkITogc3RyaW5nO1xuXHRjb25zdHJ1Y3RvcihvUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIF9vQ29udHJvbENvbmZpZz86IGFueSwgX29TZXR0aW5ncz86IGFueSkge1xuXHRcdE9iamVjdC5rZXlzKG9Qcm9wcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcblx0XHRcdHRoaXNbcHJvcE5hbWUgYXMga2V5b2YgdGhpc10gPSBvUHJvcHNbcHJvcE5hbWVdO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnQgdGhlIGdpdmVuIGxvY2FsIGVsZW1lbnQgSUQgdG8gYSBnbG9iYWxseSB1bmlxdWUgSUQgYnkgcHJlZml4aW5nIHdpdGggdGhlIEJ1aWxkaW5nIEJsb2NrIElELlxuXHQgKlxuXHQgKiBAcGFyYW0gc3RyaW5nUGFydHNcblx0ICogQHJldHVybnMgRWl0aGVyIHRoZSBnbG9iYWwgSUQgb3IgdW5kZWZpbmVkIGlmIHRoZSBCdWlsZGluZyBCbG9jayBkb2Vzbid0IGhhdmUgYW4gSURcblx0ICovXG5cdHB1YmxpYyBjcmVhdGVJZCguLi5zdHJpbmdQYXJ0czogc3RyaW5nW10pIHtcblx0XHQvLyBJZiB0aGUgY2hpbGQgaW5zdGFuY2UgaGFzIGFuIElEIHByb3BlcnR5IHVzZSBpdCBvdGhlcndpc2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICgodGhpcyBhcyBhbnkpLmlkKSB7XG5cdFx0XHRyZXR1cm4gZ2VuZXJhdGUoWyh0aGlzIGFzIGFueSkuaWQsIC4uLnN0cmluZ1BhcnRzXSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gVGhpcyBibG9jayBpcyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgSSBhbSBub3QgdXNpbmcgdGhlbSBmb3Igbm93IC8gbmVlZCB0byBjaGFuZ2UgdGhpcyBidXQgc3RpbGwgd2FudCB0byBrZWVwIHRoZW0gYXJvdW5kXG5cdHByb3RlY3RlZCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aDogYW55LCBjb250ZXh0UGF0aDogYW55LCBtU2V0dGluZ3M6IGFueSwgbUV4dHJhUGFyYW1zPzogYW55KSB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IG1TZXR0aW5ncy5hcHBDb21wb25lbnQ7XG5cdFx0Y29uc3Qgb3JpZ2luYWxWaWV3RGF0YSA9IG1TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEgJiYgbVNldHRpbmdzLm1vZGVscy52aWV3RGF0YS5nZXREYXRhKCk7XG5cdFx0bGV0IHZpZXdEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWxWaWV3RGF0YSk7XG5cdFx0ZGVsZXRlIHZpZXdEYXRhLnJlc291cmNlQnVuZGxlO1xuXHRcdHZpZXdEYXRhID0gZGVlcENsb25lKHZpZXdEYXRhKTtcblx0XHR2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiA9IG1lcmdlKHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLCBtRXh0cmFQYXJhbXMpO1xuXHRcdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhcblx0XHRcdG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lLFxuXHRcdFx0bVNldHRpbmdzLm1vZGVscy5tZXRhTW9kZWwsXG5cdFx0XHRvQXBwQ29tcG9uZW50ICYmIG9BcHBDb21wb25lbnQuZ2V0RGlhZ25vc3RpY3MoKSxcblx0XHRcdG1lcmdlLFxuXHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRcdHZpZXdEYXRhXG5cdFx0KTtcblx0fTtcblx0cHVibGljIGdldFByb3BlcnRpZXMoKSB7XG5cdFx0Y29uc3QgYWxsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdGZvciAoY29uc3Qgb0luc3RhbmNlS2V5IGluIHRoaXMpIHtcblx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KG9JbnN0YW5jZUtleSkpIHtcblx0XHRcdFx0YWxsUHJvcGVydGllc1tvSW5zdGFuY2VLZXldID0gdGhpc1tvSW5zdGFuY2VLZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWxsUHJvcGVydGllcztcblx0fVxuXHRzdGF0aWMgcmVnaXN0ZXIoKSB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblx0c3RhdGljIHVucmVnaXN0ZXIoKSB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblx0cHVibGljIGFkZENvbmRpdGlvbmFsbHkoY29uZGl0aW9uPzogYm9vbGVhbiwgcGFydFRvQWRkPzogYW55KSB7XG5cdFx0aWYgKGNvbmRpdGlvbikge1xuXHRcdFx0cmV0dXJuIHBhcnRUb0FkZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cdHByb3RlY3RlZCBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gYCR7YXR0cmlidXRlTmFtZX09XCIke3ZhbHVlfVwiYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24gPSB7XG5cdHR5cGU6IHN0cmluZztcblx0aXNQdWJsaWM/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiBhbnk7XG5cdGNvbXB1dGVkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHQka2luZD86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlzUHVibGljPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRjb21wdXRlZD86IGJvb2xlYW47XG5cdCRUeXBlPzogc3RyaW5nW107XG5cdCRraW5kPzogc3RyaW5nW107XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0V2ZW50ID0ge307XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uID0ge1xuXHRpc1B1YmxpYz86IGJvb2xlYW47XG5cdHR5cGU6IHN0cmluZztcblx0c2xvdD86IHN0cmluZztcblx0aXNEZWZhdWx0PzogYm9vbGVhbjtcbn07XG50eXBlIENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0ge1xuXHRuYW1lc3BhY2U6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHR4bWxUYWc/OiBzdHJpbmc7XG5cdGZyYWdtZW50Pzogc3RyaW5nO1xuXHRwdWJsaWNOYW1lc3BhY2U/OiBzdHJpbmc7XG5cblx0aXNSdW50aW1lPzogYm9vbGVhbjtcblx0aXNPcGVuPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYyID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJlxuXHR0eXBlb2YgQnVpbGRpbmdCbG9ja0Jhc2UgJiB7XG5cdFx0YXBpVmVyc2lvbjogMjtcblx0XHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xuXHR9O1xuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJiB7XG5cdG5hbWU6IHN0cmluZztcblx0YXBpVmVyc2lvbj86IDE7XG5cdGNyZWF0ZT86IEZ1bmN0aW9uO1xuXHRnZXRUZW1wbGF0ZT86IEZ1bmN0aW9uO1xuXHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0gQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMiB8IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjE7XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEgPSB7XG5cdGV2ZW50czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0V2ZW50Pjtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja1Byb3BlcnR5RGVmaW5pdGlvbj47XG5cdGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrUHJvcGVydHk8VD4gPSBUIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSk6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcblx0XHR0YXJnZXQubWV0YWRhdGEgPSBkZWVwQ2xvbmUoXG5cdFx0XHR0YXJnZXQubWV0YWRhdGEgfHwge1xuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdFx0ZXZlbnRzOiB7fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIHByb3BlcnR5IHNoYWxsIGJlIGRlY2xhcmVkIGFzIGFuIHhtbCBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBmcm9tIHRoZSBvdXRzaWRlIG9mIHRoZSBidWlsZGluZyBibG9jay5cbiAqXG4gKiBAcGFyYW0gYXR0cmlidXRlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sQXR0cmlidXRlKGF0dHJpYnV0ZURlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBCdWlsZGluZ0Jsb2NrQmFzZSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnQoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSA9IHsgdHlwZTogXCJGdW5jdGlvblwiIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyBhbnk7XG59XG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBwcm9wZXJ0eSBzaGFsbCBiZSBkZWNsYXJlZCBhcyBhbiB4bWwgYWdncmVnYXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmcm9tIHRoZSBvdXRzaWRlIG9mIHRoZSBidWlsZGluZyBibG9jay5cbiAqXG4gKiBAcGFyYW0gYWdncmVnYXRpb25EZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4bWxBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkRlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBCdWlsZGluZ0Jsb2NrQmFzZSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKCFtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldID0gYWdncmVnYXRpb25EZWZpbml0aW9uO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuY29uc3QgUlVOVElNRV9CTE9DS1M6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uPiA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJ1aWxkaW5nQmxvY2sob0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uOiBDb21tb25CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbikge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGNsYXNzRGVmaW5pdGlvbjogYW55KSB7XG5cdFx0ZW5zdXJlTWV0YWRhdGEoY2xhc3NEZWZpbml0aW9uKTtcblx0XHRjbGFzc0RlZmluaXRpb24ueG1sVGFnID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWU7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLm5hbWVzcGFjZSA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2U7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnB1YmxpY05hbWVzcGFjZSA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2U7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLmZyYWdtZW50ID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmZyYWdtZW50O1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5pc09wZW4gPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24uaXNPcGVuO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5pc1J1bnRpbWUgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24uaXNSdW50aW1lO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5hcGlWZXJzaW9uID0gMjtcblx0XHRpZiAoY2xhc3NEZWZpbml0aW9uLmlzUnVudGltZSkge1xuXHRcdFx0Y2xhc3NEZWZpbml0aW9uLnByb3RvdHlwZS5nZXRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0aGlzOiBhbnkpIHtcblx0XHRcdFx0Y29uc3QgY2xhc3NOYW1lID0gYCR7b0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWVzcGFjZX0uJHtvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZX1gO1xuXHRcdFx0XHRjb25zdCBleHRyYVByb3BzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcGVydGllc0tleSBpbiBjbGFzc0RlZmluaXRpb24ubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gdGhpc1twcm9wZXJ0aWVzS2V5XTtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5pc0E/LihcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGV4dHJhUHJvcHMucHVzaCh4bWxgZmVCQjoke3Byb3BlcnRpZXNLZXl9PVwiJHtwcm9wZXJ0eVZhbHVlfVwiYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgZXZlbnRzS2V5IGluIGNsYXNzRGVmaW5pdGlvbi5tZXRhZGF0YS5ldmVudHMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudHNWYWx1ZSA9IHRoaXNbZXZlbnRzS2V5XTtcblx0XHRcdFx0XHRpZiAoZXZlbnRzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0ZXh0cmFQcm9wcy5wdXNoKHhtbGBmZUJCOiR7ZXZlbnRzS2V5fT1cIiR7ZXZlbnRzVmFsdWV9XCJgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHhtbGA8Y29yZTpGcmFnbWVudFxuXHRcdFx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHRcdFx0eG1sbnM6ZmVCQj1cInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzXCJcblx0XHRcdFx0XHRmcmFnbWVudE5hbWU9XCIke2NsYXNzTmFtZX1cIlxuXHRcdFx0XHRcdGlkPVwie3RoaXM+aWR9XCJcblx0XHRcdFx0XHR0eXBlPVwiRkVfQ09NUE9ORU5UU1wiXG5cdFx0XHRcdFx0JHtleHRyYVByb3BzfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdDwvY29yZTpGcmFnbWVudD5gO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjbGFzc0RlZmluaXRpb24ucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZWdpc3RlckJ1aWxkaW5nQmxvY2soY2xhc3NEZWZpbml0aW9uKTtcblx0XHRcdGlmIChjbGFzc0RlZmluaXRpb24uaXNSdW50aW1lKSB7XG5cdFx0XHRcdFJVTlRJTUVfQkxPQ0tTW29CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2UgKyBcIi5cIiArIG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lXSA9IGNsYXNzRGVmaW5pdGlvbjtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNsYXNzRGVmaW5pdGlvbi51bnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBjbGFzc0RlZmluaXRpb24ubmFtZXNwYWNlLCBjbGFzc0RlZmluaXRpb24ubmFtZSk7XG5cdFx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UsIGNsYXNzRGVmaW5pdGlvbi5uYW1lKTtcblx0XHR9O1xuXHR9O1xufVxuXG5GcmFnbWVudC5yZWdpc3RlclR5cGUoXCJGRV9DT01QT05FTlRTXCIsIHtcblx0bG9hZDogYXN5bmMgZnVuY3Rpb24gKG1TZXR0aW5nczogYW55KSB7XG5cdFx0cmV0dXJuIFJVTlRJTUVfQkxPQ0tTW21TZXR0aW5ncy5mcmFnbWVudE5hbWVdO1xuXHR9LFxuXHRpbml0OiBhc3luYyBmdW5jdGlvbiAobVNldHRpbmdzOiBhbnkpIHtcblx0XHRjb25zdCBteUNsYXNzID0gbVNldHRpbmdzLmZyYWdtZW50Q29udGVudDtcblx0XHRjb25zdCBjbGFzc1NldHRpbmdzOiBhbnkgPSB7fTtcblx0XHRjb25zdCBmZUN1c3RvbURhdGEgPSBtU2V0dGluZ3M/LmN1c3RvbURhdGE/LlswXT8ubVByb3BlcnRpZXM/LnZhbHVlPy5bXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrc1wiXSB8fCB7fTtcblx0XHRkZWxldGUgbVNldHRpbmdzLmN1c3RvbURhdGE7XG5cdFx0Y29uc3QgcGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcpIGFzIGFueTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQobVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3KTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgcGFnZU1vZGVsID0gcGFnZUNvbXBvbmVudC5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gbXlDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU1ldGFkYXRhID0gbXlDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAocHJvcGVydHlNZXRhZGF0YS50eXBlID09PSBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpIHtcblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gcGFnZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdKTtcblx0XHRcdFx0aWYgKGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXS5nZXRPYmplY3QoKSkge1xuXHRcdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXS5nZXRPYmplY3QoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiaW5kIHRvIG1ldGFtb2RlbFxuXHRcdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxldCB2VmFsdWUgPSBmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXTtcblx0XHRcdFx0aWYgKHR5cGVvZiB2VmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHR2VmFsdWUgPSByZXNvbHZlQmluZGluZ1N0cmluZyh2VmFsdWUsIHByb3BlcnR5TWV0YWRhdGEudHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdlZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGV2ZW50TmFtZSBpbiBteUNsYXNzLm1ldGFkYXRhLmV2ZW50cykge1xuXHRcdFx0aWYgKGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdICYmIGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbZXZlbnROYW1lXSA9IE9iamVjdFBhdGguZ2V0KGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdLnN1YnN0cmluZygxKSwgbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbGFzc1NldHRpbmdzW2V2ZW50TmFtZV0gPSBcIlwiOyAvLyBGb3Igbm93LCBtaWdodCBuZWVkIHRvIHJlc29sdmUgbW9yZSBzdHVmZlxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gKE1hbmFnZWRPYmplY3QgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0RXgpLnJ1bldpdGhQcmVwcm9jZXNzb3JzKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IG15Q2xhc3MoY2xhc3NTZXR0aW5ncykucmVuZGVyKG1TZXR0aW5ncy5jb250YWluaW5nVmlldywgYXBwQ29tcG9uZW50KTtcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBmdW5jdGlvbiAoc0lkOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmNyZWF0ZUlkKHNJZCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldHRpbmdzOiBmdW5jdGlvbiAoY29udHJvbFNldHRpbmdzOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBhbGxBc3NvY2lhdGlvbnMgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QXNzb2NpYXRpb25zKCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhc3NvY2lhdGlvbkRldGFpbE5hbWUgb2YgT2JqZWN0LmtleXMoYWxsQXNzb2NpYXRpb25zKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2xTZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShhc3NvY2lhdGlvbkRldGFpbE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdID0gbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmNyZWF0ZUlkKFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBjb250cm9sU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFhQTtBQUNBO0FBQ0E7TUFDYUEsaUI7SUFHWiwyQkFBWUMsTUFBWixFQUF5Q0MsZUFBekMsRUFBZ0VDLFVBQWhFLEVBQWtGO01BQUE7O01BQUEsS0FGeEVDLFFBRXdFLEdBRjdELEtBRTZEOztNQUFB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
|
|
@@ -1,11 +1,23 @@
|
|
|
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";
|
|
6
|
+
import { BindingToolkitExpression, resolveBindingString } from "sap/fe/core/helpers/BindingToolkit";
|
|
3
7
|
import { generate } from "sap/fe/core/helpers/StableIdHelper";
|
|
8
|
+
import ManagedObject from "sap/ui/base/ManagedObject";
|
|
9
|
+
import Component from "sap/ui/core/Component";
|
|
10
|
+
import Fragment from "sap/ui/core/Fragment";
|
|
11
|
+
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
12
|
+
import type { ManagedObjectEx } from "types/extension_types";
|
|
13
|
+
import ConverterContext from "../converters/ConverterContext";
|
|
4
14
|
/**
|
|
5
15
|
* Base class for Building Block
|
|
6
16
|
*/
|
|
7
17
|
export class BuildingBlockBase {
|
|
8
|
-
|
|
18
|
+
protected isPublic = false;
|
|
19
|
+
protected id!: string;
|
|
20
|
+
constructor(oProps: Record<string, any>, _oControlConfig?: any, _oSettings?: any) {
|
|
9
21
|
Object.keys(oProps).forEach((propName) => {
|
|
10
22
|
this[propName as keyof this] = oProps[propName];
|
|
11
23
|
});
|
|
@@ -24,9 +36,8 @@ export class BuildingBlockBase {
|
|
|
24
36
|
}
|
|
25
37
|
return undefined;
|
|
26
38
|
}
|
|
27
|
-
/*
|
|
28
39
|
// 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
|
-
|
|
40
|
+
protected getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
|
|
30
41
|
const oAppComponent = mSettings.appComponent;
|
|
31
42
|
const originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
|
|
32
43
|
let viewData = Object.assign({}, originalViewData);
|
|
@@ -42,30 +53,35 @@ export class BuildingBlockBase {
|
|
|
42
53
|
viewData
|
|
43
54
|
);
|
|
44
55
|
};
|
|
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 "";
|
|
56
|
+
public getProperties() {
|
|
57
|
+
const allProperties: Record<string, any> = {};
|
|
58
|
+
for (const oInstanceKey in this) {
|
|
59
|
+
if (this.hasOwnProperty(oInstanceKey)) {
|
|
60
|
+
allProperties[oInstanceKey] = this[oInstanceKey];
|
|
63
61
|
}
|
|
64
|
-
}
|
|
65
|
-
|
|
62
|
+
}
|
|
63
|
+
return allProperties;
|
|
64
|
+
}
|
|
66
65
|
static register() {
|
|
67
66
|
// To be overriden
|
|
68
67
|
}
|
|
68
|
+
static unregister() {
|
|
69
|
+
// To be overriden
|
|
70
|
+
}
|
|
71
|
+
public addConditionally(condition?: boolean, partToAdd?: any) {
|
|
72
|
+
if (condition) {
|
|
73
|
+
return partToAdd;
|
|
74
|
+
} else {
|
|
75
|
+
return "";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
protected attr(attributeName: string, value: any) {
|
|
79
|
+
if (value !== undefined) {
|
|
80
|
+
return `${attributeName}="${value}"`;
|
|
81
|
+
} else {
|
|
82
|
+
return "";
|
|
83
|
+
}
|
|
84
|
+
}
|
|
69
85
|
}
|
|
70
86
|
|
|
71
87
|
export type BuildingBlockPropertyDefinition = {
|
|
@@ -89,6 +105,7 @@ export type BuildingBlockAggregationDefinition = {
|
|
|
89
105
|
isPublic?: boolean;
|
|
90
106
|
type: string;
|
|
91
107
|
slot?: string;
|
|
108
|
+
isDefault?: boolean;
|
|
92
109
|
};
|
|
93
110
|
type CommonBuildingBlockDefinition = {
|
|
94
111
|
namespace: string;
|
|
@@ -97,6 +114,7 @@ type CommonBuildingBlockDefinition = {
|
|
|
97
114
|
fragment?: string;
|
|
98
115
|
publicNamespace?: string;
|
|
99
116
|
|
|
117
|
+
isRuntime?: boolean;
|
|
100
118
|
isOpen?: boolean;
|
|
101
119
|
};
|
|
102
120
|
export type BuildingBlockDefinitionV2 = CommonBuildingBlockDefinition &
|
|
@@ -119,6 +137,8 @@ export type BuildingBlockMetadata = {
|
|
|
119
137
|
aggregations: Record<string, BuildingBlockAggregationDefinition>;
|
|
120
138
|
};
|
|
121
139
|
|
|
140
|
+
export type BuildingBlockProperty<T> = T | BindingToolkitExpression<T>;
|
|
141
|
+
|
|
122
142
|
const ensureMetadata = function (target: any): BuildingBlockMetadata {
|
|
123
143
|
if (!target.hasOwnProperty("metadata")) {
|
|
124
144
|
target.metadata = deepClone(
|
|
@@ -161,7 +181,24 @@ export function xmlEvent(): PropertyDecorator {
|
|
|
161
181
|
return propertyDescriptor;
|
|
162
182
|
} as any;
|
|
163
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
|
|
186
|
+
*
|
|
187
|
+
* @param aggregationDefinition
|
|
188
|
+
* @returns The decorated property
|
|
189
|
+
*/
|
|
190
|
+
export function xmlAggregation(aggregationDefinition: BuildingBlockAggregationDefinition): PropertyDecorator {
|
|
191
|
+
return function (target: BuildingBlockBase, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<any>) {
|
|
192
|
+
const metadata = ensureMetadata(target.constructor);
|
|
193
|
+
delete (propertyDescriptor as any).initializer;
|
|
194
|
+
if (!metadata.aggregations[propertyKey]) {
|
|
195
|
+
metadata.aggregations[propertyKey] = aggregationDefinition;
|
|
196
|
+
}
|
|
164
197
|
|
|
198
|
+
return propertyDescriptor;
|
|
199
|
+
} as any;
|
|
200
|
+
}
|
|
201
|
+
const RUNTIME_BLOCKS: Record<string, BuildingBlockDefinition> = {};
|
|
165
202
|
export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBlockDefinition) {
|
|
166
203
|
return function (classDefinition: any) {
|
|
167
204
|
ensureMetadata(classDefinition);
|
|
@@ -170,9 +207,110 @@ export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBloc
|
|
|
170
207
|
classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
|
|
171
208
|
classDefinition.fragment = oBuildingBlockDefinition.fragment;
|
|
172
209
|
classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
|
|
210
|
+
classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
|
|
173
211
|
classDefinition.apiVersion = 2;
|
|
212
|
+
if (classDefinition.isRuntime) {
|
|
213
|
+
classDefinition.prototype.getTemplate = function (this: any) {
|
|
214
|
+
const className = `${oBuildingBlockDefinition.namespace}.${oBuildingBlockDefinition.name}`;
|
|
215
|
+
const extraProps = [];
|
|
216
|
+
for (const propertiesKey in classDefinition.metadata.properties) {
|
|
217
|
+
let propertyValue = this[propertiesKey];
|
|
218
|
+
if (propertyValue !== undefined) {
|
|
219
|
+
if (propertyValue.isA?.("sap.ui.model.Context")) {
|
|
220
|
+
propertyValue = propertyValue.getPath();
|
|
221
|
+
}
|
|
222
|
+
extraProps.push(xml`feBB:${propertiesKey}="${propertyValue}"`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
for (const eventsKey in classDefinition.metadata.events) {
|
|
226
|
+
const eventsValue = this[eventsKey];
|
|
227
|
+
if (eventsValue !== undefined) {
|
|
228
|
+
extraProps.push(xml`feBB:${eventsKey}="${eventsValue}"`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return xml`<core:Fragment
|
|
232
|
+
xmlns:core="sap.ui.core"
|
|
233
|
+
xmlns:feBB="sap.fe.core.buildingBlocks"
|
|
234
|
+
fragmentName="${className}"
|
|
235
|
+
id="{this>id}"
|
|
236
|
+
type="FE_COMPONENTS"
|
|
237
|
+
${extraProps}
|
|
238
|
+
>
|
|
239
|
+
</core:Fragment>`;
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
174
243
|
classDefinition.register = function () {
|
|
175
244
|
registerBuildingBlock(classDefinition);
|
|
245
|
+
if (classDefinition.isRuntime) {
|
|
246
|
+
RUNTIME_BLOCKS[oBuildingBlockDefinition.namespace + "." + oBuildingBlockDefinition.name] = classDefinition;
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
classDefinition.unregister = function () {
|
|
250
|
+
XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
|
|
251
|
+
XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
|
|
176
252
|
};
|
|
177
253
|
};
|
|
178
254
|
}
|
|
255
|
+
|
|
256
|
+
Fragment.registerType("FE_COMPONENTS", {
|
|
257
|
+
load: async function (mSettings: any) {
|
|
258
|
+
return RUNTIME_BLOCKS[mSettings.fragmentName];
|
|
259
|
+
},
|
|
260
|
+
init: async function (mSettings: any) {
|
|
261
|
+
const myClass = mSettings.fragmentContent;
|
|
262
|
+
const classSettings: any = {};
|
|
263
|
+
const feCustomData = mSettings?.customData?.[0]?.mProperties?.value?.["sap.fe.core.buildingBlocks"] || {};
|
|
264
|
+
delete mSettings.customData;
|
|
265
|
+
const pageComponent = Component.getOwnerComponentFor(mSettings.containingView) as any;
|
|
266
|
+
const appComponent = CommonUtils.getAppComponent(mSettings.containingView);
|
|
267
|
+
const metaModel = appComponent.getMetaModel();
|
|
268
|
+
const pageModel = pageComponent.getModel("_pageModel");
|
|
269
|
+
for (const propertyName in myClass.metadata.properties) {
|
|
270
|
+
const propertyMetadata = myClass.metadata.properties[propertyName];
|
|
271
|
+
if (propertyMetadata.type === "sap.ui.model.Context") {
|
|
272
|
+
classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
|
|
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
|
+
let vValue = feCustomData[propertyName];
|
|
281
|
+
if (typeof vValue === "string") {
|
|
282
|
+
vValue = resolveBindingString(vValue, propertyMetadata.type);
|
|
283
|
+
}
|
|
284
|
+
classSettings[propertyName] = vValue;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
for (const eventName in myClass.metadata.events) {
|
|
288
|
+
if (feCustomData[eventName] && feCustomData[eventName].startsWith(".")) {
|
|
289
|
+
classSettings[eventName] = ObjectPath.get(feCustomData[eventName].substring(1), mSettings.containingView.getController());
|
|
290
|
+
} else {
|
|
291
|
+
classSettings[eventName] = ""; // For now, might need to resolve more stuff
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return (ManagedObject as unknown as ManagedObjectEx).runWithPreprocessors(
|
|
295
|
+
() => {
|
|
296
|
+
return new myClass(classSettings).render(mSettings.containingView, appComponent);
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
id: function (sId: string) {
|
|
300
|
+
return mSettings.containingView.createId(sId);
|
|
301
|
+
},
|
|
302
|
+
settings: function (controlSettings: any) {
|
|
303
|
+
const allAssociations = this.getMetadata().getAssociations();
|
|
304
|
+
for (const associationDetailName of Object.keys(allAssociations)) {
|
|
305
|
+
if (controlSettings.hasOwnProperty(associationDetailName)) {
|
|
306
|
+
controlSettings[associationDetailName] = mSettings.containingView.createId(
|
|
307
|
+
controlSettings[associationDetailName]
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return controlSettings;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
});
|
|
@@ -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==
|