@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.
Files changed (231) hide show
  1. package/package.json +3 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +377 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +385 -0
  5. package/src/sap/fe/core/AppComponent.js +3 -2
  6. package/src/sap/fe/core/AppStateHandler.js +229 -181
  7. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  8. package/src/sap/fe/core/BaseController.js +3 -2
  9. package/src/sap/fe/core/BusyLocker.js +105 -121
  10. package/src/sap/fe/core/BusyLocker.ts +98 -0
  11. package/src/sap/fe/core/CommonUtils.js +2073 -2399
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -2
  14. package/src/sap/fe/core/PageController.js +84 -125
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -823
  17. package/src/sap/fe/core/RouterProxy.ts +838 -0
  18. package/src/sap/fe/core/Synchronization.js +51 -35
  19. package/src/sap/fe/core/Synchronization.ts +29 -0
  20. package/src/sap/fe/core/TemplateComponent.js +173 -164
  21. package/src/sap/fe/core/TemplateComponent.ts +166 -0
  22. package/src/sap/fe/core/TemplateModel.js +97 -54
  23. package/src/sap/fe/core/TemplateModel.ts +64 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1664
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +561 -608
  27. package/src/sap/fe/core/actions/draft.ts +595 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -514
  29. package/src/sap/fe/core/actions/messageHandling.ts +532 -0
  30. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  31. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  32. package/src/sap/fe/core/actions/operations.js +1074 -1215
  33. package/src/sap/fe/core/actions/operations.ts +1162 -0
  34. package/src/sap/fe/core/actions/sticky.js +102 -105
  35. package/src/sap/fe/core/actions/sticky.ts +102 -0
  36. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
  37. package/src/sap/fe/core/controllerextensions/EditFlow.js +170 -392
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +279 -11
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -6
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +52 -47
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -3
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +29 -26
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +101 -8
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +17 -8
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -2
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -2
  50. package/src/sap/fe/core/controllerextensions/Routing.js +9 -4
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -3
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +18 -18
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
  56. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  57. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  58. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  59. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -2
  60. package/src/sap/fe/core/controls/FieldWrapper.js +11 -22
  61. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  62. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -2
  63. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  64. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  65. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  66. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  67. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  68. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  69. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -2
  70. package/src/sap/fe/core/converters/ConverterContext.js +2 -2
  71. package/src/sap/fe/core/converters/ConverterContext.ts +4 -3
  72. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  73. package/src/sap/fe/core/converters/ManifestSettings.ts +1 -0
  74. package/src/sap/fe/core/converters/ManifestWrapper.js +39 -26
  75. package/src/sap/fe/core/converters/ManifestWrapper.ts +9 -0
  76. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -8
  77. package/src/sap/fe/core/converters/MetaModelConverter.ts +16 -16
  78. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  79. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  80. package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
  81. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  82. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -2
  83. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  84. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  85. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  86. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  87. package/src/sap/fe/core/converters/controls/Common/Form.js +4 -2
  88. package/src/sap/fe/core/converters/controls/Common/Form.ts +16 -2
  89. package/src/sap/fe/core/converters/controls/Common/Table.js +250 -146
  90. package/src/sap/fe/core/converters/controls/Common/Table.ts +300 -167
  91. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +115 -56
  92. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +120 -74
  93. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +467 -32
  94. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +483 -54
  95. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
  96. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
  97. package/src/sap/fe/core/converters/helpers/Aggregation.js +13 -5
  98. package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
  99. package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
  100. package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
  101. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  102. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  103. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
  104. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
  105. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  106. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  107. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  108. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  109. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  110. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  111. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  112. package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
  113. package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
  114. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  115. package/src/sap/fe/core/formatters/ValueFormatter.ts +7 -6
  116. package/src/sap/fe/core/fpm/Component.js +3 -2
  117. package/src/sap/fe/core/helpers/AppStartupHelper.js +2 -2
  118. package/src/sap/fe/core/helpers/AppStartupHelper.ts +7 -4
  119. package/src/sap/fe/core/helpers/BindingExpression.js +314 -355
  120. package/src/sap/fe/core/helpers/BindingExpression.ts +317 -391
  121. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  122. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  123. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  124. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  125. package/src/sap/fe/core/helpers/EditState.js +81 -84
  126. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  127. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  128. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  129. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  130. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  131. package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
  132. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
  133. package/src/sap/fe/core/helpers/MassEditHelper.js +27 -18
  134. package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
  135. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  136. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  137. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  138. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  139. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  140. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  141. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  142. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  143. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  144. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  145. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  146. package/src/sap/fe/core/library.js +4 -3
  147. package/src/sap/fe/core/library.support.js +3 -2
  148. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  149. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +1 -1
  150. package/src/sap/fe/core/messagebundle.properties +23 -10
  151. package/src/sap/fe/core/messagebundle_ar.properties +9 -0
  152. package/src/sap/fe/core/messagebundle_bg.properties +9 -0
  153. package/src/sap/fe/core/messagebundle_ca.properties +9 -0
  154. package/src/sap/fe/core/messagebundle_cs.properties +10 -1
  155. package/src/sap/fe/core/messagebundle_cy.properties +9 -0
  156. package/src/sap/fe/core/messagebundle_da.properties +9 -0
  157. package/src/sap/fe/core/messagebundle_de.properties +9 -0
  158. package/src/sap/fe/core/messagebundle_el.properties +9 -0
  159. package/src/sap/fe/core/messagebundle_en.properties +9 -0
  160. package/src/sap/fe/core/messagebundle_en_GB.properties +9 -0
  161. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +9 -0
  162. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -0
  163. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +9 -0
  164. package/src/sap/fe/core/messagebundle_es.properties +9 -0
  165. package/src/sap/fe/core/messagebundle_es_MX.properties +9 -0
  166. package/src/sap/fe/core/messagebundle_et.properties +9 -0
  167. package/src/sap/fe/core/messagebundle_fi.properties +9 -0
  168. package/src/sap/fe/core/messagebundle_fr.properties +13 -4
  169. package/src/sap/fe/core/messagebundle_fr_CA.properties +15 -6
  170. package/src/sap/fe/core/messagebundle_hi.properties +15 -6
  171. package/src/sap/fe/core/messagebundle_hr.properties +15 -6
  172. package/src/sap/fe/core/messagebundle_hu.properties +9 -0
  173. package/src/sap/fe/core/messagebundle_id.properties +10 -1
  174. package/src/sap/fe/core/messagebundle_it.properties +9 -0
  175. package/src/sap/fe/core/messagebundle_iw.properties +9 -0
  176. package/src/sap/fe/core/messagebundle_ja.properties +9 -0
  177. package/src/sap/fe/core/messagebundle_kk.properties +15 -6
  178. package/src/sap/fe/core/messagebundle_ko.properties +9 -0
  179. package/src/sap/fe/core/messagebundle_lt.properties +9 -0
  180. package/src/sap/fe/core/messagebundle_lv.properties +15 -6
  181. package/src/sap/fe/core/messagebundle_ms.properties +14 -5
  182. package/src/sap/fe/core/messagebundle_nl.properties +9 -0
  183. package/src/sap/fe/core/messagebundle_no.properties +9 -0
  184. package/src/sap/fe/core/messagebundle_pl.properties +9 -0
  185. package/src/sap/fe/core/messagebundle_pt.properties +9 -0
  186. package/src/sap/fe/core/messagebundle_pt_PT.properties +9 -0
  187. package/src/sap/fe/core/messagebundle_ro.properties +9 -0
  188. package/src/sap/fe/core/messagebundle_ru.properties +9 -0
  189. package/src/sap/fe/core/messagebundle_sh.properties +11 -2
  190. package/src/sap/fe/core/messagebundle_sk.properties +9 -0
  191. package/src/sap/fe/core/messagebundle_sl.properties +15 -6
  192. package/src/sap/fe/core/messagebundle_sv.properties +9 -0
  193. package/src/sap/fe/core/messagebundle_th.properties +9 -0
  194. package/src/sap/fe/core/messagebundle_tr.properties +9 -0
  195. package/src/sap/fe/core/messagebundle_uk.properties +9 -0
  196. package/src/sap/fe/core/messagebundle_vi.properties +9 -0
  197. package/src/sap/fe/core/messagebundle_zh_CN.properties +9 -0
  198. package/src/sap/fe/core/messagebundle_zh_TW.properties +15 -6
  199. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  200. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  201. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  202. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  203. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  204. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  205. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  206. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  207. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  208. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  209. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -899
  210. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  211. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  212. package/src/sap/fe/core/services/ShellServicesFactory.ts +15 -10
  213. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +35 -81
  214. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +46 -94
  215. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -487
  216. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  217. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  218. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  219. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  220. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  221. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  222. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  223. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  224. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  225. package/src/sap/fe/core/templating/FilterHelper.js +138 -72
  226. package/src/sap/fe/core/templating/FilterHelper.ts +139 -71
  227. package/src/sap/fe/core/templating/UIFormatters.js +31 -1
  228. package/src/sap/fe/core/templating/UIFormatters.ts +33 -2
  229. package/src/sap/fe/core/type/Email.js +1 -1
  230. package/src/sap/fe/core/type/Email.ts +4 -6
  231. 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
- * (c) Copyright 2009-2022 SAP SE. All rights reserved.
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
- "use strict";
7
- var ExcelFormatHelper = {
8
- /**
9
- * Method for converting JS Date format to Excel custom date format.
10
- *
11
- * @returns {string} Format for the Date column to be used on excel.
12
- */
13
- getExcelDatefromJSDate: function() {
14
- // Get date Format(pattern), which will be used for date format mapping between sapui5 and excel.
15
- var sJSDateFormat = DateFormat.getDateInstance().oFormatOptions.pattern.toLowerCase();
16
- if (sJSDateFormat) {
17
- // Checking for the existence of single 'y' in the pattern.
18
- var regex = /^[^y]*y[^y]*$/m;
19
- if (regex.exec(sJSDateFormat)) {
20
- sJSDateFormat = sJSDateFormat.replace("y", "yyyy");
21
- }
22
- }
23
- return sJSDateFormat;
24
- },
25
- getExcelDateTimefromJSDateTime: function() {
26
- // Get date Format(pattern), which will be used for date time format mapping between sapui5 and excel.
27
- var sJSDateTimeFormat = DateFormat.getDateTimeInstance().oFormatOptions.pattern.toLowerCase();
28
- if (sJSDateTimeFormat) {
29
- // Checking for the existence of single 'y' in the pattern.
30
- var regexYear = /^[^y]*y[^y]*$/m;
31
- if (regexYear.exec(sJSDateTimeFormat)) {
32
- sJSDateTimeFormat = sJSDateTimeFormat.replace("y", "yyyy");
33
- }
34
- if (sJSDateTimeFormat.includes("a")) {
35
- sJSDateTimeFormat = sJSDateTimeFormat.replace("a", "AM/PM");
36
- }
37
- }
38
- return sJSDateTimeFormat;
39
- },
40
- getExcelTimefromJSTime: function() {
41
- // Get date Format(pattern), which will be used for date time format mapping between sapui5 and excel.
42
- var sJSTimeFormat = DateFormat.getTimeInstance().oFormatOptions.pattern;
43
- if (sJSTimeFormat && sJSTimeFormat.includes("a")) {
44
- sJSTimeFormat = sJSTimeFormat.replace("a", "AM/PM");
45
- }
46
- return sJSTimeFormat;
47
- }
48
- };
49
- return ExcelFormatHelper;
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
- * (c) Copyright 2009-2022 SAP SE. All rights reserved.
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
- "use strict";
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
- if (oParameters !== undefined) {
17
- aSelectedContexts = oParameters.contexts || [];
18
- } else if (oBindingContext !== undefined) {
19
- aSelectedContexts = [oBindingContext];
20
- } else {
21
- aSelectedContexts = [];
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
- if (
25
- oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" ||
26
- oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController"
27
- ) {
28
- oExtensionAPI = oView.getController().getExtensionAPI();
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
- if (sModule.startsWith("/extension/")) {
32
- var fnTarget = ObjectPath.get(sModule.replace(/\//g, ".").substr(1), oExtensionAPI);
33
- resolve(fnTarget[sMethod](oBindingContext, aSelectedContexts));
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
- if (
48
- oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" ||
49
- oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController"
50
- ) {
51
- oExtensionAPI = oView.getController().getExtensionAPI();
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
- sap.ui.require([sModule], function(module) {
55
- // - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
56
- // - we provide the context as API, maybe if needed further properties
57
- resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, oValidationContexts));
58
- });
59
- });
60
- }
61
- };
62
- return FPMHelper;
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/ModelHelper", "sap/fe/core/helpers/KeepAliveRefreshTypes"], function (Log, ModelHelper, KeepAliveRefreshTypes) {
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 { Control } from "sap/ui/core";
2
- import { View } from "sap/ui/core/mvc";
3
- import { Log } from "sap/base";
4
- import { ODataMetaModel } from "sap/ui/model/odata/v4";
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 { JSONModel } from "sap/ui/model/json";
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<{}>).setProperty(PATH_TO_STORE, refreshStrategy);
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();