@sapui5/sap.fe.templates 1.109.0 → 1.110.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/README.md +5 -1
- package/package.json +11 -8
- package/src/sap/fe/templates/.library +26 -27
- package/src/sap/fe/templates/AnalyticalListPage/Component.js +1 -7
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +1 -4
- package/src/sap/fe/templates/ListComponent.js +45 -62
- package/src/sap/fe/templates/ListComponent.ts +43 -43
- package/src/sap/fe/templates/ListReport/Component.js +11 -19
- package/src/sap/fe/templates/ListReport/Component.ts +6 -0
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +11 -37
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
- package/src/sap/fe/templates/ListReport/LRMessageStrip.js +196 -0
- package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +216 -0
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +31 -0
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +140 -247
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +49 -14
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js +2 -7
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +21 -108
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +9 -17
- package/src/sap/fe/templates/ListReport/overrides/Share.js +9 -25
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +51 -122
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +1 -23
- package/src/sap/fe/templates/ObjectPage/Component.js +19 -40
- package/src/sap/fe/templates/ObjectPage/Component.ts +9 -2
- package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.js +64 -0
- package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.ts +80 -0
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +21 -58
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +4 -4
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +2 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +173 -459
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +13 -18
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +129 -208
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +62 -14
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +1 -32
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +9 -37
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +1 -7
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +9 -31
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +2 -4
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js +4 -5
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +4 -4
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.ts +3 -3
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +4 -4
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.ts +3 -3
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +16 -21
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +19 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +21 -0
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +4 -5
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +19 -69
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +5 -20
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +6 -6
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +4 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +3 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/FormActions.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderContent.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +4 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +7 -5
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingAvatar.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +3 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +2 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/SideContentCustomContainer.fragment.xml +7 -7
- package/src/sap/fe/templates/TableScroller.js +1 -6
- package/src/sap/fe/templates/library.js +4 -7
- package/src/sap/fe/templates/library.ts +1 -2
- package/src/sap/fe/templates/messagebundle.properties +30 -29
- package/src/sap/fe/templates/messagebundle_bg.properties +2 -2
- package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +1 -1
- package/src/sap/fe/templates/messagebundle_no.properties +3 -3
- package/src/sap/fe/templates/messagebundle_sl.properties +7 -7
- package/ui5.yaml +0 -1
- package/src/sap/fe/templates/Feedback.js +0 -80
- package/src/sap/fe/templates/Feedback.ts +0 -64
- package/src/sap/fe/templates/ObjectPage/view/fragments/FormActionButtons.fragment.xml +0 -82
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +0 -20
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.ts +0 -20
|
@@ -2,19 +2,15 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "sap/fe/
|
|
5
|
+
sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/fe/templates/ListReport/LRMessageStrip", "sap/ui/core/InvisibleMessage", "sap/ui/core/library"], function (ExtensionAPI, ClassSupport, ChartUtils, FilterUtils, $LRMessageStrip, InvisibleMessage, library) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _class;
|
|
9
|
-
|
|
10
9
|
var InvisibleMessageMode = library.InvisibleMessageMode;
|
|
11
10
|
var LRMessageStrip = $LRMessageStrip.LRMessageStrip;
|
|
12
11
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
13
|
-
|
|
14
12
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
15
|
-
|
|
16
13
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
17
|
-
|
|
18
14
|
/**
|
|
19
15
|
* Extension API for list reports in SAP Fiori elements for OData V4.
|
|
20
16
|
*
|
|
@@ -26,13 +22,10 @@ sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "
|
|
|
26
22
|
*/
|
|
27
23
|
var ListReportExtensionAPI = (_dec = defineUI5Class("sap.fe.templates.ListReport.ExtensionAPI"), _dec(_class = /*#__PURE__*/function (_ExtensionAPI) {
|
|
28
24
|
_inheritsLoose(ListReportExtensionAPI, _ExtensionAPI);
|
|
29
|
-
|
|
30
25
|
function ListReportExtensionAPI() {
|
|
31
26
|
return _ExtensionAPI.apply(this, arguments) || this;
|
|
32
27
|
}
|
|
33
|
-
|
|
34
28
|
var _proto = ListReportExtensionAPI.prototype;
|
|
35
|
-
|
|
36
29
|
/**
|
|
37
30
|
* Refreshes the List Report.
|
|
38
31
|
* This method currently only supports triggering the search (by clicking on the GO button)
|
|
@@ -46,7 +39,6 @@ sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "
|
|
|
46
39
|
*/
|
|
47
40
|
_proto.refresh = function refresh() {
|
|
48
41
|
var oFilterBar = this._controller._getFilterBarControl();
|
|
49
|
-
|
|
50
42
|
if (oFilterBar) {
|
|
51
43
|
return oFilterBar.waitForInitialization().then(function () {
|
|
52
44
|
oFilterBar.triggerSearch();
|
|
@@ -56,36 +48,31 @@ sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "
|
|
|
56
48
|
return Promise.resolve();
|
|
57
49
|
}
|
|
58
50
|
}
|
|
51
|
+
|
|
59
52
|
/**
|
|
60
53
|
* Gets the list entries currently selected for the displayed control.
|
|
61
54
|
*
|
|
62
55
|
* @alias sap.fe.templates.ListReport.ExtensionAPI#getSelectedContexts
|
|
63
56
|
* @returns Array containing the selected contexts
|
|
64
57
|
* @public
|
|
65
|
-
|
|
66
|
-
;
|
|
67
|
-
|
|
58
|
+
*/;
|
|
68
59
|
_proto.getSelectedContexts = function getSelectedContexts() {
|
|
69
60
|
var _this$_controller$_ge, _this$_controller$_ge2;
|
|
70
|
-
|
|
71
61
|
var oControl = this._controller._isMultiMode() && ((_this$_controller$_ge = this._controller._getMultiModeControl()) === null || _this$_controller$_ge === void 0 ? void 0 : (_this$_controller$_ge2 = _this$_controller$_ge.getSelectedInnerControl()) === null || _this$_controller$_ge2 === void 0 ? void 0 : _this$_controller$_ge2.content) || this._controller._getTable();
|
|
72
|
-
|
|
73
62
|
if (oControl.isA("sap.ui.mdc.Chart")) {
|
|
74
63
|
var aSelectedContexts = [];
|
|
75
|
-
|
|
76
64
|
if (oControl && oControl.get_chart()) {
|
|
77
65
|
var aSelectedDataPoints = ChartUtils.getChartSelectedData(oControl.get_chart());
|
|
78
|
-
|
|
79
66
|
for (var i = 0; i < aSelectedDataPoints.length; i++) {
|
|
80
67
|
aSelectedContexts.push(aSelectedDataPoints[i].context);
|
|
81
68
|
}
|
|
82
69
|
}
|
|
83
|
-
|
|
84
70
|
return aSelectedContexts;
|
|
85
71
|
} else {
|
|
86
72
|
return oControl && oControl.getSelectedContexts() || [];
|
|
87
73
|
}
|
|
88
74
|
}
|
|
75
|
+
|
|
89
76
|
/**
|
|
90
77
|
* Set the filter values for the given property in the filter bar.
|
|
91
78
|
* The filter values can be either a single value or an array of values.
|
|
@@ -97,21 +84,18 @@ sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "
|
|
|
97
84
|
* @alias sap.fe.templates.ListReport.ExtensionAPI#setFilterValues
|
|
98
85
|
* @returns A promise for asynchronous handling
|
|
99
86
|
* @public
|
|
100
|
-
|
|
101
|
-
;
|
|
102
|
-
|
|
87
|
+
*/;
|
|
103
88
|
_proto.setFilterValues = function setFilterValues(sConditionPath, sOperator, vValues) {
|
|
104
89
|
// The List Report has two filter bars: The filter bar in the header and the filter bar in the "Adapt Filter" dialog;
|
|
105
90
|
// when the dialog is opened, the user is working with that active control: Pass it to the setFilterValues method!
|
|
106
91
|
var filterBar = this._controller._getAdaptationFilterBarControl() || this._controller._getFilterBarControl();
|
|
107
|
-
|
|
108
92
|
if (arguments.length === 2) {
|
|
109
93
|
vValues = sOperator;
|
|
110
94
|
return FilterUtils.setFilterValues(filterBar, sConditionPath, vValues);
|
|
111
95
|
}
|
|
112
|
-
|
|
113
96
|
return FilterUtils.setFilterValues(filterBar, sConditionPath, sOperator, vValues);
|
|
114
97
|
}
|
|
98
|
+
|
|
115
99
|
/**
|
|
116
100
|
* This method converts filter conditions to filters.
|
|
117
101
|
*
|
|
@@ -119,12 +103,9 @@ sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "
|
|
|
119
103
|
* @alias sap.fe.templates.ListReport.ExtensionAPI#createFiltersFromFilterConditions
|
|
120
104
|
* @returns Object containing the converted FilterBar filters.
|
|
121
105
|
* @public
|
|
122
|
-
|
|
123
|
-
;
|
|
124
|
-
|
|
106
|
+
*/;
|
|
125
107
|
_proto.createFiltersFromFilterConditions = function createFiltersFromFilterConditions(mFilterConditions) {
|
|
126
108
|
var oFilterBar = this._controller._getFilterBarControl();
|
|
127
|
-
|
|
128
109
|
return FilterUtils.getFilterInfo(oFilterBar, undefined, mFilterConditions);
|
|
129
110
|
}
|
|
130
111
|
/**
|
|
@@ -134,14 +115,12 @@ sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "
|
|
|
134
115
|
* @alias sap.fe.templates.ListReport.ExtensionAPI#getFilters
|
|
135
116
|
* @returns {{filters: sap.ui.model.Filter[]|undefined, search: string|undefined}} An array of active filters and the search expression.
|
|
136
117
|
* @public
|
|
137
|
-
|
|
138
|
-
;
|
|
139
|
-
|
|
118
|
+
*/;
|
|
140
119
|
_proto.getFilters = function getFilters() {
|
|
141
120
|
var oFilterBar = this._controller._getFilterBarControl();
|
|
142
|
-
|
|
143
121
|
return FilterUtils.getFilters(oFilterBar);
|
|
144
122
|
}
|
|
123
|
+
|
|
145
124
|
/**
|
|
146
125
|
* Provide an option for showing a custom message in the message strip above the list report table.
|
|
147
126
|
*
|
|
@@ -151,23 +130,18 @@ sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport", "
|
|
|
151
130
|
* @param {string[]|string} [tabKey] The tabKey identifying the table where the custom message is displayed. If tabKey is empty, the message is displayed in all tabs . If tabKey = ['1','2'], the message is displayed in tabs 1 and 2 only
|
|
152
131
|
* @param {Function} [onClose] A function that is called when the user closes the message bar.
|
|
153
132
|
* @public
|
|
154
|
-
|
|
155
|
-
;
|
|
156
|
-
|
|
133
|
+
*/;
|
|
157
134
|
_proto.setCustomMessage = function setCustomMessage(message, tabKey, onClose) {
|
|
158
135
|
if (!this.ListReportMessageStrip) {
|
|
159
136
|
this.ListReportMessageStrip = new LRMessageStrip();
|
|
160
137
|
}
|
|
161
|
-
|
|
162
138
|
this.ListReportMessageStrip.showCustomMessage(message, this._controller, tabKey, onClose);
|
|
163
|
-
|
|
164
139
|
if (message !== null && message !== void 0 && message.message) {
|
|
165
140
|
InvisibleMessage.getInstance().announce(message.message, InvisibleMessageMode.Assertive);
|
|
166
141
|
}
|
|
167
142
|
};
|
|
168
|
-
|
|
169
143
|
return ListReportExtensionAPI;
|
|
170
144
|
}(ExtensionAPI)) || _class);
|
|
171
145
|
return ListReportExtensionAPI;
|
|
172
146
|
}, false);
|
|
173
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIiwiZGVmaW5lVUk1Q2xhc3MiLCJyZWZyZXNoIiwib0ZpbHRlckJhciIsIl9jb250cm9sbGVyIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJ3YWl0Rm9ySW5pdGlhbGl6YXRpb24iLCJ0aGVuIiwidHJpZ2dlclNlYXJjaCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIm9Db250cm9sIiwiX2lzTXVsdGlNb2RlIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJfZ2V0VGFibGUiLCJpc0EiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldF9jaGFydCIsImFTZWxlY3RlZERhdGFQb2ludHMiLCJDaGFydFV0aWxzIiwiZ2V0Q2hhcnRTZWxlY3RlZERhdGEiLCJpIiwibGVuZ3RoIiwicHVzaCIsImNvbnRleHQiLCJzZXRGaWx0ZXJWYWx1ZXMiLCJzQ29uZGl0aW9uUGF0aCIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJmaWx0ZXJCYXIiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhcmd1bWVudHMiLCJGaWx0ZXJVdGlscyIsImNyZWF0ZUZpbHRlcnNGcm9tRmlsdGVyQ29uZGl0aW9ucyIsIm1GaWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVySW5mbyIsInVuZGVmaW5lZCIsImdldEZpbHRlcnMiLCJzZXRDdXN0b21NZXNzYWdlIiwibWVzc2FnZSIsInRhYktleSIsIm9uQ2xvc2UiLCJMaXN0UmVwb3J0TWVzc2FnZVN0cmlwIiwiTFJNZXNzYWdlU3RyaXAiLCJzaG93Q3VzdG9tTWVzc2FnZSIsIkludmlzaWJsZU1lc3NhZ2UiLCJnZXRJbnN0YW5jZSIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJFeHRlbnNpb25BUEkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkV4dGVuc2lvbkFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBMUkN1c3RvbU1lc3NhZ2UsIExSTWVzc2FnZVN0cmlwIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTFJNZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcblxuLyoqXG4gKiBFeHRlbnNpb24gQVBJIGZvciBsaXN0IHJlcG9ydHMgaW4gU0FQIEZpb3JpIGVsZW1lbnRzIGZvciBPRGF0YSBWNC5cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LkV4dGVuc2lvbkFQSVxuICogQHB1YmxpY1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGZpbmFsXG4gKiBAc2luY2UgMS43OS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5FeHRlbnNpb25BUElcIilcbmNsYXNzIExpc3RSZXBvcnRFeHRlbnNpb25BUEkgZXh0ZW5kcyBFeHRlbnNpb25BUEkge1xuXHRwcm90ZWN0ZWQgX2NvbnRyb2xsZXIhOiBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0TGlzdFJlcG9ydE1lc3NhZ2VTdHJpcCE6IExSTWVzc2FnZVN0cmlwO1xuXHQvKipcblx0ICogUmVmcmVzaGVzIHRoZSBMaXN0IFJlcG9ydC5cblx0ICogVGhpcyBtZXRob2QgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdHJpZ2dlcmluZyB0aGUgc2VhcmNoIChieSBjbGlja2luZyBvbiB0aGUgR08gYnV0dG9uKVxuXHQgKiBpbiB0aGUgTGlzdCBSZXBvcnQgRmlsdGVyIEJhci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCB0aGUgaW5pdGlhbCBsb2FkIG9yIHRvIHJlZnJlc2ggdGhlXG5cdCAqIGN1cnJlbnRseSBzaG93biBkYXRhIGJhc2VkIG9uIHRoZSBmaWx0ZXJzIGVudGVyZWQgYnkgdGhlIHVzZXIuXG5cdCAqIFBsZWFzZSBub3RlOiBUaGUgUHJvbWlzZSBpcyByZXNvbHZlZCBvbmNlIHRoZSBzZWFyY2ggaXMgdHJpZ2dlcmVkIGFuZCBub3Qgb25jZSB0aGUgZGF0YSBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5FeHRlbnNpb25BUEkjcmVmcmVzaFxuXHQgKiBAcmV0dXJucyBSZXNvbHZlZCBvbmNlIHRoZSBkYXRhIGlzIHJlZnJlc2hlZCBvciByZWplY3RlZCBpZiB0aGUgcmVxdWVzdCBmYWlsZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVmcmVzaCgpIHtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fY29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIGFueTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0cmV0dXJuIG9GaWx0ZXJCYXIud2FpdEZvckluaXRpYWxpemF0aW9uKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9GaWx0ZXJCYXIudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRPRE86IGlmIHRoZXJlIGlzIG5vIGZpbHRlciBiYXIsIG1ha2UgcmVmcmVzaCB3b3JrXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxpc3QgZW50cmllcyBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIHRoZSBkaXNwbGF5ZWQgY29udHJvbC5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5FeHRlbnNpb25BUEkjZ2V0U2VsZWN0ZWRDb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBcnJheSBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBjb250ZXh0c1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRTZWxlY3RlZENvbnRleHRzKCkge1xuXHRcdGNvbnN0IG9Db250cm9sID0gKCh0aGlzLl9jb250cm9sbGVyLl9pc011bHRpTW9kZSgpICYmXG5cdFx0XHR0aGlzLl9jb250cm9sbGVyLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LmNvbnRlbnQpIHx8XG5cdFx0XHR0aGlzLl9jb250cm9sbGVyLl9nZXRUYWJsZSgpKSBhcyBhbnk7XG5cdFx0aWYgKG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gW107XG5cdFx0XHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0X2NoYXJ0KCkpIHtcblx0XHRcdFx0Y29uc3QgYVNlbGVjdGVkRGF0YVBvaW50cyA9IENoYXJ0VXRpbHMuZ2V0Q2hhcnRTZWxlY3RlZERhdGEob0NvbnRyb2wuZ2V0X2NoYXJ0KCkpO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWxlY3RlZERhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cy5wdXNoKGFTZWxlY3RlZERhdGFQb2ludHNbaV0uY29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhU2VsZWN0ZWRDb250ZXh0cztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCkpIHx8IFtdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gW3NPcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgKG9wdGlvbmFsKSAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqIEBwYXJhbSB2VmFsdWVzIFRoZSB2YWx1ZXMgdG8gYmUgYXBwbGllZFxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LkV4dGVuc2lvbkFQSSNzZXRGaWx0ZXJWYWx1ZXNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0RmlsdGVyVmFsdWVzKFxuXHRcdHNDb25kaXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0c09wZXJhdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dlZhbHVlcz86IHVuZGVmaW5lZCB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmdbXSB8IG51bWJlcltdIHwgYm9vbGVhbltdXG5cdCkge1xuXHRcdC8vIFRoZSBMaXN0IFJlcG9ydCBoYXMgdHdvIGZpbHRlciBiYXJzOiBUaGUgZmlsdGVyIGJhciBpbiB0aGUgaGVhZGVyIGFuZCB0aGUgZmlsdGVyIGJhciBpbiB0aGUgXCJBZGFwdCBGaWx0ZXJcIiBkaWFsb2c7XG5cdFx0Ly8gd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5lZCwgdGhlIHVzZXIgaXMgd29ya2luZyB3aXRoIHRoYXQgYWN0aXZlIGNvbnRyb2w6IFBhc3MgaXQgdG8gdGhlIHNldEZpbHRlclZhbHVlcyBtZXRob2QhXG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fY29udHJvbGxlci5fZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2woKSB8fCB0aGlzLl9jb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcblx0XHRcdHZWYWx1ZXMgPSBzT3BlcmF0b3I7XG5cdFx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuc2V0RmlsdGVyVmFsdWVzKGZpbHRlckJhciwgc0NvbmRpdGlvblBhdGgsIHZWYWx1ZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXMoZmlsdGVyQmFyLCBzQ29uZGl0aW9uUGF0aCwgc09wZXJhdG9yLCB2VmFsdWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBmaWx0ZXIgY29uZGl0aW9ucyB0byBmaWx0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gbUZpbHRlckNvbmRpdGlvbnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuRXh0ZW5zaW9uQVBJI2NyZWF0ZUZpbHRlcnNGcm9tRmlsdGVyQ29uZGl0aW9uc1xuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0aGUgY29udmVydGVkIEZpbHRlckJhciBmaWx0ZXJzLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRjcmVhdGVGaWx0ZXJzRnJvbUZpbHRlckNvbmRpdGlvbnMobUZpbHRlckNvbmRpdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9jb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmdldEZpbHRlckluZm8ob0ZpbHRlckJhciwgdW5kZWZpbmVkLCBtRmlsdGVyQ29uZGl0aW9ucyk7XG5cdH1cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGFsbCB0aGUgbW9kZWwgZmlsdGVycyBmcm9tIHRoZSBmaWx0ZXIgYmFyIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmVcblx0ICogYWxvbmcgd2l0aCB0aGUgc2VhcmNoIGV4cHJlc3Npb24uXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuRXh0ZW5zaW9uQVBJI2dldEZpbHRlcnNcblx0ICogQHJldHVybnMge3tmaWx0ZXJzOiBzYXAudWkubW9kZWwuRmlsdGVyW118dW5kZWZpbmVkLCBzZWFyY2g6IHN0cmluZ3x1bmRlZmluZWR9fSBBbiBhcnJheSBvZiBhY3RpdmUgZmlsdGVycyBhbmQgdGhlIHNlYXJjaCBleHByZXNzaW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRGaWx0ZXJzKCkge1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9jb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmdldEZpbHRlcnMob0ZpbHRlckJhcik7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZSBhbiBvcHRpb24gZm9yIHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBzdHJpcCBhYm92ZSB0aGUgbGlzdCByZXBvcnQgdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbbWVzc2FnZV0gQ3VzdG9tIG1lc3NhZ2UgYWxvbmcgd2l0aCB0aGUgbWVzc2FnZSB0eXBlIHRvIGJlIHNldCBvbiB0aGUgdGFibGUuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlLm1lc3NhZ2UgTWVzc2FnZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkLlxuXHQgKiBAcGFyYW0ge3NhcC51aS5jb3JlLk1lc3NhZ2VUeXBlfSBtZXNzYWdlLnR5cGUgSW5kaWNhdGVzIHRoZSB0eXBlIG9mIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSB7c3RyaW5nW118c3RyaW5nfSBbdGFiS2V5XSBUaGUgdGFiS2V5IGlkZW50aWZ5aW5nIHRoZSB0YWJsZSB3aGVyZSB0aGUgY3VzdG9tIG1lc3NhZ2UgaXMgZGlzcGxheWVkLiBJZiB0YWJLZXkgaXMgZW1wdHksIHRoZSBtZXNzYWdlIGlzIGRpc3BsYXllZCBpbiBhbGwgdGFicyAuIElmIHRhYktleSA9IFsnMScsJzInXSwgdGhlIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGluIHRhYnMgMSBhbmQgMiBvbmx5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkNsb3NlXSBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xvc2VzIHRoZSBtZXNzYWdlIGJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0Q3VzdG9tTWVzc2FnZShtZXNzYWdlOiBMUkN1c3RvbU1lc3NhZ2UgfCB1bmRlZmluZWQsIHRhYktleT86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgb25DbG9zZT86IEZ1bmN0aW9uKSB7XG5cdFx0aWYgKCF0aGlzLkxpc3RSZXBvcnRNZXNzYWdlU3RyaXApIHtcblx0XHRcdHRoaXMuTGlzdFJlcG9ydE1lc3NhZ2VTdHJpcCA9IG5ldyBMUk1lc3NhZ2VTdHJpcCgpO1xuXHRcdH1cblx0XHR0aGlzLkxpc3RSZXBvcnRNZXNzYWdlU3RyaXAuc2hvd0N1c3RvbU1lc3NhZ2UobWVzc2FnZSwgdGhpcy5fY29udHJvbGxlciwgdGFiS2V5LCBvbkNsb3NlKTtcblx0XHRpZiAobWVzc2FnZT8ubWVzc2FnZSkge1xuXHRcdFx0SW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpLmFubm91bmNlKG1lc3NhZ2UubWVzc2FnZSwgSW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydEV4dGVuc2lvbkFQSTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFFTUEsc0IsV0FETEMsY0FBYyxDQUFDLDBDQUFELEM7Ozs7Ozs7OztJQUlkO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7V0FDQ0MsTyxHQUFBLG1CQUFVO01BQ1QsSUFBTUMsVUFBVSxHQUFHLEtBQUtDLFdBQUwsQ0FBaUJDLG9CQUFqQixFQUFuQjs7TUFDQSxJQUFJRixVQUFKLEVBQWdCO1FBQ2YsT0FBT0EsVUFBVSxDQUFDRyxxQkFBWCxHQUFtQ0MsSUFBbkMsQ0FBd0MsWUFBWTtVQUMxREosVUFBVSxDQUFDSyxhQUFYO1FBQ0EsQ0FGTSxDQUFQO01BR0EsQ0FKRCxNQUlPO1FBQ047UUFDQSxPQUFPQyxPQUFPLENBQUNDLE9BQVIsRUFBUDtNQUNBO0lBQ0Q7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0NDLG1CLEdBQUEsK0JBQXNCO01BQUE7O01BQ3JCLElBQU1DLFFBQVEsR0FBSyxLQUFLUixXQUFMLENBQWlCUyxZQUFqQixnQ0FDbEIsS0FBS1QsV0FBTCxDQUFpQlUsb0JBQWpCLEVBRGtCLG9GQUNsQixzQkFBeUNDLHVCQUF6QyxFQURrQiwyREFDbEIsdUJBQW9FQyxPQURsRCxDQUFELElBRWpCLEtBQUta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
|
|
147
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIiwiZGVmaW5lVUk1Q2xhc3MiLCJyZWZyZXNoIiwib0ZpbHRlckJhciIsIl9jb250cm9sbGVyIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJ3YWl0Rm9ySW5pdGlhbGl6YXRpb24iLCJ0aGVuIiwidHJpZ2dlclNlYXJjaCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIm9Db250cm9sIiwiX2lzTXVsdGlNb2RlIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJfZ2V0VGFibGUiLCJpc0EiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldF9jaGFydCIsImFTZWxlY3RlZERhdGFQb2ludHMiLCJDaGFydFV0aWxzIiwiZ2V0Q2hhcnRTZWxlY3RlZERhdGEiLCJpIiwibGVuZ3RoIiwicHVzaCIsImNvbnRleHQiLCJzZXRGaWx0ZXJWYWx1ZXMiLCJzQ29uZGl0aW9uUGF0aCIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJmaWx0ZXJCYXIiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhcmd1bWVudHMiLCJGaWx0ZXJVdGlscyIsImNyZWF0ZUZpbHRlcnNGcm9tRmlsdGVyQ29uZGl0aW9ucyIsIm1GaWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVySW5mbyIsInVuZGVmaW5lZCIsImdldEZpbHRlcnMiLCJzZXRDdXN0b21NZXNzYWdlIiwibWVzc2FnZSIsInRhYktleSIsIm9uQ2xvc2UiLCJMaXN0UmVwb3J0TWVzc2FnZVN0cmlwIiwiTFJNZXNzYWdlU3RyaXAiLCJzaG93Q3VzdG9tTWVzc2FnZSIsIkludmlzaWJsZU1lc3NhZ2UiLCJnZXRJbnN0YW5jZSIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJFeHRlbnNpb25BUEkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkV4dGVuc2lvbkFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IExSQ3VzdG9tTWVzc2FnZSwgTFJNZXNzYWdlU3RyaXAgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xSTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuXG4vKipcbiAqIEV4dGVuc2lvbiBBUEkgZm9yIGxpc3QgcmVwb3J0cyBpbiBTQVAgRmlvcmkgZWxlbWVudHMgZm9yIE9EYXRhIFY0LlxuICpcbiAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuRXh0ZW5zaW9uQVBJXG4gKiBAcHVibGljXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAZmluYWxcbiAqIEBzaW5jZSAxLjc5LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LkV4dGVuc2lvbkFQSVwiKVxuY2xhc3MgTGlzdFJlcG9ydEV4dGVuc2lvbkFQSSBleHRlbmRzIEV4dGVuc2lvbkFQSSB7XG5cdHByb3RlY3RlZCBfY29udHJvbGxlciE6IExpc3RSZXBvcnRDb250cm9sbGVyO1xuXHRMaXN0UmVwb3J0TWVzc2FnZVN0cmlwITogTFJNZXNzYWdlU3RyaXA7XG5cdC8qKlxuXHQgKiBSZWZyZXNoZXMgdGhlIExpc3QgUmVwb3J0LlxuXHQgKiBUaGlzIG1ldGhvZCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB0cmlnZ2VyaW5nIHRoZSBzZWFyY2ggKGJ5IGNsaWNraW5nIG9uIHRoZSBHTyBidXR0b24pXG5cdCAqIGluIHRoZSBMaXN0IFJlcG9ydCBGaWx0ZXIgQmFyLiBJdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IHRoZSBpbml0aWFsIGxvYWQgb3IgdG8gcmVmcmVzaCB0aGVcblx0ICogY3VycmVudGx5IHNob3duIGRhdGEgYmFzZWQgb24gdGhlIGZpbHRlcnMgZW50ZXJlZCBieSB0aGUgdXNlci5cblx0ICogUGxlYXNlIG5vdGU6IFRoZSBQcm9taXNlIGlzIHJlc29sdmVkIG9uY2UgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQgYW5kIG5vdCBvbmNlIHRoZSBkYXRhIGlzIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LkV4dGVuc2lvbkFQSSNyZWZyZXNoXG5cdCAqIEByZXR1cm5zIFJlc29sdmVkIG9uY2UgdGhlIGRhdGEgaXMgcmVmcmVzaGVkIG9yIHJlamVjdGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxlZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZWZyZXNoKCkge1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9jb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgYW55O1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRyZXR1cm4gb0ZpbHRlckJhci53YWl0Rm9ySW5pdGlhbGl6YXRpb24oKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0ZpbHRlckJhci50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVE9ETzogaWYgdGhlcmUgaXMgbm8gZmlsdGVyIGJhciwgbWFrZSByZWZyZXNoIHdvcmtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGlzdCBlbnRyaWVzIGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgdGhlIGRpc3BsYXllZCBjb250cm9sLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LkV4dGVuc2lvbkFQSSNnZXRTZWxlY3RlZENvbnRleHRzXG5cdCAqIEByZXR1cm5zIEFycmF5IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIGNvbnRleHRzXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldFNlbGVjdGVkQ29udGV4dHMoKSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSAoKHRoaXMuX2NvbnRyb2xsZXIuX2lzTXVsdGlNb2RlKCkgJiZcblx0XHRcdHRoaXMuX2NvbnRyb2xsZXIuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudCkgfHxcblx0XHRcdHRoaXMuX2NvbnRyb2xsZXIuX2dldFRhYmxlKCkpIGFzIGFueTtcblx0XHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSBbXTtcblx0XHRcdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRfY2hhcnQoKSkge1xuXHRcdFx0XHRjb25zdCBhU2VsZWN0ZWREYXRhUG9pbnRzID0gQ2hhcnRVdGlscy5nZXRDaGFydFNlbGVjdGVkRGF0YShvQ29udHJvbC5nZXRfY2hhcnQoKSk7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbGVjdGVkRGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzLnB1c2goYVNlbGVjdGVkRGF0YVBvaW50c1tpXS5jb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFTZWxlY3RlZENvbnRleHRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sICYmIG9Db250cm9sLmdldFNlbGVjdGVkQ29udGV4dHMoKSkgfHwgW107XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgZmlsdGVyIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBUaGUgZmlsdGVyIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIG9yIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0ICogRWFjaCBmaWx0ZXIgdmFsdWUgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBhIHByaW1pdGl2ZSB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHNDb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSBbc09wZXJhdG9yXSBUaGUgb3BlcmF0b3IgdG8gYmUgdXNlZCAob3B0aW9uYWwpIC0gaWYgbm90IHNldCwgdGhlIGRlZmF1bHQgb3BlcmF0b3IgKEVRKSB3aWxsIGJlIHVzZWRcblx0ICogQHBhcmFtIHZWYWx1ZXMgVGhlIHZhbHVlcyB0byBiZSBhcHBsaWVkXG5cdCAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuRXh0ZW5zaW9uQVBJI3NldEZpbHRlclZhbHVlc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZXRGaWx0ZXJWYWx1ZXMoXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHRzT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2VmFsdWVzPzogdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0KSB7XG5cdFx0Ly8gVGhlIExpc3QgUmVwb3J0IGhhcyB0d28gZmlsdGVyIGJhcnM6IFRoZSBmaWx0ZXIgYmFyIGluIHRoZSBoZWFkZXIgYW5kIHRoZSBmaWx0ZXIgYmFyIGluIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZztcblx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLCB0aGUgdXNlciBpcyB3b3JraW5nIHdpdGggdGhhdCBhY3RpdmUgY29udHJvbDogUGFzcyBpdCB0byB0aGUgc2V0RmlsdGVyVmFsdWVzIG1ldGhvZCFcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9jb250cm9sbGVyLl9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCgpIHx8IHRoaXMuX2NvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvcjtcblx0XHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXMoZmlsdGVyQmFyLCBzQ29uZGl0aW9uUGF0aCwgdlZhbHVlcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLnNldEZpbHRlclZhbHVlcyhmaWx0ZXJCYXIsIHNDb25kaXRpb25QYXRoLCBzT3BlcmF0b3IsIHZWYWx1ZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGZpbHRlciBjb25kaXRpb25zIHRvIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBtRmlsdGVyQ29uZGl0aW9ucyBNYXAgY29udGFpbmluZyB0aGUgZmlsdGVyIGNvbmRpdGlvbnMgb2YgdGhlIEZpbHRlckJhci5cblx0ICogQGFsaWFzIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5FeHRlbnNpb25BUEkjY3JlYXRlRmlsdGVyc0Zyb21GaWx0ZXJDb25kaXRpb25zXG5cdCAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgRmlsdGVyQmFyIGZpbHRlcnMuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGNyZWF0ZUZpbHRlcnNGcm9tRmlsdGVyQ29uZGl0aW9ucyhtRmlsdGVyQ29uZGl0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2NvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0RmlsdGVySW5mbyhvRmlsdGVyQmFyLCB1bmRlZmluZWQsIG1GaWx0ZXJDb25kaXRpb25zKTtcblx0fVxuXHQvKipcblx0ICogUHJvdmlkZXMgYWxsIHRoZSBtb2RlbCBmaWx0ZXJzIGZyb20gdGhlIGZpbHRlciBiYXIgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZVxuXHQgKiBhbG9uZyB3aXRoIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5FeHRlbnNpb25BUEkjZ2V0RmlsdGVyc1xuXHQgKiBAcmV0dXJucyB7e2ZpbHRlcnM6IHNhcC51aS5tb2RlbC5GaWx0ZXJbXXx1bmRlZmluZWQsIHNlYXJjaDogc3RyaW5nfHVuZGVmaW5lZH19IEFuIGFycmF5IG9mIGFjdGl2ZSBmaWx0ZXJzIGFuZCB0aGUgc2VhcmNoIGV4cHJlc3Npb24uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlcnMoKSB7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2NvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0RmlsdGVycyhvRmlsdGVyQmFyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlIGFuIG9wdGlvbiBmb3Igc2hvd2luZyBhIGN1c3RvbSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIHN0cmlwIGFib3ZlIHRoZSBsaXN0IHJlcG9ydCB0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IFttZXNzYWdlXSBDdXN0b20gbWVzc2FnZSBhbG9uZyB3aXRoIHRoZSBtZXNzYWdlIHR5cGUgdG8gYmUgc2V0IG9uIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UubWVzc2FnZSBNZXNzYWdlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQuXG5cdCAqIEBwYXJhbSB7c2FwLnVpLmNvcmUuTWVzc2FnZVR5cGV9IG1lc3NhZ2UudHlwZSBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgbWVzc2FnZS5cblx0ICogQHBhcmFtIHtzdHJpbmdbXXxzdHJpbmd9IFt0YWJLZXldIFRoZSB0YWJLZXkgaWRlbnRpZnlpbmcgdGhlIHRhYmxlIHdoZXJlIHRoZSBjdXN0b20gbWVzc2FnZSBpcyBkaXNwbGF5ZWQuIElmIHRhYktleSBpcyBlbXB0eSwgdGhlIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGluIGFsbCB0YWJzIC4gSWYgdGFiS2V5ID0gWycxJywnMiddLCB0aGUgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgaW4gdGFicyAxIGFuZCAyIG9ubHlcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQ2xvc2VdIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgYmFyLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZXRDdXN0b21NZXNzYWdlKG1lc3NhZ2U6IExSQ3VzdG9tTWVzc2FnZSB8IHVuZGVmaW5lZCwgdGFiS2V5Pzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBvbkNsb3NlPzogRnVuY3Rpb24pIHtcblx0XHRpZiAoIXRoaXMuTGlzdFJlcG9ydE1lc3NhZ2VTdHJpcCkge1xuXHRcdFx0dGhpcy5MaXN0UmVwb3J0TWVzc2FnZVN0cmlwID0gbmV3IExSTWVzc2FnZVN0cmlwKCk7XG5cdFx0fVxuXHRcdHRoaXMuTGlzdFJlcG9ydE1lc3NhZ2VTdHJpcC5zaG93Q3VzdG9tTWVzc2FnZShtZXNzYWdlLCB0aGlzLl9jb250cm9sbGVyLCB0YWJLZXksIG9uQ2xvc2UpO1xuXHRcdGlmIChtZXNzYWdlPy5tZXNzYWdlKSB7XG5cdFx0XHRJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCkuYW5ub3VuY2UobWVzc2FnZS5tZXNzYWdlLCBJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUkEsSUFVTUEsc0JBQXNCLFdBRDNCQyxjQUFjLENBQUMsMENBQTBDLENBQUM7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBSTFEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFWQyxPQVdBQyxPQUFPLEdBQVAsbUJBQVU7TUFDVCxJQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUNDLG9CQUFvQixFQUFTO01BQ2pFLElBQUlGLFVBQVUsRUFBRTtRQUNmLE9BQU9BLFVBQVUsQ0FBQ0cscUJBQXFCLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDLFlBQVk7VUFDMURKLFVBQVUsQ0FBQ0ssYUFBYSxFQUFFO1FBQzNCLENBQUMsQ0FBQztNQUNILENBQUMsTUFBTTtRQUNOO1FBQ0EsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLEVBQUU7TUFDekI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsT0FPQUMsbUJBQW1CLEdBQW5CLCtCQUFzQjtNQUFBO01BQ3JCLElBQU1DLFFBQVEsR0FBSyxJQUFJLENBQUNSLFdBQVcsQ0FBQ1MsWUFBWSxFQUFFLDhCQUNqRCxJQUFJLENBQUNULFdBQVcsQ0FB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
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import ExtensionAPI from "sap/fe/core/ExtensionAPI";
|
|
2
2
|
import { defineUI5Class } from "sap/fe/core/helpers/ClassSupport";
|
|
3
|
-
import { LRCustomMessage, LRMessageStrip } from "sap/fe/core/helpers/LRMessageStrip";
|
|
4
3
|
import ChartUtils from "sap/fe/macros/chart/ChartUtils";
|
|
5
4
|
import FilterUtils from "sap/fe/macros/filter/FilterUtils";
|
|
6
5
|
import type ListReportController from "sap/fe/templates/ListReport/ListReportController.controller";
|
|
6
|
+
import { LRCustomMessage, LRMessageStrip } from "sap/fe/templates/ListReport/LRMessageStrip";
|
|
7
7
|
import InvisibleMessage from "sap/ui/core/InvisibleMessage";
|
|
8
8
|
import { InvisibleMessageMode } from "sap/ui/core/library";
|
|
9
9
|
|
|
@@ -0,0 +1,196 @@
|
|
|
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/ui/core/Core", "sap/ui/core/message/Message"], function (Core, Message) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var _exports = {};
|
|
9
|
+
var LRMessageStrip = /*#__PURE__*/function () {
|
|
10
|
+
function LRMessageStrip() {
|
|
11
|
+
var messageManager = Core.getMessageManager();
|
|
12
|
+
this.customMessageInfo = {
|
|
13
|
+
messageManagerDataBinding: messageManager.getMessageModel().bindList("/"),
|
|
14
|
+
multiModeControlMessagesMap: {}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
_exports.LRMessageStrip = LRMessageStrip;
|
|
18
|
+
var _proto = LRMessageStrip.prototype;
|
|
19
|
+
_proto.getCustomMessageInfo = function getCustomMessageInfo() {
|
|
20
|
+
return this.customMessageInfo;
|
|
21
|
+
};
|
|
22
|
+
_proto.destroy = function destroy() {
|
|
23
|
+
this.customMessageInfo.messageManagerDataBinding.detachChange(this._eventHandlerCustomMessage, this);
|
|
24
|
+
};
|
|
25
|
+
_proto._getMessagesWithSameTargetThanCustomMessage = function _getMessagesWithSameTargetThanCustomMessage() {
|
|
26
|
+
var _this = this;
|
|
27
|
+
var messageManager = Core.getMessageManager();
|
|
28
|
+
return messageManager.getMessageModel().getData().filter(function (msg) {
|
|
29
|
+
var _this$customMessageIn;
|
|
30
|
+
return msg.getTargets()[0] === ((_this$customMessageIn = _this.customMessageInfo.currentMessage) === null || _this$customMessageIn === void 0 ? void 0 : _this$customMessageIn.getTargets()[0]) && msg !== _this.customMessageInfo.currentMessage;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* MessageManager Event Handler responsible to add or remove the current customMessage.
|
|
36
|
+
*
|
|
37
|
+
* @alias sap.fe.core.helpers.LRMessageStrip#_eventHandlerCustomMessage
|
|
38
|
+
* @private
|
|
39
|
+
*/;
|
|
40
|
+
_proto._eventHandlerCustomMessage = function _eventHandlerCustomMessage() {
|
|
41
|
+
var _this2 = this;
|
|
42
|
+
var messageManager = Core.getMessageManager();
|
|
43
|
+
if (this.customMessageInfo.currentMessage) {
|
|
44
|
+
var aMessageWithSameTargetThanCustomMessage = this._getMessagesWithSameTargetThanCustomMessage();
|
|
45
|
+
var isCustomMessageInMessageManager = !!messageManager.getMessageModel().getData().find(function (msg) {
|
|
46
|
+
return msg === _this2.customMessageInfo.currentMessage;
|
|
47
|
+
});
|
|
48
|
+
if (aMessageWithSameTargetThanCustomMessage.length > 0 && isCustomMessageInMessageManager) {
|
|
49
|
+
var _this$customMessageIn2;
|
|
50
|
+
//if there are other messages with the same message on the MessageManager and the customMessage
|
|
51
|
+
//then we need to remove the customeMessage from the MessageManager
|
|
52
|
+
messageManager.removeMessages([(_this$customMessageIn2 = this.customMessageInfo) === null || _this$customMessageIn2 === void 0 ? void 0 : _this$customMessageIn2.currentMessage]);
|
|
53
|
+
} else if (aMessageWithSameTargetThanCustomMessage.length === 0 && !isCustomMessageInMessageManager) {
|
|
54
|
+
messageManager.addMessages([this.customMessageInfo.currentMessage]);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* This function manages the lifecycle of the custom message (populates the customMessageInfo object, attaches an event to the message manager and inserts a message).
|
|
61
|
+
*
|
|
62
|
+
* @param event Event object (optional).
|
|
63
|
+
* @param oData Parameters
|
|
64
|
+
* @param oData.message The LRCustomMessage to be used to generate the message object
|
|
65
|
+
* @param oData.table The table targeted by the message
|
|
66
|
+
* @param oData.skipMessageManagerUpdate Should skip to insert the message in the MessageManager
|
|
67
|
+
* @alias sap.fe.core.helpers.LRMessageStrip#createCustomMessage
|
|
68
|
+
* @private
|
|
69
|
+
*/;
|
|
70
|
+
_proto.createCustomMessage = function createCustomMessage(event, oData) {
|
|
71
|
+
var _table$getRowBinding, _customMessageMap$tab;
|
|
72
|
+
var message = oData.message;
|
|
73
|
+
var table = oData.table;
|
|
74
|
+
var skipMessageManagerUpdate = oData.skipMessageManagerUpdate;
|
|
75
|
+
var rowBindingPath = (_table$getRowBinding = table.getRowBinding()) === null || _table$getRowBinding === void 0 ? void 0 : _table$getRowBinding.getPath();
|
|
76
|
+
var messageManager = Core.getMessageManager();
|
|
77
|
+
var customMessageMap = this.customMessageInfo.multiModeControlMessagesMap;
|
|
78
|
+
customMessageMap[table.getId()] = message;
|
|
79
|
+
if (!rowBindingPath) {
|
|
80
|
+
table.attachEventOnce("bindingUpdated", oData, this.createCustomMessage, this);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if ((_customMessageMap$tab = customMessageMap[table.getId()]) !== null && _customMessageMap$tab !== void 0 && _customMessageMap$tab.onClose) {
|
|
84
|
+
var _customMessageMap$tab2;
|
|
85
|
+
table.getDataStateIndicator().detachEvent("close", (_customMessageMap$tab2 = customMessageMap[table.getId()]) === null || _customMessageMap$tab2 === void 0 ? void 0 : _customMessageMap$tab2.onClose, this);
|
|
86
|
+
}
|
|
87
|
+
var processor = table.getModel();
|
|
88
|
+
var oMessage = message ? new Message({
|
|
89
|
+
message: message.message,
|
|
90
|
+
type: message.type,
|
|
91
|
+
target: [rowBindingPath],
|
|
92
|
+
persistent: true,
|
|
93
|
+
processor: processor
|
|
94
|
+
}) : null;
|
|
95
|
+
this.customMessageInfo.messageManagerDataBinding.detachChange(this._eventHandlerCustomMessage, this);
|
|
96
|
+
if (!skipMessageManagerUpdate) {
|
|
97
|
+
if (this.customMessageInfo.currentMessage) {
|
|
98
|
+
messageManager.removeMessages([this.customMessageInfo.currentMessage]);
|
|
99
|
+
}
|
|
100
|
+
if (oMessage) {
|
|
101
|
+
this.customMessageInfo.currentMessage = oMessage;
|
|
102
|
+
} else {
|
|
103
|
+
delete this.customMessageInfo.currentMessage;
|
|
104
|
+
}
|
|
105
|
+
if (oMessage && this._getMessagesWithSameTargetThanCustomMessage().length === 0) {
|
|
106
|
+
messageManager.addMessages([oMessage]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
this.customMessageInfo.messageManagerDataBinding.attachChange(this._eventHandlerCustomMessage, this);
|
|
110
|
+
this.attachDataStateIndicatorCloseEvent(table, customMessageMap, message === null || message === void 0 ? void 0 : message.onClose);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* This function attaches the onClose event function to the dataStateIndicator.
|
|
115
|
+
*
|
|
116
|
+
* @param table The table associated with the dataStateIndicator
|
|
117
|
+
* @param customMessageMap The CustomMessageMap object
|
|
118
|
+
* @param fnOnClose A function to be attached to the "close" event
|
|
119
|
+
* @alias sap.fe.core.helpers.LRMessageStrip#attachDataStateIndicatorCloseEvent
|
|
120
|
+
* @private
|
|
121
|
+
*/;
|
|
122
|
+
_proto.attachDataStateIndicatorCloseEvent = function attachDataStateIndicatorCloseEvent(table, customMessageMap, fnOnClose) {
|
|
123
|
+
if (fnOnClose) {
|
|
124
|
+
table.getDataStateIndicator().attachEventOnce("close", fnOnClose, this);
|
|
125
|
+
}
|
|
126
|
+
//When closing the the messageStrip, the associated message is removed
|
|
127
|
+
table.getDataStateIndicator().attachEventOnce("close", function () {
|
|
128
|
+
delete customMessageMap[table.getId()];
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* MultipleModeControl Event handler responsible for displaying the correct custom message when a specific tab is selected.
|
|
134
|
+
*
|
|
135
|
+
* @alias sap.fe.core.helpers.LRMessageStrip#onSelectMultipleModeControl
|
|
136
|
+
* @private
|
|
137
|
+
*/;
|
|
138
|
+
_proto.onSelectMultipleModeControl = function onSelectMultipleModeControl(event, controller) {
|
|
139
|
+
var table = controller._getTable();
|
|
140
|
+
var message = this.customMessageInfo.multiModeControlMessagesMap[table.getId()];
|
|
141
|
+
this.createCustomMessage(null, {
|
|
142
|
+
message: message,
|
|
143
|
+
table: table
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Provide an option for showing a custom message in the message bar above the list report table.
|
|
149
|
+
*
|
|
150
|
+
* @param {object} [message] Custom message along with the message type to be set on the table.
|
|
151
|
+
* @param {string} [message.message] Message string to be displayed.
|
|
152
|
+
* @param {sap.ui.core.MessageType} [message.type] Indicates the type of message.
|
|
153
|
+
* @param {ListReportController} [controller] Controller of the current view.
|
|
154
|
+
* @param {string[]|string} [tabKey] The entitySet identifying the table in which to display the custom message.
|
|
155
|
+
* @param {Function} [onClose] A function that is called when the user closes the message bar.
|
|
156
|
+
* @private
|
|
157
|
+
*/;
|
|
158
|
+
_proto.showCustomMessage = function showCustomMessage(message, controller, tabKey, onClose) {
|
|
159
|
+
var _this3 = this;
|
|
160
|
+
var _tabKey = Array.isArray(tabKey) ? tabKey : [tabKey];
|
|
161
|
+
var isMultiMode = controller._isMultiMode();
|
|
162
|
+
var table;
|
|
163
|
+
if (message) {
|
|
164
|
+
message.onClose = onClose;
|
|
165
|
+
}
|
|
166
|
+
if (isMultiMode) {
|
|
167
|
+
var multipleModeControl = controller._getMultiModeControl();
|
|
168
|
+
//we fisrt need to detach the select event to prevent multiple attachments.
|
|
169
|
+
multipleModeControl.detachEvent("select", this.onSelectMultipleModeControl, this);
|
|
170
|
+
multipleModeControl.attachEvent("select", controller, this.onSelectMultipleModeControl, this);
|
|
171
|
+
multipleModeControl.getAllInnerControls(true).forEach(function (innerControl, index) {
|
|
172
|
+
if (innerControl.isA("sap.fe.macros.table.TableAPI")) {
|
|
173
|
+
if (!tabKey || _tabKey.indexOf(index.toString()) !== -1) {
|
|
174
|
+
table = innerControl.getContent();
|
|
175
|
+
_this3.createCustomMessage(null, {
|
|
176
|
+
message: message,
|
|
177
|
+
table: table,
|
|
178
|
+
skipMessageManagerUpdate: multipleModeControl.getSelectedInnerControl() !== innerControl
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
table = controller._getTable();
|
|
186
|
+
this.createCustomMessage(null, {
|
|
187
|
+
message: message,
|
|
188
|
+
table: table
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
return LRMessageStrip;
|
|
192
|
+
}();
|
|
193
|
+
_exports.LRMessageStrip = LRMessageStrip;
|
|
194
|
+
return _exports;
|
|
195
|
+
}, false);
|
|
196
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMUk1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VNYW5hZ2VyIiwiQ29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiY3VzdG9tTWVzc2FnZUluZm8iLCJtZXNzYWdlTWFuYWdlckRhdGFCaW5kaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiYmluZExpc3QiLCJtdWx0aU1vZGVDb250cm9sTWVzc2FnZXNNYXAiLCJnZXRDdXN0b21NZXNzYWdlSW5mbyIsImRlc3Ryb3kiLCJkZXRhY2hDaGFuZ2UiLCJfZXZlbnRIYW5kbGVyQ3VzdG9tTWVzc2FnZSIsIl9nZXRNZXNzYWdlc1dpdGhTYW1lVGFyZ2V0VGhhbkN1c3RvbU1lc3NhZ2UiLCJnZXREYXRhIiwiZmlsdGVyIiwibXNnIiwiZ2V0VGFyZ2V0cyIsImN1cnJlbnRNZXNzYWdlIiwiYU1lc3NhZ2VXaXRoU2FtZVRhcmdldFRoYW5DdXN0b21NZXNzYWdlIiwiaXNDdXN0b21NZXNzYWdlSW5NZXNzYWdlTWFuYWdlciIsImZpbmQiLCJsZW5ndGgiLCJyZW1vdmVNZXNzYWdlcyIsImFkZE1lc3NhZ2VzIiwiY3JlYXRlQ3VzdG9tTWVzc2FnZSIsImV2ZW50Iiwib0RhdGEiLCJtZXNzYWdlIiwidGFibGUiLCJza2lwTWVzc2FnZU1hbmFnZXJVcGRhdGUiLCJyb3dCaW5kaW5nUGF0aCIsImdldFJvd0JpbmRpbmciLCJnZXRQYXRoIiwiY3VzdG9tTWVzc2FnZU1hcCIsImdldElkIiwiYXR0YWNoRXZlbnRPbmNlIiwib25DbG9zZSIsImdldERhdGFTdGF0ZUluZGljYXRvciIsImRldGFjaEV2ZW50IiwicHJvY2Vzc29yIiwiZ2V0TW9kZWwiLCJvTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0eXBlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImF0dGFjaENoYW5nZSIsImF0dGFjaERhdGFTdGF0ZUluZGljYXRvckNsb3NlRXZlbnQiLCJmbk9uQ2xvc2UiLCJvblNlbGVjdE11bHRpcGxlTW9kZUNvbnRyb2wiLCJjb250cm9sbGVyIiwiX2dldFRhYmxlIiwic2hvd0N1c3RvbU1lc3NhZ2UiLCJ0YWJLZXkiLCJfdGFiS2V5IiwiQXJyYXkiLCJpc0FycmF5IiwiaXNNdWx0aU1vZGUiLCJfaXNNdWx0aU1vZGUiLCJtdWx0aXBsZU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJhdHRhY2hFdmVudCIsImdldEFsbElubmVyQ29udHJvbHMiLCJmb3JFYWNoIiwiaW5uZXJDb250cm9sIiwiaW5kZXgiLCJpc0EiLCJpbmRleE9mIiwidG9TdHJpbmciLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxSTWVzc2FnZVN0cmlwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5uZXJDb250cm9sVHlwZSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvY29udHJvbHMvTXVsdGlwbGVNb2RlQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTGlzdFJlcG9ydENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9MaXN0QmluZGluZ1wiO1xuXG5leHBvcnQgdHlwZSBMUkN1c3RvbU1lc3NhZ2UgPSB7XG5cdG1lc3NhZ2U6IHN0cmluZztcblx0dHlwZT86IE1lc3NhZ2VUeXBlO1xuXHRvbkNsb3NlPzogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgY2xhc3MgTFJNZXNzYWdlU3RyaXAge1xuXHRjdXN0b21NZXNzYWdlSW5mbyE6IHtcblx0XHRtZXNzYWdlTWFuYWdlckRhdGFCaW5kaW5nOiBMaXN0QmluZGluZztcblx0XHRjdXJyZW50TWVzc2FnZT86IE1lc3NhZ2U7XG5cdFx0bXVsdGlNb2RlQ29udHJvbE1lc3NhZ2VzTWFwOiB7IFtrZXk6IHN0cmluZ106IExSQ3VzdG9tTWVzc2FnZSB8IHVuZGVmaW5lZCB9O1xuXHR9O1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBtZXNzYWdlTWFuYWdlciA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0XHR0aGlzLmN1c3RvbU1lc3NhZ2VJbmZvID0ge1xuXHRcdFx0bWVzc2FnZU1hbmFnZXJEYXRhQmluZGluZzogbWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIpLFxuXHRcdFx0bXVsdGlNb2RlQ29udHJvbE1lc3NhZ2VzTWFwOiB7fVxuXHRcdH07XG5cdH1cblx0Z2V0Q3VzdG9tTWVzc2FnZUluZm8oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3VzdG9tTWVzc2FnZUluZm87XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLmN1c3RvbU1lc3NhZ2VJbmZvLm1lc3NhZ2VNYW5hZ2VyRGF0YUJpbmRpbmcuZGV0YWNoQ2hhbmdlKHRoaXMuX2V2ZW50SGFuZGxlckN1c3RvbU1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cdF9nZXRNZXNzYWdlc1dpdGhTYW1lVGFyZ2V0VGhhbkN1c3RvbU1lc3NhZ2UoKSB7XG5cdFx0Y29uc3QgbWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0cmV0dXJuIG1lc3NhZ2VNYW5hZ2VyXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0bXNnLmdldFRhcmdldHMoKVswXSA9PT0gdGhpcy5jdXN0b21NZXNzYWdlSW5mby5jdXJyZW50TWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdICYmXG5cdFx0XHRcdFx0bXNnICE9PSB0aGlzLmN1c3RvbU1lc3NhZ2VJbmZvLmN1cnJlbnRNZXNzYWdlXG5cdFx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1lc3NhZ2VNYW5hZ2VyIEV2ZW50IEhhbmRsZXIgcmVzcG9uc2libGUgdG8gYWRkIG9yIHJlbW92ZSB0aGUgY3VycmVudCBjdXN0b21NZXNzYWdlLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuaGVscGVycy5MUk1lc3NhZ2VTdHJpcCNfZXZlbnRIYW5kbGVyQ3VzdG9tTWVzc2FnZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2V2ZW50SGFuZGxlckN1c3RvbU1lc3NhZ2UoKSB7XG5cdFx0Y29uc3QgbWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0aWYgKHRoaXMuY3VzdG9tTWVzc2FnZUluZm8uY3VycmVudE1lc3NhZ2UpIHtcblx0XHRcdGNvbnN0IGFNZXNzYWdlV2l0aFNhbWVUYXJnZXRUaGFuQ3VzdG9tTWVzc2FnZSA9IHRoaXMuX2dldE1lc3NhZ2VzV2l0aFNhbWVUYXJnZXRUaGFuQ3VzdG9tTWVzc2FnZSgpO1xuXHRcdFx0Y29uc3QgaXNDdXN0b21NZXNzYWdlSW5NZXNzYWdlTWFuYWdlciA9ICEhbWVzc2FnZU1hbmFnZXJcblx0XHRcdFx0LmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0LmZpbmQoKG1zZzogTWVzc2FnZSkgPT4gbXNnID09PSB0aGlzLmN1c3RvbU1lc3NhZ2VJbmZvLmN1cnJlbnRNZXNzYWdlKTtcblxuXHRcdFx0aWYgKGFNZXNzYWdlV2l0aFNhbWVUYXJnZXRUaGFuQ3VzdG9tTWVzc2FnZS5sZW5ndGggPiAwICYmIGlzQ3VzdG9tTWVzc2FnZUluTWVzc2FnZU1hbmFnZXIpIHtcblx0XHRcdFx0Ly9pZiB0aGVyZSBhcmUgb3RoZXIgbWVzc2FnZXMgd2l0aCB0aGUgc2FtZSBtZXNzYWdlIG9uIHRoZSBNZXNzYWdlTWFuYWdlciBhbmQgdGhlIGN1c3RvbU1lc3NhZ2Vcblx0XHRcdFx0Ly90aGVuIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjdXN0b21lTWVzc2FnZSBmcm9tIHRoZSBNZXNzYWdlTWFuYWdlclxuXHRcdFx0XHRtZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhbdGhpcy5jdXN0b21NZXNzYWdlSW5mbz8uY3VycmVudE1lc3NhZ2VdKTtcblx0XHRcdH0gZWxzZSBpZiAoYU1lc3NhZ2VXaXRoU2FtZVRhcmdldFRoYW5DdXN0b21NZXNzYWdlLmxlbmd0aCA9PT0gMCAmJiAhaXNDdXN0b21NZXNzYWdlSW5NZXNzYWdlTWFuYWdlcikge1xuXHRcdFx0XHRtZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhbdGhpcy5jdXN0b21NZXNzYWdlSW5mby5jdXJyZW50TWVzc2FnZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIG1hbmFnZXMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgY3VzdG9tIG1lc3NhZ2UgKHBvcHVsYXRlcyB0aGUgY3VzdG9tTWVzc2FnZUluZm8gb2JqZWN0LCBhdHRhY2hlcyBhbiBldmVudCB0byB0aGUgbWVzc2FnZSBtYW5hZ2VyIGFuZCBpbnNlcnRzIGEgbWVzc2FnZSkuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudCBFdmVudCBvYmplY3QgKG9wdGlvbmFsKS5cblx0ICogQHBhcmFtIG9EYXRhIFBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9EYXRhLm1lc3NhZ2UgVGhlIExSQ3VzdG9tTWVzc2FnZSB0byBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBtZXNzYWdlIG9iamVjdFxuXHQgKiBAcGFyYW0gb0RhdGEudGFibGUgVGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlXG5cdCAqIEBwYXJhbSBvRGF0YS5za2lwTWVzc2FnZU1hbmFnZXJVcGRhdGUgU2hvdWxkIHNraXAgdG8gaW5zZXJ0IHRoZSBtZXNzYWdlIGluIHRoZSBNZXNzYWdlTWFuYWdlclxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuaGVscGVycy5MUk1lc3NhZ2VTdHJpcCNjcmVhdGVDdXN0b21NZXNzYWdlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjcmVhdGVDdXN0b21NZXNzYWdlKFxuXHRcdGV2ZW50OiBFdmVudCB8IG51bGwsXG5cdFx0b0RhdGE6IHsgbWVzc2FnZTogTFJDdXN0b21NZXNzYWdlIHwgdW5kZWZpbmVkOyB0YWJsZTogTURDVGFibGU7IHNraXBNZXNzYWdlTWFuYWdlclVwZGF0ZT86IGJvb2xlYW4gfVxuXHQpIHtcblx0XHRjb25zdCBtZXNzYWdlID0gb0RhdGEubWVzc2FnZTtcblx0XHRjb25zdCB0YWJsZSA9IG9EYXRhLnRhYmxlO1xuXHRcdGNvbnN0IHNraXBNZXNzYWdlTWFuYWdlclVwZGF0ZSA9IG9EYXRhLnNraXBNZXNzYWdlTWFuYWdlclVwZGF0ZTtcblx0XHRjb25zdCByb3dCaW5kaW5nUGF0aCA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IGN1c3RvbU1lc3NhZ2VNYXAgPSB0aGlzLmN1c3RvbU1lc3NhZ2VJbmZvLm11bHRpTW9kZUNvbnRyb2xNZXNzYWdlc01hcDtcblx0XHRjdXN0b21NZXNzYWdlTWFwW3RhYmxlLmdldElkKCldID0gbWVzc2FnZTtcblx0XHRpZiAoIXJvd0JpbmRpbmdQYXRoKSB7XG5cdFx0XHR0YWJsZS5hdHRhY2hFdmVudE9uY2UoXCJiaW5kaW5nVXBkYXRlZFwiLCBvRGF0YSwgdGhpcy5jcmVhdGVDdXN0b21NZXNzYWdlLCB0aGlzKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoY3VzdG9tTWVzc2FnZU1hcFt0YWJsZS5nZXRJZCgpXT8ub25DbG9zZSkge1xuXHRcdFx0dGFibGUuZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKCkuZGV0YWNoRXZlbnQoXCJjbG9zZVwiLCBjdXN0b21NZXNzYWdlTWFwW3RhYmxlLmdldElkKCldPy5vbkNsb3NlIGFzIEZ1bmN0aW9uLCB0aGlzKTtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9jZXNzb3IgPSB0YWJsZS5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXNzYWdlID0gbWVzc2FnZVxuXHRcdFx0PyBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogbWVzc2FnZS5tZXNzYWdlLFxuXHRcdFx0XHRcdHR5cGU6IG1lc3NhZ2UudHlwZSxcblx0XHRcdFx0XHR0YXJnZXQ6IFtyb3dCaW5kaW5nUGF0aF0sXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRwcm9jZXNzb3Jcblx0XHRcdCAgfSlcblx0XHRcdDogbnVsbDtcblxuXHRcdHRoaXMuY3VzdG9tTWVzc2FnZUluZm8ubWVzc2FnZU1hbmFnZXJEYXRhQmluZGluZy5kZXRhY2hDaGFuZ2UodGhpcy5fZXZlbnRIYW5kbGVyQ3VzdG9tTWVzc2FnZSwgdGhpcyk7XG5cdFx0aWYgKCFza2lwTWVzc2FnZU1hbmFnZXJVcGRhdGUpIHtcblx0XHRcdGlmICh0aGlzLmN1c3RvbU1lc3NhZ2VJbmZvLmN1cnJlbnRNZXNzYWdlKSB7XG5cdFx0XHRcdG1lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmN1c3RvbU1lc3NhZ2VJbmZvLmN1cnJlbnRNZXNzYWdlXSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01lc3NhZ2UpIHtcblx0XHRcdFx0dGhpcy5jdXN0b21NZXNzYWdlSW5mby5jdXJyZW50TWVzc2FnZSA9IG9NZXNzYWdlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMuY3VzdG9tTWVzc2FnZUluZm8uY3VycmVudE1lc3NhZ2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01lc3NhZ2UgJiYgdGhpcy5fZ2V0TWVzc2FnZXNXaXRoU2FtZVRhcmdldFRoYW5DdXN0b21NZXNzYWdlKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdG1lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKFtvTWVzc2FnZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmN1c3RvbU1lc3NhZ2VJbmZvLm1lc3NhZ2VNYW5hZ2VyRGF0YUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2V2ZW50SGFuZGxlckN1c3RvbU1lc3NhZ2UsIHRoaXMpO1xuXG5cdFx0dGhpcy5hdHRhY2hEYXRhU3RhdGVJbmRpY2F0b3JDbG9zZUV2ZW50KHRhYmxlLCBjdXN0b21NZXNzYWdlTWFwLCBtZXNzYWdlPy5vbkNsb3NlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGF0dGFjaGVzIHRoZSBvbkNsb3NlIGV2ZW50IGZ1bmN0aW9uIHRvIHRoZSBkYXRhU3RhdGVJbmRpY2F0b3IuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhU3RhdGVJbmRpY2F0b3Jcblx0ICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VNYXAgVGhlIEN1c3RvbU1lc3NhZ2VNYXAgb2JqZWN0XG5cdCAqIEBwYXJhbSBmbk9uQ2xvc2UgQSBmdW5jdGlvbiB0byBiZSBhdHRhY2hlZCB0byB0aGUgXCJjbG9zZVwiIGV2ZW50XG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5oZWxwZXJzLkxSTWVzc2FnZVN0cmlwI2F0dGFjaERhdGFTdGF0ZUluZGljYXRvckNsb3NlRXZlbnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGF0dGFjaERhdGFTdGF0ZUluZGljYXRvckNsb3NlRXZlbnQoXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdGN1c3RvbU1lc3NhZ2VNYXA6IHsgW2tleTogc3RyaW5nXTogTFJDdXN0b21NZXNzYWdlIHwgdW5kZWZpbmVkIH0sXG5cdFx0Zm5PbkNsb3NlPzogRnVuY3Rpb25cblx0KSB7XG5cdFx0aWYgKGZuT25DbG9zZSkge1xuXHRcdFx0dGFibGUuZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKCkuYXR0YWNoRXZlbnRPbmNlKFwiY2xvc2VcIiwgZm5PbkNsb3NlLCB0aGlzKTtcblx0XHR9XG5cdFx0Ly9XaGVuIGNsb3NpbmcgdGhlIHRoZSBtZXNzYWdlU3RyaXAsIHRoZSBhc3NvY2lhdGVkIG1lc3NhZ2UgaXMgcmVtb3ZlZFxuXHRcdHRhYmxlLmdldERhdGFTdGF0ZUluZGljYXRvcigpLmF0dGFjaEV2ZW50T25jZShcImNsb3NlXCIsICgpID0+IHtcblx0XHRcdGRlbGV0ZSBjdXN0b21NZXNzYWdlTWFwW3RhYmxlLmdldElkKCldO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11bHRpcGxlTW9kZUNvbnRyb2wgRXZlbnQgaGFuZGxlciByZXNwb25zaWJsZSBmb3IgZGlzcGxheWluZyB0aGUgY29ycmVjdCBjdXN0b20gbWVzc2FnZSB3aGVuIGEgc3BlY2lmaWMgdGFiIGlzIHNlbGVjdGVkLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuaGVscGVycy5MUk1lc3NhZ2VTdHJpcCNvblNlbGVjdE11bHRpcGxlTW9kZUNvbnRyb2xcblx0ICogQHByaXZhdGVcblx0ICovXG5cblx0b25TZWxlY3RNdWx0aXBsZU1vZGVDb250cm9sKGV2ZW50OiBFdmVudCwgY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRjb25zdCB0YWJsZSA9IGNvbnRyb2xsZXIuX2dldFRhYmxlKCkgYXMgTURDVGFibGU7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMuY3VzdG9tTWVzc2FnZUluZm8ubXVsdGlNb2RlQ29udHJvbE1lc3NhZ2VzTWFwW3RhYmxlLmdldElkKCldO1xuXHRcdHRoaXMuY3JlYXRlQ3VzdG9tTWVzc2FnZShudWxsLCB7IG1lc3NhZ2UsIHRhYmxlIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGUgYW4gb3B0aW9uIGZvciBzaG93aW5nIGEgY3VzdG9tIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgYmFyIGFib3ZlIHRoZSBsaXN0IHJlcG9ydCB0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IFttZXNzYWdlXSBDdXN0b20gbWVzc2FnZSBhbG9uZyB3aXRoIHRoZSBtZXNzYWdlIHR5cGUgdG8gYmUgc2V0IG9uIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlLm1lc3NhZ2VdIE1lc3NhZ2Ugc3RyaW5nIHRvIGJlIGRpc3BsYXllZC5cblx0ICogQHBhcmFtIHtzYXAudWkuY29yZS5NZXNzYWdlVHlwZX0gW21lc3NhZ2UudHlwZV0gSW5kaWNhdGVzIHRoZSB0eXBlIG9mIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSB7TGlzdFJlcG9ydENvbnRyb2xsZXJ9IFtjb250cm9sbGVyXSBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXcuXG5cdCAqIEBwYXJhbSB7c3RyaW5nW118c3RyaW5nfSBbdGFiS2V5XSBUaGUgZW50aXR5U2V0IGlkZW50aWZ5aW5nIHRoZSB0YWJsZSBpbiB3aGljaCB0byBkaXNwbGF5IHRoZSBjdXN0b20gbWVzc2FnZS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQ2xvc2VdIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgYmFyLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c2hvd0N1c3RvbU1lc3NhZ2UoXG5cdFx0bWVzc2FnZTogTFJDdXN0b21NZXNzYWdlIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdHRhYktleT86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCxcblx0XHRvbkNsb3NlPzogRnVuY3Rpb25cblx0KSB7XG5cdFx0Y29uc3QgX3RhYktleSA9IEFycmF5LmlzQXJyYXkodGFiS2V5KSA/IHRhYktleSA6IFt0YWJLZXldO1xuXHRcdGNvbnN0IGlzTXVsdGlNb2RlID0gY29udHJvbGxlci5faXNNdWx0aU1vZGUoKTtcblx0XHRsZXQgdGFibGU6IE1EQ1RhYmxlO1xuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlLm9uQ2xvc2UgPSBvbkNsb3NlO1xuXHRcdH1cblx0XHRpZiAoaXNNdWx0aU1vZGUpIHtcblx0XHRcdGNvbnN0IG11bHRpcGxlTW9kZUNvbnRyb2wgPSBjb250cm9sbGVyLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0XHQvL3dlIGZpc3J0IG5lZWQgdG8gZGV0YWNoIHRoZSBzZWxlY3QgZXZlbnQgdG8gcHJldmVudCBtdWx0aXBsZSBhdHRhY2htZW50cy5cblx0XHRcdG11bHRpcGxlTW9kZUNvbnRyb2wuZGV0YWNoRXZlbnQoXCJzZWxlY3RcIiwgdGhpcy5vblNlbGVjdE11bHRpcGxlTW9kZUNvbnRyb2wsIHRoaXMpO1xuXHRcdFx0bXVsdGlwbGVNb2RlQ29udHJvbC5hdHRhY2hFdmVudChcInNlbGVjdFwiLCBjb250cm9sbGVyLCB0aGlzLm9uU2VsZWN0TXVsdGlwbGVNb2RlQ29udHJvbCwgdGhpcyk7XG5cblx0XHRcdG11bHRpcGxlTW9kZUNvbnRyb2wuZ2V0QWxsSW5uZXJDb250cm9scyh0cnVlKS5mb3JFYWNoKChpbm5lckNvbnRyb2w6IElubmVyQ29udHJvbFR5cGUsIGluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0aWYgKGlubmVyQ29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0aWYgKCF0YWJLZXkgfHwgX3RhYktleS5pbmRleE9mKGluZGV4LnRvU3RyaW5nKCkpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0dGFibGUgPSAoaW5uZXJDb250cm9sIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRcdFx0dGhpcy5jcmVhdGVDdXN0b21NZXNzYWdlKG51bGwsIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRcdHNraXBNZXNzYWdlTWFuYWdlclVwZGF0ZTogbXVsdGlwbGVNb2RlQ29udHJvbC5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpICE9PSBpbm5lckNvbnRyb2xcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGFibGUgPSBjb250cm9sbGVyLl9nZXRUYWJsZSgpIGFzIE1EQ1RhYmxlO1xuXHRcdHRoaXMuY3JlYXRlQ3VzdG9tTWVzc2FnZShudWxsLCB7IG1lc3NhZ2UsIHRhYmxlIH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O01BZWFBLGNBQWM7SUFNMUIsMEJBQWM7TUFDYixJQUFNQyxjQUFjLEdBQUdDLElBQUksQ0FBQ0MsaUJBQWlCLEVBQUU7TUFDL0MsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRztRQUN4QkMseUJBQXlCLEVBQUVKLGNBQWMsQ0FBQ0ssZUFBZSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDekVDLDJCQUEyQixFQUFFLENBQUM7TUFDL0IsQ0FBQztJQUNGO0lBQUM7SUFBQTtJQUFBLE9BQ0RDLG9CQUFvQixHQUFwQixnQ0FBdUI7TUFDdEIsT0FBTyxJQUFJLENBQUNMLGlCQUFpQjtJQUM5QixDQUFDO0lBQUEsT0FDRE0sT0FBTyxHQUFQLG1CQUFVO01BQ1QsSUFBSSxDQUFDTixpQkFBaUIsQ0FBQ0MseUJBQXlCLENBQUNNLFlBQVksQ0FBQyxJQUFJLENBQUNDLDBCQUEwQixFQUFFLElBQUksQ0FBQztJQUNyRyxDQUFDO0lBQUEsT0FDREMsMkNBQTJDLEdBQTNDLHVEQUE4QztNQUFBO01BQzdDLElBQU1aLGNBQWMsR0FBR0MsSUFBSSxDQUFDQyxpQkFBaUIsRUFBRTtNQUMvQyxPQUFPRixjQUFjLENBQ25CSyxlQUFlLEVBQUUsQ0FDakJRLE9BQU8sRUFBRSxDQUNUQyxNQUFNLENB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
|