@sapui5/sap.fe.templates 1.92.0 → 1.93.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -3
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/ListReport/Component.js +7 -0
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +71 -25
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +50 -23
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +6 -2
- package/src/sap/fe/templates/ListReport/overrides/Share.js +47 -37
- package/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +74 -160
- package/src/sap/fe/templates/ObjectPage/Component.js +0 -4
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +6 -4
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +34 -49
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +95 -66
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +3 -0
- package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +21 -6
- package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +21 -17
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +4 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +55 -49
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderContent.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +0 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +14 -26
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +2 -2
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle.properties +3 -3
|
@@ -13,9 +13,9 @@ sap.ui.define(
|
|
|
13
13
|
],
|
|
14
14
|
function(HashChanger, ModelHelper, SemanticKeyHelper, Filter, FilterOperator, Log) {
|
|
15
15
|
"use strict";
|
|
16
|
-
var
|
|
16
|
+
var bIsStickySupported, oUIModel, sEditMode;
|
|
17
17
|
|
|
18
|
-
function createFilterToFetchActiveContext(mKeyValues) {
|
|
18
|
+
function createFilterToFetchActiveContext(mKeyValues, bIsActiveEntityDefined) {
|
|
19
19
|
var aFilters,
|
|
20
20
|
aKeys = Object.keys(mKeyValues);
|
|
21
21
|
|
|
@@ -25,12 +25,16 @@ sap.ui.define(
|
|
|
25
25
|
return new Filter(sKey, FilterOperator.EQ, sValue);
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
|
-
var oActiveFilter = new Filter({
|
|
29
|
-
filters: [new Filter("SiblingEntity/IsActiveEntity", FilterOperator.EQ, true)],
|
|
30
|
-
and: false
|
|
31
|
-
});
|
|
32
28
|
|
|
33
|
-
|
|
29
|
+
if (bIsActiveEntityDefined) {
|
|
30
|
+
var oActiveFilter = new Filter({
|
|
31
|
+
filters: [new Filter("SiblingEntity/IsActiveEntity", FilterOperator.EQ, true)],
|
|
32
|
+
and: false
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
aFilters.push(oActiveFilter);
|
|
36
|
+
}
|
|
37
|
+
|
|
34
38
|
var oCombinedFilter = new Filter(aFilters, true);
|
|
35
39
|
return oCombinedFilter;
|
|
36
40
|
}
|
|
@@ -68,22 +72,40 @@ sap.ui.define(
|
|
|
68
72
|
// which is required to create a filter to fetch the relavant/correct active context
|
|
69
73
|
// Example: {SalesOrderManage:{technicalID:technicalIDValue}, _Item:{technicalID:technicalIDValue}} etc.,
|
|
70
74
|
var oPageMap = {};
|
|
75
|
+
var aPageHashArray = [];
|
|
71
76
|
aCurrentHashArray.forEach(function(sPageHash) {
|
|
72
77
|
var aKeyValues = sPageHash.substring(sPageHash.indexOf("(") + 1, sPageHash.length - 1).split(",");
|
|
73
78
|
var mKeyValues = {};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
var sPageHashName = sPageHash.split("(")[0];
|
|
80
|
+
oPageMap[sPageHashName] = {};
|
|
81
|
+
aPageHashArray.push(sPageHashName);
|
|
82
|
+
oPageMap[sPageHashName]["bIsActiveEntityDefined"] = true;
|
|
83
|
+
for (var i = 0; i < aKeyValues.length; i++) {
|
|
84
|
+
var sKeyAssignment = aKeyValues[i];
|
|
85
|
+
var aParts = sKeyAssignment.split("=");
|
|
86
|
+
var sKeyValue = aParts[1];
|
|
87
|
+
var sKey = aParts[0];
|
|
88
|
+
// In case if only one technical key is defined then the url just contains the technicalIDValue but not the technicalID
|
|
89
|
+
// Example: SalesOrderManage(ID=11111129-aaaa-bbbb-cccc-ddddeeeeffff,IsActiveEntity=false)/_Item(11111129-aaaa-bbbb-cccc-ddddeeeeffff)
|
|
90
|
+
// In above example SalesOrderItem has only one technical key defined, hence technicalID info is not present in the url
|
|
91
|
+
// Hence in such cases we get technical key and use them to fetch active context
|
|
92
|
+
if (sKeyAssignment.indexOf("=") === -1) {
|
|
93
|
+
var oMetaModel = oContext.getModel().getMetaModel();
|
|
94
|
+
var aTechnicalKeys = oMetaModel.getObject("/" + aPageHashArray.join("/") + "/$Type/$Key");
|
|
95
|
+
sKeyValue = aParts[0];
|
|
96
|
+
sKey = aTechnicalKeys[0];
|
|
97
|
+
oPageMap[sPageHash.split("(")[0]]["bIsActiveEntityDefined"] = false;
|
|
98
|
+
}
|
|
77
99
|
|
|
78
|
-
if (
|
|
100
|
+
if (sKey !== "IsActiveEntity") {
|
|
79
101
|
if (sKeyValue.indexOf("'") === 0 && sKeyValue.lastIndexOf("'") === sKeyValue.length - 1) {
|
|
80
102
|
// Remove the quotes from the value and decode special chars
|
|
81
103
|
sKeyValue = decodeURIComponent(sKeyValue.substring(1, sKeyValue.length - 1));
|
|
82
104
|
}
|
|
83
|
-
mKeyValues[
|
|
105
|
+
mKeyValues[sKey] = sKeyValue;
|
|
84
106
|
}
|
|
85
|
-
}
|
|
86
|
-
oPageMap[
|
|
107
|
+
}
|
|
108
|
+
oPageMap[sPageHashName].mKeyValues = mKeyValues;
|
|
87
109
|
});
|
|
88
110
|
|
|
89
111
|
var oPageEntitySet = oEntitySet;
|
|
@@ -101,12 +123,13 @@ sap.ui.define(
|
|
|
101
123
|
} else {
|
|
102
124
|
oPageInfo.pageEntityName = sNavigationPath;
|
|
103
125
|
}
|
|
104
|
-
oPageInfo.mKeyValues = oPageMap[sNavigationPath];
|
|
126
|
+
oPageInfo.mKeyValues = oPageMap[sNavigationPath].mKeyValues;
|
|
127
|
+
oPageInfo.bIsActiveEntityDefined = oPageMap[sNavigationPath].bIsActiveEntityDefined;
|
|
105
128
|
aPages.push(oPageInfo);
|
|
106
129
|
});
|
|
107
130
|
|
|
108
131
|
aPages.forEach(function(oPageInfo) {
|
|
109
|
-
var oFilter = createFilterToFetchActiveContext(oPageInfo.mKeyValues);
|
|
132
|
+
var oFilter = createFilterToFetchActiveContext(oPageInfo.mKeyValues, oPageInfo.bIsActiveEntityDefined);
|
|
110
133
|
aActiveContextpromises.push(getActiveContextPath(oController, oPageInfo.pageEntityName, oFilter));
|
|
111
134
|
});
|
|
112
135
|
|
|
@@ -199,8 +222,6 @@ sap.ui.define(
|
|
|
199
222
|
// 2. In case of draft enabled Sub Object Pages (where semantic bookmarking is not supported)
|
|
200
223
|
var oViewData = oController.getView().getViewData();
|
|
201
224
|
if (oContext && !bIsStickySupported && ((oViewData.viewLevel === 1 && !aSemanticKeys) || oViewData.viewLevel >= 2)) {
|
|
202
|
-
bIsActiveEntity = oContext.getObject().IsActiveEntity;
|
|
203
|
-
bHasActiveEntity = oContext.getObject().HasActiveEntity;
|
|
204
225
|
oPromise = getActiveContextPaths(oContext, oController);
|
|
205
226
|
return oPromise;
|
|
206
227
|
} else {
|
|
@@ -209,76 +230,84 @@ sap.ui.define(
|
|
|
209
230
|
}
|
|
210
231
|
|
|
211
232
|
/**
|
|
212
|
-
* Get
|
|
233
|
+
* Get share URL.
|
|
213
234
|
* @param sEditMode
|
|
214
|
-
* @param bIsActiveEntity
|
|
215
|
-
* @param bHasActiveEntity
|
|
216
235
|
* @param bIsStickySupported
|
|
217
236
|
* @param aActiveContextPaths
|
|
218
|
-
* @returns {string} The
|
|
237
|
+
* @returns {string} The share URL
|
|
219
238
|
* @protected
|
|
220
239
|
* @static
|
|
221
240
|
*/
|
|
222
|
-
function
|
|
223
|
-
var
|
|
241
|
+
function getShareUrl(sEditMode, bIsStickySupported, aActiveContextPaths) {
|
|
242
|
+
var sShareUrl;
|
|
224
243
|
var sHash = HashChanger.getInstance().getHash();
|
|
225
244
|
var sBasePath = HashChanger.getInstance().hrefForAppSpecificHash ? HashChanger.getInstance().hrefForAppSpecificHash("") : "";
|
|
226
|
-
if (sEditMode === "Editable" && !bIsStickySupported &&
|
|
227
|
-
|
|
245
|
+
if (sEditMode === "Editable" && !bIsStickySupported && aActiveContextPaths) {
|
|
246
|
+
sShareUrl = sBasePath + aActiveContextPaths.join("/");
|
|
228
247
|
} else {
|
|
229
|
-
|
|
248
|
+
sShareUrl = sHash ? sBasePath + sHash : window.location.hash;
|
|
230
249
|
}
|
|
231
|
-
return
|
|
250
|
+
return sShareUrl;
|
|
232
251
|
}
|
|
233
252
|
|
|
234
|
-
function
|
|
235
|
-
var
|
|
253
|
+
function getJamUrl(sEditMode, bIsStickySupported, aActiveContextPaths) {
|
|
254
|
+
var sJamUrl;
|
|
255
|
+
var sHash = HashChanger.getInstance().getHash();
|
|
236
256
|
var sBasePath = HashChanger.getInstance().hrefForAppSpecificHash ? HashChanger.getInstance().hrefForAppSpecificHash("") : "";
|
|
237
|
-
if (sEditMode === "Editable" && !bIsStickySupported &&
|
|
238
|
-
|
|
257
|
+
if (sEditMode === "Editable" && !bIsStickySupported && aActiveContextPaths) {
|
|
258
|
+
sJamUrl = sBasePath + aActiveContextPaths.join("/");
|
|
259
|
+
} else {
|
|
260
|
+
sJamUrl = sHash ? sBasePath + sHash : window.location.hash;
|
|
261
|
+
}
|
|
262
|
+
// in case we are in cFLP scenario, the application is running
|
|
263
|
+
// inside an iframe, and there for we need to get the cFLP URL
|
|
264
|
+
// and not 'document.URL' that represents the iframe URL
|
|
265
|
+
if (sap.ushell && sap.ushell.Container && sap.ushell.Container.runningInIframe && sap.ushell.Container.runningInIframe()) {
|
|
266
|
+
sap.ushell.Container.getFLPUrl(true)
|
|
267
|
+
.then(function(sUrl) {
|
|
268
|
+
return sUrl.substr(0, sUrl.indexOf("#")) + sJamUrl;
|
|
269
|
+
})
|
|
270
|
+
.catch(function(sError) {
|
|
271
|
+
Log.error("Could not retrieve cFLP URL for the sharing dialog (dialog will not be opened)", sError);
|
|
272
|
+
});
|
|
273
|
+
} else {
|
|
274
|
+
return Promise.resolve(window.location.origin + window.location.pathname + sJamUrl);
|
|
239
275
|
}
|
|
240
|
-
return sShareEmailUrl;
|
|
241
276
|
}
|
|
242
277
|
|
|
243
278
|
return {
|
|
244
|
-
|
|
279
|
+
adaptShareMetadata: function(oShareMetadata) {
|
|
245
280
|
var that = this;
|
|
246
281
|
var oContext = this.base.getView().getBindingContext();
|
|
247
282
|
oUIModel = this.base.getView().getModel("ui");
|
|
248
283
|
sEditMode = oUIModel.getProperty("/editMode");
|
|
249
284
|
return fetchActiveContextPaths(oContext, that.base.getView().getController()).then(function(aActiveContextPaths) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
.
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
bIsActiveEntity,
|
|
277
|
-
bHasActiveEntity,
|
|
278
|
-
aActiveContextPaths
|
|
279
|
-
);
|
|
280
|
-
return oShareData;
|
|
281
|
-
});
|
|
285
|
+
var aPromises = [];
|
|
286
|
+
aPromises.push(
|
|
287
|
+
that.base
|
|
288
|
+
.getView()
|
|
289
|
+
.getController()
|
|
290
|
+
._getPageTitleInformation()
|
|
291
|
+
);
|
|
292
|
+
aPromises.push(getJamUrl(sEditMode, bIsStickySupported, aActiveContextPaths));
|
|
293
|
+
return Promise.all(aPromises).then(function(oData) {
|
|
294
|
+
var oPageTitleInfo = oData[0];
|
|
295
|
+
var sJamUrl = oData[1];
|
|
296
|
+
var sTitle = oPageTitleInfo.title;
|
|
297
|
+
var sObjectSubtitle = oPageTitleInfo.subtitle;
|
|
298
|
+
if (sObjectSubtitle) {
|
|
299
|
+
sTitle = sTitle + " - " + sObjectSubtitle;
|
|
300
|
+
}
|
|
301
|
+
oShareMetadata.tile = {
|
|
302
|
+
title: oPageTitleInfo.title,
|
|
303
|
+
subtitle: oPageTitleInfo.subtitle
|
|
304
|
+
};
|
|
305
|
+
oShareMetadata.email.title = sTitle;
|
|
306
|
+
oShareMetadata.title = sTitle;
|
|
307
|
+
oShareMetadata.url = getShareUrl(sEditMode, bIsStickySupported, aActiveContextPaths);
|
|
308
|
+
oShareMetadata.jam.url = sJamUrl;
|
|
309
|
+
return oShareMetadata;
|
|
310
|
+
});
|
|
282
311
|
});
|
|
283
312
|
}
|
|
284
313
|
};
|
|
@@ -8,6 +8,9 @@ sap.ui.define(["sap/fe/core/library"], function(CoreLibrary) {
|
|
|
8
8
|
var VariantManagement = CoreLibrary.VariantManagement;
|
|
9
9
|
|
|
10
10
|
return {
|
|
11
|
+
applyInitialStateOnly: function() {
|
|
12
|
+
return false;
|
|
13
|
+
},
|
|
11
14
|
adaptStateControls: function(aStateControls) {
|
|
12
15
|
var oView = this.getView(),
|
|
13
16
|
oController = oView.getController(),
|
|
@@ -42,12 +42,20 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/
|
|
|
42
42
|
* @returns The binding expression for the object page title
|
|
43
43
|
*/
|
|
44
44
|
var getExpressionForTitle = function (oHeaderInfo, oViewData, fullContextPath) {
|
|
45
|
-
var _ref;
|
|
45
|
+
var _ref, _ref2, _ref3, _ref3$Value, _ref3$Value$$target, _ref3$Value$$target$a, _ref3$Value$$target$a2, _ref3$Value$$target$a3, _ref3$Value$$target$a4, _ref3$Value$$target$a5;
|
|
46
46
|
|
|
47
47
|
var titleNoHeaderInfo = CommonUtils.getTranslatedText("T_NEW_OBJECT", oViewData.resourceBundle, null, oViewData.entitySet);
|
|
48
48
|
var titleWithHeaderInfo = CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE", oViewData.resourceBundle, null, oViewData.entitySet);
|
|
49
|
-
var
|
|
50
|
-
var
|
|
49
|
+
var oEmptyHeaderInfoTitle = (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === undefined || (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === "" || ((_ref = oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === null || _ref === void 0 ? void 0 : _ref.Value) === "";
|
|
50
|
+
var titleForActiveHeaderNoHeaderInfo = !oEmptyHeaderInfoTitle ? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle) : "";
|
|
51
|
+
var titleValueExpression = annotationExpression((_ref2 = oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === null || _ref2 === void 0 ? void 0 : _ref2.Value);
|
|
52
|
+
|
|
53
|
+
if ((_ref3 = oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === null || _ref3 === void 0 ? void 0 : (_ref3$Value = _ref3.Value) === null || _ref3$Value === void 0 ? void 0 : (_ref3$Value$$target = _ref3$Value.$target) === null || _ref3$Value$$target === void 0 ? void 0 : (_ref3$Value$$target$a = _ref3$Value$$target.annotations) === null || _ref3$Value$$target$a === void 0 ? void 0 : (_ref3$Value$$target$a2 = _ref3$Value$$target$a.Common) === null || _ref3$Value$$target$a2 === void 0 ? void 0 : (_ref3$Value$$target$a3 = _ref3$Value$$target$a2.Text) === null || _ref3$Value$$target$a3 === void 0 ? void 0 : (_ref3$Value$$target$a4 = _ref3$Value$$target$a3.annotations) === null || _ref3$Value$$target$a4 === void 0 ? void 0 : (_ref3$Value$$target$a5 = _ref3$Value$$target$a4.UI) === null || _ref3$Value$$target$a5 === void 0 ? void 0 : _ref3$Value$$target$a5.TextArrangement) {
|
|
54
|
+
// In case an explicit text arrangement was set we make use of it in the description as well
|
|
55
|
+
titleValueExpression = addTextArrangementToBindingExpression(titleValueExpression, fullContextPath);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
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'
|
|
51
59
|
|
|
52
60
|
var createModeTitle = (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.TypeName) ? concat(titleWithHeaderInfo, " ", annotationExpression(oHeaderInfo.TypeName.toString())) : titleNoHeaderInfo;
|
|
53
61
|
return compileBinding(ifElse( // If Create Mode && Empty expression
|
|
@@ -66,9 +74,16 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/
|
|
|
66
74
|
_exports.getExpressionForTitle = getExpressionForTitle;
|
|
67
75
|
|
|
68
76
|
var getExpressionForDescription = function (oHeaderInfo, fullContextPath) {
|
|
69
|
-
var
|
|
77
|
+
var _ref4, _ref5, _ref5$Value, _ref5$Value$$target, _ref5$Value$$target$a, _ref5$Value$$target$a2, _ref5$Value$$target$a3, _ref5$Value$$target$a4, _ref5$Value$$target$a5;
|
|
78
|
+
|
|
79
|
+
var bindingExpression = annotationExpression((_ref4 = oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Description) === null || _ref4 === void 0 ? void 0 : _ref4.Value);
|
|
80
|
+
|
|
81
|
+
if ((_ref5 = oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Description) === null || _ref5 === void 0 ? void 0 : (_ref5$Value = _ref5.Value) === null || _ref5$Value === void 0 ? void 0 : (_ref5$Value$$target = _ref5$Value.$target) === null || _ref5$Value$$target === void 0 ? void 0 : (_ref5$Value$$target$a = _ref5$Value$$target.annotations) === null || _ref5$Value$$target$a === void 0 ? void 0 : (_ref5$Value$$target$a2 = _ref5$Value$$target$a.Common) === null || _ref5$Value$$target$a2 === void 0 ? void 0 : (_ref5$Value$$target$a3 = _ref5$Value$$target$a2.Text) === null || _ref5$Value$$target$a3 === void 0 ? void 0 : (_ref5$Value$$target$a4 = _ref5$Value$$target$a3.annotations) === null || _ref5$Value$$target$a4 === void 0 ? void 0 : (_ref5$Value$$target$a5 = _ref5$Value$$target$a4.UI) === null || _ref5$Value$$target$a5 === void 0 ? void 0 : _ref5$Value$$target$a5.TextArrangement) {
|
|
82
|
+
// In case an explicit text arrangement was set we make use of it in the description as well
|
|
83
|
+
bindingExpression = addTextArrangementToBindingExpression(bindingExpression, fullContextPath);
|
|
84
|
+
}
|
|
70
85
|
|
|
71
|
-
return compileBinding(formatValueRecursively(
|
|
86
|
+
return compileBinding(formatValueRecursively(bindingExpression, fullContextPath));
|
|
72
87
|
};
|
|
73
88
|
/**
|
|
74
89
|
* Return the expression for the save button.
|
|
@@ -100,4 +115,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/
|
|
|
100
115
|
_exports.getExpressionForSaveButton = getExpressionForSaveButton;
|
|
101
116
|
return _exports;
|
|
102
117
|
}, false);
|
|
103
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sIm5hbWVzIjpbImdldEV4cHJlc3Npb25Gb3JUaXRsZSIsIm9IZWFkZXJJbmZvIiwib1ZpZXdEYXRhIiwiZnVsbENvbnRleHRQYXRoIiwidGl0bGVOb0hlYWRlckluZm8iLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwicmVzb3VyY2VCdW5kbGUiLCJlbnRpdHlTZXQiLCJ0aXRsZVdpdGhIZWFkZXJJbmZvIiwidGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8iLCJ0aXRsZVZhbHVlRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJUaXRsZSIsIlZhbHVlIiwiY3JlYXRlTW9kZVRpdGxlIiwiVHlwZU5hbWUiLCJjb25jYXQiLCJ0b1N0cmluZyIsImNvbXBpbGVCaW5kaW5nIiwiaWZFbHNlIiwiYW5kIiwiVUkiLCJJc0NyZWF0ZU1vZGUiLCJpc0VtcHR5IiwiZ2V0RXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uIiwiRGVzY3JpcHRpb24iLCJnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiIsInNhdmVCdXR0b25UZXh0IiwiY3JlYXRlQnV0dG9uVGV4dCIsInNhdmVFeHByZXNzaW9uIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJJc0NyZWF0ZU1vZGVTdGlja3kiLCJEcmFmdCIsIklzTmV3T2JqZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBOzs7Ozs7OztBQVFPLE1BQU1BLHFCQUFxQixHQUFHLFVBQ3BDQyxXQURvQyxFQUVwQ0MsU0FGb0MsRUFHcENDLGVBSG9D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cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0dGVycyBmb3IgdGhlIE9iamVjdCBQYWdlXG5pbXBvcnQge1xuXHRhbmQsXG5cdGlmRWxzZSxcblx0aXNFbXB0eSxcblx0Y29uY2F0LFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdEJpbmRpbmdFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBVSSwgRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IENvbW1vblV0aWxzLCBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZVwiO1xuaW1wb3J0IHsgSGVhZGVySW5mb1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uLCBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgeyBEYXRhRmllbGRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9VSVwiO1xuaW1wb3J0IHsgaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRW50aXR5U2V0SGVscGVyXCI7XG5cbi8vYGBgbWVybWFpZFxuLy8gZ3JhcGggVERcbi8vIEFbT2JqZWN0IFBhZ2UgVGl0bGVdIC0tPnxHZXQgRGF0YUZpZWxkIFZhbHVlfCBDe0V2YWx1YXRlIENyZWF0ZSBNb2RlfVxuLy8gQyAtLT58SW4gQ3JlYXRlIE1vZGV8IER7SXMgRGF0YUZpZWxkIFZhbHVlIGVtcHR5fVxuLy8gRCAtLT58WWVzfCBGe0lzIHRoZXJlIGEgVHlwZU5hbWV9XG4vLyBGIC0tPnxZZXN8IEdbSXMgdGhlcmUgYW4gY3VzdG9tIHRpdGxlXVxuLy8gRyAtLT58WWVzfCBHMVtTaG93IHRoZSBjdXN0b20gdGl0bGUgKyAnVHlwZU5hbWUnXVxuLy8gRyAtLT58Tm98IEcyW0Rpc3BsYXkgdGhlIGRlZmF1bHQgdGl0bGUgJ05ldyArIFR5cGVOYW1lJ11cbi8vIEYgLS0+fE5vfCBIW0lzIHRoZXJlIGEgY3VzdG9tIHRpdGxlXVxuLy8gSCAtLT58WWVzfCBJW1Nob3cgdGhlIGN1c3RvbSB0aXRsZV1cbi8vIEggLS0+fE5vfCBKW1Nob3cgdGhlIGRlZmF1bHQgJ1VuYW1uZWQgT2JqZWN0J11cbi8vIEQgLS0+fE5vfCBFXG4vLyBDIC0tPnxOb3QgaW4gY3JlYXRlIG1vZGV8IEVbU2hvdyBEYXRhRmllbGQgVmFsdWVdXG4vLyBgYGBcbi8qKlxuICogQ29tcHV0ZSB0aGUgdGl0bGUgZm9yIHRoZSBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIG9WaWV3RGF0YSBUaGUgdmlldyBkYXRhIG9iamVjdCB3ZSdyZSBjdXJyZW50bHkgb25cbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgY29udGV4dCBwYXRoIHVzZWQgdG8gcmVhY2ggdGhhdCBvYmplY3QgcGFnZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9iamVjdCBwYWdlIHRpdGxlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yVGl0bGUgPSBmdW5jdGlvbihcblx0b0hlYWRlckluZm86IEhlYWRlckluZm9UeXBlIHwgdW5kZWZpbmVkLFxuXHRvVmlld0RhdGE6IFZpZXdEYXRhLFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCB0aXRsZU5vSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9ORVdfT0JKRUNUXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSwgbnVsbCwgb1ZpZXdEYXRhLmVudGl0eVNldCk7XG5cblx0Y29uc3QgdGl0bGVXaXRoSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRVwiLFxuXHRcdG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSxcblx0XHRudWxsLFxuXHRcdG9WaWV3RGF0YS5lbnRpdHlTZXRcblx0KTtcblxuXHRjb25zdCB0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRV9OT19IRUFERVJfSU5GT1wiLFxuXHRcdG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZVxuXHQpO1xuXHRjb25zdCB0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoXG5cdFx0YWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbihhbm5vdGF0aW9uRXhwcmVzc2lvbigob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpLCBmdWxsQ29udGV4dFBhdGgpLFxuXHRcdGZ1bGxDb250ZXh0UGF0aFxuXHQpO1xuXG5cdC8vIElmIHRoZXJlIGlzIGEgVHlwZU5hbWUgZGVmaW5lZCwgc2hvdyB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnLCBvdGhlcndpc2Ugc2hvdyB0aGUgY3VzdG9tIHRpdGxlIG9yIHRoZSBkZWZhdWx0ICdOZXcgb2JqZWN0J1xuXHRjb25zdCBjcmVhdGVNb2RlVGl0bGUgPSBvSGVhZGVySW5mbz8uVHlwZU5hbWVcblx0XHQ/IGNvbmNhdCh0aXRsZVdpdGhIZWFkZXJJbmZvLCBcIiBcIiwgYW5ub3RhdGlvbkV4cHJlc3Npb24ob0hlYWRlckluZm8uVHlwZU5hbWUudG9TdHJpbmcoKSkpXG5cdFx0OiB0aXRsZU5vSGVhZGVySW5mbztcblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0aWZFbHNlKFxuXHRcdFx0Ly8gSWYgQ3JlYXRlIE1vZGUgJiYgRW1wdHkgZXhwcmVzc2lvblxuXHRcdFx0YW5kKFVJLklzQ3JlYXRlTW9kZSwgdGl0bGVWYWx1ZUV4cHJlc3Npb24gJiYgaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbikpLFxuXG5cdFx0XHRjcmVhdGVNb2RlVGl0bGUsXG5cdFx0XHQvLyBPdGhlcndpc2Ugc2hvdyB0aGUgZGVmYXVsdCBleHByZXNzaW9uXG5cdFx0XHRpZkVsc2UodGl0bGVWYWx1ZUV4cHJlc3Npb24gJiYgaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbiksIHRpdGxlRm9yQWN0aXZlSGVhZGVyTm9IZWFkZXJJbmZvLCB0aXRsZVZhbHVlRXhwcmVzc2lvbilcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBvSGVhZGVySW5mbyBUaGUgQFVJLkhlYWRlckluZm8gYW5ub3RhdGlvbiBjb250ZW50XG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBmdWxsIGNvbnRleHQgcGF0aCB1c2VkIHRvIHJlYWNoIHRoYXQgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvYmplY3QgcGFnZSBkZXNjcmlwdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uID0gZnVuY3Rpb24oXG5cdG9IZWFkZXJJbmZvOiBIZWFkZXJJbmZvVHlwZSB8IHVuZGVmaW5lZCxcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoXG5cdFx0XHRhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbigob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpLFxuXHRcdFx0XHRmdWxsQ29udGV4dFBhdGhcblx0XHRcdCksXG5cdFx0XHRmdWxsQ29udGV4dFBhdGhcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIHNhdmUgYnV0dG9uLlxuICpcbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIGN1cnJlbnQgdmlldyBkYXRhXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBwYXRoIHVzZWQgdXAgdW50aWwgaGVyZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHNob3dzIHRoZSByaWdodCBzYXZlIGJ1dHRvbiB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiA9IGZ1bmN0aW9uKG9WaWV3RGF0YTogVmlld0RhdGEsIGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBzYXZlQnV0dG9uVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9TQVZFXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSk7XG5cdGNvbnN0IGNyZWF0ZUJ1dHRvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfQ1JFQVRFXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSk7XG5cdGxldCBzYXZlRXhwcmVzc2lvbjtcblx0aWYgKGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChmdWxsQ29udGV4dFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpKSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gc3RpY2t5IG1vZGUgQU5EIHRoZSB1aSBpcyBpbiBjcmVhdGUgbW9kZSwgc2hvdyBDcmVhdGUsIGVsc2Ugc2hvdyBTYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoVUkuSXNDcmVhdGVNb2RlU3RpY2t5LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gZHJhZnQgQU5EIHRoZSBkcmFmdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSwgc2hvdyBjcmVhdGUsIGVsc2Ugc2hvdyBzYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoc2F2ZUV4cHJlc3Npb24pO1xufTtcbiJdfQ==
|
|
118
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sIm5hbWVzIjpbImdldEV4cHJlc3Npb25Gb3JUaXRsZSIsIm9IZWFkZXJJbmZvIiwib1ZpZXdEYXRhIiwiZnVsbENvbnRleHRQYXRoIiwidGl0bGVOb0hlYWRlckluZm8iLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwicmVzb3VyY2VCdW5kbGUiLCJlbnRpdHlTZXQiLCJ0aXRsZVdpdGhIZWFkZXJJbmZvIiwib0VtcHR5SGVhZGVySW5mb1RpdGxlIiwiVGl0bGUiLCJ1bmRlZmluZWQiLCJWYWx1ZSIsInRpdGxlRm9yQWN0aXZlSGVhZGVyTm9IZWFkZXJJbmZvIiwidGl0bGVWYWx1ZUV4cHJlc3Npb24iLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiY3JlYXRlTW9kZVRpdGxlIiwiVHlwZU5hbWUiLCJjb25jYXQiLCJ0b1N0cmluZyIsImNvbXBpbGVCaW5kaW5nIiwiaWZFbHNlIiwiYW5kIiwiSXNDcmVhdGVNb2RlIiwiaXNFbXB0eSIsImdldEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiIsImJpbmRpbmdFeHByZXNzaW9uIiwiRGVzY3JpcHRpb24iLCJnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiIsInNhdmVCdXR0b25UZXh0IiwiY3JlYXRlQnV0dG9uVGV4dCIsInNhdmVFeHByZXNzaW9uIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJJc0NyZWF0ZU1vZGVTdGlja3kiLCJEcmFmdCIsIklzTmV3T2JqZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LENBQXZCO0FBQ0E7O0FBQ0QsV0FBT1QsY0FBYyxDQUFDVyxjQUFELENBQXJCO0FBQ0EsR0FaTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0dGVycyBmb3IgdGhlIE9iamVjdCBQYWdlXG5pbXBvcnQge1xuXHRhbmQsXG5cdGlmRWxzZSxcblx0aXNFbXB0eSxcblx0Y29uY2F0LFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdEJpbmRpbmdFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBVSSwgRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IENvbW1vblV0aWxzLCBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZVwiO1xuaW1wb3J0IHsgSGVhZGVySW5mb1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uLCBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgeyBEYXRhRmllbGRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9VSVwiO1xuaW1wb3J0IHsgaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRW50aXR5U2V0SGVscGVyXCI7XG5cbi8vYGBgbWVybWFpZFxuLy8gZ3JhcGggVERcbi8vIEFbT2JqZWN0IFBhZ2UgVGl0bGVdIC0tPnxHZXQgRGF0YUZpZWxkIFZhbHVlfCBDe0V2YWx1YXRlIENyZWF0ZSBNb2RlfVxuLy8gQyAtLT58SW4gQ3JlYXRlIE1vZGV8IER7SXMgRGF0YUZpZWxkIFZhbHVlIGVtcHR5fVxuLy8gRCAtLT58WWVzfCBGe0lzIHRoZXJlIGEgVHlwZU5hbWV9XG4vLyBGIC0tPnxZZXN8IEdbSXMgdGhlcmUgYW4gY3VzdG9tIHRpdGxlXVxuLy8gRyAtLT58WWVzfCBHMVtTaG93IHRoZSBjdXN0b20gdGl0bGUgKyAnVHlwZU5hbWUnXVxuLy8gRyAtLT58Tm98IEcyW0Rpc3BsYXkgdGhlIGRlZmF1bHQgdGl0bGUgJ05ldyArIFR5cGVOYW1lJ11cbi8vIEYgLS0+fE5vfCBIW0lzIHRoZXJlIGEgY3VzdG9tIHRpdGxlXVxuLy8gSCAtLT58WWVzfCBJW1Nob3cgdGhlIGN1c3RvbSB0aXRsZV1cbi8vIEggLS0+fE5vfCBKW1Nob3cgdGhlIGRlZmF1bHQgJ1VuYW1uZWQgT2JqZWN0J11cbi8vIEQgLS0+fE5vfCBFXG4vLyBDIC0tPnxOb3QgaW4gY3JlYXRlIG1vZGV8IEVbU2hvdyBEYXRhRmllbGQgVmFsdWVdXG4vLyBgYGBcbi8qKlxuICogQ29tcHV0ZSB0aGUgdGl0bGUgZm9yIHRoZSBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIG9WaWV3RGF0YSBUaGUgdmlldyBkYXRhIG9iamVjdCB3ZSdyZSBjdXJyZW50bHkgb25cbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgY29udGV4dCBwYXRoIHVzZWQgdG8gcmVhY2ggdGhhdCBvYmplY3QgcGFnZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9iamVjdCBwYWdlIHRpdGxlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yVGl0bGUgPSBmdW5jdGlvbihcblx0b0hlYWRlckluZm86IEhlYWRlckluZm9UeXBlIHwgdW5kZWZpbmVkLFxuXHRvVmlld0RhdGE6IFZpZXdEYXRhLFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCB0aXRsZU5vSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9ORVdfT0JKRUNUXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSwgbnVsbCwgb1ZpZXdEYXRhLmVudGl0eVNldCk7XG5cblx0Y29uc3QgdGl0bGVXaXRoSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRVwiLFxuXHRcdG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSxcblx0XHRudWxsLFxuXHRcdG9WaWV3RGF0YS5lbnRpdHlTZXRcblx0KTtcblxuXHRjb25zdCBvRW1wdHlIZWFkZXJJbmZvVGl0bGUgPVxuXHRcdG9IZWFkZXJJbmZvPy5UaXRsZSA9PT0gdW5kZWZpbmVkIHx8IG9IZWFkZXJJbmZvPy5UaXRsZSA9PT0gXCJcIiB8fCAob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUgPT09IFwiXCI7XG5cblx0Y29uc3QgdGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8gPSAhb0VtcHR5SGVhZGVySW5mb1RpdGxlXG5cdFx0PyBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9PQkpFQ1RfUEFHRV9IRUFERVJfVElUTEVfTk9fSEVBREVSX0lORk9cIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlKVxuXHRcdDogXCJcIjtcblxuXHRsZXQgdGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbigob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpO1xuXHRpZiAoKG9IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cblx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXG5cdC8vIElmIHRoZXJlIGlzIGEgVHlwZU5hbWUgZGVmaW5lZCwgc2hvdyB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnLCBvdGhlcndpc2Ugc2hvdyB0aGUgY3VzdG9tIHRpdGxlIG9yIHRoZSBkZWZhdWx0ICdOZXcgb2JqZWN0J1xuXHRjb25zdCBjcmVhdGVNb2RlVGl0bGUgPSBvSGVhZGVySW5mbz8uVHlwZU5hbWVcblx0XHQ/IGNvbmNhdCh0aXRsZVdpdGhIZWFkZXJJbmZvLCBcIiBcIiwgYW5ub3RhdGlvbkV4cHJlc3Npb24ob0hlYWRlckluZm8uVHlwZU5hbWUudG9TdHJpbmcoKSkpXG5cdFx0OiB0aXRsZU5vSGVhZGVySW5mbztcblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0aWZFbHNlKFxuXHRcdFx0Ly8gSWYgQ3JlYXRlIE1vZGUgJiYgRW1wdHkgZXhwcmVzc2lvblxuXHRcdFx0YW5kKFVJLklzQ3JlYXRlTW9kZSwgdGl0bGVWYWx1ZUV4cHJlc3Npb24gJiYgaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbikpLFxuXG5cdFx0XHRjcmVhdGVNb2RlVGl0bGUsXG5cdFx0XHQvLyBPdGhlcndpc2Ugc2hvdyB0aGUgZGVmYXVsdCBleHByZXNzaW9uXG5cdFx0XHRpZkVsc2UodGl0bGVWYWx1ZUV4cHJlc3Npb24gJiYgaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbiksIHRpdGxlRm9yQWN0aXZlSGVhZGVyTm9IZWFkZXJJbmZvLCB0aXRsZVZhbHVlRXhwcmVzc2lvbilcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBvSGVhZGVySW5mbyBUaGUgQFVJLkhlYWRlckluZm8gYW5ub3RhdGlvbiBjb250ZW50XG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBmdWxsIGNvbnRleHQgcGF0aCB1c2VkIHRvIHJlYWNoIHRoYXQgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvYmplY3QgcGFnZSBkZXNjcmlwdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uID0gZnVuY3Rpb24oXG5cdG9IZWFkZXJJbmZvOiBIZWFkZXJJbmZvVHlwZSB8IHVuZGVmaW5lZCxcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0bGV0IGJpbmRpbmdFeHByZXNzaW9uID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oKG9IZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlKTtcblx0aWYgKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHtcblx0XHQvLyBJbiBjYXNlIGFuIGV4cGxpY2l0IHRleHQgYXJyYW5nZW1lbnQgd2FzIHNldCB3ZSBtYWtlIHVzZSBvZiBpdCBpbiB0aGUgZGVzY3JpcHRpb24gYXMgd2VsbFxuXHRcdGJpbmRpbmdFeHByZXNzaW9uID0gYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbihiaW5kaW5nRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0fVxuXG5cdHJldHVybiBjb21waWxlQmluZGluZyhmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBleHByZXNzaW9uIGZvciB0aGUgc2F2ZSBidXR0b24uXG4gKlxuICogQHBhcmFtIG9WaWV3RGF0YSBUaGUgY3VycmVudCB2aWV3IGRhdGFcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIHBhdGggdXNlZCB1cCB1bnRpbCBoZXJlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHRoYXQgc2hvd3MgdGhlIHJpZ2h0IHNhdmUgYnV0dG9uIHRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JTYXZlQnV0dG9uID0gZnVuY3Rpb24ob1ZpZXdEYXRhOiBWaWV3RGF0YSwgZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IHNhdmVCdXR0b25UZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX09QX09CSkVDVF9QQUdFX1NBVkVcIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlKTtcblx0Y29uc3QgY3JlYXRlQnV0dG9uVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9DUkVBVEVcIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlKTtcblx0bGV0IHNhdmVFeHByZXNzaW9uO1xuXHRpZiAoaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKGZ1bGxDb250ZXh0UGF0aC5zdGFydGluZ0VudGl0eVNldCkpIHtcblx0XHQvLyBJZiB3ZSdyZSBpbiBzdGlja3kgbW9kZSBBTkQgdGhlIHVpIGlzIGluIGNyZWF0ZSBtb2RlLCBzaG93IENyZWF0ZSwgZWxzZSBzaG93IFNhdmVcblx0XHRzYXZlRXhwcmVzc2lvbiA9IGlmRWxzZShVSS5Jc0NyZWF0ZU1vZGVTdGlja3ksIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB3ZSdyZSBpbiBkcmFmdCBBTkQgdGhlIGRyYWZ0IGlzIGEgbmV3IG9iamVjdCAoIUlzQWN0aXZlRW50aXR5ICYmICFIYXNBY3RpdmVFbnRpdHkpLCBzaG93IGNyZWF0ZSwgZWxzZSBzaG93IHNhdmVcblx0XHRzYXZlRXhwcmVzc2lvbiA9IGlmRWxzZShEcmFmdC5Jc05ld09iamVjdCwgY3JlYXRlQnV0dG9uVGV4dCwgc2F2ZUJ1dHRvblRleHQpO1xuXHR9XG5cdHJldHVybiBjb21waWxlQmluZGluZyhzYXZlRXhwcmVzc2lvbik7XG59O1xuIl19
|
|
@@ -52,14 +52,20 @@ export const getExpressionForTitle = function(
|
|
|
52
52
|
oViewData.entitySet
|
|
53
53
|
);
|
|
54
54
|
|
|
55
|
-
const
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
);
|
|
55
|
+
const oEmptyHeaderInfoTitle =
|
|
56
|
+
oHeaderInfo?.Title === undefined || oHeaderInfo?.Title === "" || (oHeaderInfo?.Title as DataFieldTypes)?.Value === "";
|
|
57
|
+
|
|
58
|
+
const titleForActiveHeaderNoHeaderInfo = !oEmptyHeaderInfoTitle
|
|
59
|
+
? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle)
|
|
60
|
+
: "";
|
|
61
|
+
|
|
62
|
+
let titleValueExpression = annotationExpression((oHeaderInfo?.Title as DataFieldTypes)?.Value);
|
|
63
|
+
if ((oHeaderInfo?.Title as DataFieldTypes)?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement) {
|
|
64
|
+
// In case an explicit text arrangement was set we make use of it in the description as well
|
|
65
|
+
titleValueExpression = addTextArrangementToBindingExpression(titleValueExpression, fullContextPath);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
titleValueExpression = formatValueRecursively(titleValueExpression, fullContextPath);
|
|
63
69
|
|
|
64
70
|
// If there is a TypeName defined, show the default title 'New + TypeName', otherwise show the custom title or the default 'New object'
|
|
65
71
|
const createModeTitle = oHeaderInfo?.TypeName
|
|
@@ -89,15 +95,13 @@ export const getExpressionForDescription = function(
|
|
|
89
95
|
oHeaderInfo: HeaderInfoType | undefined,
|
|
90
96
|
fullContextPath: DataModelObjectPath
|
|
91
97
|
): BindingExpression<string> {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
)
|
|
100
|
-
);
|
|
98
|
+
let bindingExpression = annotationExpression((oHeaderInfo?.Description as DataFieldTypes)?.Value);
|
|
99
|
+
if ((oHeaderInfo?.Description as DataFieldTypes)?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement) {
|
|
100
|
+
// In case an explicit text arrangement was set we make use of it in the description as well
|
|
101
|
+
bindingExpression = addTextArrangementToBindingExpression(bindingExpression, fullContextPath);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return compileBinding(formatValueRecursively(bindingExpression, fullContextPath));
|
|
101
105
|
};
|
|
102
106
|
|
|
103
107
|
/**
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
type="{path: 'entitySet>./@com.sap.vocabularies.UI.v1.Identification', formatter: 'CORE.buildEmphasizedButtonExpression'}"
|
|
101
101
|
text="{sap.fe.i18n>C_COMMON_OBJECT_PAGE_EDIT}"
|
|
102
102
|
enabled="{= OP.getEnabledExpressionForHeaderActions(${operationAvailable>}, ${entitySet>@}, ${operationAvailable>@@MODEL.format}) }"
|
|
103
|
-
visible="{
|
|
103
|
+
visible="{headerAction>visible}"
|
|
104
104
|
press="cmd:Edit"
|
|
105
105
|
>
|
|
106
106
|
<layoutData>
|
|
@@ -117,13 +117,13 @@
|
|
|
117
117
|
id="fe::StandardAction::Delete"
|
|
118
118
|
type="Default"
|
|
119
119
|
text="{sap.fe.i18n>C_COMMON_OBJECT_PAGE_DELETE}"
|
|
120
|
-
visible="{
|
|
120
|
+
visible="{headerAction>visible}"
|
|
121
121
|
enabled="{= ${headerAction>enabled} !== undefined ? ${headerAction>enabled} : OP.getDeleteButtonEnabled(${entitySet>@Org.OData.Capabilities.V1.DeleteRestrictions/Deletable@@MODEL.value}, ${headerAction>parentEntityDeleteEnabled})}"
|
|
122
122
|
press="cmd:DeleteObject"
|
|
123
123
|
ariaHasPopup="Dialog"
|
|
124
124
|
/>
|
|
125
125
|
</template:elseif>
|
|
126
|
-
<template:elseif test="{= ${
|
|
126
|
+
<template:elseif test="{= ${headerAction>type} === 'SwitchToActiveObject' && OP.checkDraftState(${entitySet>@}) }">
|
|
127
127
|
<Button
|
|
128
128
|
id="fe::StandardAction::SwitchToActiveObject"
|
|
129
129
|
type="Default"
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
press="cmd:SwitchToActiveObject"
|
|
133
133
|
/>
|
|
134
134
|
</template:elseif>
|
|
135
|
-
<template:elseif test="{= ${
|
|
135
|
+
<template:elseif test="{= ${headerAction>type} === 'SwitchToDraftObject' && OP.checkDraftState(${entitySet>@}) }">
|
|
136
136
|
<Button
|
|
137
137
|
id="fe::StandardAction::SwitchToDraftObject"
|
|
138
138
|
type="Default"
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
xmlns:core="sap.ui.core"
|
|
8
8
|
xmlns:dt="sap.ui.dt"
|
|
9
9
|
xmlns:fl="sap.ui.fl"
|
|
10
|
+
xmlns:fpm="sap.fe.macros.fpm"
|
|
10
11
|
xmlns:template="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1"
|
|
11
12
|
xmlns:formdata="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"
|
|
12
13
|
template:require="{
|
|
@@ -93,61 +94,66 @@
|
|
|
93
94
|
</f:formElements>
|
|
94
95
|
</f:FormContainer>
|
|
95
96
|
<template:if test="{headerSection>subSections}">
|
|
96
|
-
<template:repeat
|
|
97
|
+
<template:repeat
|
|
98
|
+
list="{path: 'headerSection>subSections', filters: [{path: 'type', operator: 'EQ', value1: 'Form'}, {path: 'type', operator: 'EQ', value1: 'XMLFragment'}]}"
|
|
99
|
+
var="subSection"
|
|
100
|
+
>
|
|
97
101
|
<template:if test="{= !${subSection>stashed} }">
|
|
98
102
|
<template:then>
|
|
99
|
-
<template:
|
|
100
|
-
<template:
|
|
101
|
-
<template:
|
|
102
|
-
<template:
|
|
103
|
-
<template:
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
103
|
+
<template:if test="{= !${subSection>template} }">
|
|
104
|
+
<template:then>
|
|
105
|
+
<template:with path="subSection>annotationPath" var="facet">
|
|
106
|
+
<template:repeat list="{path: 'subSection>formDefinition/formContainers'}" var="formContainer">
|
|
107
|
+
<template:if test="{= MODEL.getNavigationPath(${facet>Target/$AnnotationPath}) }">
|
|
108
|
+
<template:then>
|
|
109
|
+
<template:with path="formContainer>entitySet" var="targetEntitySet">
|
|
110
|
+
<macro:FormContainer
|
|
111
|
+
id="{= ${formContainer>id} ? ID.generate(['fe', 'HeaderFacet', 'FormContainer', ${formContainer>id} ]) : undefined }"
|
|
112
|
+
designtimeSettings="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/fe/macros/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
|
|
113
|
+
title="{facet>@@MODEL.label}"
|
|
114
|
+
displayMode="Edit"
|
|
115
|
+
entitySet="{targetEntitySet>}"
|
|
116
|
+
navigationPath="{= MODEL.getNavigationPath(${facet>Target/$AnnotationPath}) ? MODEL.getNavigationPath(${facet>Target/$AnnotationPath}) : ''}"
|
|
117
|
+
dataFieldCollection="{formContainer>formElements}"
|
|
118
|
+
visibilityPath="{= ${subSection>./@com.sap.vocabularies.UI.v1.Hidden/$Path} ? ${subSection>./@com.sap.vocabularies.UI.v1.Hidden/$Path} : '' }"
|
|
119
|
+
/>
|
|
120
|
+
</template:with>
|
|
121
|
+
</template:then>
|
|
122
|
+
<template:else>
|
|
123
|
+
<macro:FormContainer
|
|
124
|
+
id="{= ${formContainer>id} ? ID.generate(['fe', 'HeaderFacet', 'FormContainer', ${formContainer>id} ]) : undefined }"
|
|
125
|
+
designtimeSettings="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/fe/macros/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
|
|
126
|
+
title="{facet>@@MODEL.label}"
|
|
127
|
+
displayMode="Edit"
|
|
128
|
+
entitySet="{entitySet>}"
|
|
129
|
+
dataFieldCollection="{formContainer>formElements}"
|
|
130
|
+
visibilityPath="{= ${subSection>./@com.sap.vocabularies.UI.v1.Hidden/$Path} ? ${subSection>./@com.sap.vocabularies.UI.v1.Hidden/$Path} : '' }"
|
|
131
|
+
/>
|
|
132
|
+
</template:else>
|
|
133
|
+
</template:if>
|
|
134
|
+
</template:repeat>
|
|
135
|
+
</template:with>
|
|
136
|
+
</template:then>
|
|
137
|
+
<template:else>
|
|
138
|
+
<f:FormContainer
|
|
139
|
+
id="{= ${subSection>id} ? ID.generate([${subSection>id}, 'CustomFormContainer', ${subSection>}]) : undefined }"
|
|
140
|
+
title="{subSection>title}"
|
|
141
|
+
visible="{subSection>visibile}"
|
|
142
|
+
dt:designtime="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/ui/layout/designtime/form/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
|
|
143
|
+
>
|
|
144
|
+
<f:formElements>
|
|
145
|
+
<fpm:CustomFragment
|
|
146
|
+
id="{= ${subSection>id} ? ID.generate([${subSection>id}, 'CustomFragment', ${subSection>}]) : undefined }"
|
|
147
|
+
fragmentName="{subSection>template}"
|
|
148
|
+
contextPath="{entitySet>}"
|
|
125
149
|
/>
|
|
126
|
-
</
|
|
127
|
-
</
|
|
128
|
-
</template:
|
|
129
|
-
</template:
|
|
150
|
+
</f:formElements>
|
|
151
|
+
</f:FormContainer>
|
|
152
|
+
</template:else>
|
|
153
|
+
</template:if>
|
|
130
154
|
</template:then>
|
|
131
155
|
</template:if>
|
|
132
156
|
</template:repeat>
|
|
133
|
-
<!--
|
|
134
|
-
<template:with path="headerSection>subSections/0" var="subSection">
|
|
135
|
-
<template:repeat list="{path: 'subSection>formDefinition/formContainers'}" var="formContainer">
|
|
136
|
-
<template:with path="formContainer>annotationPath" var="facet">
|
|
137
|
-
<template:with path="formContainer>entitySet" var="targetEntitySet">
|
|
138
|
-
<macro:FormContainer
|
|
139
|
-
id="{= ID.generate([${formContainer>id}, 'EditableHeaderFormContainer', 'Content']) }"
|
|
140
|
-
title="{facet>@@MODEL.label}"
|
|
141
|
-
displayMode="Edit"
|
|
142
|
-
entitySet="{entitySet>}"
|
|
143
|
-
dataFieldCollection="{formContainer>formElements}"
|
|
144
|
-
visibilityPath="{= ${subSection>./@com.sap.vocabularies.UI.v1.Hidden/$Path} ? ${subSection>./@com.sap.vocabularies.UI.v1.Hidden/$Path} : '' }"
|
|
145
|
-
/>
|
|
146
|
-
</template:with>
|
|
147
|
-
</template:with>
|
|
148
|
-
</template:repeat>
|
|
149
|
-
</template:with>
|
|
150
|
-
-->
|
|
151
157
|
</template:if>
|
|
152
158
|
</f:formContainers>
|
|
153
159
|
</f:Form>
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
asyncMode="true"
|
|
23
23
|
visible="{= CORE.getFooterVisible(${converterContext>footerActions}, ${entityType>./@com.sap.vocabularies.UI.v1.Identification})}"
|
|
24
24
|
>
|
|
25
|
-
<core:InvisibleText id="fe::FooterBar::MessageButton::AriaText" text="{sap.fe.i18n>
|
|
25
|
+
<core:InvisibleText id="fe::FooterBar::MessageButton::AriaText" text="{sap.fe.i18n>C_COMMON_SAPFE_ERROR_MESSAGES_PAGE_BUTTON_ARIA_TEXT}" />
|
|
26
26
|
<common:MessageButton
|
|
27
27
|
id="fe::FooterBar::MessageButton"
|
|
28
28
|
messageChange="_getFooterVisibility"
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
</template:with>
|
|
43
43
|
</template:with>
|
|
44
44
|
</template:then>
|
|
45
|
-
<template:
|
|
45
|
+
<template:elseif test="{= ${converterHeaderFacet>fragmentName}}">
|
|
46
46
|
<!-- Custom header facets from manifest (FPM) -->
|
|
47
47
|
<core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.HeaderFacetCustomContainer" type="XML" />
|
|
48
|
-
</template:
|
|
48
|
+
</template:elseif>
|
|
49
49
|
</template:if>
|
|
50
50
|
</template:repeat>
|
|
51
51
|
</template:with>
|
|
@@ -45,7 +45,6 @@
|
|
|
45
45
|
contextPath="{collection>}"
|
|
46
46
|
metaPath="{headerFacet>Target/$AnnotationPath/}"
|
|
47
47
|
navigationType="{= OP.getMicroChartTitleAsLink(${viewData>controlConfiguration}[${headerFacet>Target/$AnnotationPath}]['navigation'])}"
|
|
48
|
-
chartTitleDescribedBy="{= OP.getChartTitleDescribedBy(${viewData>}, ${headerFacet>}, ${sap.fe.i18n>T_COMMON_HEADERDP_TITLE_LINK_INPAGE_ARIA}) }"
|
|
49
48
|
onTitlePressed="{= OP.getExpressionForMicroChartTitlePress(${viewData>controlConfiguration}[${headerFacet>Target/$AnnotationPath}]['navigation'], ${manifest>/sap.app/crossNavigation/outbounds}, ${collection>@sapui.name})}"
|
|
50
49
|
/>
|
|
51
50
|
</template:with>
|