@sapui5/sap.fe.templates 1.100.0 → 1.102.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/package.json +4 -5
  2. package/src/sap/fe/templates/.library +1 -2
  3. package/src/sap/fe/templates/AnalyticalListPage/Component.js +24 -12
  4. package/src/sap/fe/templates/AnalyticalListPage/Component.ts +6 -0
  5. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +30 -32
  6. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.ts +25 -0
  7. package/src/sap/fe/templates/Feedback.js +80 -0
  8. package/src/sap/fe/templates/Feedback.ts +67 -0
  9. package/src/sap/fe/templates/ListComponent.js +156 -118
  10. package/src/sap/fe/templates/ListComponent.ts +105 -0
  11. package/src/sap/fe/templates/ListReport/Component.js +82 -53
  12. package/src/sap/fe/templates/ListReport/Component.ts +39 -0
  13. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +126 -112
  14. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +106 -0
  15. package/src/sap/fe/templates/ListReport/ListReport.view.xml +106 -58
  16. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +1196 -1081
  17. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +1088 -0
  18. package/src/sap/fe/templates/ListReport/ListReportTemplating.js +45 -0
  19. package/src/sap/fe/templates/ListReport/ListReportTemplating.ts +30 -0
  20. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +54 -53
  21. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +55 -0
  22. package/src/sap/fe/templates/ListReport/overrides/Share.js +137 -137
  23. package/src/sap/fe/templates/ListReport/overrides/Share.ts +135 -0
  24. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +451 -428
  25. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +419 -0
  26. package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +25 -25
  27. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +72 -0
  28. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +62 -0
  29. package/src/sap/fe/templates/ListReport/view/fragments/{MultipleMode.fragment.xml → MultipleModeOld.fragment.xml} +24 -23
  30. package/src/sap/fe/templates/ObjectPage/Component.js +169 -138
  31. package/src/sap/fe/templates/ObjectPage/Component.ts +131 -0
  32. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +140 -142
  33. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +116 -0
  34. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +162 -22
  35. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1534 -1447
  36. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +1454 -0
  37. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +872 -0
  38. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +837 -0
  39. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +136 -101
  40. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.ts +84 -0
  41. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +24 -21
  42. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.ts +10 -0
  43. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +98 -53
  44. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +50 -0
  45. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +20 -19
  46. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.ts +15 -0
  47. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +50 -47
  48. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.ts +47 -0
  49. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +34 -34
  50. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.ts +34 -0
  51. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +15 -15
  52. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.ts +13 -0
  53. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +11 -11
  54. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.ts +7 -0
  55. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +55 -52
  56. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +57 -0
  57. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +15 -17
  58. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +13 -0
  59. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +13 -17
  60. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +14 -0
  61. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +23 -21
  62. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.ts +21 -0
  63. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +310 -317
  64. package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +316 -0
  65. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +66 -57
  66. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +65 -0
  67. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +26 -33
  68. package/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +11 -10
  69. package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +15 -15
  70. package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +31 -27
  71. package/src/sap/fe/templates/ObjectPage/view/fragments/FormActionButtons.fragment.xml +15 -16
  72. package/src/sap/fe/templates/ObjectPage/view/fragments/FormActions.fragment.xml +1 -5
  73. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +1 -2
  74. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPointTitle.fragment.xml +1 -3
  75. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +3 -4
  76. package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +16 -17
  77. package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +3 -3
  78. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +3 -3
  79. package/src/sap/fe/templates/ObjectPage/view/fragments/RelatedApps.fragment.xml +7 -4
  80. package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +71 -6
  81. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +114 -94
  82. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContentLazyLoader.fragment.xml +127 -107
  83. package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +27 -0
  84. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +899 -817
  85. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.ts +833 -0
  86. package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +205 -189
  87. package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.ts +178 -0
  88. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +484 -459
  89. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.ts +438 -0
  90. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +16 -14
  91. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.ts +20 -0
  92. package/src/sap/fe/templates/TableScroller.js +45 -53
  93. package/src/sap/fe/templates/TableScroller.ts +48 -0
  94. package/src/sap/fe/templates/controls/Chart.fragment.xml +18 -17
  95. package/src/sap/fe/templates/controls/MacroChart.fragment.xml +23 -0
  96. package/src/sap/fe/templates/controls/Table.fragment.xml +3 -4
  97. package/src/sap/fe/templates/library.js +49 -63
  98. package/src/sap/fe/templates/library.ts +57 -0
  99. package/src/sap/fe/templates/messagebundle.properties +19 -7
  100. package/src/sap/fe/templates/messagebundle_ar.properties +12 -4
  101. package/src/sap/fe/templates/messagebundle_bg.properties +12 -4
  102. package/src/sap/fe/templates/messagebundle_ca.properties +12 -4
  103. package/src/sap/fe/templates/messagebundle_cs.properties +12 -4
  104. package/src/sap/fe/templates/messagebundle_cy.properties +12 -4
  105. package/src/sap/fe/templates/messagebundle_da.properties +12 -4
  106. package/src/sap/fe/templates/messagebundle_de.properties +12 -4
  107. package/src/sap/fe/templates/messagebundle_el.properties +12 -4
  108. package/src/sap/fe/templates/messagebundle_en.properties +12 -4
  109. package/src/sap/fe/templates/messagebundle_en_GB.properties +12 -4
  110. package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +13 -5
  111. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +13 -5
  112. package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +13 -5
  113. package/src/sap/fe/templates/messagebundle_es.properties +12 -4
  114. package/src/sap/fe/templates/messagebundle_es_MX.properties +12 -4
  115. package/src/sap/fe/templates/messagebundle_et.properties +12 -4
  116. package/src/sap/fe/templates/messagebundle_fi.properties +12 -4
  117. package/src/sap/fe/templates/messagebundle_fr.properties +12 -4
  118. package/src/sap/fe/templates/messagebundle_fr_CA.properties +12 -4
  119. package/src/sap/fe/templates/messagebundle_hi.properties +12 -4
  120. package/src/sap/fe/templates/messagebundle_hr.properties +12 -4
  121. package/src/sap/fe/templates/messagebundle_hu.properties +12 -4
  122. package/src/sap/fe/templates/messagebundle_id.properties +12 -4
  123. package/src/sap/fe/templates/messagebundle_it.properties +12 -4
  124. package/src/sap/fe/templates/messagebundle_iw.properties +12 -4
  125. package/src/sap/fe/templates/messagebundle_ja.properties +12 -4
  126. package/src/sap/fe/templates/messagebundle_kk.properties +12 -4
  127. package/src/sap/fe/templates/messagebundle_ko.properties +12 -4
  128. package/src/sap/fe/templates/messagebundle_lt.properties +12 -4
  129. package/src/sap/fe/templates/messagebundle_lv.properties +12 -4
  130. package/src/sap/fe/templates/messagebundle_ms.properties +12 -4
  131. package/src/sap/fe/templates/messagebundle_nl.properties +12 -4
  132. package/src/sap/fe/templates/messagebundle_no.properties +12 -4
  133. package/src/sap/fe/templates/messagebundle_pl.properties +12 -4
  134. package/src/sap/fe/templates/messagebundle_pt.properties +13 -5
  135. package/src/sap/fe/templates/messagebundle_pt_PT.properties +12 -4
  136. package/src/sap/fe/templates/messagebundle_ro.properties +12 -4
  137. package/src/sap/fe/templates/messagebundle_ru.properties +12 -4
  138. package/src/sap/fe/templates/messagebundle_sh.properties +12 -4
  139. package/src/sap/fe/templates/messagebundle_sk.properties +12 -4
  140. package/src/sap/fe/templates/messagebundle_sl.properties +12 -4
  141. package/src/sap/fe/templates/messagebundle_sv.properties +12 -4
  142. package/src/sap/fe/templates/messagebundle_th.properties +12 -4
  143. package/src/sap/fe/templates/messagebundle_tr.properties +12 -4
  144. package/src/sap/fe/templates/messagebundle_uk.properties +12 -4
  145. package/src/sap/fe/templates/messagebundle_vi.properties +12 -4
  146. package/src/sap/fe/templates/messagebundle_zh_CN.properties +12 -4
  147. package/src/sap/fe/templates/messagebundle_zh_TW.properties +12 -4
  148. package/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +0 -518
  149. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +0 -120
  150. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +0 -138
@@ -1,518 +0,0 @@
1
- /*!
2
- * SAP UI development toolkit for HTML5 (SAPUI5)
3
- (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
- */
6
-
7
- sap.ui.define(
8
- ["sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/base/ManagedObject", "sap/fe/macros/CommonHelper"],
9
- function(ODataModelAnnotationHelper, ManagedObject, CommonHelper) {
10
- "use strict";
11
-
12
- /*
13
- This class contains annotation helpers that might be used from several templates or controls
14
- */
15
-
16
- var AnnotationHelper = {
17
- getElementBinding: function(sPath) {
18
- var sNavigationPath = ODataModelAnnotationHelper.getNavigationPath(sPath);
19
- if (sNavigationPath) {
20
- return "{path:'" + sNavigationPath + "'}";
21
- } else {
22
- //no navigation property needs empty object
23
- return "{path: ''}";
24
- }
25
- },
26
-
27
- /**
28
- * Function to check if draft pattern is supported.
29
- *
30
- * @param {object} oAnnotations Annotations of the current entity set.
31
- * @returns {string} Returns the Boolean value based on draft state
32
- */
33
- checkDraftState: function(oAnnotations) {
34
- if (
35
- oAnnotations["@com.sap.vocabularies.Common.v1.DraftRoot"] &&
36
- oAnnotations["@com.sap.vocabularies.Common.v1.DraftRoot"]["EditAction"]
37
- ) {
38
- return true;
39
- } else {
40
- return false;
41
- }
42
- },
43
-
44
- /**
45
- * Function to get the visibility for the SwitchToActive button in the object page or subobject page.
46
- *
47
- * @param {object} oAnnotations Annotations of the current entity set.
48
- * @returns {string} Returns expression binding or Boolean value based on the draft state
49
- */
50
- getSwitchToActiveVisibility: function(oAnnotations) {
51
- if (this.checkDraftState(oAnnotations)) {
52
- return "{= (%{DraftAdministrativeData/DraftIsCreatedByMe}) ? ( (${ui>/editMode} === 'Editable') && !${ui>createMode} && %{DraftAdministrativeData/DraftIsCreatedByMe} ) : false }";
53
- } else {
54
- return false;
55
- }
56
- },
57
-
58
- /**
59
- * Function to get the visibility for the SwitchToDraft button in the object page or subobject page.
60
- *
61
- * @param {object} oAnnotations Annotations of the current entity set.
62
- * @returns {string} Returns expression binding or Boolean value based on the draft state
63
- */
64
- getSwitchToDraftVisibility: function(oAnnotations) {
65
- if (this.checkDraftState(oAnnotations)) {
66
- return "{= (%{DraftAdministrativeData/DraftIsCreatedByMe}) ? ( !(${ui>/editMode} === 'Editable') && !${ui>createMode} && ${HasDraftEntity} && %{DraftAdministrativeData/DraftIsCreatedByMe} ) : false }";
67
- } else {
68
- return false;
69
- }
70
- },
71
-
72
- /**
73
- * Function to find an action from the array of header actions in the converter context.
74
- *
75
- * @param {object[]} aConverterContextHeaderActions Array of 'header' actions on the object page.
76
- * @param {string} sActionType The action type
77
- * @returns {object | undefined} The action with the matching action type
78
- * @private
79
- */
80
- _findAction: function(aConverterContextHeaderActions, sActionType) {
81
- var oAction;
82
- if (aConverterContextHeaderActions && aConverterContextHeaderActions.length) {
83
- oAction = aConverterContextHeaderActions.find(function(oHeaderAction) {
84
- return oHeaderAction.type === sActionType;
85
- });
86
- }
87
- return oAction;
88
- },
89
-
90
- /**
91
- * Function to format the 'enabled' property for the Delete button on the object page or subobject page in case of a Command Execution.
92
- *
93
- * @param {Array} aConverterContextHeaderActions Array of header actions on the object page
94
- * @returns {string} Returns expression binding or Boolean value from the converter output
95
- */
96
- getDeleteCommandExecutionEnabled: function(aConverterContextHeaderActions) {
97
- var oDeleteAction = AnnotationHelper._findAction(aConverterContextHeaderActions, "Secondary");
98
- return oDeleteAction ? oDeleteAction.enabled : "true";
99
- },
100
- /**
101
- * Function to format the 'visible' property for the Delete button on the object page or subobject page in case of a Command Execution.
102
- *
103
- * @param {Array} aConverterContextHeaderActions Array of header actions on the object page
104
- * @returns {string} Returns expression binding or Boolean value from the converter output
105
- */
106
- getDeleteCommandExecutionVisible: function(aConverterContextHeaderActions) {
107
- var oDeleteAction = AnnotationHelper._findAction(aConverterContextHeaderActions, "Secondary");
108
- return oDeleteAction ? oDeleteAction.visible : "true";
109
- },
110
- /**
111
- * Function to format the 'visible' property for the Edit button on the object page or subobject page in case of a Command Execution.
112
- *
113
- * @param {Array} aConverterContextHeaderActions Array of header actions on the object page
114
- * @returns {string} Returns expression binding or Boolean value from the converter output
115
- */
116
- getEditCommandExecutionVisible: function(aConverterContextHeaderActions) {
117
- var oEditAction = AnnotationHelper._findAction(aConverterContextHeaderActions, "Primary");
118
- return oEditAction ? oEditAction.visible : "true";
119
- },
120
- /**
121
- * Function to format the 'enabled' property for the Edit button on the object page or subobject page in case of a Command Execution.
122
- *
123
- * @param {Array} aConverterContextHeaderActions Array of header actions on the object page
124
- * @returns {string} Returns expression binding or Boolean value from the converter output
125
- */
126
- getEditCommandExecutionEnabled: function(aConverterContextHeaderActions) {
127
- var oEditAction = AnnotationHelper._findAction(aConverterContextHeaderActions, "Primary");
128
- return oEditAction ? oEditAction.enabled : "true";
129
- },
130
- /**
131
- * Function to get the EditAction from the Entityset based on Draft or sticky based application.
132
- *
133
- * @param {object} [oEntitySet] The value from the expression.
134
- * @returns {string} Returns expression binding or boolean value based on vRawValue & oDraftNode
135
- */
136
- getEditAction: function(oEntitySet) {
137
- var sPath = oEntitySet.getPath(),
138
- oAnnotations = oEntitySet.getObject(sPath + "@");
139
- var bDraftRoot = oAnnotations.hasOwnProperty("@com.sap.vocabularies.Common.v1.DraftRoot");
140
- var bStickySession = oAnnotations.hasOwnProperty("@com.sap.vocabularies.Session.v1.StickySessionSupported");
141
- var sActionName;
142
- if (bDraftRoot) {
143
- sActionName = oEntitySet.getObject(sPath + "@com.sap.vocabularies.Common.v1.DraftRoot/EditAction");
144
- } else if (bStickySession) {
145
- sActionName = oEntitySet.getObject(sPath + "@com.sap.vocabularies.Session.v1.StickySessionSupported/EditAction");
146
- }
147
- return !sActionName ? sActionName : sPath + "/" + sActionName;
148
- },
149
- isReadOnlyFromStaticAnnotations: function(oAnnotations, oFieldControl) {
150
- var bComputed, bImmutable, bReadOnly;
151
- if (oAnnotations["@Org.OData.Core.V1.Computed"]) {
152
- bComputed = oAnnotations["@Org.OData.Core.V1.Computed"].Bool
153
- ? oAnnotations["@Org.OData.Core.V1.Computed"].Bool == "true"
154
- : true;
155
- }
156
- if (oAnnotations["@Org.OData.Core.V1.Immutable"]) {
157
- bImmutable = oAnnotations["@Org.OData.Core.V1.Immutable"].Bool
158
- ? oAnnotations["@Org.OData.Core.V1.Immutable"].Bool == "true"
159
- : true;
160
- }
161
- bReadOnly = bComputed || bImmutable;
162
-
163
- if (oFieldControl) {
164
- bReadOnly = bReadOnly || oFieldControl == "com.sap.vocabularies.Common.v1.FieldControlType/ReadOnly";
165
- }
166
- if (bReadOnly) {
167
- return true;
168
- } else {
169
- return false;
170
- }
171
- },
172
- readOnlyExpressionFromDynamicAnnotations: function(oFieldControl) {
173
- var sIsFieldControlPathReadOnly;
174
- if (oFieldControl) {
175
- if (ManagedObject.bindingParser(oFieldControl)) {
176
- sIsFieldControlPathReadOnly = "%" + oFieldControl + " === 1 ";
177
- }
178
- }
179
- if (sIsFieldControlPathReadOnly) {
180
- return "{= " + sIsFieldControlPathReadOnly + "? false : true }";
181
- } else {
182
- return;
183
- }
184
- },
185
- /*
186
- * Function to get the expression for chart Title Press
187
- *
188
- * @function
189
- * @param {oConfiguration} [oConfigurations] control configuration from manifest
190
- * @param {oManifest} [oManifest] Outbounds from manifest
191
- * returns {String} [sCollectionName] Collection Name of the Micro Chart
192
- *
193
- * returns {String} [Expression] Handler Expression for the title press
194
- *
195
- */
196
- getExpressionForMicroChartTitlePress: function(oConfiguration, oManifestOutbound, sCollectionName) {
197
- if (oConfiguration) {
198
- if (
199
- (oConfiguration["targetOutbound"] && oConfiguration["targetOutbound"]["outbound"]) ||
200
- (oConfiguration["targetOutbound"] &&
201
- oConfiguration["targetOutbound"]["outbound"] &&
202
- oConfiguration["targetSections"])
203
- ) {
204
- return (
205
- ".handlers.onDataPointTitlePressed($controller, ${$source>/},'" +
206
- JSON.stringify(oManifestOutbound) +
207
- "','" +
208
- oConfiguration["targetOutbound"]["outbound"] +
209
- "','" +
210
- sCollectionName +
211
- "' )"
212
- );
213
- } else if (oConfiguration["targetSections"]) {
214
- return ".handlers.navigateToSubSection($controller, '" + JSON.stringify(oConfiguration["targetSections"]) + "')";
215
- } else {
216
- return undefined;
217
- }
218
- }
219
- },
220
- /*
221
- * Function to render Chart Title as Link
222
- *
223
- * @function
224
- * @param {oControlConfiguration} [oConfigurations] control configuration from manifest
225
- * returns {String} [sKey] For the TargetOutbound and TargetSection
226
- *
227
- */
228
- getMicroChartTitleAsLink: function(oControlConfiguration) {
229
- if (
230
- oControlConfiguration &&
231
- (oControlConfiguration["targetOutbound"] ||
232
- (oControlConfiguration["targetOutbound"] && oControlConfiguration["targetSections"]))
233
- ) {
234
- return "External";
235
- } else if (oControlConfiguration && oControlConfiguration["targetSections"]) {
236
- return "InPage";
237
- } else {
238
- return "None";
239
- }
240
- },
241
-
242
- /* Get groupId from control configuration
243
- *
244
- * @function
245
- * @param {Object} [oConfigurations] control configuration from manifest
246
- * @param {String} [sAnnotationPath] Annotation Path for the configuration
247
- * @description Used to get the groupId for DataPoints and MicroCharts in the Header.
248
- *
249
- */
250
- getGroupIdFromConfig: function(oConfigurations, sAnnotationPath, sDefaultGroupId) {
251
- var oConfiguration = oConfigurations[sAnnotationPath],
252
- aAutoPatterns = ["Heroes", "Decoration", "Workers", "LongRunners"],
253
- sGroupId = sDefaultGroupId;
254
- if (
255
- oConfiguration &&
256
- oConfiguration.requestGroupId &&
257
- aAutoPatterns.some(function(autoPattern) {
258
- return autoPattern === oConfiguration.requestGroupId;
259
- })
260
- ) {
261
- sGroupId = "$auto." + oConfiguration.requestGroupId;
262
- }
263
- return sGroupId;
264
- },
265
-
266
- /*
267
- * Get Context Binding with groupId from control configuration
268
- *
269
- * @function
270
- * @param {Object} [oConfigurations] control configuration from manifest
271
- * @param {String} [sKey] Annotation Path for of the configuration
272
- * @description Used to get the binding for DataPoints in the Header.
273
- *
274
- */
275
- getBindingWithGroupIdFromConfig: function(oConfigurations, sKey) {
276
- var sGroupId = AnnotationHelper.getGroupIdFromConfig(oConfigurations, sKey),
277
- sBinding;
278
- if (sGroupId) {
279
- sBinding = "{ path : '', parameters : { $$groupId : '" + sGroupId + "' } }";
280
- }
281
- return sBinding;
282
- },
283
- /**
284
- * Method to check whether a FieldGroup consists of only 1 DataField with MultiLine Text annotation.
285
- *
286
- * @param {DataFieldAbstractTypes[]} aFormElements A collection of form elements used in the current field group
287
- * @returns {boolean} Returns true if only 1 data field with Multiline Text annotation exists.
288
- */
289
- doesFieldGroupContainOnlyOneMultiLineDataField: function(aFormElements) {
290
- return aFormElements && aFormElements.length === 1 && !!aFormElements[0].isValueMultilineText;
291
- },
292
- /*
293
- * Get Visiblity of breadcrumbs.
294
- *
295
- * @function
296
- * @param {Object} [oViewData] ViewData model
297
- * returns {*} Expression or boolean
298
- */
299
- getVisibleExpressionForBreadcrumbs: function(oViewData) {
300
- return oViewData.showBreadCrumbs && oViewData.fclEnabled !== undefined
301
- ? "{fclhelper>/breadCrumbIsVisible}"
302
- : oViewData.showBreadCrumbs;
303
- },
304
- getShareButtonVisibility: function(viewData) {
305
- var sShareButtonVisibilityExp = "!${ui>createMode}";
306
- if (viewData.fclEnabled) {
307
- sShareButtonVisibilityExp = "${fclhelper>/showShareIcon} && " + sShareButtonVisibilityExp;
308
- }
309
- return "{= " + sShareButtonVisibilityExp + " }";
310
- },
311
-
312
- /*
313
- * Get visiblity for editable header facet.
314
- *
315
- * If either the title or description field from the header annotations are editable, then the
316
- * editable header facet is visible.
317
- *
318
- * @function
319
- * @param {object} [oAnnotations] Annotations object for given entity set
320
- * @param {object} [oFieldControl] field control
321
- * returns {*} binding expression or boolean value resolved form funcitons isReadOnlyFromStaticAnnotations and isReadOnlyFromDynamicAnnotations
322
- */
323
- getVisiblityOfHeaderFacet: function(
324
- oTitleAnnotations,
325
- oDescriptionAnnotations,
326
- oFieldTitleFieldControl,
327
- oFieldDescriptionFieldControl
328
- ) {
329
- // Check Annotations for Title Field
330
- var bIsTitleReadOnly = AnnotationHelper.isReadOnlyFromStaticAnnotations(oTitleAnnotations, oFieldTitleFieldControl);
331
- var titleExpression = AnnotationHelper.readOnlyExpressionFromDynamicAnnotations(oFieldTitleFieldControl);
332
- // There is no expression and the title is not ready only, this is sufficient for an editable header
333
- if (!bIsTitleReadOnly && !titleExpression) {
334
- return true;
335
- }
336
-
337
- // Check Annotations for Description Field
338
- var bIsDescriptionReadOnly = AnnotationHelper.isReadOnlyFromStaticAnnotations(
339
- oDescriptionAnnotations,
340
- oFieldDescriptionFieldControl
341
- );
342
- var descriptionExpression = AnnotationHelper.readOnlyExpressionFromDynamicAnnotations(oFieldDescriptionFieldControl);
343
- // There is no expression and the description is not ready only, this is sufficient for an editable header
344
- if (!bIsDescriptionReadOnly && !descriptionExpression) {
345
- return true;
346
- }
347
-
348
- // Both title and description are not editable and there are no dynamic annotations
349
- if (bIsTitleReadOnly && bIsDescriptionReadOnly && !titleExpression && !descriptionExpression) {
350
- return false;
351
- }
352
-
353
- // Now combine expressions
354
- if (titleExpression && !descriptionExpression) {
355
- return titleExpression;
356
- } else if (!titleExpression && descriptionExpression) {
357
- return descriptionExpression;
358
- } else {
359
- return AnnotationHelper.combineTitleAndDescriptionExpression(oFieldTitleFieldControl, oFieldDescriptionFieldControl);
360
- }
361
- },
362
- combineTitleAndDescriptionExpression: function(oTitleFieldControl, oDescriptionFieldControl) {
363
- // If both header and title field are based on dynmaic field control, the editable header
364
- // is visible if at least one of these is not ready only
365
- return "{= %" + oTitleFieldControl + " === 1 ? ( %" + oDescriptionFieldControl + " === 1 ? false : true ) : true }";
366
- },
367
- /*
368
- * Get Expression of press event of delete button.
369
- *
370
- * @function
371
- * @param {string} [sEntitySetName] Entity set name
372
- * returns {string} binding expression / function string generated from commanhelper's function generateFunction
373
- */
374
- getPressExpressionForDelete: function(sEntitySetName) {
375
- var sDeletableContexts = "${$view>/getBindingContext}",
376
- sTitle = "${$view>/#fe::ObjectPage/getHeaderTitle/getExpandedHeading/getItems/1/getText}",
377
- sDescription = "${$view>/#fe::ObjectPage/getHeaderTitle/getExpandedContent/0/getItems/0/getText}";
378
- var oParams = {
379
- title: sTitle,
380
- entitySetName: CommonHelper.addSingleQuotes(sEntitySetName),
381
- description: sDescription
382
- };
383
- return CommonHelper.generateFunction(".editFlow.deleteDocument", sDeletableContexts, CommonHelper.objectToString(oParams));
384
- },
385
- /*
386
- * Get Expression of press event of Edit button.
387
- *
388
- * @function
389
- * @param {object} [oDataField] Data field object
390
- * @param {string} [sEntitySetName] Entity set name
391
- * @param {object} [oHeaderAction] Header action object
392
- * returns {string} binding expression / function string generated from commanhelper's function generateFunction
393
- */
394
- getPressExpressionForEdit: function(oDataField, sEntitySetName, oHeaderAction) {
395
- var sEditableContexts = CommonHelper.addSingleQuotes(oDataField && oDataField.Action),
396
- sDataFieldEnumMember = oDataField && oDataField.InvocationGrouping && oDataField.InvocationGrouping["$EnumMember"],
397
- sInvocationGroup =
398
- sDataFieldEnumMember === "com.sap.vocabularies.UI.v1.OperationGroupingType/ChangeSet" ? "ChangeSet" : "Isolated";
399
- var oParams = {
400
- contexts: "${$view>/getBindingContext}",
401
- entitySetName: CommonHelper.addSingleQuotes(sEntitySetName),
402
- invocationGrouping: CommonHelper.addSingleQuotes(sInvocationGroup),
403
- model: "${$source>/}.getModel()",
404
- label: CommonHelper.addSingleQuotes(oDataField && oDataField.Label, true),
405
- isNavigable: oHeaderAction && oHeaderAction.isNavigable,
406
- defaultValuesExtensionFunction:
407
- oHeaderAction && oHeaderAction.defaultValuesExtensionFunction
408
- ? "'" + oHeaderAction.defaultValuesExtensionFunction + "'"
409
- : undefined
410
- };
411
- return CommonHelper.generateFunction(
412
- ".handlers.onCallAction",
413
- "${$view>/}",
414
- sEditableContexts,
415
- CommonHelper.objectToString(oParams)
416
- );
417
- },
418
- /*
419
- * Method to get the expression for the 'press' event for footer annotation actions
420
- *
421
- * @function
422
- * @param {object} [oDataField] Data field object
423
- * @param {string} [sEntitySetName] Entity set name
424
- * @param {object} [oHeaderAction] Header action object
425
- * returns {string} Binding expression or function string that is generated from the Commonhelper's function generateFunction
426
- */
427
- getPressExpressionForFooterAnnotationAction: function(oDataField, sEntitySetName, oHeaderAction) {
428
- var sActionContexts = CommonHelper.addSingleQuotes(oDataField && oDataField.Action),
429
- sDataFieldEnumMember = oDataField && oDataField.InvocationGrouping && oDataField.InvocationGrouping["$EnumMember"],
430
- sInvocationGroup =
431
- sDataFieldEnumMember === "com.sap.vocabularies.UI.v1.OperationGroupingType/ChangeSet" ? "ChangeSet" : "Isolated";
432
- var oParams = {
433
- contexts: "${$view>/#fe::ObjectPage/}.getBindingContext()",
434
- entitySetName: CommonHelper.addSingleQuotes(sEntitySetName),
435
- invocationGrouping: CommonHelper.addSingleQuotes(sInvocationGroup),
436
- model: "${$source>/}.getModel()",
437
- label: CommonHelper.addSingleQuotes(oDataField && oDataField.Label, true),
438
- isNavigable: oHeaderAction && oHeaderAction.isNavigable,
439
- defaultValuesExtensionFunction:
440
- oHeaderAction && oHeaderAction.defaultValuesExtensionFunction
441
- ? "'" + oHeaderAction.defaultValuesExtensionFunction + "'"
442
- : undefined
443
- };
444
- return CommonHelper.generateFunction(
445
- ".handlers.onCallAction",
446
- "${$view>/}",
447
- sActionContexts,
448
- CommonHelper.objectToString(oParams)
449
- );
450
- },
451
- /*
452
- * Gets the binding of the container HBox for the header facet.
453
- *
454
- * @function
455
- * @param {object} [oControlConfiguration] The control configuration form of the viewData model
456
- * @param {object} [oHeaderFacet] The object of the header facet
457
- * returns {*} The binding expression from function getBindingWithGroupIdFromConfig or undefined.
458
- */
459
- getStashableHBoxBinding: function(oControlConfiguration, oHeaderFacet) {
460
- if (oHeaderFacet && oHeaderFacet.Facet && oHeaderFacet.Facet.targetAnnotationType === "DataPoint") {
461
- return AnnotationHelper.getBindingWithGroupIdFromConfig(
462
- oControlConfiguration,
463
- oHeaderFacet.Facet.targetAnnotationValue
464
- );
465
- }
466
- },
467
-
468
- /*
469
- * Gets the 'Press' event expression for the external and internal data point link.
470
- *
471
- * @function
472
- * @param {object} [oConfiguration] Control configuration from manifest
473
- * @param {object} [oManifestOutbound] Outbounds from manifest
474
- * returns {string} The runtime binding of the 'Press' event
475
- */
476
- getPressExpressionForLink: function(oConfiguration, oManifestOutbound) {
477
- if (oConfiguration) {
478
- if (oConfiguration["targetOutbound"] && oConfiguration["targetOutbound"]["outbound"]) {
479
- return (
480
- ".handlers.onDataPointTitlePressed($controller, ${$source>}, " +
481
- JSON.stringify(oManifestOutbound) +
482
- "," +
483
- JSON.stringify(oConfiguration["targetOutbound"]["outbound"]) +
484
- ")"
485
- );
486
- } else if (oConfiguration["targetSections"]) {
487
- return ".handlers.navigateToSubSection($controller, '" + JSON.stringify(oConfiguration["targetSections"]) + "')";
488
- } else {
489
- return undefined;
490
- }
491
- }
492
- },
493
- isSubSectionTitleVisible: function(sSubSectionvisible, sSubSectiontitle, sSubSectionshowTitle) {
494
- if (sSubSectionvisible.indexOf("{=") === 0) {
495
- // Dynamic expression
496
- var sExpressionResult = sSubSectionvisible.substring(
497
- sSubSectionvisible.indexOf("{=") + 2,
498
- sSubSectionvisible.lastIndexOf("}")
499
- );
500
- return (
501
- "{= (" +
502
- sExpressionResult +
503
- ") && ('" +
504
- sSubSectiontitle +
505
- "' !=='undefined') && (" +
506
- sSubSectionshowTitle +
507
- " ? true : false) }"
508
- );
509
- } else {
510
- return sSubSectionvisible && sSubSectiontitle !== "undefined" && (sSubSectionshowTitle ? "true" : "false");
511
- }
512
- }
513
- };
514
-
515
- return AnnotationHelper;
516
- },
517
- true
518
- );
@@ -1,120 +0,0 @@
1
- /*!
2
- * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
- */
5
- sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/CommonUtils", "sap/fe/macros/field/FieldTemplating", "sap/fe/core/templating/EntitySetHelper"], function (BindingExpression, BindingHelper, CommonUtils, FieldTemplating, EntitySetHelper) {
6
- "use strict";
7
-
8
- var _exports = {};
9
- var isStickySessionSupported = EntitySetHelper.isStickySessionSupported;
10
- var formatValueRecursively = FieldTemplating.formatValueRecursively;
11
- var addTextArrangementToBindingExpression = FieldTemplating.addTextArrangementToBindingExpression;
12
- var Entity = BindingHelper.Entity;
13
- var Draft = BindingHelper.Draft;
14
- var UI = BindingHelper.UI;
15
- var compileBinding = BindingExpression.compileBinding;
16
- var annotationExpression = BindingExpression.annotationExpression;
17
- var concat = BindingExpression.concat;
18
- var isEmpty = BindingExpression.isEmpty;
19
- var ifElse = BindingExpression.ifElse;
20
- var and = BindingExpression.and;
21
-
22
- //```mermaid
23
- // graph TD
24
- // A[Object Page Title] -->|Get DataField Value| C{Evaluate Create Mode}
25
- // C -->|In Create Mode| D{Is DataField Value empty}
26
- // D -->|Yes| F{Is there a TypeName}
27
- // F -->|Yes| G[Is there an custom title]
28
- // G -->|Yes| G1[Show the custom title + 'TypeName']
29
- // G -->|No| G2[Display the default title 'New + TypeName']
30
- // F -->|No| H[Is there a custom title]
31
- // H -->|Yes| I[Show the custom title]
32
- // H -->|No| J[Show the default 'Unamned Object']
33
- // D -->|No| E
34
- // C -->|Not in create mode| E[Show DataField Value]
35
- // ```
36
-
37
- /**
38
- * Compute the title for the object page.
39
- * @param oHeaderInfo The @UI.HeaderInfo annotation content
40
- * @param oViewData The view data object we're currently on
41
- * @param fullContextPath The full context path used to reach that object page
42
- * @param oDraftRoot
43
- * @returns The binding expression for the object page title
44
- */
45
- var getExpressionForTitle = function (oHeaderInfo, oViewData, fullContextPath, oDraftRoot) {
46
- var _oHeaderInfo$Title, _oHeaderInfo$Title2, _oHeaderInfo$Title3, _oHeaderInfo$Title3$V, _oHeaderInfo$Title3$V2, _oHeaderInfo$Title3$V3, _oHeaderInfo$Title3$V4, _oHeaderInfo$Title3$V5, _oHeaderInfo$Title3$V6, _oHeaderInfo$Title3$V7;
47
-
48
- var titleNoHeaderInfo = CommonUtils.getTranslatedText("T_NEW_OBJECT", oViewData.resourceBundle, undefined, oViewData.entitySet);
49
- var titleWithHeaderInfo = CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE", oViewData.resourceBundle, undefined, oViewData.entitySet);
50
- var oEmptyHeaderInfoTitle = (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === undefined || (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === "" || (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Title = oHeaderInfo.Title) === null || _oHeaderInfo$Title === void 0 ? void 0 : _oHeaderInfo$Title.Value) === "";
51
- var titleForActiveHeaderNoHeaderInfo = !oEmptyHeaderInfoTitle ? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle) : "";
52
- var titleValueExpression = annotationExpression(oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Title2 = oHeaderInfo.Title) === null || _oHeaderInfo$Title2 === void 0 ? void 0 : _oHeaderInfo$Title2.Value);
53
-
54
- if (oHeaderInfo !== null && oHeaderInfo !== void 0 && (_oHeaderInfo$Title3 = oHeaderInfo.Title) !== null && _oHeaderInfo$Title3 !== void 0 && (_oHeaderInfo$Title3$V = _oHeaderInfo$Title3.Value) !== null && _oHeaderInfo$Title3$V !== void 0 && (_oHeaderInfo$Title3$V2 = _oHeaderInfo$Title3$V.$target) !== null && _oHeaderInfo$Title3$V2 !== void 0 && (_oHeaderInfo$Title3$V3 = _oHeaderInfo$Title3$V2.annotations) !== null && _oHeaderInfo$Title3$V3 !== void 0 && (_oHeaderInfo$Title3$V4 = _oHeaderInfo$Title3$V3.Common) !== null && _oHeaderInfo$Title3$V4 !== void 0 && (_oHeaderInfo$Title3$V5 = _oHeaderInfo$Title3$V4.Text) !== null && _oHeaderInfo$Title3$V5 !== void 0 && (_oHeaderInfo$Title3$V6 = _oHeaderInfo$Title3$V5.annotations) !== null && _oHeaderInfo$Title3$V6 !== void 0 && (_oHeaderInfo$Title3$V7 = _oHeaderInfo$Title3$V6.UI) !== null && _oHeaderInfo$Title3$V7 !== void 0 && _oHeaderInfo$Title3$V7.TextArrangement) {
55
- // In case an explicit text arrangement was set we make use of it in the description as well
56
- titleValueExpression = addTextArrangementToBindingExpression(titleValueExpression, fullContextPath);
57
- }
58
-
59
- titleValueExpression = formatValueRecursively(titleValueExpression, fullContextPath); // If there is a TypeName defined, show the default title 'New + TypeName', otherwise show the custom title or the default 'New object'
60
-
61
- var createModeTitle = oHeaderInfo !== null && oHeaderInfo !== void 0 && oHeaderInfo.TypeName ? concat(titleWithHeaderInfo, ": ", annotationExpression(oHeaderInfo.TypeName.toString())) : titleNoHeaderInfo;
62
- var activeExpression = oDraftRoot ? Entity.IsActive : true;
63
- return compileBinding(ifElse( // If Create Mode && Empty expression
64
- and(UI.IsCreateMode, titleValueExpression && isEmpty(titleValueExpression)), createModeTitle, // Otherwise show the default expression
65
- ifElse(and(activeExpression, titleValueExpression && isEmpty(titleValueExpression)), titleForActiveHeaderNoHeaderInfo, titleValueExpression)));
66
- };
67
- /**
68
- * Retrieves the expression for the description of an object page.
69
- *
70
- * @param oHeaderInfo The @UI.HeaderInfo annotation content
71
- * @param fullContextPath The full context path used to reach that object page
72
- * @returns The binding expression for the object page description
73
- */
74
-
75
-
76
- _exports.getExpressionForTitle = getExpressionForTitle;
77
-
78
- var getExpressionForDescription = function (oHeaderInfo, fullContextPath) {
79
- var _oHeaderInfo$Descript, _oHeaderInfo$Descript2, _oHeaderInfo$Descript3, _oHeaderInfo$Descript4, _oHeaderInfo$Descript5, _oHeaderInfo$Descript6, _oHeaderInfo$Descript7, _oHeaderInfo$Descript8, _oHeaderInfo$Descript9;
80
-
81
- var bindingExpression = annotationExpression(oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Descript = oHeaderInfo.Description) === null || _oHeaderInfo$Descript === void 0 ? void 0 : _oHeaderInfo$Descript.Value);
82
-
83
- if (oHeaderInfo !== null && oHeaderInfo !== void 0 && (_oHeaderInfo$Descript2 = oHeaderInfo.Description) !== null && _oHeaderInfo$Descript2 !== void 0 && (_oHeaderInfo$Descript3 = _oHeaderInfo$Descript2.Value) !== null && _oHeaderInfo$Descript3 !== void 0 && (_oHeaderInfo$Descript4 = _oHeaderInfo$Descript3.$target) !== null && _oHeaderInfo$Descript4 !== void 0 && (_oHeaderInfo$Descript5 = _oHeaderInfo$Descript4.annotations) !== null && _oHeaderInfo$Descript5 !== void 0 && (_oHeaderInfo$Descript6 = _oHeaderInfo$Descript5.Common) !== null && _oHeaderInfo$Descript6 !== void 0 && (_oHeaderInfo$Descript7 = _oHeaderInfo$Descript6.Text) !== null && _oHeaderInfo$Descript7 !== void 0 && (_oHeaderInfo$Descript8 = _oHeaderInfo$Descript7.annotations) !== null && _oHeaderInfo$Descript8 !== void 0 && (_oHeaderInfo$Descript9 = _oHeaderInfo$Descript8.UI) !== null && _oHeaderInfo$Descript9 !== void 0 && _oHeaderInfo$Descript9.TextArrangement) {
84
- // In case an explicit text arrangement was set we make use of it in the description as well
85
- bindingExpression = addTextArrangementToBindingExpression(bindingExpression, fullContextPath);
86
- }
87
-
88
- return compileBinding(formatValueRecursively(bindingExpression, fullContextPath));
89
- };
90
- /**
91
- * Return the expression for the save button.
92
- *
93
- * @param oViewData The current view data
94
- * @param fullContextPath The path used up until here
95
- * @returns The binding expression that shows the right save button text
96
- */
97
-
98
-
99
- _exports.getExpressionForDescription = getExpressionForDescription;
100
-
101
- var getExpressionForSaveButton = function (oViewData, fullContextPath) {
102
- var saveButtonText = CommonUtils.getTranslatedText("T_OP_OBJECT_PAGE_SAVE", oViewData.resourceBundle);
103
- var createButtonText = CommonUtils.getTranslatedText("T_OP_OBJECT_PAGE_CREATE", oViewData.resourceBundle);
104
- var saveExpression;
105
-
106
- if (isStickySessionSupported(fullContextPath.startingEntitySet)) {
107
- // If we're in sticky mode AND the ui is in create mode, show Create, else show Save
108
- saveExpression = ifElse(UI.IsCreateModeSticky, createButtonText, saveButtonText);
109
- } else {
110
- // If we're in draft AND the draft is a new object (!IsActiveEntity && !HasActiveEntity), show create, else show save
111
- saveExpression = ifElse(Draft.IsNewObject, createButtonText, saveButtonText);
112
- }
113
-
114
- return compileBinding(saveExpression);
115
- };
116
-
117
- _exports.getExpressionForSaveButton = getExpressionForSaveButton;
118
- return _exports;
119
- }, false);
120
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sIm5hbWVzIjpbImdldEV4cHJlc3Npb25Gb3JUaXRsZSIsIm9IZWFkZXJJbmZvIiwib1ZpZXdEYXRhIiwiZnVsbENvbnRleHRQYXRoIiwib0RyYWZ0Um9vdCIsInRpdGxlTm9IZWFkZXJJbmZvIiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInJlc291cmNlQnVuZGxlIiwidW5kZWZpbmVkIiwiZW50aXR5U2V0IiwidGl0bGVXaXRoSGVhZGVySW5mbyIsIm9FbXB0eUhlYWRlckluZm9UaXRsZSIsIlRpdGxlIiwiVmFsdWUiLCJ0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyIsInRpdGxlVmFsdWVFeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsImNyZWF0ZU1vZGVUaXRsZSIsIlR5cGVOYW1lIiwiY29uY2F0IiwidG9TdHJpbmciLCJhY3RpdmVFeHByZXNzaW9uIiwiRW50aXR5IiwiSXNBY3RpdmUiLCJjb21waWxlQmluZGluZyIsImlmRWxzZSIsImFuZCIsIklzQ3JlYXRlTW9kZSIsImlzRW1wdHkiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJiaW5kaW5nRXhwcmVzc2lvbiIsIkRlc2NyaXB0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvclNhdmVCdXR0b24iLCJzYXZlQnV0dG9uVGV4dCIsImNyZWF0ZUJ1dHRvblRleHQiLCJzYXZlRXhwcmVzc2lvbiIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiSXNDcmVhdGVNb2RlU3RpY2t5IiwiRHJhZnQiLCJJc05ld09iamVjdCJdLCJtYXBwaW5ncyI6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Y0FBSjs7QUFDQSxRQUFJQyx3QkFBd0IsQ0FBQzFDLGVBQWUsQ0FBQzJDLGlCQUFqQixDQUE1QixFQUFpRTtBQUNoRTtBQUNBRixNQUFBQSxjQUFjLEdBQUdWLE1BQU0sQ0FBQ1osRUFBRSxDQUFDeUIsa0JBQUosRUFBd0JKLGdCQUF4QixFQUEwQ0QsY0FBMUMsQ0FBdkI7QUFDQSxLQUhELE1BR087QUFDTjtBQUNBRSxNQUFBQSxjQUFjLEdBQUdWLE1BQU0sQ0FBQ2MsS0FBSyxDQUFDQyxXQUFQLEVBQW9CTixnQkFBcEIsRUFBc0NELGNBQXRDLENBQXZCO0FBQ0E7O0FBQ0QsV0FBT1QsY0FBYyxDQUFDVyxjQUFELENBQXJCO0FBQ0EsR0FaTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0dGVycyBmb3IgdGhlIE9iamVjdCBQYWdlXG5pbXBvcnQge1xuXHRhbmQsXG5cdGlmRWxzZSxcblx0aXNFbXB0eSxcblx0Y29uY2F0LFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdEJpbmRpbmdFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBVSSwgRHJhZnQsIEVudGl0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgSGVhZGVySW5mb1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uLCBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgeyBEYXRhRmllbGRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9VSVwiO1xuaW1wb3J0IHsgaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRW50aXR5U2V0SGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcblxudHlwZSBWaWV3RGF0YSA9IHtcblx0cmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlO1xuXHRlbnRpdHlTZXQ6IHN0cmluZztcbn07XG5cbi8vYGBgbWVybWFpZFxuLy8gZ3JhcGggVERcbi8vIEFbT2JqZWN0IFBhZ2UgVGl0bGVdIC0tPnxHZXQgRGF0YUZpZWxkIFZhbHVlfCBDe0V2YWx1YXRlIENyZWF0ZSBNb2RlfVxuLy8gQyAtLT58SW4gQ3JlYXRlIE1vZGV8IER7SXMgRGF0YUZpZWxkIFZhbHVlIGVtcHR5fVxuLy8gRCAtLT58WWVzfCBGe0lzIHRoZXJlIGEgVHlwZU5hbWV9XG4vLyBGIC0tPnxZZXN8IEdbSXMgdGhlcmUgYW4gY3VzdG9tIHRpdGxlXVxuLy8gRyAtLT58WWVzfCBHMVtTaG93IHRoZSBjdXN0b20gdGl0bGUgKyAnVHlwZU5hbWUnXVxuLy8gRyAtLT58Tm98IEcyW0Rpc3BsYXkgdGhlIGRlZmF1bHQgdGl0bGUgJ05ldyArIFR5cGVOYW1lJ11cbi8vIEYgLS0+fE5vfCBIW0lzIHRoZXJlIGEgY3VzdG9tIHRpdGxlXVxuLy8gSCAtLT58WWVzfCBJW1Nob3cgdGhlIGN1c3RvbSB0aXRsZV1cbi8vIEggLS0+fE5vfCBKW1Nob3cgdGhlIGRlZmF1bHQgJ1VuYW1uZWQgT2JqZWN0J11cbi8vIEQgLS0+fE5vfCBFXG4vLyBDIC0tPnxOb3QgaW4gY3JlYXRlIG1vZGV8IEVbU2hvdyBEYXRhRmllbGQgVmFsdWVdXG4vLyBgYGBcbi8qKlxuICogQ29tcHV0ZSB0aGUgdGl0bGUgZm9yIHRoZSBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBvSGVhZGVySW5mbyBUaGUgQFVJLkhlYWRlckluZm8gYW5ub3RhdGlvbiBjb250ZW50XG4gKiBAcGFyYW0gb1ZpZXdEYXRhIFRoZSB2aWV3IGRhdGEgb2JqZWN0IHdlJ3JlIGN1cnJlbnRseSBvblxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBjb250ZXh0IHBhdGggdXNlZCB0byByZWFjaCB0aGF0IG9iamVjdCBwYWdlXG4gKiBAcGFyYW0gb0RyYWZ0Um9vdFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9iamVjdCBwYWdlIHRpdGxlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yVGl0bGUgPSBmdW5jdGlvbihcblx0b0hlYWRlckluZm86IEhlYWRlckluZm9UeXBlIHwgdW5kZWZpbmVkLFxuXHRvVmlld0RhdGE6IFZpZXdEYXRhLFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdG9EcmFmdFJvb3Q6IE9iamVjdCB8IHVuZGVmaW5lZFxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IHRpdGxlTm9IZWFkZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX05FV19PQkpFQ1RcIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlLCB1bmRlZmluZWQsIG9WaWV3RGF0YS5lbnRpdHlTZXQpO1xuXG5cdGNvbnN0IHRpdGxlV2l0aEhlYWRlckluZm8gPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9PQkpFQ1RfUEFHRV9IRUFERVJfVElUTEVcIixcblx0XHRvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdG9WaWV3RGF0YS5lbnRpdHlTZXRcblx0KTtcblxuXHRjb25zdCBvRW1wdHlIZWFkZXJJbmZvVGl0bGUgPVxuXHRcdG9IZWFkZXJJbmZvPy5UaXRsZSA9PT0gdW5kZWZpbmVkIHx8IG9IZWFkZXJJbmZvPy5UaXRsZSA9PT0gXCJcIiB8fCAob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUgPT09IFwiXCI7XG5cblx0Y29uc3QgdGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8gPSAhb0VtcHR5SGVhZGVySW5mb1RpdGxlXG5cdFx0PyBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9PQkpFQ1RfUEFHRV9IRUFERVJfVElUTEVfTk9fSEVBREVSX0lORk9cIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlKVxuXHRcdDogXCJcIjtcblxuXHRsZXQgdGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbigob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpO1xuXHRpZiAoKG9IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cblx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXG5cdC8vIElmIHRoZXJlIGlzIGEgVHlwZU5hbWUgZGVmaW5lZCwgc2hvdyB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnLCBvdGhlcndpc2Ugc2hvdyB0aGUgY3VzdG9tIHRpdGxlIG9yIHRoZSBkZWZhdWx0ICdOZXcgb2JqZWN0J1xuXHRjb25zdCBjcmVhdGVNb2RlVGl0bGUgPSBvSGVhZGVySW5mbz8uVHlwZU5hbWVcblx0XHQ/IGNvbmNhdCh0aXRsZVdpdGhIZWFkZXJJbmZvLCBcIjogXCIsIGFubm90YXRpb25FeHByZXNzaW9uKG9IZWFkZXJJbmZvLlR5cGVOYW1lLnRvU3RyaW5nKCkpKVxuXHRcdDogdGl0bGVOb0hlYWRlckluZm87XG5cdGNvbnN0IGFjdGl2ZUV4cHJlc3Npb24gPSBvRHJhZnRSb290ID8gRW50aXR5LklzQWN0aXZlIDogdHJ1ZTtcblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0aWZFbHNlKFxuXHRcdFx0Ly8gSWYgQ3JlYXRlIE1vZGUgJiYgRW1wdHkgZXhwcmVzc2lvblxuXHRcdFx0YW5kKFVJLklzQ3JlYXRlTW9kZSwgdGl0bGVWYWx1ZUV4cHJlc3Npb24gJiYgaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbikpLFxuXG5cdFx0XHRjcmVhdGVNb2RlVGl0bGUsXG5cdFx0XHQvLyBPdGhlcndpc2Ugc2hvdyB0aGUgZGVmYXVsdCBleHByZXNzaW9uXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGFuZChhY3RpdmVFeHByZXNzaW9uLCB0aXRsZVZhbHVlRXhwcmVzc2lvbiAmJiBpc0VtcHR5KHRpdGxlVmFsdWVFeHByZXNzaW9uKSksXG5cdFx0XHRcdHRpdGxlRm9yQWN0aXZlSGVhZGVyTm9IZWFkZXJJbmZvLFxuXHRcdFx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvblxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBleHByZXNzaW9uIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9IZWFkZXJJbmZvIFRoZSBAVUkuSGVhZGVySW5mbyBhbm5vdGF0aW9uIGNvbnRlbnRcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgY29udGV4dCBwYXRoIHVzZWQgdG8gcmVhY2ggdGhhdCBvYmplY3QgcGFnZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9iamVjdCBwYWdlIGRlc2NyaXB0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24gPSBmdW5jdGlvbihcblx0b0hlYWRlckluZm86IEhlYWRlckluZm9UeXBlIHwgdW5kZWZpbmVkLFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRsZXQgYmluZGluZ0V4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbigob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpO1xuXHRpZiAoKG9IZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0YmluZGluZ0V4cHJlc3Npb24gPSBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKGJpbmRpbmdFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBzYXZlIGJ1dHRvbi5cbiAqXG4gKiBAcGFyYW0gb1ZpZXdEYXRhIFRoZSBjdXJyZW50IHZpZXcgZGF0YVxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgcGF0aCB1c2VkIHVwIHVudGlsIGhlcmVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCBzaG93cyB0aGUgcmlnaHQgc2F2ZSBidXR0b24gdGV4dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvclNhdmVCdXR0b24gPSBmdW5jdGlvbihvVmlld0RhdGE6IFZpZXdEYXRhLCBmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgc2F2ZUJ1dHRvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfU0FWRVwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpO1xuXHRjb25zdCBjcmVhdGVCdXR0b25UZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX09QX09CSkVDVF9QQUdFX0NSRUFURVwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpO1xuXHRsZXQgc2F2ZUV4cHJlc3Npb247XG5cdGlmIChpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoZnVsbENvbnRleHRQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSkge1xuXHRcdC8vIElmIHdlJ3JlIGluIHN0aWNreSBtb2RlIEFORCB0aGUgdWkgaXMgaW4gY3JlYXRlIG1vZGUsIHNob3cgQ3JlYXRlLCBlbHNlIHNob3cgU2F2ZVxuXHRcdHNhdmVFeHByZXNzaW9uID0gaWZFbHNlKFVJLklzQ3JlYXRlTW9kZVN0aWNreSwgY3JlYXRlQnV0dG9uVGV4dCwgc2F2ZUJ1dHRvblRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIElmIHdlJ3JlIGluIGRyYWZ0IEFORCB0aGUgZHJhZnQgaXMgYSBuZXcgb2JqZWN0ICghSXNBY3RpdmVFbnRpdHkgJiYgIUhhc0FjdGl2ZUVudGl0eSksIHNob3cgY3JlYXRlLCBlbHNlIHNob3cgc2F2ZVxuXHRcdHNhdmVFeHByZXNzaW9uID0gaWZFbHNlKERyYWZ0LklzTmV3T2JqZWN0LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKHNhdmVFeHByZXNzaW9uKTtcbn07XG4iXX0=