@sapui5/sap.fe.core 1.98.0 → 1.99.2
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 +3 -2
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +377 -405
- package/src/sap/fe/core/AnnotationHelper.ts +385 -0
- package/src/sap/fe/core/AppComponent.js +3 -2
- package/src/sap/fe/core/AppStateHandler.js +229 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +3 -2
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2073 -2399
- package/src/sap/fe/core/CommonUtils.ts +2078 -0
- package/src/sap/fe/core/ExtensionAPI.js +3 -2
- package/src/sap/fe/core/PageController.js +84 -125
- package/src/sap/fe/core/PageController.ts +101 -0
- package/src/sap/fe/core/RouterProxy.js +986 -823
- package/src/sap/fe/core/RouterProxy.ts +838 -0
- package/src/sap/fe/core/Synchronization.js +51 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -164
- package/src/sap/fe/core/TemplateComponent.ts +166 -0
- package/src/sap/fe/core/TemplateModel.js +97 -54
- package/src/sap/fe/core/TemplateModel.ts +64 -0
- package/src/sap/fe/core/TransactionHelper.js +1576 -1664
- package/src/sap/fe/core/TransactionHelper.ts +1706 -0
- package/src/sap/fe/core/actions/draft.js +561 -608
- package/src/sap/fe/core/actions/draft.ts +595 -0
- package/src/sap/fe/core/actions/messageHandling.js +545 -514
- package/src/sap/fe/core/actions/messageHandling.ts +532 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1074 -1215
- package/src/sap/fe/core/actions/operations.ts +1162 -0
- package/src/sap/fe/core/actions/sticky.js +102 -105
- package/src/sap/fe/core/actions/sticky.ts +102 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +170 -392
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +279 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -6
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +52 -47
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -3
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +29 -26
- package/src/sap/fe/core/controllerextensions/MassEdit.js +101 -8
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +17 -8
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -3
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +18 -18
- package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
- package/src/sap/fe/core/controls/CommandExecution.js +3 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -2
- package/src/sap/fe/core/controls/FieldWrapper.js +11 -22
- package/src/sap/fe/core/controls/FilterBar.js +3 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -2
- package/src/sap/fe/core/converters/ConverterContext.js +2 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +4 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +1 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +39 -26
- package/src/sap/fe/core/converters/ManifestWrapper.ts +9 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -8
- package/src/sap/fe/core/converters/MetaModelConverter.ts +16 -16
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +4 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +16 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +250 -146
- package/src/sap/fe/core/converters/controls/Common/Table.ts +300 -167
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +115 -56
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +120 -74
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +467 -32
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +483 -54
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
- package/src/sap/fe/core/converters/helpers/Aggregation.js +13 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
- package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
- package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +7 -6
- package/src/sap/fe/core/fpm/Component.js +3 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +7 -4
- package/src/sap/fe/core/helpers/BindingExpression.js +314 -355
- package/src/sap/fe/core/helpers/BindingExpression.ts +317 -391
- package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
- package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
- package/src/sap/fe/core/helpers/MassEditHelper.js +27 -18
- package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +4 -3
- package/src/sap/fe/core/library.support.js +3 -2
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +1 -1
- package/src/sap/fe/core/messagebundle.properties +23 -10
- package/src/sap/fe/core/messagebundle_ar.properties +9 -0
- package/src/sap/fe/core/messagebundle_bg.properties +9 -0
- package/src/sap/fe/core/messagebundle_ca.properties +9 -0
- package/src/sap/fe/core/messagebundle_cs.properties +10 -1
- package/src/sap/fe/core/messagebundle_cy.properties +9 -0
- package/src/sap/fe/core/messagebundle_da.properties +9 -0
- package/src/sap/fe/core/messagebundle_de.properties +9 -0
- package/src/sap/fe/core/messagebundle_el.properties +9 -0
- package/src/sap/fe/core/messagebundle_en.properties +9 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +9 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +9 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +9 -0
- package/src/sap/fe/core/messagebundle_es.properties +9 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +9 -0
- package/src/sap/fe/core/messagebundle_et.properties +9 -0
- package/src/sap/fe/core/messagebundle_fi.properties +9 -0
- package/src/sap/fe/core/messagebundle_fr.properties +13 -4
- package/src/sap/fe/core/messagebundle_fr_CA.properties +15 -6
- package/src/sap/fe/core/messagebundle_hi.properties +15 -6
- package/src/sap/fe/core/messagebundle_hr.properties +15 -6
- package/src/sap/fe/core/messagebundle_hu.properties +9 -0
- package/src/sap/fe/core/messagebundle_id.properties +10 -1
- package/src/sap/fe/core/messagebundle_it.properties +9 -0
- package/src/sap/fe/core/messagebundle_iw.properties +9 -0
- package/src/sap/fe/core/messagebundle_ja.properties +9 -0
- package/src/sap/fe/core/messagebundle_kk.properties +15 -6
- package/src/sap/fe/core/messagebundle_ko.properties +9 -0
- package/src/sap/fe/core/messagebundle_lt.properties +9 -0
- package/src/sap/fe/core/messagebundle_lv.properties +15 -6
- package/src/sap/fe/core/messagebundle_ms.properties +14 -5
- package/src/sap/fe/core/messagebundle_nl.properties +9 -0
- package/src/sap/fe/core/messagebundle_no.properties +9 -0
- package/src/sap/fe/core/messagebundle_pl.properties +9 -0
- package/src/sap/fe/core/messagebundle_pt.properties +9 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +9 -0
- package/src/sap/fe/core/messagebundle_ro.properties +9 -0
- package/src/sap/fe/core/messagebundle_ru.properties +9 -0
- package/src/sap/fe/core/messagebundle_sh.properties +11 -2
- package/src/sap/fe/core/messagebundle_sk.properties +9 -0
- package/src/sap/fe/core/messagebundle_sl.properties +15 -6
- package/src/sap/fe/core/messagebundle_sv.properties +9 -0
- package/src/sap/fe/core/messagebundle_th.properties +9 -0
- package/src/sap/fe/core/messagebundle_tr.properties +9 -0
- package/src/sap/fe/core/messagebundle_uk.properties +9 -0
- package/src/sap/fe/core/messagebundle_vi.properties +9 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +9 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +15 -6
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
- package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -899
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +15 -10
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +35 -81
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +46 -94
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -487
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +138 -72
- package/src/sap/fe/core/templating/FilterHelper.ts +139 -71
- package/src/sap/fe/core/templating/UIFormatters.js +31 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +33 -2
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const enumEditState = {
|
|
2
|
+
CLEAN: 0,
|
|
3
|
+
PROCESSED: 1,
|
|
4
|
+
DIRTY: 2
|
|
5
|
+
};
|
|
6
|
+
let currentEditState = enumEditState.CLEAN;
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
/**
|
|
10
|
+
* This sets the edit state as dirty, meaning bindings have to be refreshed.
|
|
11
|
+
*
|
|
12
|
+
* @function
|
|
13
|
+
* @name sap.fe.core.helpers.EditState#setEditStateDirty
|
|
14
|
+
* @memberof sap.fe.core.helpers.EditState
|
|
15
|
+
*
|
|
16
|
+
* @ui5-restricted
|
|
17
|
+
* @final
|
|
18
|
+
*/
|
|
19
|
+
setEditStateDirty: function() {
|
|
20
|
+
currentEditState = enumEditState.DIRTY;
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* This sets the edit state as processed, meaning is can be reset to clean after all bindings are refreshed.
|
|
25
|
+
*
|
|
26
|
+
* @function
|
|
27
|
+
* @name sap.fe.core.helpers.EditState#setEditStateProcessed
|
|
28
|
+
* @memberof sap.fe.core.helpers.EditState
|
|
29
|
+
*
|
|
30
|
+
* @ui5-restricted
|
|
31
|
+
* @final
|
|
32
|
+
*/
|
|
33
|
+
setEditStateProcessed: function() {
|
|
34
|
+
currentEditState = enumEditState.PROCESSED;
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Resets the edit state to the initial state.
|
|
39
|
+
*
|
|
40
|
+
* @function
|
|
41
|
+
* @name sap.fe.core.helpers.EditState#resetEditState
|
|
42
|
+
* @memberof sap.fe.core.helpers.EditState
|
|
43
|
+
*
|
|
44
|
+
* @ui5-restricted
|
|
45
|
+
* @final
|
|
46
|
+
*/
|
|
47
|
+
resetEditState: function() {
|
|
48
|
+
currentEditState = enumEditState.CLEAN;
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Returns true if the edit state is not clean, meaning bindings have to be refreshed
|
|
53
|
+
*
|
|
54
|
+
* @function
|
|
55
|
+
* @name sap.fe.core.helpers.EditState#isEditStateDirty
|
|
56
|
+
* @memberof sap.fe.core.helpers.EditState
|
|
57
|
+
*
|
|
58
|
+
* @ui5-restricted
|
|
59
|
+
* @final
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
isEditStateDirty: function() {
|
|
63
|
+
return currentEditState !== enumEditState.CLEAN;
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Cleans the edit state if it has been processed, i.e. bindings have been properly refreshed.
|
|
68
|
+
*
|
|
69
|
+
* @function
|
|
70
|
+
* @name sap.fe.core.helpers.EditState#cleanProcessedEditState
|
|
71
|
+
* @memberof sap.fe.core.helpers.EditState
|
|
72
|
+
*
|
|
73
|
+
* @ui5-restricted
|
|
74
|
+
* @final
|
|
75
|
+
*/
|
|
76
|
+
cleanProcessedEditState: function() {
|
|
77
|
+
if (currentEditState === enumEditState.PROCESSED) {
|
|
78
|
+
currentEditState = enumEditState.CLEAN;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
@@ -1,50 +1,64 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
*
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/ui/core/format/DateFormat"], function(DateFormat) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
5
|
+
sap.ui.define(["sap/ui/core/format/DateFormat"], function (DateFormat) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var ExcelFormatHelper = {
|
|
9
|
+
/**
|
|
10
|
+
* Method for converting JS Date format to Excel custom date format.
|
|
11
|
+
*
|
|
12
|
+
* @returns {string} Format for the Date column to be used on excel.
|
|
13
|
+
*/
|
|
14
|
+
getExcelDatefromJSDate: function () {
|
|
15
|
+
// Get date Format(pattern), which will be used for date format mapping between sapui5 and excel.
|
|
16
|
+
// UI5_ANY
|
|
17
|
+
var sJSDateFormat = DateFormat.getDateInstance().oFormatOptions.pattern.toLowerCase();
|
|
18
|
+
|
|
19
|
+
if (sJSDateFormat) {
|
|
20
|
+
// Checking for the existence of single 'y' in the pattern.
|
|
21
|
+
var regex = /^[^y]*y[^y]*$/m;
|
|
22
|
+
|
|
23
|
+
if (regex.exec(sJSDateFormat)) {
|
|
24
|
+
sJSDateFormat = sJSDateFormat.replace("y", "yyyy");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return sJSDateFormat;
|
|
29
|
+
},
|
|
30
|
+
getExcelDateTimefromJSDateTime: function () {
|
|
31
|
+
// Get date Format(pattern), which will be used for date time format mapping between sapui5 and excel.
|
|
32
|
+
// UI5_ANY
|
|
33
|
+
var sJSDateTimeFormat = DateFormat.getDateTimeInstance().oFormatOptions.pattern.toLowerCase();
|
|
34
|
+
|
|
35
|
+
if (sJSDateTimeFormat) {
|
|
36
|
+
// Checking for the existence of single 'y' in the pattern.
|
|
37
|
+
var regexYear = /^[^y]*y[^y]*$/m;
|
|
38
|
+
|
|
39
|
+
if (regexYear.exec(sJSDateTimeFormat)) {
|
|
40
|
+
sJSDateTimeFormat = sJSDateTimeFormat.replace("y", "yyyy");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (sJSDateTimeFormat.includes("a")) {
|
|
44
|
+
sJSDateTimeFormat = sJSDateTimeFormat.replace("a", "AM/PM");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return sJSDateTimeFormat;
|
|
49
|
+
},
|
|
50
|
+
getExcelTimefromJSTime: function () {
|
|
51
|
+
// Get date Format(pattern), which will be used for date time format mapping between sapui5 and excel.
|
|
52
|
+
// UI5_ANY
|
|
53
|
+
var sJSTimeFormat = DateFormat.getTimeInstance().oFormatOptions.pattern;
|
|
54
|
+
|
|
55
|
+
if (sJSTimeFormat && sJSTimeFormat.includes("a")) {
|
|
56
|
+
sJSTimeFormat = sJSTimeFormat.replace("a", "AM/PM");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return sJSTimeFormat;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
return ExcelFormatHelper;
|
|
63
|
+
}, false);
|
|
64
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkV4Y2VsRm9ybWF0SGVscGVyLnRzIl0sIm5hbWVzIjpbIkV4Y2VsRm9ybWF0SGVscGVyIiwiZ2V0RXhjZWxEYXRlZnJvbUpTRGF0ZSIsInNKU0RhdGVGb3JtYXQiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZUluc3RhbmNlIiwib0Zvcm1hdE9wdGlvbnMiLCJwYXR0ZXJuIiwidG9Mb3dlckNhc2UiLCJyZWdleCIsImV4ZWMiLCJyZXBsYWNlIiwiZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lIiwic0pTRGF0ZVRpbWVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicmVnZXhZZWFyIiwiaW5jbHVkZXMiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwic0pTVGltZUZvcm1hdCIsImdldFRpbWVJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQUFBLE1BQU1BLGlCQUFpQixHQUFHO0FBQ3pCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQ0MsSUFBQUEsc0JBQXNCLEVBQUUsWUFBVztBQUNsQztBQUNBO0FBQ0EsVUFBSUMsYUFBYSxHQUFJQyxVQUFVLENBQUNDLGVBQVgsRUFBRCxDQUFzQ0MsY0FBdEMsQ0FBcURDLE9BQXJELENBQTZEQyxXQUE3RCxFQUFwQjs7QUFDQSxVQUFJTCxhQUFKLEVBQW1CO0FBQ2xCO0FBQ0EsWUFBTU0sS0FBSyxHQUFHLGdCQUFkOztBQUNBLFlBQUlBLEtBQUssQ0FBQ0MsSUFBTixDQUFXUCxhQUFYLENBQUosRUFBK0I7QUFDOUJBLFVBQUFBLGFBQWEsR0FBR0EsYUFBYSxDQUFDUSxPQUFkLENBQXNCLEdBQXRCLEVBQTJCLE1BQTNCLENBQWhCO0FBQ0E7QUFDRDs7QUFDRCxhQUFPUixhQUFQO0FBQ0EsS0FsQndCO0FBbUJ6QlMsSUFBQUEsOEJBQThCLEVBQUUsWUFBVztBQUMxQztBQUNBO0FBQ0EsVUFBSUMsaUJBQWlCLEdBQUlULFVBQVUsQ0FBQ1UsbUJBQVgsRUFBRCxDQUEwQ1IsY0FBMUMsQ0FBeURDLE9BQXpELENBQWlFQyxXQUFqRSxFQUF4Qjs7QUFDQSxVQUFJSyxpQkFBSixFQUF1QjtBQUN0QjtBQUNBLFlBQU1FLFNBQVMsR0FBRyxnQkFBbEI7O0FBQ0EsWUFBSUEsU0FBUyxDQUFDTCxJQUFWLENBQWVHLGlCQUFmLENBQUosRUFBdUM7QUFDdENBLFVBQUFBLGlCQUFpQixHQUFHQSxpQkFBaUIsQ0FBQ0YsT0FBbEIsQ0FBMEIsR0FBMUIsRUFBK0IsTUFBL0IsQ0FBcEI7QUFDQTs7QUFDRCxZQUFJRSxpQkFBaUIsQ0FBQ0csUUFBbEIsQ0FBMkIsR0FBM0IsQ0FBSixFQUFxQztBQUNwQ0gsVUFBQUEsaUJBQWlCLEdBQUdBLGlCQUFpQixDQUFDRixPQUFsQixDQUEwQixHQUExQixFQUErQixPQUEvQixDQUFwQjtBQUNBO0FBQ0Q7O0FBQ0QsYUFBT0UsaUJBQVA7QUFDQSxLQWxDd0I7QUFtQ3pCSSxJQUFBQSxzQkFBc0IsRUFBRSxZQUFXO0FBQ2xDO0FBQ0E7QUFDQSxVQUFJQyxhQUFhLEdBQUlkLFVBQVUsQ0FBQ2UsZUFBWCxFQUFELENBQXNDYixjQUF0QyxDQUFxREMsT0FBekU7O0FBQ0EsVUFBSVcsYUFBYSxJQUFJQSxhQUFhLENBQUNGLFFBQWQsQ0FBdUIsR0FBdkIsQ0FBckIsRUFBa0Q7QUFDakRFLFFBQUFBLGFBQWEsR0FBR0EsYUFBYSxDQUFDUCxPQUFkLENBQXNCLEdBQXRCLEVBQTJCLE9BQTNCLENBQWhCO0FBQ0E7O0FBQ0QsYUFBT08sYUFBUDtBQUNBO0FBM0N3QixHQUExQjtTQThDZWpCLGlCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcblxuY29uc3QgRXhjZWxGb3JtYXRIZWxwZXIgPSB7XG5cdC8qKlxuXHQgKiBNZXRob2QgZm9yIGNvbnZlcnRpbmcgSlMgRGF0ZSBmb3JtYXQgdG8gRXhjZWwgY3VzdG9tIGRhdGUgZm9ybWF0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBGb3JtYXQgZm9yIHRoZSBEYXRlIGNvbHVtbiB0byBiZSB1c2VkIG9uIGV4Y2VsLlxuXHQgKi9cblx0Z2V0RXhjZWxEYXRlZnJvbUpTRGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gR2V0IGRhdGUgRm9ybWF0KHBhdHRlcm4pLCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIGRhdGUgZm9ybWF0IG1hcHBpbmcgYmV0d2VlbiBzYXB1aTUgYW5kIGV4Y2VsLlxuXHRcdC8vIFVJNV9BTllcblx0XHRsZXQgc0pTRGF0ZUZvcm1hdCA9IChEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpIGFzIGFueSkub0Zvcm1hdE9wdGlvbnMucGF0dGVybi50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmIChzSlNEYXRlRm9ybWF0KSB7XG5cdFx0XHQvLyBDaGVja2luZyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBzaW5nbGUgJ3knIGluIHRoZSBwYXR0ZXJuLlxuXHRcdFx0Y29uc3QgcmVnZXggPSAvXlteeV0qeVteeV0qJC9tO1xuXHRcdFx0aWYgKHJlZ2V4LmV4ZWMoc0pTRGF0ZUZvcm1hdCkpIHtcblx0XHRcdFx0c0pTRGF0ZUZvcm1hdCA9IHNKU0RhdGVGb3JtYXQucmVwbGFjZShcInlcIiwgXCJ5eXl5XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc0pTRGF0ZUZvcm1hdDtcblx0fSxcblx0Z2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lOiBmdW5jdGlvbigpIHtcblx0XHQvLyBHZXQgZGF0ZSBGb3JtYXQocGF0dGVybiksIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgZGF0ZSB0aW1lIGZvcm1hdCBtYXBwaW5nIGJldHdlZW4gc2FwdWk1IGFuZCBleGNlbC5cblx0XHQvLyBVSTVfQU5ZXG5cdFx0bGV0IHNKU0RhdGVUaW1lRm9ybWF0ID0gKERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSgpIGFzIGFueSkub0Zvcm1hdE9wdGlvbnMucGF0dGVybi50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmIChzSlNEYXRlVGltZUZvcm1hdCkge1xuXHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2Ygc2luZ2xlICd5JyBpbiB0aGUgcGF0dGVybi5cblx0XHRcdGNvbnN0IHJlZ2V4WWVhciA9IC9eW155XSp5W155XSokL207XG5cdFx0XHRpZiAocmVnZXhZZWFyLmV4ZWMoc0pTRGF0ZVRpbWVGb3JtYXQpKSB7XG5cdFx0XHRcdHNKU0RhdGVUaW1lRm9ybWF0ID0gc0pTRGF0ZVRpbWVGb3JtYXQucmVwbGFjZShcInlcIiwgXCJ5eXl5XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNKU0RhdGVUaW1lRm9ybWF0LmluY2x1ZGVzKFwiYVwiKSkge1xuXHRcdFx0XHRzSlNEYXRlVGltZUZvcm1hdCA9IHNKU0RhdGVUaW1lRm9ybWF0LnJlcGxhY2UoXCJhXCIsIFwiQU0vUE1cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzSlNEYXRlVGltZUZvcm1hdDtcblx0fSxcblx0Z2V0RXhjZWxUaW1lZnJvbUpTVGltZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gR2V0IGRhdGUgRm9ybWF0KHBhdHRlcm4pLCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIGRhdGUgdGltZSBmb3JtYXQgbWFwcGluZyBiZXR3ZWVuIHNhcHVpNSBhbmQgZXhjZWwuXG5cdFx0Ly8gVUk1X0FOWVxuXHRcdGxldCBzSlNUaW1lRm9ybWF0ID0gKERhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKCkgYXMgYW55KS5vRm9ybWF0T3B0aW9ucy5wYXR0ZXJuO1xuXHRcdGlmIChzSlNUaW1lRm9ybWF0ICYmIHNKU1RpbWVGb3JtYXQuaW5jbHVkZXMoXCJhXCIpKSB7XG5cdFx0XHRzSlNUaW1lRm9ybWF0ID0gc0pTVGltZUZvcm1hdC5yZXBsYWNlKFwiYVwiLCBcIkFNL1BNXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc0pTVGltZUZvcm1hdDtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXhjZWxGb3JtYXRIZWxwZXI7XG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import DateFormat from "sap/ui/core/format/DateFormat";
|
|
2
|
+
|
|
3
|
+
const ExcelFormatHelper = {
|
|
4
|
+
/**
|
|
5
|
+
* Method for converting JS Date format to Excel custom date format.
|
|
6
|
+
*
|
|
7
|
+
* @returns {string} Format for the Date column to be used on excel.
|
|
8
|
+
*/
|
|
9
|
+
getExcelDatefromJSDate: function() {
|
|
10
|
+
// Get date Format(pattern), which will be used for date format mapping between sapui5 and excel.
|
|
11
|
+
// UI5_ANY
|
|
12
|
+
let sJSDateFormat = (DateFormat.getDateInstance() as any).oFormatOptions.pattern.toLowerCase();
|
|
13
|
+
if (sJSDateFormat) {
|
|
14
|
+
// Checking for the existence of single 'y' in the pattern.
|
|
15
|
+
const regex = /^[^y]*y[^y]*$/m;
|
|
16
|
+
if (regex.exec(sJSDateFormat)) {
|
|
17
|
+
sJSDateFormat = sJSDateFormat.replace("y", "yyyy");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return sJSDateFormat;
|
|
21
|
+
},
|
|
22
|
+
getExcelDateTimefromJSDateTime: function() {
|
|
23
|
+
// Get date Format(pattern), which will be used for date time format mapping between sapui5 and excel.
|
|
24
|
+
// UI5_ANY
|
|
25
|
+
let sJSDateTimeFormat = (DateFormat.getDateTimeInstance() as any).oFormatOptions.pattern.toLowerCase();
|
|
26
|
+
if (sJSDateTimeFormat) {
|
|
27
|
+
// Checking for the existence of single 'y' in the pattern.
|
|
28
|
+
const regexYear = /^[^y]*y[^y]*$/m;
|
|
29
|
+
if (regexYear.exec(sJSDateTimeFormat)) {
|
|
30
|
+
sJSDateTimeFormat = sJSDateTimeFormat.replace("y", "yyyy");
|
|
31
|
+
}
|
|
32
|
+
if (sJSDateTimeFormat.includes("a")) {
|
|
33
|
+
sJSDateTimeFormat = sJSDateTimeFormat.replace("a", "AM/PM");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return sJSDateTimeFormat;
|
|
37
|
+
},
|
|
38
|
+
getExcelTimefromJSTime: function() {
|
|
39
|
+
// Get date Format(pattern), which will be used for date time format mapping between sapui5 and excel.
|
|
40
|
+
// UI5_ANY
|
|
41
|
+
let sJSTimeFormat = (DateFormat.getTimeInstance() as any).oFormatOptions.pattern;
|
|
42
|
+
if (sJSTimeFormat && sJSTimeFormat.includes("a")) {
|
|
43
|
+
sJSTimeFormat = sJSTimeFormat.replace("a", "AM/PM");
|
|
44
|
+
}
|
|
45
|
+
return sJSTimeFormat;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export default ExcelFormatHelper;
|
|
@@ -1,63 +1,59 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
*
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/CommonUtils", "sap/base/util/ObjectPath"], function(CommonUtils, ObjectPath) {
|
|
6
|
-
|
|
7
|
-
var FPMHelper = {
|
|
8
|
-
actionWrapper: function(oEvent, sModule, sMethod, oParameters) {
|
|
9
|
-
return new Promise(function(resolve) {
|
|
10
|
-
var oSource = oEvent.getSource ? oEvent.getSource() : oEvent.oSource,
|
|
11
|
-
oView = CommonUtils.getTargetView(oSource),
|
|
12
|
-
oBindingContext = oSource.getBindingContext(),
|
|
13
|
-
oExtensionAPI,
|
|
14
|
-
aSelectedContexts;
|
|
5
|
+
sap.ui.define(["sap/fe/core/CommonUtils", "sap/base/util/ObjectPath"], function (CommonUtils, ObjectPath) {
|
|
6
|
+
"use strict";
|
|
15
7
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
var FPMHelper = {
|
|
9
|
+
actionWrapper: function (oEvent, sModule, sMethod, oParameters) {
|
|
10
|
+
return new Promise(function (resolve) {
|
|
11
|
+
var oSource = oEvent.getSource ? oEvent.getSource() : oEvent.oSource,
|
|
12
|
+
oView = CommonUtils.getTargetView(oSource),
|
|
13
|
+
oBindingContext = oSource.getBindingContext();
|
|
14
|
+
var oExtensionAPI;
|
|
15
|
+
var aSelectedContexts;
|
|
23
16
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
17
|
+
if (oParameters !== undefined) {
|
|
18
|
+
aSelectedContexts = oParameters.contexts || [];
|
|
19
|
+
} else if (oBindingContext !== undefined) {
|
|
20
|
+
aSelectedContexts = [oBindingContext];
|
|
21
|
+
} else {
|
|
22
|
+
aSelectedContexts = [];
|
|
23
|
+
}
|
|
30
24
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
} else {
|
|
35
|
-
sap.ui.require([sModule], function(module) {
|
|
36
|
-
// - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
|
|
37
|
-
// - we provide the context as API, maybe if needed further properties
|
|
38
|
-
resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, aSelectedContexts));
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
},
|
|
43
|
-
validationWrapper: function(sModule, sMethod, oValidationContexts, oView, oBindingContext) {
|
|
44
|
-
return new Promise(function(resolve) {
|
|
45
|
-
var oExtensionAPI;
|
|
25
|
+
if (oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" || oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController") {
|
|
26
|
+
oExtensionAPI = oView.getController().getExtensionAPI();
|
|
27
|
+
}
|
|
46
28
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
29
|
+
if (sModule.startsWith("/extension/")) {
|
|
30
|
+
var fnTarget = ObjectPath.get(sModule.replace(/\//g, ".").substr(1), oExtensionAPI);
|
|
31
|
+
resolve(fnTarget[sMethod](oBindingContext, aSelectedContexts));
|
|
32
|
+
} else {
|
|
33
|
+
sap.ui.require([sModule], function (module) {
|
|
34
|
+
// - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
|
|
35
|
+
// - we provide the context as API, maybe if needed further properties
|
|
36
|
+
resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, aSelectedContexts));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
validationWrapper: function (sModule, sMethod, oValidationContexts, oView, oBindingContext) {
|
|
42
|
+
return new Promise(function (resolve) {
|
|
43
|
+
var oExtensionAPI;
|
|
53
44
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
});
|
|
45
|
+
if (oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" || oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController") {
|
|
46
|
+
oExtensionAPI = oView.getController().getExtensionAPI();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
sap.ui.require([sModule], function (module) {
|
|
50
|
+
// - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
|
|
51
|
+
// - we provide the context as API, maybe if needed further properties
|
|
52
|
+
resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, oValidationContexts));
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
return FPMHelper;
|
|
58
|
+
}, false);
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZQTUhlbHBlci50cyJdLCJuYW1lcyI6WyJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwib0V2ZW50Iiwic01vZHVsZSIsInNNZXRob2QiLCJvUGFyYW1ldGVycyIsIlByb21pc2UiLCJyZXNvbHZlIiwib1NvdXJjZSIsImdldFNvdXJjZSIsIm9WaWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvRXh0ZW5zaW9uQVBJIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJ1bmRlZmluZWQiLCJjb250ZXh0cyIsImdldENvbnRyb2xsZXJOYW1lIiwiZ2V0Q29udHJvbGxlciIsImdldEV4dGVuc2lvbkFQSSIsInN0YXJ0c1dpdGgiLCJmblRhcmdldCIsIk9iamVjdFBhdGgiLCJnZXQiLCJyZXBsYWNlIiwic3Vic3RyIiwic2FwIiwidWkiLCJyZXF1aXJlIiwibW9kdWxlIiwiYmluZCIsInZhbGlkYXRpb25XcmFwcGVyIiwib1ZhbGlkYXRpb25Db250ZXh0cyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQUdBLE1BQU1BLFNBQVMsR0FBRztBQUNqQkMsSUFBQUEsYUFBYSxFQUFFLFVBQVNDLE1BQVQsRUFBc0JDLE9BQXRCLEVBQW9DQyxPQUFwQyxFQUFrREMsV0FBbEQsRUFBb0U7QUFDbEYsYUFBTyxJQUFJQyxPQUFKLENBQVksVUFBU0MsT0FBVCxFQUF3QztBQUMxRCxZQUFNQyxPQUFPLEdBQUdOLE1BQU0sQ0FBQ08sU0FBUCxHQUFtQlAsTUFBTSxDQUFDTyxTQUFQLEVBQW5CLEdBQXdDUCxNQUFNLENBQUNNLE9BQS9EO0FBQUEsWUFDQ0UsS0FBSyxHQUFHQyxXQUFXLENBQUNDLGFBQVosQ0FBMEJKLE9BQTFCLENBRFQ7QUFBQSxZQUVDSyxlQUFlLEdBQUdMLE9BQU8sQ0FBQ00saUJBQVIsRUFGbkI7QUFHQSxZQUFJQyxhQUFKO0FBQ0EsWUFBSUMsaUJBQUo7O0FBRUEsWUFBSVgsV0FBVyxLQUFLWSxTQUFwQixFQUErQjtBQUM5QkQsVUFBQUEsaUJBQWlCLEdBQUdYLFdBQVcsQ0FBQ2EsUUFBWixJQUF3QixFQUE1QztBQUNBLFNBRkQsTUFFTyxJQUFJTCxlQUFlLEtBQUtJLFNBQXhCLEVBQW1DO0FBQ3pDRCxVQUFBQSxpQkFBaUIsR0FBRyxDQUFDSCxlQUFELENBQXBCO0FBQ0EsU0FGTSxNQUVBO0FBQ05HLFVBQUFBLGlCQUFpQixHQUFHLEVBQXBCO0FBQ0E7O0FBRUQsWUFDQ04sS0FBSyxDQUFDUyxpQkFBTixPQUE4QixrREFBOUIsSUFDQVQsS0FBSyxDQUFDUyxpQkFBTixPQUE4QixrREFGL0IsRUFHRTtBQUNESixVQUFBQSxhQUFhLEdBQUdMLEtBQUssQ0FBQ1UsYUFBTixHQUFzQkMsZUFBdEIsRUFBaEI7QUFDQTs7QUFFRCxZQUFJbEIsT0FBTyxDQUFDbUIsVUFBUixDQUFtQixhQUFuQixDQUFKLEVBQXVDO0FBQ3RDLGNBQU1DLFFBQVEsR0FBR0MsVUFBVSxDQUFDQyxHQUFYLENBQWV0QixPQUFPLENBQUN1QixPQUFSLENBQWdCLEtBQWhCLEVBQXVCLEdBQXZCLEVBQTRCQyxNQUE1QixDQUFtQyxDQUFuQyxDQUFmLEVBQXNEWixhQUF0RCxDQUFqQjtBQUNBUixVQUFBQSxPQUFPLENBQUNnQixRQUFRLENBQUNuQixPQUFELENBQVIsQ0FBa0JTLGVBQWxCLEVBQW1DRyxpQkFBbkMsQ0FBRCxDQUFQO0FBQ0EsU0FIRCxNQUdPO0FBQ05ZLFVBQUFBLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLENBQWUsQ0FBQzNCLE9BQUQsQ0FBZixFQUEwQixVQUFTNEIsTUFBVCxFQUFzQjtBQUMvQztBQUNBO0FBQ0F4QixZQUFBQSxPQUFPLENBQUN3QixNQUFNLENBQUMzQixPQUFELENBQU4sQ0FBZ0I0QixJQUFoQixDQUFxQmpCLGFBQXJCLEVBQW9DRixlQUFwQyxFQUFxREcsaUJBQXJELENBQUQsQ0FBUDtBQUNBLFdBSkQ7QUFLQTtBQUNELE9BaENNLENBQVA7QUFpQ0EsS0FuQ2dCO0FBb0NqQmlCLElBQUFBLGlCQUFpQixFQUFFLFVBQVM5QixPQUFULEVBQXVCQyxPQUF2QixFQUFxQzhCLG1CQUFyQyxFQUErRHhCLEtBQS9ELEVBQTJFRyxlQUEzRSxFQUFpRztBQUNuSCxhQUFPLElBQUlQLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQXdDO0FBQzFELFlBQUlRLGFBQUo7O0FBRUEsWUFDQ0wsS0FBSyxDQUFDUyxpQkFBTixPQUE4QixrREFBOUIsSUFDQVQsS0FBSyxDQUFDUyxpQkFBTixPQUE4QixrREFGL0IsRUFHRTtBQUNESixVQUFBQSxhQUFhLEdBQUdMLEtBQUssQ0FBQ1UsYUFBTixHQUFzQkMsZUFBdEIsRUFBaEI7QUFDQTs7QUFFRE8sUUFBQUEsR0FBRyxDQUFDQyxFQUFKLENBQU9DLE9BQVAsQ0FBZSxDQUFDM0IsT0FBRCxDQUFmLEVBQTBCLFVBQVM0QixNQUFULEVBQXNCO0FBQy9DO0FBQ0E7QUFDQXhCLFVBQUFBLE9BQU8sQ0FBQ3dCLE1BQU0sQ0FBQzNCLE9BQUQsQ0FBTixDQUFnQjRCLElBQWhCLENBQXFCakIsYUFBckIsRUFBb0NGLGVBQXBDLEVBQXFEcUIsbUJBQXJELENBQUQsQ0FBUDtBQUNBLFNBSkQ7QUFLQSxPQWZNLENBQVA7QUFnQkE7QUFyRGdCLEdBQWxCO1NBd0RlbEMsUyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuY29uc3QgRlBNSGVscGVyID0ge1xuXHRhY3Rpb25XcmFwcGVyOiBmdW5jdGlvbihvRXZlbnQ6IGFueSwgc01vZHVsZTogYW55LCBzTWV0aG9kOiBhbnksIG9QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlID8gb0V2ZW50LmdldFNvdXJjZSgpIDogb0V2ZW50Lm9Tb3VyY2UsXG5cdFx0XHRcdG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvU291cmNlKSxcblx0XHRcdFx0b0JpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0bGV0IG9FeHRlbnNpb25BUEk6IEV4dGVuc2lvbkFQSSB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBhU2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdO1xuXG5cdFx0XHRpZiAob1BhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9QYXJhbWV0ZXJzLmNvbnRleHRzIHx8IFtdO1xuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZ0NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IFtvQmluZGluZ0NvbnRleHRdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvVmlldy5nZXRDb250cm9sbGVyTmFtZSgpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiIHx8XG5cdFx0XHRcdG9WaWV3LmdldENvbnRyb2xsZXJOYW1lKCkgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCJcblx0XHRcdCkge1xuXHRcdFx0XHRvRXh0ZW5zaW9uQVBJID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc01vZHVsZS5zdGFydHNXaXRoKFwiL2V4dGVuc2lvbi9cIikpIHtcblx0XHRcdFx0Y29uc3QgZm5UYXJnZXQgPSBPYmplY3RQYXRoLmdldChzTW9kdWxlLnJlcGxhY2UoL1xcLy9nLCBcIi5cIikuc3Vic3RyKDEpLCBvRXh0ZW5zaW9uQVBJKTtcblx0XHRcdFx0cmVzb2x2ZShmblRhcmdldFtzTWV0aG9kXShvQmluZGluZ0NvbnRleHQsIGFTZWxlY3RlZENvbnRleHRzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzYXAudWkucmVxdWlyZShbc01vZHVsZV0sIGZ1bmN0aW9uKG1vZHVsZTogYW55KSB7XG5cdFx0XHRcdFx0Ly8gLSB3ZSBiaW5kIHRoZSBhY3Rpb24gdG8gdGhlIGV4dGVuc2lvbkFQSSBvZiB0aGUgY29udHJvbGxlciBzbyBpdCBoYXMgdGhlIHNhbWUgc2NvcGUgYXMgYSBjdXN0b20gc2VjdGlvblxuXHRcdFx0XHRcdC8vIC0gd2UgcHJvdmlkZSB0aGUgY29udGV4dCBhcyBBUEksIG1heWJlIGlmIG5lZWRlZCBmdXJ0aGVyIHByb3BlcnRpZXNcblx0XHRcdFx0XHRyZXNvbHZlKG1vZHVsZVtzTWV0aG9kXS5iaW5kKG9FeHRlbnNpb25BUEkpKG9CaW5kaW5nQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cdHZhbGlkYXRpb25XcmFwcGVyOiBmdW5jdGlvbihzTW9kdWxlOiBhbnksIHNNZXRob2Q6IGFueSwgb1ZhbGlkYXRpb25Db250ZXh0czogYW55LCBvVmlldzogYW55LCBvQmluZGluZ0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0bGV0IG9FeHRlbnNpb25BUEk6IEV4dGVuc2lvbkFQSTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvVmlldy5nZXRDb250cm9sbGVyTmFtZSgpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiIHx8XG5cdFx0XHRcdG9WaWV3LmdldENvbnRyb2xsZXJOYW1lKCkgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCJcblx0XHRcdCkge1xuXHRcdFx0XHRvRXh0ZW5zaW9uQVBJID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRzYXAudWkucmVxdWlyZShbc01vZHVsZV0sIGZ1bmN0aW9uKG1vZHVsZTogYW55KSB7XG5cdFx0XHRcdC8vIC0gd2UgYmluZCB0aGUgYWN0aW9uIHRvIHRoZSBleHRlbnNpb25BUEkgb2YgdGhlIGNvbnRyb2xsZXIgc28gaXQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgY3VzdG9tIHNlY3Rpb25cblx0XHRcdFx0Ly8gLSB3ZSBwcm92aWRlIHRoZSBjb250ZXh0IGFzIEFQSSwgbWF5YmUgaWYgbmVlZGVkIGZ1cnRoZXIgcHJvcGVydGllc1xuXHRcdFx0XHRyZXNvbHZlKG1vZHVsZVtzTWV0aG9kXS5iaW5kKG9FeHRlbnNpb25BUEkpKG9CaW5kaW5nQ29udGV4dCwgb1ZhbGlkYXRpb25Db250ZXh0cykpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZQTUhlbHBlcjtcbiJdfQ==
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ExtensionAPI } from "sap/fe/core";
|
|
2
|
+
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
3
|
+
import ObjectPath from "sap/base/util/ObjectPath";
|
|
4
|
+
import Context from "sap/ui/model/Context";
|
|
5
|
+
|
|
6
|
+
const FPMHelper = {
|
|
7
|
+
actionWrapper: function(oEvent: any, sModule: any, sMethod: any, oParameters: any) {
|
|
8
|
+
return new Promise(function(resolve: (value: any) => void) {
|
|
9
|
+
const oSource = oEvent.getSource ? oEvent.getSource() : oEvent.oSource,
|
|
10
|
+
oView = CommonUtils.getTargetView(oSource),
|
|
11
|
+
oBindingContext = oSource.getBindingContext();
|
|
12
|
+
let oExtensionAPI: ExtensionAPI | undefined;
|
|
13
|
+
let aSelectedContexts: Context[];
|
|
14
|
+
|
|
15
|
+
if (oParameters !== undefined) {
|
|
16
|
+
aSelectedContexts = oParameters.contexts || [];
|
|
17
|
+
} else if (oBindingContext !== undefined) {
|
|
18
|
+
aSelectedContexts = [oBindingContext];
|
|
19
|
+
} else {
|
|
20
|
+
aSelectedContexts = [];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (
|
|
24
|
+
oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" ||
|
|
25
|
+
oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController"
|
|
26
|
+
) {
|
|
27
|
+
oExtensionAPI = oView.getController().getExtensionAPI();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (sModule.startsWith("/extension/")) {
|
|
31
|
+
const fnTarget = ObjectPath.get(sModule.replace(/\//g, ".").substr(1), oExtensionAPI);
|
|
32
|
+
resolve(fnTarget[sMethod](oBindingContext, aSelectedContexts));
|
|
33
|
+
} else {
|
|
34
|
+
sap.ui.require([sModule], function(module: any) {
|
|
35
|
+
// - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
|
|
36
|
+
// - we provide the context as API, maybe if needed further properties
|
|
37
|
+
resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, aSelectedContexts));
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
validationWrapper: function(sModule: any, sMethod: any, oValidationContexts: any, oView: any, oBindingContext: any) {
|
|
43
|
+
return new Promise(function(resolve: (value: any) => void) {
|
|
44
|
+
let oExtensionAPI: ExtensionAPI;
|
|
45
|
+
|
|
46
|
+
if (
|
|
47
|
+
oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" ||
|
|
48
|
+
oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController"
|
|
49
|
+
) {
|
|
50
|
+
oExtensionAPI = oView.getController().getExtensionAPI();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
sap.ui.require([sModule], function(module: any) {
|
|
54
|
+
// - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
|
|
55
|
+
// - we provide the context as API, maybe if needed further properties
|
|
56
|
+
resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, oValidationContexts));
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export default FPMHelper;
|
|
@@ -2,16 +2,15 @@
|
|
|
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/Log", "sap/fe/core/helpers/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./ModelHelper"], function (Log, KeepAliveRefreshTypes, ModelHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var PATH_TO_STORE = KeepAliveRefreshTypes.PATH_TO_STORE;
|
|
9
9
|
var RefreshStrategyType = KeepAliveRefreshTypes.RefreshStrategyType;
|
|
10
|
-
var getEntitySetPath = ModelHelper.getEntitySetPath;
|
|
11
10
|
|
|
12
11
|
// Private functions - start
|
|
13
12
|
var _fnSimplifyEntitySetPath = function (metaModel, entitySetPathToUse) {
|
|
14
|
-
var entitySetPath = getEntitySetPath(entitySetPathToUse);
|
|
13
|
+
var entitySetPath = ModelHelper.getEntitySetPath(entitySetPathToUse);
|
|
15
14
|
var entitySet = entitySetPath.indexOf("$NavigationPropertyBinding") > -1 && metaModel.getObject(entitySetPath);
|
|
16
15
|
return entitySet ? "/" + entitySet : entitySetPathToUse;
|
|
17
16
|
};
|
|
@@ -208,4 +207,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/h
|
|
|
208
207
|
};
|
|
209
208
|
return KeepAliveHelper;
|
|
210
209
|
}, false);
|
|
211
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktlZXBBbGl2ZUhlbHBlci50cyJdLCJuYW1lcyI6WyJfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoVG9Vc2UiLCJlbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsImVudGl0eVNldCIsImluZGV4T2YiLCJnZXRPYmplY3QiLCJfZm5Jc0FwcGxpY2FibGUiLCJwcmltYXJ5UGF0aCIsImtleSIsInN0cmF0ZWd5IiwiUmVmcmVzaFN0cmF0ZWd5VHlwZSIsIkluY2x1ZGluZ0RlcGVuZGVudHMiLCJzdGFydHNXaXRoIiwiX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoIiwiY29udGV4dFBhdGgiLCJwYXRoIiwiY29udGV4dFBhdGhUb0NoZWNrIiwicGF0aFRvQ2hlY2siLCJnZXRDb250cm9sc0ZvclJlZnJlc2giLCJ2aWV3IiwiY29udHJvbHMiLCJjb250cm9sc0ZvclJlZnJlc2giLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImludGVybmFsTW9kZWwiLCJyZWZyZXNoU3RyYXRlZ3kiLCJnZXRQcm9wZXJ0eSIsIlBBVEhfVE9fU1RPUkUiLCJmb3JFYWNoIiwiY29udHJvbCIsImRhdGEiLCJwdXNoIiwiZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoIiwic3RyYXRlZ3lUb0NoZWNrIiwiZ2V0Vmlld1JlZnJlc2hJbmZvIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsIktlZXBBbGl2ZUhlbHBlciIsImdldFJlZnJlc2hTdHJhdGVneUZvckludGVudCIsInJlZnJlc2hTdHJhdGVnaWVzIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJzb0FjdGlvbiIsImludGVudHMiLCJzb0FjdGlvbkludGVudE1hdGNoIiwic29JbnRlbnRNYXRjaCIsImRlZmF1bHRCZWhhdmlvciIsIl9mZURlZmF1bHQiLCJzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoIiwiaGFzaCIsInNldFByb3BlcnR5IiwicmVzdG9yZVZpZXciLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJyZWZyZXNoQmluZGluZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlZnJlc2hWaWV3QmluZGluZ3MiLCJ0aGVuIiwiTG9nIiwiaW5mbyIsImdldElkIiwiY2F0Y2giLCJlcnIiLCJ3YXJuaW5nIiwib25SZXN0b3JlIiwiZXJyb3IiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBYUE7QUFDQSxNQUFNQSx3QkFBd0IsR0FBRyxVQUFTQyxTQUFULEVBQW9DQyxrQkFBcEMsRUFBd0U7QUFDeEcsUUFBTUMsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQ0Ysa0JBQUQsQ0FBdEM7QUFDQSxRQUFNRyxTQUFTLEdBQUdGLGFBQWEsQ0FBQ0csT0FBZCxDQUFzQiw0QkFBdEIsSUFBc0QsQ0FBQyxDQUF2RCxJQUE0REwsU0FBUyxDQUFDTSxTQUFWLENBQW9CSixhQUFwQixDQUE5RTtBQUNBLFdBQU9FLFNBQVMsR0FBRyxNQUFNQSxTQUFULEdBQXFCSCxrQkFBckM7QUFDQSxHQUpEOztBQUtBLE1BQU1NLGVBQWUsR0FBRyxVQUFTQyxXQUFULEVBQThCQyxHQUE5QixFQUEyQ0MsUUFBM0MsRUFBbUY7QUFDMUcsV0FBT0YsV0FBVyxLQUFLQyxHQUFoQixJQUF3QkMsUUFBUSxLQUFLQyxtQkFBbUIsQ0FBQ0MsbUJBQWpDLElBQXdESixXQUFXLENBQUNLLFVBQVosQ0FBdUJKLEdBQXZCLENBQXZGO0FBQ0EsR0FGRDtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTUssOEJBQThCLEdBQUcsVUFDdENkLFNBRHNDLEVBRXRDZSxXQUZzQyxFQUd0Q0MsSUFIc0MsRUFJdENOLFFBSnNDLEVBSzVCO0FBQ1YsUUFBSU8sa0JBQWtCLEdBQUdGLFdBQVcsQ0FBQ0Ys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dkJFLElBQUFBLGtCQUFrQixFQUFsQkEsa0JBSHVCO0FBSXZCSSxJQUFBQSwyQkFBMkIsRUFBM0JBLDJCQUp1QjtBQUt2QlUsSUFBQUEsa0NBQWtDLEVBQWxDQSxrQ0FMdUI7QUFNdkJHLElBQUFBLFdBQVcsRUFBWEE7QUFOdUIsR0FBeEI7U0FRZWQsZSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbCB9IGZyb20gXCJzYXAvdWkvY29yZVwiO1xuaW1wb3J0IHsgVmlldyB9IGZyb20gXCJzYXAvdWkvY29yZS9tdmNcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJzYXAvYmFzZVwiO1xuaW1wb3J0IHsgT0RhdGFNZXRhTW9kZWwgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0XCI7XG5pbXBvcnQgeyBnZXRFbnRpdHlTZXRQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgSlNPTk1vZGVsIH0gZnJvbSBcInNhcC91aS9tb2RlbC9qc29uXCI7XG5pbXBvcnQge1xuXHRSZWZyZXNoU3RyYXRlZ3lUeXBlLFxuXHRTT1JlZnJlc2hTdHJhdGVneSxcblx0UmVmcmVzaFN0cmF0ZWdpZXMsXG5cdFBBVEhfVE9fU1RPUkUsXG5cdFNPQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZVJlZnJlc2hUeXBlc1wiO1xuXG4vLyBQcml2YXRlIGZ1bmN0aW9ucyAtIHN0YXJ0XG5jb25zdCBfZm5TaW1wbGlmeUVudGl0eVNldFBhdGggPSBmdW5jdGlvbihtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoVG9Vc2U6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBnZXRFbnRpdHlTZXRQYXRoKGVudGl0eVNldFBhdGhUb1VzZSk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGVudGl0eVNldFBhdGguaW5kZXhPZihcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpID4gLTEgJiYgbWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXRQYXRoKTtcblx0cmV0dXJuIGVudGl0eVNldCA/IFwiL1wiICsgZW50aXR5U2V0IDogZW50aXR5U2V0UGF0aFRvVXNlO1xufTtcbmNvbnN0IF9mbklzQXBwbGljYWJsZSA9IGZ1bmN0aW9uKHByaW1hcnlQYXRoOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzdHJhdGVneTogUmVmcmVzaFN0cmF0ZWd5VHlwZSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJpbWFyeVBhdGggPT09IGtleSB8fCAoc3RyYXRlZ3kgPT09IFJlZnJlc2hTdHJhdGVneVR5cGUuSW5jbHVkaW5nRGVwZW5kZW50cyAmJiBwcmltYXJ5UGF0aC5zdGFydHNXaXRoKGtleSkpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgZ2l2ZW4gcGF0aCByZXNpZGVzIGluIHRoZSBjb250ZXh0IHBhdGggcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIHtPRGF0YU1ldGFNb2RlbH0gbWV0YU1vZGVsIE1ldGFNb2RlbCB0byBiZSB1c2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dFBhdGggQ29udGV4dCBwYXRoIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gYmUgdXNlZFxuICogQHBhcmFtIHtSZWZyZXNoU3RyYXRlZ3lUeXBlfSBzdHJhdGVneSBTdHJhdGVneSwgaXQgY291bGQgYmUgJ3NlbGYnIHwgJ2luY2x1ZGluZ0RlcGVuZGVudHMnXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZXh0IHBhdGggaXMgYXBwbGljYWJsZS5cbiAqL1xuY29uc3QgX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoID0gZnVuY3Rpb24oXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdGNvbnRleHRQYXRoOiBzdHJpbmcsXG5cdHBhdGg6IHN0cmluZyxcblx0c3RyYXRlZ3k6IFJlZnJlc2hTdHJhdGVneVR5cGVcbik6IGJvb2xlYW4ge1xuXHRsZXQgY29udGV4dFBhdGhUb0NoZWNrID0gY29udGV4dFBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBjb250ZXh0UGF0aCA6IFwiL1wiICsgY29udGV4dFBhdGgsXG5cdFx0cGF0aFRvQ2hlY2sgPSBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcGF0aCA6IFwiL1wiICsgcGF0aDtcblx0aWYgKCFfZm5Jc0FwcGxpY2FibGUoY29udGV4dFBhdGhUb0NoZWNrLCBwYXRoVG9DaGVjaywgc3RyYXRlZ3kpKSB7XG5cdFx0Y29udGV4dFBhdGhUb0NoZWNrID0gX2ZuU2ltcGxpZnlFbnRpdHlTZXRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGhUb0NoZWNrKTtcblx0XHRpZiAoIV9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSkpIHtcblx0XHRcdHBhdGhUb0NoZWNrID0gX2ZuU2ltcGxpZnlFbnRpdHlTZXRQYXRoKG1ldGFNb2RlbCwgcGF0aFRvQ2hlY2spO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIF9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSk7XG59O1xuLy8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBlbmRcbi8qKlxuICogR2V0IGNvbnRyb2xzIHRvIHJlZnJlc2ggaW4gYSB2aWV3LlxuICpcbiAqIEBwYXJhbSB7Vmlld30gdmlldyBWaWV3IG9mIHRoZSBjb250cm9sc1xuICogQHBhcmFtIHtDb250cm9sW119IGNvbnRyb2xzIENvbnRleHQgcGF0aCB0byBiZSB1c2VkXG4gKiBAcmV0dXJucyB7Q29udHJvbFtdfSBSZXR1cm5zIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBiZSByZWZyZXNoZWQuXG4gKi9cbmNvbnN0IGdldENvbnRyb2xzRm9yUmVmcmVzaCA9IGZ1bmN0aW9uKHZpZXc6IFZpZXcsIGNvbnRyb2xzOiBDb250cm9sW10pOiBDb250cm9sW10ge1xuXHRjb25zdCBjb250cm9sc0ZvclJlZnJlc2g6IENvbnRyb2xbXSA9IFtdO1xuXHRjb25zdCBtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IHJlZnJlc2hTdHJhdGVneSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoUEFUSF9UT19TVE9SRSkgfHwge307XG5cdGlmIChjb250cm9scykge1xuXHRcdGNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24oY29udHJvbCkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250cm9sLmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHJlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0XHRjb25zdCBzdHJhdGVneSA9IHJlZnJlc2hTdHJhdGVneVtrZXldO1xuXHRcdFx0XHRpZiAoY29udHJvbHNGb3JSZWZyZXNoLmluZGV4T2YoY29udHJvbCkgPT09IC0xICYmIF9pc1BhdGhBcHBsaWNhYmxlVG9Db250ZXh0UGF0aChtZXRhTW9kZWwsIGNvbnRleHRQYXRoLCBrZXksIHN0cmF0ZWd5KSkge1xuXHRcdFx0XHRcdGNvbnRyb2xzRm9yUmVmcmVzaC5wdXNoKGNvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGNvbnRyb2xzRm9yUmVmcmVzaDtcbn07XG4vKipcbiAqIEdldCByZWZyZXNoIHN0cmF0ZWd5IGZvciB0aGUgY29udHJvbCBmb3IgYSBjb250ZXh0IHBhdGguXG4gKlxuICogQHBhcmFtIHtDb250cm9sfSBjb250cm9sIENvbnRyb2wgZnJvbSB3aGljaCByZWZyZXNoIGluZm8gaXMgbmVlZGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dFBhdGggQ29udGV4dFBhdGggZm9yIHByb3Blcml0aWVzXG4gKiBAcmV0dXJucyB7UmVmcmVzaFN0cmF0ZWd5VHlwZX0gUmV0dXJucyBzdHJhdGVneSBmb3IgY29udHJvbCByZWZyZXNoLlxuICovXG5jb25zdCBnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGggPSBmdW5jdGlvbihjb250cm9sOiBDb250cm9sLCBjb250ZXh0UGF0aDogc3RyaW5nKTogUmVmcmVzaFN0cmF0ZWd5VHlwZSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgcmVmcmVzaFN0cmF0ZWd5ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShQQVRIX1RPX1NUT1JFKSB8fCB7fTtcblx0bGV0IHN0cmF0ZWd5O1xuXHRpZiAoY29udGV4dFBhdGgpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiByZWZyZXNoU3RyYXRlZ3kpIHtcblx0XHRcdGNvbnN0IHN0cmF0ZWd5VG9DaGVjayA9IHJlZnJlc2hTdHJhdGVneVtrZXldO1xuXHRcdFx0aWYgKF9pc1BhdGhBcHBsaWNhYmxlVG9Db250ZXh0UGF0aChtZXRhTW9kZWwsIGNvbnRleHRQYXRoLCBrZXksIHN0cmF0ZWd5VG9DaGVjaykpIHtcblx0XHRcdFx0c3RyYXRlZ3kgPSBzdHJhdGVneVRvQ2hlY2s7XG5cdFx0XHRcdGlmIChzdHJhdGVneSA9PT0gXCJpbmNsdWRpbmdEZXBlbmRlbnRzXCIpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RyYXRlZ3k7XG59O1xuLyoqXG4gKiBHZXQgcmVmcmVzaCBpbmZvIGZyb20gdmlldy5cbiAqXG4gKiBAcGFyYW0ge1ZpZXd9IHZpZXcgVmlldyBmcm9tIHdoaWNoIHJlZnJlc2ggaW5mbyBpcyBuZWVkZWRcbiAqIEByZXR1cm5zIHtSZWZyZXNoU3RyYXRlZ3lUeXBlIHwgdW5kZWZpbmVkfSBSZXR1cm5zIHN0cmF0ZWd5IGZvciB2aWV3IHJlZnJlc2guXG4gKi9cbmNvbnN0IGdldFZpZXdSZWZyZXNoSW5mbyA9IGZ1bmN0aW9uKHZpZXc6IFZpZXcpOiBSZWZyZXNoU3RyYXRlZ3lUeXBlIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0Y29udGV4dFBhdGggPSB2aWV3RGF0YSAmJiAodmlld0RhdGE/LmNvbnRleHRQYXRoIHx8IFwiL1wiICsgdmlld0RhdGE/LmVudGl0eVNldCk7XG5cdHJldHVybiBLZWVwQWxpdmVIZWxwZXIuZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoKHZpZXcsIGNvbnRleHRQYXRoKTtcbn07XG5cbi8qKlxuICogR2V0IHJlZnJlc2ggc3RyYXRlZ3kgZm9yIGFuIGludGVudC5cbiAqXG4gKiBAcGFyYW0ge1JlZnJlc2hTdHJhdGVnaWVzfSByZWZyZXNoU3RyYXRlZ2llcyBSZWZyZXNoU3RyYXRlZ2llcyB0byBjb25zaWRlclxuICogQHBhcmFtIHtzdHJpbmd9IHNlbWFudGljT2JqZWN0IE91dGJvdW5kIFNlbWFudGljIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiBPdXRib3VuZCBBY3Rpb25cbiAqIEByZXR1cm5zIHtTT1JlZnJlc2hTdHJhdGVneSB8IHVuZGVmaW5lZH0gUmV0dXJucyByZWZyZXNoIHN0cmF0ZWdpZXMgdG8gdXNlIGZvciB0aGUgaW50ZW50LlxuICovXG5jb25zdCBnZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQgPSBmdW5jdGlvbihcblx0cmVmcmVzaFN0cmF0ZWdpZXM6IFJlZnJlc2hTdHJhdGVnaWVzLFxuXHRzZW1hbnRpY09iamVjdD86IHN0cmluZyxcblx0YWN0aW9uPzogc3RyaW5nXG4pOiBTT1JlZnJlc2hTdHJhdGVneSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNvQWN0aW9uID0gc2VtYW50aWNPYmplY3QgJiYgYWN0aW9uICYmIHNlbWFudGljT2JqZWN0ICsgXCItXCIgKyBhY3Rpb247XG5cdGNvbnN0IGludGVudHMgPSByZWZyZXNoU3RyYXRlZ2llcy5pbnRlbnRzO1xuXHRjb25zdCBzb0FjdGlvbkludGVudE1hdGNoID0gaW50ZW50cyAmJiBzb0FjdGlvbiAmJiBpbnRlbnRzW3NvQWN0aW9uXTtcblx0Y29uc3Qgc29JbnRlbnRNYXRjaCA9ICFzb0FjdGlvbkludGVudE1hdGNoICYmIGludGVudHMgJiYgc2VtYW50aWNPYmplY3QgJiYgaW50ZW50c1tzZW1hbnRpY09iamVjdF07XG5cblx0cmV0dXJuIHNvQWN0aW9uSW50ZW50TWF0Y2ggfHwgc29JbnRlbnRNYXRjaCB8fCByZWZyZXNoU3RyYXRlZ2llcz8uZGVmYXVsdEJlaGF2aW9yIHx8IHJlZnJlc2hTdHJhdGVnaWVzPy5fZmVEZWZhdWx0O1xufTtcbi8qKlxuICogU3RvcmUgY29udHJvbCByZWZyZXNoIHN0cmF0ZWd5IGZvciBoYXNoIGluIHRoZSBpbnRlcm5hbCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge0NvbnRyb2x9IGNvbnRyb2wgQ29udHJvbCBmb3IgdGhlIHJlZnJlc2ggc3RyYXRlZ3lcbiAqIEBwYXJhbSB7U09BY3Rpb259IGhhc2ggU2hlbGwgaGFzaCBvYmplY3RcbiAqL1xuY29uc3Qgc3RvcmVDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9ySGFzaCA9IGZ1bmN0aW9uKGNvbnRyb2w6IENvbnRyb2wsIGhhc2g6IFNPQWN0aW9uKTogdm9pZCB7XG5cdGlmIChjb250cm9sICYmIGNvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKSAmJiBjb250cm9sLmdldE1vZGVsKFwiaW50ZXJuYWxcIikpIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKTtcblx0XHRjb25zdCByZWZyZXNoU3RyYXRlZ2llczogUmVmcmVzaFN0cmF0ZWdpZXMgPSB2aWV3RGF0YS5nZXRQcm9wZXJ0eShQQVRIX1RPX1NUT1JFKTtcblx0XHRpZiAocmVmcmVzaFN0cmF0ZWdpZXMpIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBjb250cm9sLmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCByZWZyZXNoU3RyYXRlZ3k6IFNPUmVmcmVzaFN0cmF0ZWd5IHwgdW5kZWZpbmVkID0gS2VlcEFsaXZlSGVscGVyLmdldFJlZnJlc2hTdHJhdGVneUZvckludGVudChcblx0XHRcdFx0cmVmcmVzaFN0cmF0ZWdpZXMsXG5cdFx0XHRcdGhhc2g/LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRoYXNoPy5hY3Rpb25cblx0XHRcdCk7XG5cdFx0XHQoaW50ZXJuYWxNb2RlbCBhcyBKU09OTW9kZWw8e30+KS5zZXRQcm9wZXJ0eShQQVRIX1RPX1NUT1JFLCByZWZyZXNoU3RyYXRlZ3kpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gcmVmcmVzaCBhbmQgcmVzdG9yZSB0aGUgdmlldyBpZiBuZWNjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB2aWV3IENvbnRyb2wgZm9yIHRoZSByZWZyZXNoIHN0cmF0ZWd5XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBIHByb21pc2UgYWZ0ZXIgdmlldyByZWZyZXNoIGFuZCByZXN0b3JlIGFyZSB0cmlnZ2VyZWRcbiAqL1xuY29uc3QgcmVzdG9yZVZpZXcgPSBmdW5jdGlvbih2aWV3OiBWaWV3KTogUHJvbWlzZTxhbnk+IHtcblx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0Y29uc3Qgdmlld1N0YXRlID0gKGNvbnRyb2xsZXIgYXMgYW55KT8udmlld1N0YXRlO1xuXHRsZXQgcmVmcmVzaEJpbmRpbmdzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInJlc3RvcmVTdGF0dXNcIikgPT09IFwicGVuZGluZ1wiKSB7XG5cdFx0aWYgKHZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKSB7XG5cdFx0XHRyZWZyZXNoQmluZGluZ3MgPSB2aWV3U3RhdGUucmVmcmVzaFZpZXdCaW5kaW5ncygpO1xuXHRcdFx0cmVmcmVzaEJpbmRpbmdzXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdExvZy5pbmZvKFwiRkUgVjQ6IFJlZnJlc2ggd2FzIHRyaWdnZXJlZCBzdWNjZXNzZnVsbDogXCIgKyB2aWV3LmdldElkKCkpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJGRSBWNDogUmVmcmVzaCB3YXMgdW5zdWNjZXNzZnVsbDogXCIgKyB2aWV3LmdldElkKCksIGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZWZyZXNoQmluZGluZ3MgPSByZWZyZXNoQmluZGluZ3Ncblx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2aWV3U3RhdGUub25SZXN0b3JlKCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVzdG9yZVN0YXR1c1wiLCBcImRvbmVcIik7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiRkUgVjQ6IFJlc3RvcmUgd2FzIHVuc3VjY2Vzc2Z1bGw6IFwiICsgdmlldy5nZXRJZCgpLCBlcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRyZXR1cm4gcmVmcmVzaEJpbmRpbmdzO1xufTtcblxuLyoqXG4gKiBoZWxwZXIgY2xhc3MgZm9yIEtlZXBBbGl2ZSBmZWF0dXJlIGluIHNhcC5mZS5cbiAqL1xuY29uc3QgS2VlcEFsaXZlSGVscGVyID0ge1xuXHRnZXRDb250cm9sc0ZvclJlZnJlc2gsXG5cdGdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCxcblx0Z2V0Vmlld1JlZnJlc2hJbmZvLFxuXHRnZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQsXG5cdHN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gsXG5cdHJlc3RvcmVWaWV3XG59O1xuZXhwb3J0IGRlZmF1bHQgS2VlcEFsaXZlSGVscGVyO1xuIl19
|
|
210
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktlZXBBbGl2ZUhlbHBlci50cyJdLCJuYW1lcyI6WyJfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoVG9Vc2UiLCJlbnRpdHlTZXRQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZW50aXR5U2V0IiwiaW5kZXhPZiIsImdldE9iamVjdCIsIl9mbklzQXBwbGljYWJsZSIsInByaW1hcnlQYXRoIiwia2V5Iiwic3RyYXRlZ3kiLCJSZWZyZXNoU3RyYXRlZ3lUeXBlIiwiSW5jbHVkaW5nRGVwZW5kZW50cyIsInN0YXJ0c1dpdGgiLCJfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsInBhdGgiLCJjb250ZXh0UGF0aFRvQ2hlY2siLCJwYXRoVG9DaGVjayIsImdldENvbnRyb2xzRm9yUmVmcmVzaCIsInZpZXciLCJjb250cm9scyIsImNvbnRyb2xzRm9yUmVmcmVzaCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW50ZXJuYWxNb2RlbCIsInJlZnJlc2hTdHJhdGVneSIsImdldFByb3BlcnR5IiwiUEFUSF9UT19TVE9SRSIsImZvckVhY2giLCJjb250cm9sIiwiZGF0YSIsInB1c2giLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJzdHJhdGVneVRvQ2hlY2siLCJnZXRWaWV3UmVmcmVzaEluZm8iLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50IiwicmVmcmVzaFN0cmF0ZWdpZXMiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInNvQWN0aW9uIiwiaW50ZW50cyIsInNvQWN0aW9uSW50ZW50TWF0Y2giLCJzb0ludGVudE1hdGNoIiwiZGVmYXVsdEJlaGF2aW9yIiwiX2ZlRGVmYXVsdCIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJoYXNoIiwic2V0UHJvcGVydHkiLCJyZXN0b3JlVmlldyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJlZnJlc2hCaW5kaW5ncyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVmcmVzaFZpZXdCaW5kaW5ncyIsInRoZW4iLCJMb2ciLCJpbmZvIiwiZ2V0SWQiLCJjYXRjaCIsImVyciIsIndhcm5pbmciLCJvblJlc3RvcmUiLCJlcnJvciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7OztBQWFBO0FBQ0EsTUFBTUEsd0JBQXdCLEdBQUcsVUFBU0MsU0FBVCxFQUFvQ0Msa0JBQXBDLEVBQXdFO0FBQ3hHLFFBQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyxnQkFBWixDQUE2Qkgsa0JBQTdCLENBQXRCO0FBQ0EsUUFBTUksU0FBUyxHQUFHSCxhQUFhLENBQUNJLE9BQWQsQ0FBc0IsNEJBQXRCLElBQXNELENBQUMsQ0FBdkQsSUFBNEROLFNBQVMsQ0FBQ08sU0FBVixDQUFvQkwsYUFBcEIsQ0FBOUU7QUFDQSxXQUFPRyxTQUFTLEdBQUcsTUFBTUEsU0FBVCxHQUFxQkosa0JBQXJDO0FBQ0EsR0FKRDs7QUFLQSxNQUFNTyxlQUFlLEdBQUcsVUFBU0MsV0FBVCxFQUE4QkMsR0FBOUIsRUFBMkNDLFFBQTNDLEVBQW1GO0FBQzFHLFdBQU9GLFdBQVcsS0FBS0MsR0FBaEIsSUFBd0JDLFFBQVEsS0FBS0MsbUJBQW1CLENBQUNDLG1CQUFqQyxJQUF3REosV0FBVyxDQUFDSyxVQUFaLENBQXVCSixHQUF2QixDQUF2RjtBQUNBLEdBRkQ7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLE1BQU1LLDhCQUE4QixHQUFHLFVBQ3RDZixTQURzQyxFQUV0Q2dCLFdBRnNDLEVBR3RDQyxJQUhzQyxFQUl0Q04sUUFKc0MsRUFLNUI7QUFDVixRQUFJ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QUFBQSx1Q0FBdUMsRUFBdkNBLHVDQUZ1QjtBQUd2QkUsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFIdUI7QUFJdkJJLElBQUFBLDJCQUEyQixFQUEzQkEsMkJBSnVCO0FBS3ZCVSxJQUFBQSxrQ0FBa0MsRUFBbENBLGtDQUx1QjtBQU12QkcsSUFBQUEsV0FBVyxFQUFYQTtBQU51QixHQUF4QjtTQVFlZCxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHtcblx0UmVmcmVzaFN0cmF0ZWd5VHlwZSxcblx0U09SZWZyZXNoU3RyYXRlZ3ksXG5cdFJlZnJlc2hTdHJhdGVnaWVzLFxuXHRQQVRIX1RPX1NUT1JFLFxuXHRTT0FjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCBNb2RlbEhlbHBlciwgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbi8vIFByaXZhdGUgZnVuY3Rpb25zIC0gc3RhcnRcbmNvbnN0IF9mblNpbXBsaWZ5RW50aXR5U2V0UGF0aCA9IGZ1bmN0aW9uKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGhUb1VzZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5U2V0UGF0aFRvVXNlKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gZW50aXR5U2V0UGF0aC5pbmRleE9mKFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIikgPiAtMSAmJiBtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGgpO1xuXHRyZXR1cm4gZW50aXR5U2V0ID8gXCIvXCIgKyBlbnRpdHlTZXQgOiBlbnRpdHlTZXRQYXRoVG9Vc2U7XG59O1xuY29uc3QgX2ZuSXNBcHBsaWNhYmxlID0gZnVuY3Rpb24ocHJpbWFyeVBhdGg6IHN0cmluZywga2V5OiBzdHJpbmcsIHN0cmF0ZWd5OiBSZWZyZXNoU3RyYXRlZ3lUeXBlKTogYm9vbGVhbiB7XG5cdHJldHVybiBwcmltYXJ5UGF0aCA9PT0ga2V5IHx8IChzdHJhdGVneSA9PT0gUmVmcmVzaFN0cmF0ZWd5VHlwZS5JbmNsdWRpbmdEZXBlbmRlbnRzICYmIHByaW1hcnlQYXRoLnN0YXJ0c1dpdGgoa2V5KSk7XG59O1xuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiBwYXRoIHJlc2lkZXMgaW4gdGhlIGNvbnRleHQgcGF0aCBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge09EYXRhTWV0YU1vZGVsfSBtZXRhTW9kZWwgTWV0YU1vZGVsIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aCBDb250ZXh0IHBhdGggdG8gYmUgdXNlZFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCB0byBiZSB1c2VkXG4gKiBAcGFyYW0ge1JlZnJlc2hTdHJhdGVneVR5cGV9IHN0cmF0ZWd5IFN0cmF0ZWd5LCBpdCBjb3VsZCBiZSAnc2VsZicgfCAnaW5jbHVkaW5nRGVwZW5kZW50cydcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgcGF0aCBpcyBhcHBsaWNhYmxlLlxuICovXG5jb25zdCBfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGggPSBmdW5jdGlvbihcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0cGF0aDogc3RyaW5nLFxuXHRzdHJhdGVneTogUmVmcmVzaFN0cmF0ZWd5VHlwZVxuKTogYm9vbGVhbiB7XG5cdGxldCBjb250ZXh0UGF0aFRvQ2hlY2sgPSBjb250ZXh0UGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IGNvbnRleHRQYXRoIDogXCIvXCIgKyBjb250ZXh0UGF0aCxcblx0XHRwYXRoVG9DaGVjayA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoO1xuXHRpZiAoIV9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSkpIHtcblx0XHRjb250ZXh0UGF0aFRvQ2hlY2sgPSBfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgobWV0YU1vZGVsLCBjb250ZXh0UGF0aFRvQ2hlY2spO1xuXHRcdGlmICghX2ZuSXNBcHBsaWNhYmxlKGNvbnRleHRQYXRoVG9DaGVjaywgcGF0aFRvQ2hlY2ssIHN0cmF0ZWd5KSkge1xuXHRcdFx0cGF0aFRvQ2hlY2sgPSBfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgobWV0YU1vZGVsLCBwYXRoVG9DaGVjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gX2ZuSXNBcHBsaWNhYmxlKGNvbnRleHRQYXRoVG9DaGVjaywgcGF0aFRvQ2hlY2ssIHN0cmF0ZWd5KTtcbn07XG4vLyBQcml2YXRlIGZ1bmN0aW9ucyAtIGVuZFxuLyoqXG4gKiBHZXQgY29udHJvbHMgdG8gcmVmcmVzaCBpbiBhIHZpZXcuXG4gKlxuICogQHBhcmFtIHtWaWV3fSB2aWV3IFZpZXcgb2YgdGhlIGNvbnRyb2xzXG4gKiBAcGFyYW0ge0NvbnRyb2xbXX0gY29udHJvbHMgQ29udGV4dCBwYXRoIHRvIGJlIHVzZWRcbiAqIEByZXR1cm5zIHtDb250cm9sW119IFJldHVybnMgY29udHJvbHMgdGhhdCBuZWVkIHRvIGJlIHJlZnJlc2hlZC5cbiAqL1xuY29uc3QgZ2V0Q29udHJvbHNGb3JSZWZyZXNoID0gZnVuY3Rpb24odmlldzogVmlldywgY29udHJvbHM6IENvbnRyb2xbXSk6IENvbnRyb2xbXSB7XG5cdGNvbnN0IGNvbnRyb2xzRm9yUmVmcmVzaDogQ29udHJvbFtdID0gW107XG5cdGNvbnN0IG1ldGFNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgcmVmcmVzaFN0cmF0ZWd5ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShQQVRIX1RPX1NUT1JFKSB8fCB7fTtcblx0aWYgKGNvbnRyb2xzKSB7XG5cdFx0Y29udHJvbHMuZm9yRWFjaChmdW5jdGlvbihjb250cm9sKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRyb2wuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gcmVmcmVzaFN0cmF0ZWd5KSB7XG5cdFx0XHRcdGNvbnN0IHN0cmF0ZWd5ID0gcmVmcmVzaFN0cmF0ZWd5W2tleV07XG5cdFx0XHRcdGlmIChjb250cm9sc0ZvclJlZnJlc2guaW5kZXhPZihjb250cm9sKSA9PT0gLTEgJiYgX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGgsIGtleSwgc3RyYXRlZ3kpKSB7XG5cdFx0XHRcdFx0Y29udHJvbHNGb3JSZWZyZXNoLnB1c2goY29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gY29udHJvbHNGb3JSZWZyZXNoO1xufTtcbi8qKlxuICogR2V0IHJlZnJlc2ggc3RyYXRlZ3kgZm9yIHRoZSBjb250cm9sIGZvciBhIGNvbnRleHQgcGF0aC5cbiAqXG4gKiBAcGFyYW0ge0NvbnRyb2x9IGNvbnRyb2wgQ29udHJvbCBmcm9tIHdoaWNoIHJlZnJlc2ggaW5mbyBpcyBuZWVkZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aCBDb250ZXh0UGF0aCBmb3IgcHJvcGVyaXRpZXNcbiAqIEByZXR1cm5zIHtSZWZyZXNoU3RyYXRlZ3lUeXBlfSBSZXR1cm5zIHN0cmF0ZWd5IGZvciBjb250cm9sIHJlZnJlc2guXG4gKi9cbmNvbnN0IGdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCA9IGZ1bmN0aW9uKGNvbnRyb2w6IENvbnRyb2wsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBSZWZyZXNoU3RyYXRlZ3lUeXBlIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gY29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRjb25zdCBpbnRlcm5hbE1vZGVsID0gY29udHJvbC5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRjb25zdCByZWZyZXNoU3RyYXRlZ3kgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFBBVEhfVE9fU1RPUkUpIHx8IHt9O1xuXHRsZXQgc3RyYXRlZ3k7XG5cdGlmIChjb250ZXh0UGF0aCkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHJlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0Y29uc3Qgc3RyYXRlZ3lUb0NoZWNrID0gcmVmcmVzaFN0cmF0ZWd5W2tleV07XG5cdFx0XHRpZiAoX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGgsIGtleSwgc3RyYXRlZ3lUb0NoZWNrKSkge1xuXHRcdFx0XHRzdHJhdGVneSA9IHN0cmF0ZWd5VG9DaGVjaztcblx0XHRcdFx0aWYgKHN0cmF0ZWd5ID09PSBcImluY2x1ZGluZ0RlcGVuZGVudHNcIikge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzdHJhdGVneTtcbn07XG4vKipcbiAqIEdldCByZWZyZXNoIGluZm8gZnJvbSB2aWV3LlxuICpcbiAqIEBwYXJhbSB7Vmlld30gdmlldyBWaWV3IGZyb20gd2hpY2ggcmVmcmVzaCBpbmZvIGlzIG5lZWRlZFxuICogQHJldHVybnMge1JlZnJlc2hTdHJhdGVneVR5cGUgfCB1bmRlZmluZWR9IFJldHVybnMgc3RyYXRlZ3kgZm9yIHZpZXcgcmVmcmVzaC5cbiAqL1xuY29uc3QgZ2V0Vmlld1JlZnJlc2hJbmZvID0gZnVuY3Rpb24odmlldzogVmlldyk6IFJlZnJlc2hTdHJhdGVneVR5cGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRjb250ZXh0UGF0aCA9IHZpZXdEYXRhICYmICh2aWV3RGF0YT8uY29udGV4dFBhdGggfHwgXCIvXCIgKyB2aWV3RGF0YT8uZW50aXR5U2V0KTtcblx0cmV0dXJuIEtlZXBBbGl2ZUhlbHBlci5nZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgodmlldywgY29udGV4dFBhdGgpO1xufTtcblxuLyoqXG4gKiBHZXQgcmVmcmVzaCBzdHJhdGVneSBmb3IgYW4gaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7UmVmcmVzaFN0cmF0ZWdpZXN9IHJlZnJlc2hTdHJhdGVnaWVzIFJlZnJlc2hTdHJhdGVnaWVzIHRvIGNvbnNpZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VtYW50aWNPYmplY3QgT3V0Ym91bmQgU2VtYW50aWMgT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIE91dGJvdW5kIEFjdGlvblxuICogQHJldHVybnMge1NPUmVmcmVzaFN0cmF0ZWd5IHwgdW5kZWZpbmVkfSBSZXR1cm5zIHJlZnJlc2ggc3RyYXRlZ2llcyB0byB1c2UgZm9yIHRoZSBpbnRlbnQuXG4gKi9cbmNvbnN0IGdldFJlZnJlc2hTdHJhdGVneUZvckludGVudCA9IGZ1bmN0aW9uKFxuXHRyZWZyZXNoU3RyYXRlZ2llczogUmVmcmVzaFN0cmF0ZWdpZXMsXG5cdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nLFxuXHRhY3Rpb24/OiBzdHJpbmdcbik6IFNPUmVmcmVzaFN0cmF0ZWd5IHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc29BY3Rpb24gPSBzZW1hbnRpY09iamVjdCAmJiBhY3Rpb24gJiYgc2VtYW50aWNPYmplY3QgKyBcIi1cIiArIGFjdGlvbjtcblx0Y29uc3QgaW50ZW50cyA9IHJlZnJlc2hTdHJhdGVnaWVzLmludGVudHM7XG5cdGNvbnN0IHNvQWN0aW9uSW50ZW50TWF0Y2ggPSBpbnRlbnRzICYmIHNvQWN0aW9uICYmIGludGVudHNbc29BY3Rpb25dO1xuXHRjb25zdCBzb0ludGVudE1hdGNoID0gIXNvQWN0aW9uSW50ZW50TWF0Y2ggJiYgaW50ZW50cyAmJiBzZW1hbnRpY09iamVjdCAmJiBpbnRlbnRzW3NlbWFudGljT2JqZWN0XTtcblxuXHRyZXR1cm4gc29BY3Rpb25JbnRlbnRNYXRjaCB8fCBzb0ludGVudE1hdGNoIHx8IHJlZnJlc2hTdHJhdGVnaWVzPy5kZWZhdWx0QmVoYXZpb3IgfHwgcmVmcmVzaFN0cmF0ZWdpZXM/Ll9mZURlZmF1bHQ7XG59O1xuLyoqXG4gKiBTdG9yZSBjb250cm9sIHJlZnJlc2ggc3RyYXRlZ3kgZm9yIGhhc2ggaW4gdGhlIGludGVybmFsIG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7Q29udHJvbH0gY29udHJvbCBDb250cm9sIGZvciB0aGUgcmVmcmVzaCBzdHJhdGVneVxuICogQHBhcmFtIHtTT0FjdGlvbn0gaGFzaCBTaGVsbCBoYXNoIG9iamVjdFxuICovXG5jb25zdCBzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoID0gZnVuY3Rpb24oY29udHJvbDogQ29udHJvbCwgaGFzaDogU09BY3Rpb24pOiB2b2lkIHtcblx0aWYgKGNvbnRyb2wgJiYgY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpICYmIGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSkge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpO1xuXHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVnaWVzOiBSZWZyZXNoU3RyYXRlZ2llcyA9IHZpZXdEYXRhLmdldFByb3BlcnR5KFBBVEhfVE9fU1RPUkUpO1xuXHRcdGlmIChyZWZyZXNoU3RyYXRlZ2llcykge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVneTogU09SZWZyZXNoU3RyYXRlZ3kgfCB1bmRlZmluZWQgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50KFxuXHRcdFx0XHRyZWZyZXNoU3RyYXRlZ2llcyxcblx0XHRcdFx0aGFzaD8uc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdGhhc2g/LmFjdGlvblxuXHRcdFx0KTtcblx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoUEFUSF9UT19TVE9SRSwgcmVmcmVzaFN0cmF0ZWd5KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIHJlZnJlc2ggYW5kIHJlc3RvcmUgdGhlIHZpZXcgaWYgbmVjY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdmlldyBDb250cm9sIGZvciB0aGUgcmVmcmVzaCBzdHJhdGVneVxuICogQHJldHVybnMge29iamVjdH0gQSBwcm9taXNlIGFmdGVyIHZpZXcgcmVmcmVzaCBhbmQgcmVzdG9yZSBhcmUgdHJpZ2dlcmVkXG4gKi9cbmNvbnN0IHJlc3RvcmVWaWV3ID0gZnVuY3Rpb24odmlldzogVmlldyk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cdGNvbnN0IHZpZXdTdGF0ZSA9IChjb250cm9sbGVyIGFzIGFueSk/LnZpZXdTdGF0ZTtcblx0bGV0IHJlZnJlc2hCaW5kaW5ncyA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQgJiYgaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJyZXN0b3JlU3RhdHVzXCIpID09PSBcInBlbmRpbmdcIikge1xuXHRcdGlmICh2aWV3U3RhdGUucmVmcmVzaFZpZXdCaW5kaW5ncykge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmdzID0gdmlld1N0YXRlLnJlZnJlc2hWaWV3QmluZGluZ3MoKTtcblx0XHRcdHJlZnJlc2hCaW5kaW5nc1xuXHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRMb2cuaW5mbyhcIkZFIFY0OiBSZWZyZXNoIHdhcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGw6IFwiICsgdmlldy5nZXRJZCgpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRkUgVjQ6IFJlZnJlc2ggd2FzIHVuc3VjY2Vzc2Z1bGw6IFwiICsgdmlldy5nZXRJZCgpLCBlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmVmcmVzaEJpbmRpbmdzID0gcmVmcmVzaEJpbmRpbmdzXG5cdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0dmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlc3RvcmVTdGF0dXNcIiwgXCJkb25lXCIpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkZFIFY0OiBSZXN0b3JlIHdhcyB1bnN1Y2Nlc3NmdWxsOiBcIiArIHZpZXcuZ2V0SWQoKSwgZXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblx0cmV0dXJuIHJlZnJlc2hCaW5kaW5ncztcbn07XG5cbi8qKlxuICogaGVscGVyIGNsYXNzIGZvciBLZWVwQWxpdmUgZmVhdHVyZSBpbiBzYXAuZmUuXG4gKi9cbmNvbnN0IEtlZXBBbGl2ZUhlbHBlciA9IHtcblx0Z2V0Q29udHJvbHNGb3JSZWZyZXNoLFxuXHRnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgsXG5cdGdldFZpZXdSZWZyZXNoSW5mbyxcblx0Z2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50LFxuXHRzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoLFxuXHRyZXN0b3JlVmlld1xufTtcbmV4cG9ydCBkZWZhdWx0IEtlZXBBbGl2ZUhlbHBlcjtcbiJdfQ==
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import { getEntitySetPath } from "sap/fe/core/helpers/ModelHelper";
|
|
1
|
+
import Control from "sap/ui/core/Control";
|
|
2
|
+
import View from "sap/ui/core/mvc/View";
|
|
3
|
+
import Log from "sap/base/Log";
|
|
4
|
+
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
6
5
|
import { BaseManifestSettings } from "sap/fe/core/converters/ManifestSettings";
|
|
7
|
-
import
|
|
6
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
8
7
|
import {
|
|
9
8
|
RefreshStrategyType,
|
|
10
9
|
SORefreshStrategy,
|
|
@@ -12,10 +11,11 @@ import {
|
|
|
12
11
|
PATH_TO_STORE,
|
|
13
12
|
SOAction
|
|
14
13
|
} from "sap/fe/core/helpers/KeepAliveRefreshTypes";
|
|
14
|
+
import ModelHelper, { InternalModelContext } from "./ModelHelper";
|
|
15
15
|
|
|
16
16
|
// Private functions - start
|
|
17
17
|
const _fnSimplifyEntitySetPath = function(metaModel: ODataMetaModel, entitySetPathToUse: string): string {
|
|
18
|
-
const entitySetPath = getEntitySetPath(entitySetPathToUse);
|
|
18
|
+
const entitySetPath = ModelHelper.getEntitySetPath(entitySetPathToUse);
|
|
19
19
|
const entitySet = entitySetPath.indexOf("$NavigationPropertyBinding") > -1 && metaModel.getObject(entitySetPath);
|
|
20
20
|
return entitySet ? "/" + entitySet : entitySetPathToUse;
|
|
21
21
|
};
|
|
@@ -149,7 +149,7 @@ const storeControlRefreshStrategyForHash = function(control: Control, hash: SOAc
|
|
|
149
149
|
hash?.semanticObject,
|
|
150
150
|
hash?.action
|
|
151
151
|
);
|
|
152
|
-
(internalModel as JSONModel
|
|
152
|
+
(internalModel as JSONModel).setProperty(PATH_TO_STORE, refreshStrategy);
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
};
|
|
@@ -161,7 +161,7 @@ const storeControlRefreshStrategyForHash = function(control: Control, hash: SOAc
|
|
|
161
161
|
* @returns {object} A promise after view refresh and restore are triggered
|
|
162
162
|
*/
|
|
163
163
|
const restoreView = function(view: View): Promise<any> {
|
|
164
|
-
const internalModelContext = view.getBindingContext("internal");
|
|
164
|
+
const internalModelContext = view.getBindingContext("internal") as InternalModelContext;
|
|
165
165
|
const controller = view.getController();
|
|
166
166
|
const viewState = (controller as any)?.viewState;
|
|
167
167
|
let refreshBindings = Promise.resolve();
|