@sapui5/sap.fe.templates 1.102.0 → 1.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +2 -2
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.ts +1 -1
- package/src/sap/fe/templates/Feedback.js +18 -18
- package/src/sap/fe/templates/Feedback.ts +12 -12
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +9 -12
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +9 -12
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +3 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +80 -55
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +95 -71
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +2 -2
- package/src/sap/fe/templates/ListReport/overrides/Share.js +3 -4
- package/src/sap/fe/templates/ListReport/overrides/Share.ts +6 -7
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +4 -5
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +10 -10
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +1 -1
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +12 -16
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +17 -20
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +4 -3
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +148 -163
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +138 -192
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +62 -73
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +75 -90
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +2 -3
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +4 -4
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/handler/DraftHandler.js +103 -0
- package/src/sap/fe/templates/ObjectPage/handler/DraftHandler.ts +97 -0
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +5 -5
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +15 -15
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +17 -28
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +4 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +6 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +10 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -14
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +7 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +26 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +4 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +6 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +2 -2
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +25 -28
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.ts +30 -33
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +3 -4
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.ts +4 -5
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +140 -52
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.ts +108 -54
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -1
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.ts +3 -3
- package/src/sap/fe/templates/TableScroller.js +3 -3
- package/src/sap/fe/templates/TableScroller.ts +2 -2
- package/src/sap/fe/templates/controls/Table.fragment.xml +1 -0
- package/src/sap/fe/templates/library.js +5 -2
- package/src/sap/fe/templates/library.ts +3 -0
- package/src/sap/fe/templates/messagebundle.properties +6 -18
- package/src/sap/fe/templates/messagebundle_pt.properties +1 -1
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
// Formatters for the Object Page
|
|
2
|
-
import { DataField,
|
|
3
|
-
import {
|
|
4
|
-
import ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
2
|
+
import type { DataField, DataFieldTypes, HeaderInfoType } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
3
|
+
import { UIAnnotationTerms, UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
4
|
+
import type ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
5
5
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
6
|
-
import { ConverterAction } from "sap/fe/core/converters/controls/Common/Action";
|
|
6
|
+
import type { ConverterAction } from "sap/fe/core/converters/controls/Common/Action";
|
|
7
7
|
import { Draft, Entity, UI } from "sap/fe/core/converters/helpers/BindingHelper";
|
|
8
|
-
import { ManifestAction } from "sap/fe/core/converters/ManifestSettings";
|
|
8
|
+
import type { ManifestAction } from "sap/fe/core/converters/ManifestSettings";
|
|
9
|
+
import type { BindingToolkitExpression, CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
|
|
9
10
|
import {
|
|
10
11
|
and,
|
|
11
|
-
|
|
12
|
-
BindingExpression,
|
|
13
|
-
compileBinding,
|
|
12
|
+
compileExpression,
|
|
14
13
|
concat,
|
|
15
|
-
|
|
14
|
+
getExpressionFromAnnotation,
|
|
16
15
|
ifElse,
|
|
17
16
|
isEmpty,
|
|
18
17
|
or,
|
|
19
18
|
resolveBindingString
|
|
20
|
-
} from "sap/fe/core/helpers/
|
|
21
|
-
import { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
19
|
+
} from "sap/fe/core/helpers/BindingToolkit";
|
|
20
|
+
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
22
21
|
import CommonHelper from "sap/fe/macros/CommonHelper";
|
|
23
22
|
import { addTextArrangementToBindingExpression, formatValueRecursively } from "sap/fe/macros/field/FieldTemplating";
|
|
24
23
|
import mLibrary from "sap/m/library";
|
|
25
24
|
import ManagedObject from "sap/ui/base/ManagedObject";
|
|
26
25
|
import ODataModelAnnotationHelper from "sap/ui/model/odata/v4/AnnotationHelper";
|
|
27
|
-
import Context from "sap/ui/model/odata/v4/Context";
|
|
26
|
+
import type Context from "sap/ui/model/odata/v4/Context";
|
|
27
|
+
|
|
28
28
|
const ButtonType = mLibrary.ButtonType;
|
|
29
29
|
|
|
30
30
|
type ViewData = {
|
|
@@ -48,6 +48,7 @@ type ViewData = {
|
|
|
48
48
|
// ```
|
|
49
49
|
/**
|
|
50
50
|
* Compute the title for the object page.
|
|
51
|
+
*
|
|
51
52
|
* @param oHeaderInfo The @UI.HeaderInfo annotation content
|
|
52
53
|
* @param oViewData The view data object we're currently on
|
|
53
54
|
* @param fullContextPath The full context path used to reach that object page
|
|
@@ -59,7 +60,7 @@ export const getExpressionForTitle = function (
|
|
|
59
60
|
oViewData: ViewData,
|
|
60
61
|
fullContextPath: DataModelObjectPath,
|
|
61
62
|
oDraftRoot: Object | undefined
|
|
62
|
-
):
|
|
63
|
+
): CompiledBindingToolkitExpression {
|
|
63
64
|
const titleNoHeaderInfo = CommonUtils.getTranslatedText("T_NEW_OBJECT", oViewData.resourceBundle, undefined, oViewData.entitySet);
|
|
64
65
|
|
|
65
66
|
const titleWithHeaderInfo = CommonUtils.getTranslatedText(
|
|
@@ -76,7 +77,7 @@ export const getExpressionForTitle = function (
|
|
|
76
77
|
? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle)
|
|
77
78
|
: "";
|
|
78
79
|
|
|
79
|
-
let titleValueExpression =
|
|
80
|
+
let titleValueExpression = getExpressionFromAnnotation((oHeaderInfo?.Title as DataFieldTypes)?.Value);
|
|
80
81
|
if ((oHeaderInfo?.Title as DataFieldTypes)?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement) {
|
|
81
82
|
// In case an explicit text arrangement was set we make use of it in the description as well
|
|
82
83
|
titleValueExpression = addTextArrangementToBindingExpression(titleValueExpression, fullContextPath);
|
|
@@ -86,11 +87,11 @@ export const getExpressionForTitle = function (
|
|
|
86
87
|
|
|
87
88
|
// If there is a TypeName defined, show the default title 'New + TypeName', otherwise show the custom title or the default 'New object'
|
|
88
89
|
const createModeTitle = oHeaderInfo?.TypeName
|
|
89
|
-
? concat(titleWithHeaderInfo, ": ",
|
|
90
|
+
? concat(titleWithHeaderInfo, ": ", getExpressionFromAnnotation(oHeaderInfo.TypeName.toString()))
|
|
90
91
|
: titleNoHeaderInfo;
|
|
91
92
|
const activeExpression = oDraftRoot ? Entity.IsActive : true;
|
|
92
93
|
|
|
93
|
-
return
|
|
94
|
+
return compileExpression(
|
|
94
95
|
ifElse(
|
|
95
96
|
// If Create Mode && Empty expression
|
|
96
97
|
and(or(UI.IsCreateModeSticky, UI.IsCreateMode), titleValueExpression && isEmpty(titleValueExpression)),
|
|
@@ -116,14 +117,14 @@ export const getExpressionForTitle = function (
|
|
|
116
117
|
export const getExpressionForDescription = function (
|
|
117
118
|
oHeaderInfo: HeaderInfoType | undefined,
|
|
118
119
|
fullContextPath: DataModelObjectPath
|
|
119
|
-
):
|
|
120
|
-
let
|
|
120
|
+
): CompiledBindingToolkitExpression {
|
|
121
|
+
let pathInModel = getExpressionFromAnnotation((oHeaderInfo?.Description as DataFieldTypes)?.Value);
|
|
121
122
|
if ((oHeaderInfo?.Description as DataFieldTypes)?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement) {
|
|
122
123
|
// In case an explicit text arrangement was set we make use of it in the description as well
|
|
123
|
-
|
|
124
|
+
pathInModel = addTextArrangementToBindingExpression(pathInModel, fullContextPath);
|
|
124
125
|
}
|
|
125
126
|
|
|
126
|
-
return
|
|
127
|
+
return compileExpression(formatValueRecursively(pathInModel, fullContextPath));
|
|
127
128
|
};
|
|
128
129
|
|
|
129
130
|
/**
|
|
@@ -133,7 +134,10 @@ export const getExpressionForDescription = function (
|
|
|
133
134
|
* @param fullContextPath The path used up until here
|
|
134
135
|
* @returns The binding expression that shows the right save button text
|
|
135
136
|
*/
|
|
136
|
-
export const getExpressionForSaveButton = function (
|
|
137
|
+
export const getExpressionForSaveButton = function (
|
|
138
|
+
oViewData: ViewData,
|
|
139
|
+
fullContextPath: DataModelObjectPath
|
|
140
|
+
): CompiledBindingToolkitExpression {
|
|
137
141
|
const saveButtonText = CommonUtils.getTranslatedText("T_OP_OBJECT_PAGE_SAVE", oViewData.resourceBundle);
|
|
138
142
|
const createButtonText = CommonUtils.getTranslatedText("T_OP_OBJECT_PAGE_CREATE", oViewData.resourceBundle);
|
|
139
143
|
let saveExpression;
|
|
@@ -145,7 +149,7 @@ export const getExpressionForSaveButton = function (oViewData: ViewData, fullCon
|
|
|
145
149
|
// If we're in draft AND the draft is a new object (!IsActiveEntity && !HasActiveEntity), show create, else show save
|
|
146
150
|
saveExpression = ifElse(Draft.IsNewObject, createButtonText, saveButtonText);
|
|
147
151
|
}
|
|
148
|
-
return
|
|
152
|
+
return compileExpression(saveExpression);
|
|
149
153
|
};
|
|
150
154
|
|
|
151
155
|
/**
|
|
@@ -153,13 +157,16 @@ export const getExpressionForSaveButton = function (oViewData: ViewData, fullCon
|
|
|
153
157
|
*
|
|
154
158
|
* @function
|
|
155
159
|
* @name getFooterVisible
|
|
156
|
-
* @param
|
|
157
|
-
* @param
|
|
158
|
-
* @returns
|
|
160
|
+
* @param footerActions The footer action object coming from the converter
|
|
161
|
+
* @param dataFields Data field array for normal footer visibility processing
|
|
162
|
+
* @returns `true` if any action is true, otherwise compiled Binding or `false`
|
|
159
163
|
*/
|
|
160
|
-
export const getFooterVisible = function (
|
|
164
|
+
export const getFooterVisible = function (
|
|
165
|
+
footerActions: ConverterAction[],
|
|
166
|
+
dataFields: DataField[]
|
|
167
|
+
): boolean | CompiledBindingToolkitExpression {
|
|
161
168
|
const manifestActions = footerActions.filter((action) => isManifestAction(action)) as ManifestAction[];
|
|
162
|
-
let customActionVisibility:
|
|
169
|
+
let customActionVisibility: BindingToolkitExpression<boolean>;
|
|
163
170
|
if (manifestActions.length) {
|
|
164
171
|
// If we have manifest actions
|
|
165
172
|
const customActionIndividualVisibility = manifestActions.map((action) => {
|
|
@@ -170,7 +177,7 @@ export const getFooterVisible = function (footerActions: ConverterAction[], data
|
|
|
170
177
|
// and then the binding of all annotation actions inside the footer ...
|
|
171
178
|
const annotationActionVisibility = getDataFieldBasedFooterVisibility(dataFields, true);
|
|
172
179
|
// finally, return everything.
|
|
173
|
-
return
|
|
180
|
+
return compileExpression(or(customActionVisibility, resolveBindingString<boolean>(annotationActionVisibility, "boolean")));
|
|
174
181
|
}
|
|
175
182
|
return getDataFieldBasedFooterVisibility(dataFields, true);
|
|
176
183
|
};
|
|
@@ -182,12 +189,12 @@ export const getFooterVisible = function (footerActions: ConverterAction[], data
|
|
|
182
189
|
* @static
|
|
183
190
|
* @name sap.fe.templates.ObjectPage.ObjectPageTemplating.getDataFieldBasedFooterVisibility
|
|
184
191
|
* @memberof sap.fe.templates.ObjectPage.ObjectPageTemplating
|
|
185
|
-
* @param
|
|
186
|
-
* @param
|
|
187
|
-
* @returns
|
|
192
|
+
* @param aDataFields Array of DataFields in the identification
|
|
193
|
+
* @param bConsiderEditable Whether the edit mode binding is required or not
|
|
194
|
+
* @returns An expression if all the actions are ui.hidden, true otherwise
|
|
188
195
|
* @private
|
|
189
196
|
* @ui5-restricted
|
|
190
|
-
|
|
197
|
+
*/
|
|
191
198
|
export const getDataFieldBasedFooterVisibility = function (aDataFields: any[], bConsiderEditable: boolean) {
|
|
192
199
|
let sHiddenExpression = "";
|
|
193
200
|
let sSemiHiddenExpression;
|
|
@@ -235,8 +242,8 @@ export const getDataFieldBasedFooterVisibility = function (aDataFields: any[], b
|
|
|
235
242
|
*
|
|
236
243
|
* @function
|
|
237
244
|
* @name isManifestActionVisible
|
|
238
|
-
* @param
|
|
239
|
-
* @returns
|
|
245
|
+
* @param oAction The action object
|
|
246
|
+
* @returns `true` if action is coming from manifest, `false` otherwise
|
|
240
247
|
*/
|
|
241
248
|
export const isManifestAction = function (oAction: any) {
|
|
242
249
|
const aActions = [
|
|
@@ -260,11 +267,11 @@ export const isManifestAction = function (oAction: any) {
|
|
|
260
267
|
* @static
|
|
261
268
|
* @name sap.fe.templates.ObjectPage.ObjectPageTemplating.buildEmphasizedButtonExpression
|
|
262
269
|
* @memberof sap.fe.templates.ObjectPage.ObjectPageTemplating
|
|
263
|
-
* @param
|
|
264
|
-
* @returns
|
|
270
|
+
* @param aIdentification Array of all the DataFields in Identification
|
|
271
|
+
* @returns An expression to deduce if button type is Default or Emphasized
|
|
265
272
|
* @private
|
|
266
273
|
* @ui5-restricted
|
|
267
|
-
|
|
274
|
+
*/
|
|
268
275
|
export const buildEmphasizedButtonExpression = function (aIdentification?: any[]) {
|
|
269
276
|
if (!aIdentification) {
|
|
270
277
|
return ButtonType.Emphasized;
|
|
@@ -351,8 +358,8 @@ export const getElementBinding = function (sPath: any) {
|
|
|
351
358
|
/**
|
|
352
359
|
* Function to check if draft pattern is supported.
|
|
353
360
|
*
|
|
354
|
-
* @param
|
|
355
|
-
* @returns
|
|
361
|
+
* @param oAnnotations Annotations of the current entity set.
|
|
362
|
+
* @returns Returns the Boolean value based on draft state
|
|
356
363
|
*/
|
|
357
364
|
export const checkDraftState = function (oAnnotations: any) {
|
|
358
365
|
if (
|
|
@@ -368,8 +375,8 @@ export const checkDraftState = function (oAnnotations: any) {
|
|
|
368
375
|
/**
|
|
369
376
|
* Function to get the visibility for the SwitchToActive button in the object page or subobject page.
|
|
370
377
|
*
|
|
371
|
-
* @param
|
|
372
|
-
* @returns
|
|
378
|
+
* @param oAnnotations Annotations of the current entity set.
|
|
379
|
+
* @returns Returns expression binding or Boolean value based on the draft state
|
|
373
380
|
*/
|
|
374
381
|
export const getSwitchToActiveVisibility = function (oAnnotations: any): any {
|
|
375
382
|
if (checkDraftState(oAnnotations)) {
|
|
@@ -382,8 +389,8 @@ export const getSwitchToActiveVisibility = function (oAnnotations: any): any {
|
|
|
382
389
|
/**
|
|
383
390
|
* Function to get the visibility for the SwitchToDraft button in the object page or subobject page.
|
|
384
391
|
*
|
|
385
|
-
* @param
|
|
386
|
-
* @returns
|
|
392
|
+
* @param oAnnotations Annotations of the current entity set.
|
|
393
|
+
* @returns Returns expression binding or Boolean value based on the draft state
|
|
387
394
|
*/
|
|
388
395
|
export const getSwitchToDraftVisibility = function (oAnnotations: any): any {
|
|
389
396
|
if (checkDraftState(oAnnotations)) {
|
|
@@ -396,8 +403,8 @@ export const getSwitchToDraftVisibility = function (oAnnotations: any): any {
|
|
|
396
403
|
/**
|
|
397
404
|
* Function to get the visibility for the SwitchDraftAndActive button in the object page or subobject page.
|
|
398
405
|
*
|
|
399
|
-
* @param
|
|
400
|
-
* @returns
|
|
406
|
+
* @param oAnnotations Annotations of the current entity set.
|
|
407
|
+
* @returns Returns expression binding or Boolean value based on the draft state
|
|
401
408
|
*/
|
|
402
409
|
export const getSwitchDraftAndActiveVisibility = function (oAnnotations: any): any {
|
|
403
410
|
if (checkDraftState(oAnnotations)) {
|
|
@@ -410,9 +417,9 @@ export const getSwitchDraftAndActiveVisibility = function (oAnnotations: any): a
|
|
|
410
417
|
/**
|
|
411
418
|
* Function to find an action from the array of header actions in the converter context.
|
|
412
419
|
*
|
|
413
|
-
* @param
|
|
414
|
-
* @param
|
|
415
|
-
* @returns
|
|
420
|
+
* @param aConverterContextHeaderActions Array of 'header' actions on the object page.
|
|
421
|
+
* @param sActionType The action type
|
|
422
|
+
* @returns The action with the matching action type
|
|
416
423
|
* @private
|
|
417
424
|
*/
|
|
418
425
|
export const _findAction = function (aConverterContextHeaderActions: any[], sActionType: string) {
|
|
@@ -428,8 +435,8 @@ export const _findAction = function (aConverterContextHeaderActions: any[], sAct
|
|
|
428
435
|
/**
|
|
429
436
|
* Function to format the 'enabled' property for the Delete button on the object page or subobject page in case of a Command Execution.
|
|
430
437
|
*
|
|
431
|
-
* @param
|
|
432
|
-
* @returns
|
|
438
|
+
* @param aConverterContextHeaderActions Array of header actions on the object page
|
|
439
|
+
* @returns Returns expression binding or Boolean value from the converter output
|
|
433
440
|
*/
|
|
434
441
|
export const getDeleteCommandExecutionEnabled = function (aConverterContextHeaderActions: any[]) {
|
|
435
442
|
const oDeleteAction = _findAction(aConverterContextHeaderActions, "Secondary");
|
|
@@ -439,8 +446,8 @@ export const getDeleteCommandExecutionEnabled = function (aConverterContextHeade
|
|
|
439
446
|
/**
|
|
440
447
|
* Function to format the 'visible' property for the Delete button on the object page or subobject page in case of a Command Execution.
|
|
441
448
|
*
|
|
442
|
-
* @param
|
|
443
|
-
* @returns
|
|
449
|
+
* @param aConverterContextHeaderActions Array of header actions on the object page
|
|
450
|
+
* @returns Returns expression binding or Boolean value from the converter output
|
|
444
451
|
*/
|
|
445
452
|
export const getDeleteCommandExecutionVisible = function (aConverterContextHeaderActions: any[]) {
|
|
446
453
|
const oDeleteAction = _findAction(aConverterContextHeaderActions, "Secondary");
|
|
@@ -450,8 +457,8 @@ export const getDeleteCommandExecutionVisible = function (aConverterContextHeade
|
|
|
450
457
|
/**
|
|
451
458
|
* Function to format the 'visible' property for the Edit button on the object page or subobject page in case of a Command Execution.
|
|
452
459
|
*
|
|
453
|
-
* @param
|
|
454
|
-
* @returns
|
|
460
|
+
* @param aConverterContextHeaderActions Array of header actions on the object page
|
|
461
|
+
* @returns Returns expression binding or Boolean value from the converter output
|
|
455
462
|
*/
|
|
456
463
|
export const getEditCommandExecutionVisible = function (aConverterContextHeaderActions: any[]) {
|
|
457
464
|
const oEditAction = _findAction(aConverterContextHeaderActions, "Primary");
|
|
@@ -461,8 +468,8 @@ export const getEditCommandExecutionVisible = function (aConverterContextHeaderA
|
|
|
461
468
|
/**
|
|
462
469
|
* Function to format the 'enabled' property for the Edit button on the object page or subobject page in case of a Command Execution.
|
|
463
470
|
*
|
|
464
|
-
* @param
|
|
465
|
-
* @returns
|
|
471
|
+
* @param aConverterContextHeaderActions Array of header actions on the object page
|
|
472
|
+
* @returns Returns expression binding or Boolean value from the converter output
|
|
466
473
|
*/
|
|
467
474
|
export const getEditCommandExecutionEnabled = function (aConverterContextHeaderActions: any[]) {
|
|
468
475
|
const oEditAction = _findAction(aConverterContextHeaderActions, "Primary");
|
|
@@ -472,21 +479,21 @@ export const getEditCommandExecutionEnabled = function (aConverterContextHeaderA
|
|
|
472
479
|
/**
|
|
473
480
|
* Function to get the EditAction from the Entityset based on Draft or sticky based application.
|
|
474
481
|
*
|
|
475
|
-
* @param
|
|
476
|
-
* @returns
|
|
482
|
+
* @param [oEntitySet] The value from the expression.
|
|
483
|
+
* @returns Returns expression binding or boolean value based on vRawValue & oDraftNode
|
|
477
484
|
*/
|
|
478
485
|
export const getEditAction = function (oEntitySet: Context) {
|
|
479
486
|
const sPath = oEntitySet.getPath(),
|
|
480
|
-
oAnnotations = oEntitySet.getObject(sPath
|
|
487
|
+
oAnnotations = oEntitySet.getObject(`${sPath}@`);
|
|
481
488
|
const bDraftRoot = oAnnotations.hasOwnProperty("@com.sap.vocabularies.Common.v1.DraftRoot");
|
|
482
489
|
const bStickySession = oAnnotations.hasOwnProperty("@com.sap.vocabularies.Session.v1.StickySessionSupported");
|
|
483
490
|
let sActionName;
|
|
484
491
|
if (bDraftRoot) {
|
|
485
|
-
sActionName = oEntitySet.getObject(sPath
|
|
492
|
+
sActionName = oEntitySet.getObject(`${sPath}@com.sap.vocabularies.Common.v1.DraftRoot/EditAction`);
|
|
486
493
|
} else if (bStickySession) {
|
|
487
|
-
sActionName = oEntitySet.getObject(sPath
|
|
494
|
+
sActionName = oEntitySet.getObject(`${sPath}@com.sap.vocabularies.Session.v1.StickySessionSupported/EditAction`);
|
|
488
495
|
}
|
|
489
|
-
return !sActionName ? sActionName : sPath
|
|
496
|
+
return !sActionName ? sActionName : `${sPath}/${sActionName}`;
|
|
490
497
|
};
|
|
491
498
|
|
|
492
499
|
export const isReadOnlyFromStaticAnnotations = function (oAnnotations: any, oFieldControl: any) {
|
|
@@ -519,14 +526,14 @@ export const readOnlyExpressionFromDynamicAnnotations = function (oFieldControl:
|
|
|
519
526
|
if (sIsFieldControlPathReadOnly) {
|
|
520
527
|
return "{= " + sIsFieldControlPathReadOnly + "? false : true }";
|
|
521
528
|
} else {
|
|
522
|
-
return;
|
|
529
|
+
return undefined;
|
|
523
530
|
}
|
|
524
531
|
};
|
|
525
532
|
|
|
526
533
|
/*
|
|
527
534
|
* Function to get the expression for chart Title Press
|
|
528
535
|
*
|
|
529
|
-
* @
|
|
536
|
+
* @functionw
|
|
530
537
|
* @param {oConfiguration} [oConfigurations] control configuration from manifest
|
|
531
538
|
* @param {oManifest} [oManifest] Outbounds from manifest
|
|
532
539
|
* returns {String} [sCollectionName] Collection Name of the Micro Chart
|
|
@@ -623,8 +630,8 @@ export const getBindingWithGroupIdFromConfig = function (oConfigurations: any, s
|
|
|
623
630
|
/**
|
|
624
631
|
* Method to check whether a FieldGroup consists of only 1 DataField with MultiLine Text annotation.
|
|
625
632
|
*
|
|
626
|
-
* @param
|
|
627
|
-
* @returns
|
|
633
|
+
* @param aFormElements A collection of form elements used in the current field group
|
|
634
|
+
* @returns Returns true if only 1 data field with Multiline Text annotation exists.
|
|
628
635
|
*/
|
|
629
636
|
export const doesFieldGroupContainOnlyOneMultiLineDataField = function (aFormElements: any[]) {
|
|
630
637
|
return aFormElements && aFormElements.length === 1 && !!aFormElements[0].isValueMultilineText;
|
|
@@ -743,9 +750,7 @@ export const getPressExpressionForEdit = function (oDataField: any, sEntitySetNa
|
|
|
743
750
|
label: CommonHelper.addSingleQuotes(oDataField && oDataField.Label, true),
|
|
744
751
|
isNavigable: oHeaderAction && oHeaderAction.isNavigable,
|
|
745
752
|
defaultValuesExtensionFunction:
|
|
746
|
-
oHeaderAction && oHeaderAction.defaultValuesExtensionFunction
|
|
747
|
-
? "'" + oHeaderAction.defaultValuesExtensionFunction + "'"
|
|
748
|
-
: undefined
|
|
753
|
+
oHeaderAction && oHeaderAction.defaultValuesExtensionFunction ? `'${oHeaderAction.defaultValuesExtensionFunction}'` : undefined
|
|
749
754
|
};
|
|
750
755
|
return CommonHelper.generateFunction(".handlers.onCallAction", "${$view>/}", sEditableContexts, CommonHelper.objectToString(oParams));
|
|
751
756
|
};
|
|
@@ -771,9 +776,7 @@ export const getPressExpressionForFooterAnnotationAction = function (oDataField:
|
|
|
771
776
|
label: CommonHelper.addSingleQuotes(oDataField && oDataField.Label, true),
|
|
772
777
|
isNavigable: oHeaderAction && oHeaderAction.isNavigable,
|
|
773
778
|
defaultValuesExtensionFunction:
|
|
774
|
-
oHeaderAction && oHeaderAction.defaultValuesExtensionFunction
|
|
775
|
-
? "'" + oHeaderAction.defaultValuesExtensionFunction + "'"
|
|
776
|
-
: undefined
|
|
779
|
+
oHeaderAction && oHeaderAction.defaultValuesExtensionFunction ? `'${oHeaderAction.defaultValuesExtensionFunction}'` : undefined
|
|
777
780
|
};
|
|
778
781
|
return CommonHelper.generateFunction(".handlers.onCallAction", "${$view>/}", sActionContexts, CommonHelper.objectToString(oParams));
|
|
779
782
|
};
|
|
@@ -817,21 +820,3 @@ export const getPressExpressionForLink = function (oConfiguration: any, oManifes
|
|
|
817
820
|
}
|
|
818
821
|
}
|
|
819
822
|
};
|
|
820
|
-
|
|
821
|
-
export const isSubSectionTitleVisible = function (sSubSectionvisible: any, sSubSectiontitle: any, sSubSectionshowTitle: any) {
|
|
822
|
-
if (sSubSectionvisible.indexOf("{=") === 0) {
|
|
823
|
-
// Dynamic expression
|
|
824
|
-
const sExpressionResult = sSubSectionvisible.substring(sSubSectionvisible.indexOf("{=") + 2, sSubSectionvisible.lastIndexOf("}"));
|
|
825
|
-
return (
|
|
826
|
-
"{= (" +
|
|
827
|
-
sExpressionResult +
|
|
828
|
-
") && ('" +
|
|
829
|
-
sSubSectiontitle +
|
|
830
|
-
"' !=='undefined') && (" +
|
|
831
|
-
sSubSectionshowTitle +
|
|
832
|
-
" ? true : false) }"
|
|
833
|
-
);
|
|
834
|
-
} else {
|
|
835
|
-
return sSubSectionvisible && sSubSectiontitle !== "undefined" && (sSubSectionshowTitle ? "true" : "false");
|
|
836
|
-
}
|
|
837
|
-
};
|
|
@@ -81,8 +81,7 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/uxap/BlockBase", "sap/ux
|
|
|
81
81
|
;
|
|
82
82
|
|
|
83
83
|
_proto._getSelectedViewContent = function _getSelectedViewContent() {
|
|
84
|
-
|
|
85
|
-
return oContent;
|
|
84
|
+
return this.getAggregation("content");
|
|
86
85
|
};
|
|
87
86
|
|
|
88
87
|
return SubSectionBlock;
|
|
@@ -99,4 +98,4 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/uxap/BlockBase", "sap/ux
|
|
|
99
98
|
})), _class2)) || _class);
|
|
100
99
|
return SubSectionBlock;
|
|
101
100
|
}, false);
|
|
102
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb25CbG9jay50cyJdLCJuYW1lcyI6WyJCbG9ja0Jhc2VGb3JtQWRqdXN0bWVudCIsInV4YXBMaWIiLCJTdWJTZWN0aW9uQmxvY2siLCJkZWZpbmVVSTVDbGFzcyIsInByb3BlcnR5IiwidHlwZSIsImdyb3VwIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsImluaXQiLCJfYkNvbm5lY3RlZCIsIl9hcHBseUZvcm1BZGp1c3RtZW50Iiwic0Zvcm1BZGp1c3RtZW50IiwiZ2V0Rm9ybUFkanVzdG1lbnQiLCJvVmlldyIsIl9nZXRTZWxlY3RlZFZpZXdDb250ZW50Iiwib1BhcmVudCIsIl9vUGFyZW50T2JqZWN0UGFnZVN1YlNlY3Rpb24iLCJvRm9ybUFkanVzdG1lbnRGaWVsZHMiLCJOb25lIiwiX2NvbXB1dGVGb3JtQWRqdXN0bWVudEZpZWxkcyIsIl9vTGF5b3V0Q29uZmlnIiwiX2FkanVzdEZvcm0iLCJzZXRNb2RlIiwic01vZGUiLCJzZXRQcm9wZXJ0eSIsImNvbm5lY3RUb01vZGVscyIsImdldEFnZ3JlZ2F0aW9uIiwiQmxvY2tCYXNlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsTUFBTUEsdUJBQXVCLEdBQUdDLE9BQU8sQ0FBQ0QsdUJBQXhDO01BRU1FLGUsV0FETEMsY0FBYyxDQUFDLHNEQUFELEMsVUFFYkMsUUFBUSxDQUFDO0FBQUVDLElBQUFBLElBQUksRUFBRSxnQ0FBUjtBQUEwQ0MsSUFBQUEsS0FBSyxFQUFFLFVBQWpEO0FBQTZEQyxJQUFBQSxZQUFZLEVBQUU7QUFBM0UsR0FBRCxDLFVBR1JDLFdBQVcsQ0FBQztBQUFFSCxJQUFBQSxJQUFJLEVBQUUscUJBQVI7QUFBK0JJLElBQUFBLFFBQVEsRUFBRTtBQUF6QyxHQUFELEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQUdaQyxJLEdBQUEsZ0JBQU87QUFDTiwyQkFBTUEsSUFBTjs7QUFDQyxVQUFELENBQWNDLFdBQWQsR0FBNEIsSUFBNUI7QUFDQSxLOztXQUNEQyxvQixHQUFBLGdDQUF1QjtBQUN0QixVQUFNQyxlQUFlLEdBQUcsS0FBS0MsaUJBQUwsRUFBeEI7QUFBQSxVQUNDQyxLQUFLLEdBQUcsS0FBS0MsdUJBQUwsRUFEVDtBQUFBLFVBRUNDLE9BQU8sR0FBRyxLQUFLQyw0QkFGaEI7O0FBR0EsVUFBSUMscUJBQUo7O0FBRUEsVUFBSU4sZUFBZSxLQUFLYix1QkFBdUIsQ0FBQ29CLElBQTVDLElBQW9ETCxLQUFwRCxJQUE2REUsT0FBakUsRUFBMEU7QUFDekVFLFFBQUFBLHFCQUFxQixHQUFHLEtBQUtFLDRCQUFMLENBQWtDUixlQUFsQyxFQUFtREksT0FBTyxDQUFDSyxjQUEzRCxDQUF4Qjs7QUFFQSxhQUFLQyxXQUFMLENBQWlCUixLQUFqQixFQUF3QkkscUJBQXhCO0FBQ0E7QUFDRCxLOztXQUNESyxPLEdBQUEsaUJBQVFDLEtBQVIsRUFBb0I7QUFDbkIsV0FBS0MsV0FBTCxDQUFpQixNQUFqQixFQUF5QkQsS0FBekIsRUFEbUIsQ0FFbkI7QUFDQSxLOztXQUVERSxlLEdBQUEsMkJBQWtCLENBQ2pCO0FBQ0EsSyxDQUNEOzs7V0FDQVgsdUIsR0FBQSxtQ0FBMEI7QUFDekIsYUFBTyxLQUFLWSxjQUFMLENBQW9CLFNBQXBCLENBQVA7QUFDQSxLOzs7SUFsQzRCQyxTOzs7Ozs7Ozs7OztTQTBDZjNCLGUiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBCbG9ja0Jhc2UgZnJvbSBcInNhcC91eGFwL0Jsb2NrQmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBCbG9ja0Jhc2VDb2x1bW5MYXlvdXQgfSBmcm9tIFwic2FwL3V4YXAvbGlicmFyeVwiO1xuaW1wb3J0IHV4YXBMaWIgZnJvbSBcInNhcC91eGFwL2xpYnJhcnlcIjtcbmNvbnN0IEJsb2NrQmFzZUZvcm1BZGp1c3RtZW50ID0gdXhhcExpYi5CbG9ja0Jhc2VGb3JtQWRqdXN0bWVudDtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIilcbmNsYXNzIFN1YlNlY3Rpb25CbG9jayBleHRlbmRzIEJsb2NrQmFzZSB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnV4YXAuQmxvY2tCYXNlQ29sdW1uTGF5b3V0XCIsIGdyb3VwOiBcIkJlaGF2aW9yXCIsIGRlZmF1bHRWYWx1ZTogNCB9KVxuXHRjb2x1bW5MYXlvdXQhOiBCbG9ja0Jhc2VDb2x1bW5MYXlvdXQ7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRjb250ZW50ITogQ29udHJvbDtcblx0cHJpdmF0ZSBfb1BhcmVudE9iamVjdFBhZ2VTdWJTZWN0aW9uITogYW55O1xuXHRpbml0KCkge1xuXHRcdHN1cGVyLmluaXQoKTtcblx0XHQodGhpcyBhcyBhbnkpLl9iQ29ubmVjdGVkID0gdHJ1ZTtcblx0fVxuXHRfYXBwbHlGb3JtQWRqdXN0bWVudCgpIHtcblx0XHRjb25zdCBzRm9ybUFkanVzdG1lbnQgPSB0aGlzLmdldEZvcm1BZGp1c3RtZW50KCksXG5cdFx0XHRvVmlldyA9IHRoaXMuX2dldFNlbGVjdGVkVmlld0NvbnRlbnQoKSxcblx0XHRcdG9QYXJlbnQgPSB0aGlzLl9vUGFyZW50T2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0bGV0IG9Gb3JtQWRqdXN0bWVudEZpZWxkcztcblxuXHRcdGlmIChzRm9ybUFkanVzdG1lbnQgIT09IEJsb2NrQmFzZUZvcm1BZGp1c3RtZW50Lk5vbmUgJiYgb1ZpZXcgJiYgb1BhcmVudCkge1xuXHRcdFx0b0Zvcm1BZGp1c3RtZW50RmllbGRzID0gdGhpcy5fY29tcHV0ZUZvcm1BZGp1c3RtZW50RmllbGRzKHNGb3JtQWRqdXN0bWVudCwgb1BhcmVudC5fb0xheW91dENvbmZpZyk7XG5cblx0XHRcdHRoaXMuX2FkanVzdEZvcm0ob1ZpZXcsIG9Gb3JtQWRqdXN0bWVudEZpZWxkcyk7XG5cdFx0fVxuXHR9XG5cdHNldE1vZGUoc01vZGU6IGFueSkge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJtb2RlXCIsIHNNb2RlKTtcblx0XHQvLyBPUFRJT05BTDogdGhpcy5pbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL21vZGVcIiwgc01vZGUpO1xuXHR9XG5cblx0Y29ubmVjdFRvTW9kZWxzKCkge1xuXHRcdC8vIFZpZXcgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gdGhlIFVJNSBtb2RlbCB0cmVlLCBoZW5jZSBubyBleHRyYSBsb2dpYyByZXF1aXJlZCBoZXJlXG5cdH1cblx0Ly8vIFN1YlNlY3Rpb25CbG9jayB1c2UgYWdncmVnYXRpb24gaW5zdGVhZCBvZiBhIHZpZXcsIGkuZS4gcmV0dXJuIHRoYXQgYXMgdGhlIHZpZXcgY29udGVudFxuXHRfZ2V0U2VsZWN0ZWRWaWV3Q29udGVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihcImNvbnRlbnRcIik7XG5cdH1cbn1cblxuaW50ZXJmYWNlIFN1YlNlY3Rpb25CbG9jayB7XG5cdF9hZGp1c3RGb3JtKHZpZXc6IGFueSwgZm9ybUZpZWxkczogYW55KTogdm9pZDtcblx0X2NvbXB1dGVGb3JtQWRqdXN0bWVudEZpZWxkcyhzRm9ybUFkanVzdG1lbnQ6IGFueSwgX29MYXlvdXRDb25maWc6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU3ViU2VjdGlvbkJsb2NrO1xuIl19
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { aggregation, defineUI5Class, property } from "sap/fe/core/helpers/ClassSupport";
|
|
2
|
-
import Control from "sap/ui/core/Control";
|
|
2
|
+
import type Control from "sap/ui/core/Control";
|
|
3
3
|
import BlockBase from "sap/uxap/BlockBase";
|
|
4
|
-
import
|
|
4
|
+
import type { BlockBaseColumnLayout } from "sap/uxap/library";
|
|
5
|
+
import uxapLib from "sap/uxap/library";
|
|
5
6
|
const BlockBaseFormAdjustment = uxapLib.BlockBaseFormAdjustment;
|
|
6
7
|
@defineUI5Class("sap.fe.templates.ObjectPage.controls.SubSectionBlock")
|
|
7
8
|
class SubSectionBlock extends BlockBase {
|
|
@@ -37,8 +38,7 @@ class SubSectionBlock extends BlockBase {
|
|
|
37
38
|
}
|
|
38
39
|
/// SubSectionBlock use aggregation instead of a view, i.e. return that as the view content
|
|
39
40
|
_getSelectedViewContent() {
|
|
40
|
-
|
|
41
|
-
return oContent;
|
|
41
|
+
return this.getAggregation("content");
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -51,4 +51,4 @@ sap.ui.define(["sap/ui/core/Core"], function (Core) {
|
|
|
51
51
|
};
|
|
52
52
|
return StashableHBoxDesignTime;
|
|
53
53
|
}, false);
|
|
54
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN0YXNoYWJsZUhCb3guZGVzaWdudGltZS50cyJdLCJuYW1lcyI6WyJvUmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiU3Rhc2hhYmxlSEJveERlc2lnblRpbWUiLCJhY3Rpb25zIiwicmVtb3ZlIiwiY2hhbmdlVHlwZSIsInJldmVhbCIsInJlbmFtZSIsImRvbVJlZiIsIm9Db250cm9sIiwib1RpdGxlQ29udHJvbCIsImdldFRpdGxlQ29udHJvbCIsImdldERvbVJlZiIsIm5hbWUiLCJzaW5ndWxhciIsImdldFRleHQiLCJwbHVyYWwiLCJwYWxldHRlIiwiZ3JvdXAiLCJpY29ucyIsInN2ZyIsInRlbXBsYXRlcyIsImNyZWF0ZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQUNBLE1BQU1BLGVBQWUsR0FBSUMsSUFBRCxDQUFpQkMsd0JBQWpCLENBQTBDLGtCQUExQyxDQUF4QjtBQUVBLE1BQU1DLHVCQUF1QixHQUFHO0FBQy9CQyxJQUFBQSxPQUFPLEVBQUU7QUFDUkMsTUFBQUEsTUFBTSxFQUFFO0FBQ1BDLFFBQUFBLFVBQVUsRUFBRTtBQURMLE9BREE7QUFJUkMsTUFBQUEsTUFBTSxFQUFFO0FBQ1BELFFBQUFBLFVBQVUsRUFBRTtBQURMLE9BSkE7QUFPUkUsTUFBQUEsTUFBTSxFQUFFO0FBQVU7QUFBVixTQUFpQztBQUN4QyxlQUFPO0FBQ05GLFVBQUFBLFVBQVUsRUFBRSxtQkFETjtBQUVORyxVQUFBQSxNQUFNLEVBQUUsVUFBVUMsUUFBVixFQUF5QjtBQUNoQyxnQkFBTUMsYUFBYSxHQUFHRCxRQUFRLENBQUNFLGVBQVQsRUFBdEI7O0FBQ0EsZ0JBQUlELGFBQUosRUFBbUI7QUFDbEIscUJBQU9BLGFBQWEsQ0FBQ0UsU0FBZCxFQUFQO0FBQ0EsYUFGRCxNQUVPO0FBQ04scUJBQU8sSUFBUDtBQUNBO0FBQ0Q7QUFUSyxTQUFQO0FBV0E7QUFuQk8sS0FEc0I7QUFzQi9CQyxJQUFBQSxJQUFJLEVBQUU7QUFDTEMsTUFBQUEsUUFBUSxFQUFFLFlBQVk7QUFDckIsZUFBT2YsZUFBZSxDQUFDZ0IsT0FBaEIsQ0FBd0IsMkNBQXhCLENBQVA7QUFDQSxPQUhJO0FBSUxDLE1BQUFBLE1BQU0sRUFBRSxZQUFZO0FBQ25CLGVBQU9qQixlQUFlLENBQUNnQixPQUFoQixDQUF3QixrREFBeEIsQ0FBUDtBQUNBO0FBTkksS0F0QnlCO0FBOEIvQkUsSUFBQUEsT0FBTyxFQUFFO0FBQ1JDLE1BQUFBLEtBQUssRUFBRSxRQURDO0FBRVJDLE1BQUFBLEtBQUssRUFBRTtBQUNOQyxRQUFBQSxHQUFHLEVBQUU7QUFEQztBQUZDLEtBOUJzQjtBQW9DL0JDLElBQUFBLFNBQVMsRUFBRTtBQUNWQyxNQUFBQSxNQUFNLEVBQUU7QUFERTtBQXBDb0IsR0FBaEM7U0F5Q2VwQix1QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCB0eXBlIHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuXG5jb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS50ZW1wbGF0ZXNcIik7XG5cbmNvbnN0IFN0YXNoYWJsZUhCb3hEZXNpZ25UaW1lID0ge1xuXHRhY3Rpb25zOiB7XG5cdFx0cmVtb3ZlOiB7XG5cdFx0XHRjaGFuZ2VUeXBlOiBcInN0YXNoQ29udHJvbFwiXG5cdFx0fSxcblx0XHRyZXZlYWw6IHtcblx0XHRcdGNoYW5nZVR5cGU6IFwidW5zdGFzaENvbnRyb2xcIlxuXHRcdH0sXG5cdFx0cmVuYW1lOiBmdW5jdGlvbiAoLypvSGVhZGVyRmFjZXQ6IGFueSovKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjaGFuZ2VUeXBlOiBcInJlbmFtZUhlYWRlckZhY2V0XCIsXG5cdFx0XHRcdGRvbVJlZjogZnVuY3Rpb24gKG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBvVGl0bGVDb250cm9sID0gb0NvbnRyb2wuZ2V0VGl0bGVDb250cm9sKCk7XG5cdFx0XHRcdFx0aWYgKG9UaXRsZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvVGl0bGVDb250cm9sLmdldERvbVJlZigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXHRuYW1lOiB7XG5cdFx0c2luZ3VsYXI6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfU1RBU0hBQkxFX0hCT1hfUlRBX0hFQURFUkZBQ0VUX01FTlVfQUREXCIpO1xuXHRcdH0sXG5cdFx0cGx1cmFsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX1NUQVNIQUJMRV9IQk9YX1JUQV9IRUFERVJGQUNFVF9NRU5VX0FERF9QTFVSQUxcIik7XG5cdFx0fVxuXHR9LFxuXHRwYWxldHRlOiB7XG5cdFx0Z3JvdXA6IFwiTEFZT1VUXCIsXG5cdFx0aWNvbnM6IHtcblx0XHRcdHN2ZzogXCJzYXAvbS9kZXNpZ250aW1lL0hCb3guaWNvbi5zdmdcIlxuXHRcdH1cblx0fSxcblx0dGVtcGxhdGVzOiB7XG5cdFx0Y3JlYXRlOiBcInNhcC9tL2Rlc2lnbnRpbWUvSEJveC5jcmVhdGUuZnJhZ21lbnQueG1sXCJcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU3Rhc2hhYmxlSEJveERlc2lnblRpbWU7XG4iXX0=
|
|
@@ -35,4 +35,4 @@ sap.ui.define(["sap/ui/core/Core"], function (Core) {
|
|
|
35
35
|
};
|
|
36
36
|
return StashableVBoxDesignTime;
|
|
37
37
|
}, false);
|
|
38
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN0YXNoYWJsZVZCb3guZGVzaWdudGltZS50cyJdLCJuYW1lcyI6WyJvUmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiU3Rhc2hhYmxlVkJveERlc2lnblRpbWUiLCJhY3Rpb25zIiwicmVtb3ZlIiwiY2hhbmdlVHlwZSIsInJldmVhbCIsIm5hbWUiLCJzaW5ndWxhciIsImdldFRleHQiLCJwbHVyYWwiLCJwYWxldHRlIiwiZ3JvdXAiLCJpY29ucyIsInN2ZyIsInRlbXBsYXRlcyIsImNyZWF0ZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQUNBLE1BQU1BLGVBQWUsR0FBSUMsSUFBRCxDQUFpQkMsd0JBQWpCLENBQTBDLGtCQUExQyxDQUF4QjtBQUVBLE1BQU1DLHVCQUF1QixHQUFHO0FBQy9CQyxJQUFBQSxPQUFPLEVBQUU7QUFDUkMsTUFBQUEsTUFBTSxFQUFFO0FBQ1BDLFFBQUFBLFVBQVUsRUFBRTtBQURMLE9BREE7QUFJUkMsTUFBQUEsTUFBTSxFQUFFO0FBQ1BELFFBQUFBLFVBQVUsRUFBRTtBQURMO0FBSkEsS0FEc0I7QUFTL0JFLElBQUFBLElBQUksRUFBRTtBQUNMQyxNQUFBQSxRQUFRLEVBQUUsWUFBWTtBQUNyQixlQUFPVCxlQUFlLENBQUNVLE9BQWhCLENBQXdCLHFEQUF4QixDQUFQO0FBQ0EsT0FISTtBQUlMQyxNQUFBQSxNQUFNLEVBQUUsWUFBWTtBQUNuQixlQUFPWCxlQUFlLENBQUNVLE9BQWhCLENBQXdCLDREQUF4QixDQUFQO0FBQ0E7QUFOSSxLQVR5QjtBQWlCL0JFLElBQUFBLE9BQU8sRUFBRTtBQUNSQyxNQUFBQSxLQUFLLEVBQUUsUUFEQztBQUVSQyxNQUFBQSxLQUFLLEVBQUU7QUFDTkMsUUFBQUEsR0FBRyxFQUFFO0FBREM7QUFGQyxLQWpCc0I7QUF1Qi9CQyxJQUFBQSxTQUFTLEVBQUU7QUFDVkMsTUFBQUEsTUFBTSxFQUFFO0FBREU7QUF2Qm9CLEdBQWhDO1NBNEJlZCx1QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCB0eXBlIHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuXG5jb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS50ZW1wbGF0ZXNcIik7XG5cbmNvbnN0IFN0YXNoYWJsZVZCb3hEZXNpZ25UaW1lID0ge1xuXHRhY3Rpb25zOiB7XG5cdFx0cmVtb3ZlOiB7XG5cdFx0XHRjaGFuZ2VUeXBlOiBcInN0YXNoQ29udHJvbFwiXG5cdFx0fSxcblx0XHRyZXZlYWw6IHtcblx0XHRcdGNoYW5nZVR5cGU6IFwidW5zdGFzaENvbnRyb2xcIlxuXHRcdH1cblx0fSxcblx0bmFtZToge1xuXHRcdHNpbmd1bGFyOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX1NUQVNIQUJMRV9WQk9YX1JUQV9IRUFERVJDT0xMRUNUSU9ORkFDRVRfTUVOVV9BRERcIik7XG5cdFx0fSxcblx0XHRwbHVyYWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfU1RBU0hBQkxFX1ZCT1hfUlRBX0hFQURFUkNPTExFQ1RJT05GQUNFVF9NRU5VX0FERF9QTFVSQUxcIik7XG5cdFx0fVxuXHR9LFxuXHRwYWxldHRlOiB7XG5cdFx0Z3JvdXA6IFwiTEFZT1VUXCIsXG5cdFx0aWNvbnM6IHtcblx0XHRcdHN2ZzogXCJzYXAvbS9kZXNpZ250aW1lL1ZCb3guaWNvbi5zdmdcIlxuXHRcdH1cblx0fSxcblx0dGVtcGxhdGVzOiB7XG5cdFx0Y3JlYXRlOiBcInNhcC9tL2Rlc2lnbnRpbWUvVkJveC5jcmVhdGUuZnJhZ21lbnQueG1sXCJcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU3Rhc2hhYmxlVkJveERlc2lnblRpbWU7XG4iXX0=
|
|
@@ -0,0 +1,103 @@
|
|
|
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/base/Log", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/model/json/JSONModel"], function (Log, Fragment, XMLPreprocessor, XMLTemplateProcessor, JSONModel) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var oSwitchDraftAndActivePopOver;
|
|
9
|
+
/**
|
|
10
|
+
* Generic handler collection for several events in the draft topic area
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
var DraftHandler = {
|
|
14
|
+
/**
|
|
15
|
+
* The method with the behaviour on the switch draft mode button.
|
|
16
|
+
*
|
|
17
|
+
* @param this The type of the this refered to PageController.
|
|
18
|
+
* @param event The event with the bound source control.
|
|
19
|
+
*/
|
|
20
|
+
showSwitchDraftAndActivePopover: function (event) {
|
|
21
|
+
var _this = this;
|
|
22
|
+
|
|
23
|
+
var view = this.getView(),
|
|
24
|
+
source = event.getSource(),
|
|
25
|
+
fragmentName = "sap.fe.templates.ObjectPage.view.fragments.SwitchDraftAndActiveObjectPopOver";
|
|
26
|
+
|
|
27
|
+
if (oSwitchDraftAndActivePopOver) {
|
|
28
|
+
oSwitchDraftAndActivePopOver.openBy(source, false);
|
|
29
|
+
} else {
|
|
30
|
+
var localThisModel = new JSONModel({}),
|
|
31
|
+
preprocessorSettings = {
|
|
32
|
+
bindingContexts: {
|
|
33
|
+
"this": localThisModel.createBindingContext("/")
|
|
34
|
+
},
|
|
35
|
+
models: {
|
|
36
|
+
"this": localThisModel
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var popoverFragment = XMLTemplateProcessor.loadTemplate(fragmentName, "fragment");
|
|
40
|
+
Promise.resolve(XMLPreprocessor.process(popoverFragment, {
|
|
41
|
+
name: fragmentName
|
|
42
|
+
}, preprocessorSettings)).then(function (fragment) {
|
|
43
|
+
return Fragment.load({
|
|
44
|
+
definition: fragment,
|
|
45
|
+
controller: _this
|
|
46
|
+
});
|
|
47
|
+
}).then(function (popover) {
|
|
48
|
+
view.addDependent(popover);
|
|
49
|
+
popover.setModel(view.getModel("sap.fe.i18n"), "i18n");
|
|
50
|
+
popover.setPlacement("Bottom");
|
|
51
|
+
oSwitchDraftAndActivePopOver = popover;
|
|
52
|
+
popover.attachAfterOpen(function () {
|
|
53
|
+
// While the list entry corresponding to the currently displayed document version is emphasized with a blue
|
|
54
|
+
// background, we need to pre-focus the other entry
|
|
55
|
+
var context = _this.getView().getBindingContext(),
|
|
56
|
+
isActiveEntity = context.getObject().IsActiveEntity;
|
|
57
|
+
|
|
58
|
+
var switchDraftAndActiveOptionsList = popover.getContent().find(function (element) {
|
|
59
|
+
return element.data("listIdentifier") === "switchDraftAndActivePopoverList";
|
|
60
|
+
});
|
|
61
|
+
var listItemToFocus = isActiveEntity ? switchDraftAndActiveOptionsList.getItems().find(function (element) {
|
|
62
|
+
return element.getKey() === "switchToDraft";
|
|
63
|
+
}) : switchDraftAndActiveOptionsList.getItems().find(function (element) {
|
|
64
|
+
return element.getKey() === "switchToActive";
|
|
65
|
+
});
|
|
66
|
+
listItemToFocus.focus();
|
|
67
|
+
});
|
|
68
|
+
popover.openBy(source); // ensure to remove the reference to the draft popover as it would be destroyed on exit
|
|
69
|
+
|
|
70
|
+
view.attachEventOnce("beforeExit", function () {
|
|
71
|
+
oSwitchDraftAndActivePopOver.destroy();
|
|
72
|
+
});
|
|
73
|
+
}).catch(function (Error) {
|
|
74
|
+
Log.error("Error while opening the draft switch popup", Error);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The method with the behaviour on the switch draft mode button popover when an entry is selected.
|
|
81
|
+
*
|
|
82
|
+
* @param this The type of the this refered to PageController.
|
|
83
|
+
* @param event The event with the bound source control.
|
|
84
|
+
*/
|
|
85
|
+
switchDraftAndActivePopoverListSelect: function (event) {
|
|
86
|
+
var context = this.getView().getBindingContext(),
|
|
87
|
+
selectedItemKey = event.getParameter("item").getProperty("key"),
|
|
88
|
+
isActiveEntity = context.getObject().IsActiveEntity; // It was decided that we should NOT set the entry in the list corresponding to the currently displayed document version to
|
|
89
|
+
// disabled, hence the user can click entries which to not cause an action (clicking "Draft" when you already display the
|
|
90
|
+
// draft version of the document)
|
|
91
|
+
// Hence we check here which entry in the list was clicked and which document version we currently display and only do
|
|
92
|
+
// the switch between draft / active version if it makes sense.
|
|
93
|
+
|
|
94
|
+
if (isActiveEntity && selectedItemKey === "switchToDraft" || !isActiveEntity && selectedItemKey === "switchToActive") {
|
|
95
|
+
this.editFlow.toggleDraftActive(context);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
event.getSource().getParent().close();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
return DraftHandler;
|
|
102
|
+
}, false);
|
|
103
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRyYWZ0SGFuZGxlci50cyJdLCJuYW1lcyI6WyJvU3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyIiwiRHJhZnRIYW5kbGVyIiwic2hvd1N3aXRjaERyYWZ0QW5kQWN0aXZlUG9wb3ZlciIsImV2ZW50IiwidmlldyIsImdldFZpZXciLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJmcmFnbWVudE5hbWUiLCJvcGVuQnkiLCJsb2NhbFRoaXNNb2RlbCIsIkpTT05Nb2RlbCIsInByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtb2RlbHMiLCJwb3BvdmVyRnJhZ21lbnQiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIm5hbWUiLCJ0aGVuIiwiZnJhZ21lbnQiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsInBvcG92ZXIiLCJhZGREZXBlbmRlbnQiLCJzZXRNb2RlbCIsImdldE1vZGVsIiwic2V0UGxhY2VtZW50IiwiYXR0YWNoQWZ0ZXJPcGVuIiwiY29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiaXNBY3RpdmVFbnRpdHkiLCJnZXRPYmplY3QiLCJJc0FjdGl2ZUVudGl0eSIsInN3aXRjaERyYWZ0QW5kQWN0aXZlT3B0aW9uc0xpc3QiLCJnZXRDb250ZW50IiwiZmluZCIsImVsZW1lbnQiLCJkYXRhIiwibGlzdEl0ZW1Ub0ZvY3VzIiwiZ2V0SXRlbXMiLCJnZXRLZXkiLCJmb2N1cyIsImF0dGFjaEV2ZW50T25jZSIsImRlc3Ryb3kiLCJjYXRjaCIsIkVycm9yIiwiTG9nIiwiZXJyb3IiLCJzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXJMaXN0U2VsZWN0Iiwic2VsZWN0ZWRJdGVtS2V5IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0UHJvcGVydHkiLCJlZGl0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QUNyQixNQUFSLENBQWVILE1BQWYsRUFsQnVCLENBbUJ2Qjs7QUFDQUYsVUFBQUEsSUFBSSxDQUFDOEMsZUFBTCxDQUFxQixZQUFyQixFQUFtQyxZQUFNO0FBQ3hDbEQsWUFBQUEsNEJBQTRCLENBQUNtRCxPQUE3QjtBQUNBLFdBRkQ7QUFHQSxTQTNCRixFQTRCRUMsS0E1QkYsQ0E0QlEsVUFBVUMsS0FBVixFQUFpQjtBQUN2QkMsVUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsNENBQVYsRUFBd0RGLEtBQXhEO0FBQ0EsU0E5QkY7QUErQkE7QUFDRCxLQXpEbUI7O0FBMERwQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQ0csSUFBQUEscUNBaEVvQixZQWdFd0NyRCxLQWhFeEMsRUFnRXNEO0FBQ3pFLFVBQU1pQyxPQUFZLEdBQUcsS0FBSy9CLE9BQUwsR0FBZWdDLGlCQUFmLEVBQXJCO0FBQUEsVUFDQ29CLGVBQWUsR0FBR3RELEtBQUssQ0FBQ3VELFlBQU4sQ0FBbUIsTUFBbkIsRUFBMkJDLFdBQTNCLENBQXVDLEtBQXZDLENBRG5CO0FBQUEsVUFFQ3JCLGNBQWMsR0FBR0YsT0FBTyxDQUFDRyxTQUFSLEdBQW9CQyxjQUZ0QyxDQUR5RSxDQUl6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFVBQUtGLGNBQWMsSUFBSW1CLGVBQWUsS0FBSyxlQUF2QyxJQUE0RCxDQUFDbkIsY0FBRCxJQUFtQm1CLGVBQWUsS0FBSyxnQkFBdkcsRUFBMEg7QUFDekgsYUFBS0csUUFBTCxDQUFjQyxpQkFBZCxDQUFnQ3pCLE9BQWhDO0FBQ0E7O0FBQ0NqQyxNQUFBQSxLQUFLLENBQUNJLFNBQU4sRUFBRCxDQUErQnVELFNBQS9CLEVBQUQsQ0FBd0RDLEtBQXhEO0FBQ0E7QUE3RW1CLEdBQXJCO1NBZ0ZlOUQsWSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFNlbGVjdExpc3QgZnJvbSBcInNhcC9tL1NlbGVjdExpc3RcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IHR5cGUgSXRlbSBmcm9tIFwic2FwL3VpL2NvcmUvSXRlbVwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5sZXQgb1N3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3ZlcjogUG9wb3Zlcjtcbi8qKlxuICogR2VuZXJpYyBoYW5kbGVyIGNvbGxlY3Rpb24gZm9yIHNldmVyYWwgZXZlbnRzIGluIHRoZSBkcmFmdCB0b3BpYyBhcmVhXG4gKi9cbmNvbnN0IERyYWZ0SGFuZGxlciA9IHtcblx0LyoqXG5cdCAqIFRoZSBtZXRob2Qgd2l0aCB0aGUgYmVoYXZpb3VyIG9uIHRoZSBzd2l0Y2ggZHJhZnQgbW9kZSBidXR0b24uXG5cdCAqXG5cdCAqIEBwYXJhbSB0aGlzIFRoZSB0eXBlIG9mIHRoZSB0aGlzIHJlZmVyZWQgdG8gUGFnZUNvbnRyb2xsZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgd2l0aCB0aGUgYm91bmQgc291cmNlIGNvbnRyb2wuXG5cdCAqL1xuXHRzaG93U3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BvdmVyKHRoaXM6IFBhZ2VDb250cm9sbGVyLCBldmVudDogRXZlbnQpIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdGZyYWdtZW50TmFtZSA9IFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLnZpZXcuZnJhZ21lbnRzLlN3aXRjaERyYWZ0QW5kQWN0aXZlT2JqZWN0UG9wT3ZlclwiO1xuXG5cdFx0aWYgKG9Td2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXIpIHtcblx0XHRcdG9Td2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXIub3BlbkJ5KHNvdXJjZSwgZmFsc2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBsb2NhbFRoaXNNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pLFxuXHRcdFx0XHRwcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFwidGhpc1wiOiBsb2NhbFRoaXNNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XCJ0aGlzXCI6IGxvY2FsVGhpc01vZGVsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0Y29uc3QgcG9wb3ZlckZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKGZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKTtcblx0XHRcdFByb21pc2UucmVzb2x2ZShYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhwb3BvdmVyRnJhZ21lbnQsIHsgbmFtZTogZnJhZ21lbnROYW1lIH0sIHByZXByb2Nlc3NvclNldHRpbmdzKSlcblx0XHRcdFx0LnRoZW4oKGZyYWdtZW50KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoeyBkZWZpbml0aW9uOiBmcmFnbWVudCwgY29udHJvbGxlcjogdGhpcyB9KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oKHBvcG92ZXI6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHZpZXcuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdFx0XHRcdHBvcG92ZXIuc2V0TW9kZWwodmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpLCBcImkxOG5cIik7XG5cdFx0XHRcdFx0cG9wb3Zlci5zZXRQbGFjZW1lbnQoXCJCb3R0b21cIik7XG5cdFx0XHRcdFx0b1N3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3ZlciA9IHBvcG92ZXI7XG5cdFx0XHRcdFx0cG9wb3Zlci5hdHRhY2hBZnRlck9wZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gV2hpbGUgdGhlIGxpc3QgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBkb2N1bWVudCB2ZXJzaW9uIGlzIGVtcGhhc2l6ZWQgd2l0aCBhIGJsdWVcblx0XHRcdFx0XHRcdC8vIGJhY2tncm91bmQsIHdlIG5lZWQgdG8gcHJlLWZvY3VzIHRoZSBvdGhlciBlbnRyeVxuXHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dDogYW55ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aXNBY3RpdmVFbnRpdHkgPSBjb250ZXh0LmdldE9iamVjdCgpLklzQWN0aXZlRW50aXR5O1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3dpdGNoRHJhZnRBbmRBY3RpdmVPcHRpb25zTGlzdDogU2VsZWN0TGlzdCA9IChwb3BvdmVyLmdldENvbnRlbnQoKSBhcyB1bmtub3duIGFzIENvbnRyb2xbXSkuZmluZChcblx0XHRcdFx0XHRcdFx0KGVsZW1lbnQpID0+IGVsZW1lbnQuZGF0YShcImxpc3RJZGVudGlmaWVyXCIpID09PSBcInN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wb3Zlckxpc3RcIlxuXHRcdFx0XHRcdFx0KSBhcyBTZWxlY3RMaXN0O1xuXHRcdFx0XHRcdFx0Y29uc3QgbGlzdEl0ZW1Ub0ZvY3VzOiBJdGVtID0gaXNBY3RpdmVFbnRpdHlcblx0XHRcdFx0XHRcdFx0PyAoc3dpdGNoRHJhZnRBbmRBY3RpdmVPcHRpb25zTGlzdC5nZXRJdGVtcygpLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuZ2V0S2V5KCkgPT09IFwic3dpdGNoVG9EcmFmdFwiKSBhcyBJdGVtKVxuXHRcdFx0XHRcdFx0XHQ6IChzd2l0Y2hEcmFmdEFuZEFjdGl2ZU9wdGlvbnNMaXN0LmdldEl0ZW1zKCkuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5nZXRLZXkoKSA9PT0gXCJzd2l0Y2hUb0FjdGl2ZVwiKSBhcyBJdGVtKTtcblx0XHRcdFx0XHRcdGxpc3RJdGVtVG9Gb2N1cy5mb2N1cygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHBvcG92ZXIub3BlbkJ5KHNvdXJjZSk7XG5cdFx0XHRcdFx0Ly8gZW5zdXJlIHRvIHJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBkcmFmdCBwb3BvdmVyIGFzIGl0IHdvdWxkIGJlIGRlc3Ryb3llZCBvbiBleGl0XG5cdFx0XHRcdFx0dmlldy5hdHRhY2hFdmVudE9uY2UoXCJiZWZvcmVFeGl0XCIsICgpID0+IHtcblx0XHRcdFx0XHRcdG9Td2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXIuZGVzdHJveSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKEVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgb3BlbmluZyB0aGUgZHJhZnQgc3dpdGNoIHBvcHVwXCIsIEVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB3aXRoIHRoZSBiZWhhdmlvdXIgb24gdGhlIHN3aXRjaCBkcmFmdCBtb2RlIGJ1dHRvbiBwb3BvdmVyIHdoZW4gYW4gZW50cnkgaXMgc2VsZWN0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB0aGlzIFRoZSB0eXBlIG9mIHRoZSB0aGlzIHJlZmVyZWQgdG8gUGFnZUNvbnRyb2xsZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgd2l0aCB0aGUgYm91bmQgc291cmNlIGNvbnRyb2wuXG5cdCAqL1xuXHRzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXJMaXN0U2VsZWN0KHRoaXM6IFBhZ2VDb250cm9sbGVyLCBldmVudDogRXZlbnQpIHtcblx0XHRjb25zdCBjb250ZXh0OiBhbnkgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0c2VsZWN0ZWRJdGVtS2V5ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXRlbVwiKS5nZXRQcm9wZXJ0eShcImtleVwiKSxcblx0XHRcdGlzQWN0aXZlRW50aXR5ID0gY29udGV4dC5nZXRPYmplY3QoKS5Jc0FjdGl2ZUVudGl0eTtcblx0XHQvLyBJdCB3YXMgZGVjaWRlZCB0aGF0IHdlIHNob3VsZCBOT1Qgc2V0IHRoZSBlbnRyeSBpbiB0aGUgbGlzdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGRvY3VtZW50IHZlcnNpb24gdG9cblx0XHQvLyBkaXNhYmxlZCwgaGVuY2UgdGhlIHVzZXIgY2FuIGNsaWNrIGVudHJpZXMgd2hpY2ggdG8gbm90IGNhdXNlIGFuIGFjdGlvbiAoY2xpY2tpbmcgXCJEcmFmdFwiIHdoZW4geW91IGFscmVhZHkgZGlzcGxheSB0aGVcblx0XHQvLyBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudClcblx0XHQvLyBIZW5jZSB3ZSBjaGVjayBoZXJlIHdoaWNoIGVudHJ5IGluIHRoZSBsaXN0IHdhcyBjbGlja2VkIGFuZCB3aGljaCBkb2N1bWVudCB2ZXJzaW9uIHdlIGN1cnJlbnRseSBkaXNwbGF5IGFuZCBvbmx5IGRvXG5cdFx0Ly8gdGhlIHN3aXRjaCBiZXR3ZWVuIGRyYWZ0IC8gYWN0aXZlIHZlcnNpb24gaWYgaXQgbWFrZXMgc2Vuc2UuXG5cdFx0aWYgKChpc0FjdGl2ZUVudGl0eSAmJiBzZWxlY3RlZEl0ZW1LZXkgPT09IFwic3dpdGNoVG9EcmFmdFwiKSB8fCAoIWlzQWN0aXZlRW50aXR5ICYmIHNlbGVjdGVkSXRlbUtleSA9PT0gXCJzd2l0Y2hUb0FjdGl2ZVwiKSkge1xuXHRcdFx0dGhpcy5lZGl0Rmxvdy50b2dnbGVEcmFmdEFjdGl2ZShjb250ZXh0KTtcblx0XHR9XG5cdFx0KChldmVudC5nZXRTb3VyY2UoKSBhcyBDb250cm9sKS5nZXRQYXJlbnQoKSBhcyBQb3BvdmVyKS5jbG9zZSgpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEcmFmdEhhbmRsZXI7XG4iXX0=
|