@sapui5/sap.fe.macros 1.142.2 → 1.142.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +28 -17
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +45 -12
  5. package/src/sap/fe/macros/Field.js +7 -5
  6. package/src/sap/fe/macros/Field.ts +7 -5
  7. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +14 -5
  8. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +15 -5
  9. package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
  10. package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
  11. package/src/sap/fe/macros/filter/FilterUtils.js +14 -9
  12. package/src/sap/fe/macros/filter/FilterUtils.ts +18 -13
  13. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -7
  14. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -6
  15. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +18 -3
  16. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +22 -2
  17. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +3 -2
  18. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +2 -1
  19. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -6
  20. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +11 -4
  21. package/src/sap/fe/macros/library.js +1 -1
  22. package/src/sap/fe/macros/messages/MessageButton.js +2 -4
  23. package/src/sap/fe/macros/messages/MessageButton.ts +4 -7
  24. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +4 -1
  25. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +3 -0
  26. package/src/sap/fe/macros/quickView/QuickViewDelegate.js +2 -2
  27. package/src/sap/fe/macros/quickView/QuickViewDelegate.ts +5 -1
  28. package/src/sap/fe/macros/table/MdcTableTemplate.js +26 -6
  29. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +31 -6
  30. package/src/sap/fe/macros/table/TableAPI.js +2 -3
  31. package/src/sap/fe/macros/table/TableAPI.ts +2 -2
  32. package/src/sap/fe/macros/table/TableFullScreenButton.js +4 -1
  33. package/src/sap/fe/macros/table/TableFullScreenButton.tsx +3 -0
  34. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +26 -4
  35. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -3
  36. package/src/sap/fe/macros/internal/helpers/TableTemplating.js +0 -31
  37. package/src/sap/fe/macros/internal/helpers/TableTemplating.ts +0 -20
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.macros",
3
- "version": "1.142.2",
3
+ "version": "1.142.5",
4
4
  "description": "SAPUI5 Library sap.fe.macros",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.142.2</version>
9
+ <version>1.142.5</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.macros</documentation>
12
12
 
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Breadcrumbs", "sap/m/Link", "sap/fe/base/jsx-runtime/jsx"], function (Log, ClassSupport, BuildingBlock, CommonUtils, ResourceModelHelper, StableIdHelper, UI5Breadcrumbs, Link, _jsx) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Breadcrumbs", "sap/m/Link", "sap/fe/base/jsx-runtime/jsx"], function (Log, ClassSupport, BuildingBlock, CommonUtils, draft, ModelHelper, ResourceModelHelper, StableIdHelper, UI5Breadcrumbs, Link, _jsx) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
@@ -110,21 +110,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
110
110
  pathParts.splice(-1, 1); // Remove current page
111
111
  }
112
112
  return pathParts;
113
- }
114
-
115
- /**
116
- * Get the context path from the hash.
117
- * @param sHash The hash to get the context path from
118
- * @returns Context path from the corresponding route target options
119
- */;
120
- _proto._getContextPathFromHash = function _getContextPathFromHash(sHash) {
121
- const appComponent = this.getAppComponent(),
122
- rootViewController = appComponent.getRootViewController();
123
- const {
124
- entitySet,
125
- contextPath
126
- } = rootViewController.getTargetOptionsFromHash(sHash)?.options?.settings ?? {};
127
- return contextPath ?? (entitySet ? `/${entitySet}` : undefined);
128
113
  };
129
114
  _proto._getFirstPageTitleInformation = async function _getFirstPageTitleInformation() {
130
115
  const appComponent = this.getAppComponent(),
@@ -201,12 +186,38 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
201
186
  link.setText(linkText);
202
187
  //We apply an additional encodeURI in case of special characters (ie "/") used in the url through the semantic keys
203
188
  link.setHref(encodeURI(titleHierarchyInfo.intent));
189
+
190
+ // Attach press handler to check for draft data loss before navigation. Only required for the first two breadcrumb
191
+ // links in FULL mode (home and LR), as in OBJECT mode, breadcrumbs start from the sub object page, wherein no
192
+ // popup is required.
193
+ if (this.hierarchyMode === hierachyModeOptions.FULL && hierarchyPosition <= 1 && this.getPageController().isA("sap.fe.templates.ObjectPage.ObjectPageController")) {
194
+ link.detachPress(this.onLinkPress, this);
195
+ link.attachPress(this.onLinkPress, this);
196
+ }
204
197
  if (!breadcrumbsCtrl.getLinks()[hierarchyPosition]) {
205
198
  breadcrumbsCtrl.addLink(link);
206
199
  }
207
200
  }
208
201
  }
209
202
 
203
+ /**
204
+ * Handle link press event to check for unsaved changes before navigation.
205
+ * @param event The press event from the link
206
+ */;
207
+ _proto.onLinkPress = async function onLinkPress(event) {
208
+ event.preventDefault();
209
+ const href = event.getSource().getHref();
210
+ const pageController = this.getPageController();
211
+ const bindingContext = pageController.getView().getBindingContext();
212
+ if (ModelHelper.isDraftSupported(bindingContext.getModel().getMetaModel(), bindingContext.getPath())) {
213
+ await draft.processDataLossOrDraftDiscardConfirmation(() => {
214
+ window.location.hash = href;
215
+ }, Function.prototype, pageController.getView().getBindingContext(), pageController, true, draft.NavigationType.BackNavigation, undefined, undefined, true);
216
+ } else {
217
+ window.location.hash = href;
218
+ }
219
+ }
220
+
210
221
  /**
211
222
  * Get link text based on title and subtitle.
212
223
  * @param titleInfo Title information containing title and subtitle
@@ -260,4 +271,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
260
271
  _exports = Breadcrumbs;
261
272
  return _exports;
262
273
  }, false);
263
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoaWVyYWNoeU1vZGVPcHRpb25zIiwiT0JKRUNUIiwiRlVMTCIsIl9leHBvcnRzIiwiQnJlYWRjcnVtYnMiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9kZWMzIiwicHJvcGVydHkiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWxsb3dlZFZhbHVlcyIsIk9iamVjdCIsInZhbHVlcyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImNvbnRlbnQiLCJfZ2V0T3duZXIiLCJydW5Bc093bmVyIiwiY3JlYXRlQ29udGVudCIsIl9nZXRCcmVhZGNydW1ic1RpdGxlSW5mb3MiLCJmdWxsUGF0aEZvckxpbmtzIiwicHJvbWlzZXMiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJwYXRoUGFydHMiLCJfZ2V0QnJlYWRjcnVtYnNQYXRoUGFydHMiLCJwYXRoIiwiaGllcmFyY2h5TW9kZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiaG9tZVRpdGxlIiwiX2dldEZFTWFuaWZlc3RCcmVhZGNydW1iU2V0dGluZ3MiLCJob21lIiwicHVzaCIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW50ZW50IiwidGl0bGUiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJnZXRUZXh0IiwiZm9yRWFjaCIsInBhdGhQYXJ0IiwiaWR4IiwiZ2V0Um91dGVyIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwiX2dldEZpcnN0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJwYXJhbWV0ZXJQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZXN1bHRDb250ZXh0IiwiZ2V0T2JqZWN0IiwiZ2V0VGl0bGVJbmZvRnJvbVBhdGgiLCJiaW5kIiwic3BsaXQiLCJzaGlmdCIsInNwbGljZSIsIl9nZXRDb250ZXh0UGF0aEZyb21IYXNoIiwic0hhc2giLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImdldFRhcmdldE9wdGlvbnNGcm9tSGFzaCIsIm9wdGlvbnMiLCJzZXR0aW5ncyIsInVuZGVmaW5lZCIsIm1hbmlmZXN0QXBwU2V0dGluZ3MiLCJnZXRNYW5pZmVzdEVudHJ5IiwiYXBwVGl0bGUiLCJhcHBTdWJUaXRsZSIsInN1YlRpdGxlIiwiYXBwSWNvbiIsImljb24iLCJhcHBTcGVjaWZpY0hhc2giLCJnZXRBcHBTcGVjaWZpY0hhc2giLCJ0aXRsZUluZm8iLCJnZXRSb290TGV2ZWxUaXRsZUluZm9ybWF0aW9uIiwic3VidGl0bGUiLCJzcGFjZU5hbWUiLCJzcGFjZSIsIm1hbmlmZXN0RkVTZXR0aW5ncyIsImFwcCIsImJyZWFkY3J1bWJzIiwic2V0QnJlYWRjcnVtYkxpbmtzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQYXRoIiwiTG9nIiwiaW5mbyIsImJyZWFkY3J1bWJzQ3RybCIsImdldENvbnRlbnQiLCJlcnJvciIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJhbGwiLCJ1cGRhdGVCcmVhZGNydW1iTGluayIsInRpdGxlSGllcmFyY2h5SW5mbyIsImhpZXJhcmNoeVBvc2l0aW9uIiwiaXNMYXN0TGluayIsImxpbmtUZXh0IiwiZ2V0TGlua1RleHQiLCJzZXRDdXJyZW50TG9jYXRpb25UZXh0IiwibGluayIsImdldExpbmtzIiwiTGluayIsInNldFRleHQiLCJzZXRIcmVmIiwiZW5jb2RlVVJJIiwiYWRkTGluayIsInRpdGxlRXhpc3RzIiwic3VidGl0bGVFeGlzdHMiLCJpc0ZpcnN0UGFnZSIsInZpZXdJZCIsImdldFBhZ2VDb250cm9sbGVyIiwiZ2V0VmlldyIsImdldElkIiwiX2pzeCIsIlVJNUJyZWFkY3J1bWJzIiwiaWQiLCJnZW5lcmF0ZSIsIm1vZGVsQ29udGV4dENoYW5nZSIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJyZWFkY3J1bWJzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IFVJNUJyZWFkY3J1bWJzIGZyb20gXCJzYXAvbS9CcmVhZGNydW1ic1wiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RDb250ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5cbmV4cG9ydCBjb25zdCBoaWVyYWNoeU1vZGVPcHRpb25zID0ge1xuXHRPQkpFQ1Q6IFwib2JqZWN0TmF2aWdhdGlvblwiLFxuXHRGVUxMOiBcImZ1bGxOYXZpZ2F0aW9uXCJcbn0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBIaWVyYWNoeU1vZGUgPSAodHlwZW9mIGhpZXJhY2h5TW9kZU9wdGlvbnMpW2tleW9mIHR5cGVvZiBoaWVyYWNoeU1vZGVPcHRpb25zXTtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayB1c2VkIHRvIGNyZWF0ZSBicmVhZGNydW1icy5cbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5CcmVhZGNydW1ic1wiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJlYWRjcnVtYnMgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrPFVJNUJyZWFkY3J1bWJzPiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAubS5JQnJlYWRjcnVtYnNcIilcblx0X19pbXBsZW1lbnRzX19zYXBfbV9JQnJlYWRjcnVtYnMgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBIaWVyYXJjaHkgbW9kZSBmb3IgYnJlYWRjcnVtYnNcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGRlZmF1bHRWYWx1ZTogaGllcmFjaHlNb2RlT3B0aW9ucy5PQkpFQ1QsXG5cdFx0YWxsb3dlZFZhbHVlczogT2JqZWN0LnZhbHVlcyhoaWVyYWNoeU1vZGVPcHRpb25zKVxuXHR9KVxuXHRoaWVyYXJjaHlNb2RlITogSGllcmFjaHlNb2RlO1xuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuX2dldE93bmVyKCk/LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYnJlYWRjcnVtYnMgdGl0bGUgaW5mb3JtYXRpb24gZm9yIGZ1bGwgcGF0aC5cblx0ICogQHBhcmFtIGZ1bGxQYXRoRm9yTGlua3MgVGhlIGNvbnRleHQgcGF0aCBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEByZXR1cm5zIFByb21pc2VzIHJlc29sdmluZyB0byBUaXRsZUluZm9ybWF0aW9uIG9iamVjdHMgZm9yIGVhY2ggcGF0aCBwYXJ0LlxuXHQgKi9cblx0X2dldEJyZWFkY3J1bWJzVGl0bGVJbmZvcyhmdWxsUGF0aEZvckxpbmtzOiBzdHJpbmcpOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+W10ge1xuXHRcdGNvbnN0IHByb21pc2VzOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+W10gPSBbXSxcblx0XHRcdGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkhLFxuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLFxuXHRcdFx0bWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0cGF0aFBhcnRzID0gdGhpcy5fZ2V0QnJlYWRjcnVtYnNQYXRoUGFydHMoZnVsbFBhdGhGb3JMaW5rcyk7XG5cblx0XHRsZXQgcGF0aCA9IFwiXCI7XG5cdFx0aWYgKHRoaXMuaGllcmFyY2h5TW9kZSA9PT0gaGllcmFjaHlNb2RlT3B0aW9ucy5GVUxMKSB7XG5cdFx0XHQvLyBIb21lIHBhZ2Vcblx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpO1xuXHRcdFx0Y29uc3QgaG9tZVRpdGxlID0gdGhpcy5fZ2V0RkVNYW5pZmVzdEJyZWFkY3J1bWJTZXR0aW5ncygpPy5ob21lO1xuXHRcdFx0cHJvbWlzZXMucHVzaChcblx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdFx0XHRpbnRlbnQ6IFwiI1NoZWxsLWhvbWVcIixcblx0XHRcdFx0XHR0aXRsZTogaG9tZVRpdGxlXG5cdFx0XHRcdFx0XHQ/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcoaG9tZVRpdGxlLCB0aGlzKVxuXHRcdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FQUF9IT01FXCIpXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRwYXRoUGFydHMuZm9yRWFjaChcblx0XHRcdGZ1bmN0aW9uICh0aGlzOiBCcmVhZGNydW1icywgcGF0aFBhcnQ6IHN0cmluZywgaWR4OiBudW1iZXIpOiB2b2lkIHtcblx0XHRcdFx0cGF0aCArPSBwYXRoUGFydCA/IGAvJHtwYXRoUGFydH1gIDogXCJcIjtcblx0XHRcdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGVJbmZvQnlIYXNoKHBhdGgpKSB7XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHRhcmdldCBpcyBub3QgZGVjbGFyZWQgaW4gdGhlIHJvdXRlcywgd2Ugc2tpcCBpdFxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiBpbiBmdWxsIE5hdmlnYXRpb24gbW9kZSwgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcGxpY2F0aW9uIHVzZXMgdGhlIHRpdGxlIGFuZCBzdWJ0aXRsZSBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHRpZiAoIWlkeCAmJiBwYXRoID09PSBcIlwiICYmIHRoaXMuaGllcmFyY2h5TW9kZSA9PT0gaGllcmFjaHlNb2RlT3B0aW9ucy5GVUxMKSB7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLl9nZXRGaXJzdFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdENvbnRleHQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRpZiAocmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcm9taXNlcy5wdXNoKHJvb3RWaWV3Q29udHJvbGxlci5nZXRUaXRsZUluZm9Gcm9tUGF0aChwYXRoKSk7XG5cdFx0XHR9LmJpbmQodGhpcylcblx0XHQpO1xuXHRcdHJldHVybiBwcm9taXNlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgcGF0aCBwYXJ0cyBmcm9tIHRoZSBmdWxsIHBhdGggZm9yIGxpbmtzLlxuXHQgKiBAcGFyYW0gZnVsbFBhdGhGb3JMaW5rcyBUaGUgY29udGV4dCBwYXRoIG9mIHRoZSBvYmplY3QgcGFnZS5cblx0ICogQHJldHVybnMgUGF0aCBwYXJ0cyBmb3IgY3JlYXRpbmcgYnJlYWRjcnVtYiBsaW5rcy5cblx0ICovXG5cdF9nZXRCcmVhZGNydW1ic1BhdGhQYXJ0cyhmdWxsUGF0aEZvckxpbmtzOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgcGF0aFBhcnRzID0gZnVsbFBhdGhGb3JMaW5rcz8uc3BsaXQoXCIvXCIpID8/IFtdO1xuXHRcdGlmICh0aGlzLmhpZXJhcmNoeU1vZGUgIT09IGhpZXJhY2h5TW9kZU9wdGlvbnMuRlVMTCkge1xuXHRcdFx0cGF0aFBhcnRzLnNoaWZ0KCk7IC8vIFJlbW92ZSBcIlwiXG5cdFx0XHRwYXRoUGFydHMuc3BsaWNlKC0xLCAxKTsgLy8gUmVtb3ZlIGN1cnJlbnQgcGFnZVxuXHRcdH1cblx0XHRyZXR1cm4gcGF0aFBhcnRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgY29udGV4dCBwYXRoIGZyb20gdGhlIGhhc2guXG5cdCAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaCB0byBnZXQgdGhlIGNvbnRleHQgcGF0aCBmcm9tXG5cdCAqIEByZXR1cm5zIENvbnRleHQgcGF0aCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIHRhcmdldCBvcHRpb25zXG5cdCAqL1xuXHRfZ2V0Q29udGV4dFBhdGhGcm9tSGFzaChzSGFzaDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpISxcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCB7IGVudGl0eVNldCwgY29udGV4dFBhdGggfSA9IHJvb3RWaWV3Q29udHJvbGxlci5nZXRUYXJnZXRPcHRpb25zRnJvbUhhc2goc0hhc2gpPy5vcHRpb25zPy5zZXR0aW5ncyA/PyB7fTtcblx0XHRyZXR1cm4gY29udGV4dFBhdGggPz8gKGVudGl0eVNldCA/IGAvJHtlbnRpdHlTZXR9YCA6IHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBfZ2V0Rmlyc3RQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpISxcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSxcblx0XHRcdG1hbmlmZXN0QXBwU2V0dGluZ3MgPSBhcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIiksXG5cdFx0XHRhcHBUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3MudGl0bGUgfHwgXCJcIixcblx0XHRcdGFwcFN1YlRpdGxlID0gbWFuaWZlc3RBcHBTZXR0aW5ncy5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0YXBwSWNvbiA9IG1hbmlmZXN0QXBwU2V0dGluZ3MuaWNvbiB8fCBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNIYXNoID0gcm9vdFZpZXdDb250cm9sbGVyLmdldEFwcFNwZWNpZmljSGFzaCgpO1xuXG5cdFx0Y29uc3QgdGl0bGVJbmZvID0geyAuLi4oYXdhaXQgcm9vdFZpZXdDb250cm9sbGVyLmdldFJvb3RMZXZlbFRpdGxlSW5mb3JtYXRpb24oYXBwU3BlY2lmaWNIYXNoLCBhcHBUaXRsZSwgYXBwU3ViVGl0bGUsIGFwcEljb24pKSB9O1xuXHRcdHRpdGxlSW5mby5zdWJ0aXRsZSA9IHRpdGxlSW5mby50aXRsZTtcblx0XHRjb25zdCBzcGFjZU5hbWUgPSB0aGlzLl9nZXRGRU1hbmlmZXN0QnJlYWRjcnVtYlNldHRpbmdzKCk/LnNwYWNlO1xuXHRcdHRpdGxlSW5mby50aXRsZSA9IHNwYWNlTmFtZSA/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcoc3BhY2VOYW1lLCB0aGlzKSA6IFwiXCI7XG5cdFx0cmV0dXJuIHRpdGxlSW5mbztcblx0fVxuXG5cdF9nZXRGRU1hbmlmZXN0QnJlYWRjcnVtYlNldHRpbmdzKCk6IE5vbk51bGxhYmxlPE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXVtcImFwcFwiXT5bXCJicmVhZGNydW1ic1wiXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSEsXG5cdFx0XHRtYW5pZmVzdEZFU2V0dGluZ3MgPSBhcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0XHRyZXR1cm4gbWFuaWZlc3RGRVNldHRpbmdzPy5hcHA/LmJyZWFkY3J1bWJzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYnJlYWRjcnVtYiBsaW5rcyBpbiB0aGUgZ2l2ZW4gQnJlYWRjcnVtYnMgY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSB0aXRsZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBwYXRoIHBhcnQgYW5kIHNldHMgdGhlIGxpbmtzIGFjY29yZGluZ2x5LlxuXHQgKiBJZiB0aGUgYGZ1bGxQYXRoRm9yTGlua2AgcGFyYW1ldGVyIGlzIG5vdCBwcm92aWRlZCwgaXQgdXNlcyB0aGUgYmluZGluZyBjb250ZXh0IHBhdGggb2YgdGhlIEJyZWFkY3J1bWJzIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBmdWxsUGF0aEZvckxpbmtzIFRoZSBmdWxsIHBhdGggZm9yIHRoZSBsaW5rLCBkZWZhdWx0cyB0byB0aGUgYmluZGluZyBjb250ZXh0IHBhdGggb2YgdGhlIEJyZWFkY3J1bWJzIGNvbnRyb2xcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYnJlYWRjcnVtYiBsaW5rcyBhcmUgc2V0XG5cdCAqL1xuXHRhc3luYyBzZXRCcmVhZGNydW1iTGlua3MoZnVsbFBhdGhGb3JMaW5rcyA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHR5cGVvZiBmdWxsUGF0aEZvckxpbmtzICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRMb2cuaW5mbyhcIkJyZWFkY3J1bWJzOiBwYXRoIG5vdCBhdmFpbGFibGUuIENhbm5vdCBzZXQgYnJlYWRjcnVtYiBsaW5rcy5cIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGJyZWFkY3J1bWJzQ3RybCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGlmICghYnJlYWRjcnVtYnNDdHJsKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJCcmVhZGNydW1icyBCdWlsZGluZyBibG9jazogQnJlYWRjcnVtYnMgY29udHJvbCBub3QgYXZhaWxhYmxlLiBDYW5ub3Qgc2V0IGJyZWFkY3J1bWIgbGlua3MuXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvczogVGl0bGVJbmZvcm1hdGlvbltdID0gYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fZ2V0QnJlYWRjcnVtYnNUaXRsZUluZm9zKGZ1bGxQYXRoRm9yTGlua3MpKTtcblx0XHRcdHRpdGxlSGllcmFyY2h5SW5mb3MuZm9yRWFjaCh0aGlzLnVwZGF0ZUJyZWFkY3J1bWJMaW5rLmJpbmQodGhpcykpO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBicmVhZGNydW1iIGxpbmtzOiBcIiArIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBicmVhZGNydW1iIGxpbmsgYXQgdGhlIHNwZWNpZmllZCBoaWVyYXJjaHkgcG9zaXRpb24uXG5cdCAqIEBwYXJhbSB0aXRsZUhpZXJhcmNoeUluZm8gVGhlIHRpdGxlIGluZm9ybWF0aW9uIGZvciB0aGUgbGlua1xuXHQgKiBAcGFyYW0gaGllcmFyY2h5UG9zaXRpb24gVGhlIHBvc2l0aW9uIG9mIHRoZSBsaW5rIGluIHRoZSBoaWVyYXJjaHlcblx0ICogQHBhcmFtIHRpdGxlSGllcmFyY2h5SW5mb3MgVGhlIGFycmF5IG9mIGFsbCB0aXRsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGhpZXJhcmNoeVxuXHQgKi9cblx0dXBkYXRlQnJlYWRjcnVtYkxpbmsodGl0bGVIaWVyYXJjaHlJbmZvOiBUaXRsZUluZm9ybWF0aW9uLCBoaWVyYXJjaHlQb3NpdGlvbjogbnVtYmVyLCB0aXRsZUhpZXJhcmNoeUluZm9zOiBUaXRsZUluZm9ybWF0aW9uW10pOiB2b2lkIHtcblx0XHRjb25zdCBicmVhZGNydW1ic0N0cmwgPSB0aGlzLmdldENvbnRlbnQoKSE7XG5cdFx0Y29uc3QgaXNMYXN0TGluayA9IGhpZXJhcmNoeVBvc2l0aW9uID09PSB0aXRsZUhpZXJhcmNoeUluZm9zLmxlbmd0aCAtIDE7XG5cdFx0Y29uc3QgbGlua1RleHQgPSB0aGlzLmdldExpbmtUZXh0KHRpdGxlSGllcmFyY2h5SW5mbywgaXNMYXN0TGluaywgaGllcmFyY2h5UG9zaXRpb24pO1xuXHRcdGlmICghbGlua1RleHQpIHtcblx0XHRcdExvZy5lcnJvcihcIkJyZWFkY3J1bWJzOiBObyBsaW5rIHRleHQgYXZhaWxhYmxlIGZvciB0aGUgYnJlYWRjcnVtYiBsaW5rIGF0IHBvc2l0aW9uIFwiICsgaGllcmFyY2h5UG9zaXRpb24pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoaXNMYXN0TGluayAmJiB0aGlzLmhpZXJhcmNoeU1vZGUgPT09IGhpZXJhY2h5TW9kZU9wdGlvbnMuRlVMTCkge1xuXHRcdFx0Ly8gTk9URTogQXMgb2YgMS4xMzYuMCwgdGhlIHNldEN1cnJlbnRMb2NhdGlvblRleHQgbWV0aG9kIGlzIG5vdCBkZXByZWNhdGVkLlxuXHRcdFx0Ly8gSXQgd2FzIGRlcHJpY2F0ZWQgaW4gVUk1IDEuMTIzIGJ1dCByZWludHJvZHVjZWQgb24vYmVmb3JlIFVJNSAxLjEyNy5cblx0XHRcdC8vIEFzIG9mIGRheSBvZiB3cml0aW5nIHRoaXMsIHdlIHVzZSBVSTUgMS4xMjQgZm9yIG9wZW51aTUgdHlwZXMuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdGJyZWFkY3J1bWJzQ3RybC5zZXRDdXJyZW50TG9jYXRpb25UZXh0KGxpbmtUZXh0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbGluayA9IGJyZWFkY3J1bWJzQ3RybC5nZXRMaW5rcygpW2hpZXJhcmNoeVBvc2l0aW9uXSA/IGJyZWFkY3J1bWJzQ3RybC5nZXRMaW5rcygpW2hpZXJhcmNoeVBvc2l0aW9uXSA6IG5ldyBMaW5rKCk7XG5cdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0bGluay5zZXRUZXh0KGxpbmtUZXh0KTtcblx0XHRcdC8vV2UgYXBwbHkgYW4gYWRkaXRpb25hbCBlbmNvZGVVUkkgaW4gY2FzZSBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgKGllIFwiL1wiKSB1c2VkIGluIHRoZSB1cmwgdGhyb3VnaCB0aGUgc2VtYW50aWMga2V5c1xuXHRcdFx0bGluay5zZXRIcmVmKGVuY29kZVVSSSh0aXRsZUhpZXJhcmNoeUluZm8uaW50ZW50ISkpO1xuXHRcdFx0aWYgKCFicmVhZGNydW1ic0N0cmwuZ2V0TGlua3MoKVtoaWVyYXJjaHlQb3NpdGlvbl0pIHtcblx0XHRcdFx0YnJlYWRjcnVtYnNDdHJsLmFkZExpbmsobGluayk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBsaW5rIHRleHQgYmFzZWQgb24gdGl0bGUgYW5kIHN1YnRpdGxlLlxuXHQgKiBAcGFyYW0gdGl0bGVJbmZvIFRpdGxlIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgdGl0bGUgYW5kIHN1YnRpdGxlXG5cdCAqIEBwYXJhbSBpc0xhc3RMaW5rIERldGVybWluZXMgaWYgaXQgaXMgdGhlIGxhc3QgbGluayBpbiB0aGUgYnJlYWRjcnVtYnNcblx0ICogQHBhcmFtIGhpZXJhcmNoeVBvc2l0aW9uIFBvc2l0aW9uIG9mIHRoZSBsaW5rIGluIHRoZSBoaWVyYXJjaHlcblx0ICogQHJldHVybnMgTGluayB0ZXh0XG5cdCAqL1xuXHRnZXRMaW5rVGV4dCh0aXRsZUluZm86IFRpdGxlSW5mb3JtYXRpb24sIGlzTGFzdExpbms6IGJvb2xlYW4sIGhpZXJhcmNoeVBvc2l0aW9uOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHsgdGl0bGUsIHN1YnRpdGxlIH0gPSB0aXRsZUluZm87XG5cdFx0Y29uc3QgdGl0bGVFeGlzdHMgPSB0aXRsZSAhPT0gdW5kZWZpbmVkICYmIHRpdGxlICE9PSBcIlwiO1xuXHRcdGNvbnN0IHN1YnRpdGxlRXhpc3RzID0gc3VidGl0bGUgIT09IHVuZGVmaW5lZCAmJiBzdWJ0aXRsZSAhPT0gXCJcIjtcblx0XHRpZiAodGl0bGVFeGlzdHMgJiYgc3VidGl0bGVFeGlzdHMgJiYgdGhpcy5oaWVyYXJjaHlNb2RlID09PSBoaWVyYWNoeU1vZGVPcHRpb25zLkZVTEwpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpO1xuXHRcdFx0Y29uc3QgaXNGaXJzdFBhZ2UgPSBoaWVyYXJjaHlQb3NpdGlvbiA9PT0gMTtcblx0XHRcdHJldHVybiAhaXNGaXJzdFBhZ2UgJiYgaXNMYXN0TGluayA/IHRpdGxlIDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9CUkVBRENSVU1CU19USVRMRV9MT05HX1RFTVBMQVRFXCIsIFt0aXRsZSwgc3VidGl0bGVdKTtcblx0XHR9XG5cdFx0aWYgKHN1YnRpdGxlRXhpc3RzKSB7XG5cdFx0XHRyZXR1cm4gc3VidGl0bGU7XG5cdFx0fSBlbHNlIGlmICh0aXRsZUV4aXN0cykge1xuXHRcdFx0cmV0dXJuIHRpdGxlO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogVUk1QnJlYWRjcnVtYnMge1xuXHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0VmlldygpLmdldElkKCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxVSTVCcmVhZGNydW1ic1xuXHRcdFx0XHQvLyBUaGlzIGlzIHNldCBhcyBhYnNvbHV0ZSBJRC5cblx0XHRcdFx0aWQ9e3ZpZXdJZCA/IGdlbmVyYXRlKFtgJHt2aWV3SWR9LS1mZWAsIFwiQnJlYWRjcnVtYnNcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRtb2RlbENvbnRleHRDaGFuZ2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLnNldEJyZWFkY3J1bWJMaW5rcygpO1xuXHRcdFx0XHR9fVxuXHRcdFx0PjwvVUk1QnJlYWRjcnVtYnM+XG5cdFx0KTtcblx0fVxu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LElBQUksRUFBRTtRQUNyRixNQUFNaUQsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDNUMsTUFBTThFLFdBQVcsR0FBR2QsaUJBQWlCLEtBQUssQ0FBQztRQUMzQyxPQUFPLENBQUNjLFdBQVcsSUFBSWIsVUFBVSxHQUFHekQsS0FBSyxHQUFHVCxhQUFhLENBQUNZLE9BQU8sQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDSCxLQUFLLEVBQUVzQyxRQUFRLENBQUMsQ0FBQztNQUMxSDtNQUNBLElBQUkrQixjQUFjLEVBQUU7UUFDbkIsT0FBTy9CLFFBQVE7TUFDaEIsQ0FBQyxNQUFNLElBQUk4QixXQUFXLEVBQUU7UUFDdkIsT0FBT3BFLEtBQUs7TUFDYjtJQUNELENBQUM7SUFBQTdCLE1BQUEsQ0FFRE0sYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUEsRUFBbUI7TUFDL0IsTUFBTThGLE1BQU0sR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUMsRUFBRUMsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLENBQUM7TUFDMUQsT0FDQ0MsSUFBQSxDQUFDQztNQUNBO01BQUE7UUFDQUMsRUFBRSxFQUFFTixNQUFNLEdBQUdPLFFBQVEsQ0FBQyxDQUFDLEdBQUdQLE1BQU0sTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEdBQUc3QyxTQUFVO1FBQ3BFcUQsa0JBQWtCLEVBQUVBLENBQUEsS0FBWTtVQUMvQixJQUFJLENBQUNuQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFCO01BQUUsQ0FDYyxDQUFDO0lBRXBCLENBQUM7SUFBQSxPQUFBcEcsV0FBQTtFQUFBLEVBdE51Q3dJLGFBQWEsR0FBQWhILFdBQUEsR0FBQWlILHlCQUFBLENBQUE1SCxPQUFBLENBQUFlLFNBQUEsdUNBQUF6QixLQUFBO0lBQUF1SSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQUVsQixJQUFJO0lBQUE7RUFBQSxJQUFBcEgsWUFBQSxHQUFBZ0gseUJBQUEsQ0FBQTVILE9BQUEsQ0FBQWUsU0FBQSxvQkFBQXZCLEtBQUE7SUFBQXFJLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBaEksT0FBQSxNQUFBRCxNQUFBO0VBQUFiLFFBQUEsR0FBQUMsV0FBQTtFQUFBLE9BQUFELFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
274
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoaWVyYWNoeU1vZGVPcHRpb25zIiwiT0JKRUNUIiwiRlVMTCIsIl9leHBvcnRzIiwiQnJlYWRjcnVtYnMiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9kZWMzIiwicHJvcGVydHkiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWxsb3dlZFZhbHVlcyIsIk9iamVjdCIsInZhbHVlcyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImNvbnRlbnQiLCJfZ2V0T3duZXIiLCJydW5Bc093bmVyIiwiY3JlYXRlQ29udGVudCIsIl9nZXRCcmVhZGNydW1ic1RpdGxlSW5mb3MiLCJmdWxsUGF0aEZvckxpbmtzIiwicHJvbWlzZXMiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJwYXRoUGFydHMiLCJfZ2V0QnJlYWRjcnVtYnNQYXRoUGFydHMiLCJwYXRoIiwiaGllcmFyY2h5TW9kZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiaG9tZVRpdGxlIiwiX2dldEZFTWFuaWZlc3RCcmVhZGNydW1iU2V0dGluZ3MiLCJob21lIiwicHVzaCIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW50ZW50IiwidGl0bGUiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJnZXRUZXh0IiwiZm9yRWFjaCIsInBhdGhQYXJ0IiwiaWR4IiwiZ2V0Um91dGVyIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwiX2dldEZpcnN0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJwYXJhbWV0ZXJQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZXN1bHRDb250ZXh0IiwiZ2V0T2JqZWN0IiwiZ2V0VGl0bGVJbmZvRnJvbVBhdGgiLCJiaW5kIiwic3BsaXQiLCJzaGlmdCIsInNwbGljZSIsIm1hbmlmZXN0QXBwU2V0dGluZ3MiLCJnZXRNYW5pZmVzdEVudHJ5IiwiYXBwVGl0bGUiLCJhcHBTdWJUaXRsZSIsInN1YlRpdGxlIiwiYXBwSWNvbiIsImljb24iLCJhcHBTcGVjaWZpY0hhc2giLCJnZXRBcHBTcGVjaWZpY0hhc2giLCJ0aXRsZUluZm8iLCJnZXRSb290TGV2ZWxUaXRsZUluZm9ybWF0aW9uIiwic3VidGl0bGUiLCJzcGFjZU5hbWUiLCJzcGFjZSIsIm1hbmlmZXN0RkVTZXR0aW5ncyIsImFwcCIsImJyZWFkY3J1bWJzIiwic2V0QnJlYWRjcnVtYkxpbmtzIiwidW5kZWZpbmVkIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQYXRoIiwiTG9nIiwiaW5mbyIsImJyZWFkY3J1bWJzQ3RybCIsImdldENvbnRlbnQiLCJlcnJvciIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJhbGwiLCJ1cGRhdGVCcmVhZGNydW1iTGluayIsInRpdGxlSGllcmFyY2h5SW5mbyIsImhpZXJhcmNoeVBvc2l0aW9uIiwiaXNMYXN0TGluayIsImxpbmtUZXh0IiwiZ2V0TGlua1RleHQiLCJzZXRDdXJyZW50TG9jYXRpb25UZXh0IiwibGluayIsImdldExpbmtzIiwiTGluayIsInNldFRleHQiLCJzZXRIcmVmIiwiZW5jb2RlVVJJIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJpc0EiLCJkZXRhY2hQcmVzcyIsIm9uTGlua1ByZXNzIiwiYXR0YWNoUHJlc3MiLCJhZGRMaW5rIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImhyZWYiLCJnZXRTb3VyY2UiLCJnZXRIcmVmIiwicGFnZUNvbnRyb2xsZXIiLCJiaW5kaW5nQ29udGV4dCIsImdldFZpZXciLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJnZXRNb2RlbCIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2giLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJ0aXRsZUV4aXN0cyIsInN1YnRpdGxlRXhpc3RzIiwiaXNGaXJzdFBhZ2UiLCJ2aWV3SWQiLCJnZXRJZCIsIl9qc3giLCJVSTVCcmVhZGNydW1icyIsImlkIiwiZ2VuZXJhdGUiLCJtb2RlbENvbnRleHRDaGFuZ2UiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCcmVhZGNydW1icy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IFVJNUJyZWFkY3J1bWJzIGZyb20gXCJzYXAvbS9CcmVhZGNydW1ic1wiO1xuaW1wb3J0IHR5cGUgeyBMaW5rJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RDb250ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5cbmV4cG9ydCBjb25zdCBoaWVyYWNoeU1vZGVPcHRpb25zID0ge1xuXHRPQkpFQ1Q6IFwib2JqZWN0TmF2aWdhdGlvblwiLFxuXHRGVUxMOiBcImZ1bGxOYXZpZ2F0aW9uXCJcbn0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBIaWVyYWNoeU1vZGUgPSAodHlwZW9mIGhpZXJhY2h5TW9kZU9wdGlvbnMpW2tleW9mIHR5cGVvZiBoaWVyYWNoeU1vZGVPcHRpb25zXTtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayB1c2VkIHRvIGNyZWF0ZSBicmVhZGNydW1icy5cbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5CcmVhZGNydW1ic1wiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJlYWRjcnVtYnMgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrPFVJNUJyZWFkY3J1bWJzPiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAubS5JQnJlYWRjcnVtYnNcIilcblx0X19pbXBsZW1lbnRzX19zYXBfbV9JQnJlYWRjcnVtYnMgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBIaWVyYXJjaHkgbW9kZSBmb3IgYnJlYWRjcnVtYnNcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGRlZmF1bHRWYWx1ZTogaGllcmFjaHlNb2RlT3B0aW9ucy5PQkpFQ1QsXG5cdFx0YWxsb3dlZFZhbHVlczogT2JqZWN0LnZhbHVlcyhoaWVyYWNoeU1vZGVPcHRpb25zKVxuXHR9KVxuXHRoaWVyYXJjaHlNb2RlITogSGllcmFjaHlNb2RlO1xuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuX2dldE93bmVyKCk/LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYnJlYWRjcnVtYnMgdGl0bGUgaW5mb3JtYXRpb24gZm9yIGZ1bGwgcGF0aC5cblx0ICogQHBhcmFtIGZ1bGxQYXRoRm9yTGlua3MgVGhlIGNvbnRleHQgcGF0aCBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEByZXR1cm5zIFByb21pc2VzIHJlc29sdmluZyB0byBUaXRsZUluZm9ybWF0aW9uIG9iamVjdHMgZm9yIGVhY2ggcGF0aCBwYXJ0LlxuXHQgKi9cblx0X2dldEJyZWFkY3J1bWJzVGl0bGVJbmZvcyhmdWxsUGF0aEZvckxpbmtzOiBzdHJpbmcpOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+W10ge1xuXHRcdGNvbnN0IHByb21pc2VzOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+W10gPSBbXSxcblx0XHRcdGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkhLFxuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLFxuXHRcdFx0bWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0cGF0aFBhcnRzID0gdGhpcy5fZ2V0QnJlYWRjcnVtYnNQYXRoUGFydHMoZnVsbFBhdGhGb3JMaW5rcyk7XG5cblx0XHRsZXQgcGF0aCA9IFwiXCI7XG5cdFx0aWYgKHRoaXMuaGllcmFyY2h5TW9kZSA9PT0gaGllcmFjaHlNb2RlT3B0aW9ucy5GVUxMKSB7XG5cdFx0XHQvLyBIb21lIHBhZ2Vcblx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpO1xuXHRcdFx0Y29uc3QgaG9tZVRpdGxlID0gdGhpcy5fZ2V0RkVNYW5pZmVzdEJyZWFkY3J1bWJTZXR0aW5ncygpPy5ob21lO1xuXHRcdFx0cHJvbWlzZXMucHVzaChcblx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdFx0XHRpbnRlbnQ6IFwiI1NoZWxsLWhvbWVcIixcblx0XHRcdFx0XHR0aXRsZTogaG9tZVRpdGxlXG5cdFx0XHRcdFx0XHQ/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcoaG9tZVRpdGxlLCB0aGlzKVxuXHRcdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FQUF9IT01FXCIpXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRwYXRoUGFydHMuZm9yRWFjaChcblx0XHRcdGZ1bmN0aW9uICh0aGlzOiBCcmVhZGNydW1icywgcGF0aFBhcnQ6IHN0cmluZywgaWR4OiBudW1iZXIpOiB2b2lkIHtcblx0XHRcdFx0cGF0aCArPSBwYXRoUGFydCA/IGAvJHtwYXRoUGFydH1gIDogXCJcIjtcblx0XHRcdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGVJbmZvQnlIYXNoKHBhdGgpKSB7XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHRhcmdldCBpcyBub3QgZGVjbGFyZWQgaW4gdGhlIHJvdXRlcywgd2Ugc2tpcCBpdFxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiBpbiBmdWxsIE5hdmlnYXRpb24gbW9kZSwgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcGxpY2F0aW9uIHVzZXMgdGhlIHRpdGxlIGFuZCBzdWJ0aXRsZSBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHRpZiAoIWlkeCAmJiBwYXRoID09PSBcIlwiICYmIHRoaXMuaGllcmFyY2h5TW9kZSA9PT0gaGllcmFjaHlNb2RlT3B0aW9ucy5GVUxMKSB7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLl9nZXRGaXJzdFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdENvbnRleHQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRpZiAocmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcm9taXNlcy5wdXNoKHJvb3RWaWV3Q29udHJvbGxlci5nZXRUaXRsZUluZm9Gcm9tUGF0aChwYXRoKSk7XG5cdFx0XHR9LmJpbmQodGhpcylcblx0XHQpO1xuXHRcdHJldHVybiBwcm9taXNlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgcGF0aCBwYXJ0cyBmcm9tIHRoZSBmdWxsIHBhdGggZm9yIGxpbmtzLlxuXHQgKiBAcGFyYW0gZnVsbFBhdGhGb3JMaW5rcyBUaGUgY29udGV4dCBwYXRoIG9mIHRoZSBvYmplY3QgcGFnZS5cblx0ICogQHJldHVybnMgUGF0aCBwYXJ0cyBmb3IgY3JlYXRpbmcgYnJlYWRjcnVtYiBsaW5rcy5cblx0ICovXG5cdF9nZXRCcmVhZGNydW1ic1BhdGhQYXJ0cyhmdWxsUGF0aEZvckxpbmtzOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgcGF0aFBhcnRzID0gZnVsbFBhdGhGb3JMaW5rcz8uc3BsaXQoXCIvXCIpID8/IFtdO1xuXHRcdGlmICh0aGlzLmhpZXJhcmNoeU1vZGUgIT09IGhpZXJhY2h5TW9kZU9wdGlvbnMuRlVMTCkge1xuXHRcdFx0cGF0aFBhcnRzLnNoaWZ0KCk7IC8vIFJlbW92ZSBcIlwiXG5cdFx0XHRwYXRoUGFydHMuc3BsaWNlKC0xLCAxKTsgLy8gUmVtb3ZlIGN1cnJlbnQgcGFnZVxuXHRcdH1cblx0XHRyZXR1cm4gcGF0aFBhcnRzO1xuXHR9XG5cblx0YXN5bmMgX2dldEZpcnN0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTxUaXRsZUluZm9ybWF0aW9uPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSEsXG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIgPSBhcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCksXG5cdFx0XHRtYW5pZmVzdEFwcFNldHRpbmdzID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpLFxuXHRcdFx0YXBwVGl0bGUgPSBtYW5pZmVzdEFwcFNldHRpbmdzLnRpdGxlIHx8IFwiXCIsXG5cdFx0XHRhcHBTdWJUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3Muc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGFwcEljb24gPSBtYW5pZmVzdEFwcFNldHRpbmdzLmljb24gfHwgXCJcIixcblx0XHRcdGFwcFNwZWNpZmljSGFzaCA9IHJvb3RWaWV3Q29udHJvbGxlci5nZXRBcHBTcGVjaWZpY0hhc2goKTtcblxuXHRcdGNvbnN0IHRpdGxlSW5mbyA9IHsgLi4uKGF3YWl0IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSb290TGV2ZWxUaXRsZUluZm9ybWF0aW9uKGFwcFNwZWNpZmljSGFzaCwgYXBwVGl0bGUsIGFwcFN1YlRpdGxlLCBhcHBJY29uKSkgfTtcblx0XHR0aXRsZUluZm8uc3VidGl0bGUgPSB0aXRsZUluZm8udGl0bGU7XG5cdFx0Y29uc3Qgc3BhY2VOYW1lID0gdGhpcy5fZ2V0RkVNYW5pZmVzdEJyZWFkY3J1bWJTZXR0aW5ncygpPy5zcGFjZTtcblx0XHR0aXRsZUluZm8udGl0bGUgPSBzcGFjZU5hbWUgPyBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKHNwYWNlTmFtZSwgdGhpcykgOiBcIlwiO1xuXHRcdHJldHVybiB0aXRsZUluZm87XG5cdH1cblxuXHRfZ2V0RkVNYW5pZmVzdEJyZWFkY3J1bWJTZXR0aW5ncygpOiBOb25OdWxsYWJsZTxNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl1bXCJhcHBcIl0+W1wiYnJlYWRjcnVtYnNcIl0gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkhLFxuXHRcdFx0bWFuaWZlc3RGRVNldHRpbmdzID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik7XG5cdFx0cmV0dXJuIG1hbmlmZXN0RkVTZXR0aW5ncz8uYXBwPy5icmVhZGNydW1icztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGJyZWFkY3J1bWIgbGlua3MgaW4gdGhlIGdpdmVuIEJyZWFkY3J1bWJzIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHJpZXZlcyB0aGUgdGl0bGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggcGF0aCBwYXJ0IGFuZCBzZXRzIHRoZSBsaW5rcyBhY2NvcmRpbmdseS5cblx0ICogSWYgdGhlIGBmdWxsUGF0aEZvckxpbmtgIHBhcmFtZXRlciBpcyBub3QgcHJvdmlkZWQsIGl0IHVzZXMgdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoIG9mIHRoZSBCcmVhZGNydW1icyBjb250cm9sLlxuXHQgKiBAcGFyYW0gZnVsbFBhdGhGb3JMaW5rcyBUaGUgZnVsbCBwYXRoIGZvciB0aGUgbGluaywgZGVmYXVsdHMgdG8gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoIG9mIHRoZSBCcmVhZGNydW1icyBjb250cm9sXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGJyZWFkY3J1bWIgbGlua3MgYXJlIHNldFxuXHQgKi9cblx0YXN5bmMgc2V0QnJlYWRjcnVtYkxpbmtzKGZ1bGxQYXRoRm9yTGlua3MgPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0eXBlb2YgZnVsbFBhdGhGb3JMaW5rcyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0TG9nLmluZm8oXCJCcmVhZGNydW1iczogcGF0aCBub3QgYXZhaWxhYmxlLiBDYW5ub3Qgc2V0IGJyZWFkY3J1bWIgbGlua3MuXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBicmVhZGNydW1ic0N0cmwgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRpZiAoIWJyZWFkY3J1bWJzQ3RybCkge1xuXHRcdFx0TG9nLmVycm9yKFwiQnJlYWRjcnVtYnMgQnVpbGRpbmcgYmxvY2s6IEJyZWFkY3J1bWJzIGNvbnRyb2wgbm90IGF2YWlsYWJsZS4gQ2Fubm90IHNldCBicmVhZGNydW1iIGxpbmtzLlwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IFRpdGxlSW5mb3JtYXRpb25bXSA9IGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX2dldEJyZWFkY3J1bWJzVGl0bGVJbmZvcyhmdWxsUGF0aEZvckxpbmtzKSk7XG5cdFx0XHR0aXRsZUhpZXJhcmNoeUluZm9zLmZvckVhY2godGhpcy51cGRhdGVCcmVhZGNydW1iTGluay5iaW5kKHRoaXMpKTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgYnJlYWRjcnVtYiBsaW5rczogXCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgYnJlYWRjcnVtYiBsaW5rIGF0IHRoZSBzcGVjaWZpZWQgaGllcmFyY2h5IHBvc2l0aW9uLlxuXHQgKiBAcGFyYW0gdGl0bGVIaWVyYXJjaHlJbmZvIFRoZSB0aXRsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGxpbmtcblx0ICogQHBhcmFtIGhpZXJhcmNoeVBvc2l0aW9uIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGluayBpbiB0aGUgaGllcmFyY2h5XG5cdCAqIEBwYXJhbSB0aXRsZUhpZXJhcmNoeUluZm9zIFRoZSBhcnJheSBvZiBhbGwgdGl0bGUgaW5mb3JtYXRpb24gZm9yIHRoZSBoaWVyYXJjaHlcblx0ICovXG5cdHVwZGF0ZUJyZWFkY3J1bWJMaW5rKHRpdGxlSGllcmFyY2h5SW5mbzogVGl0bGVJbmZvcm1hdGlvbiwgaGllcmFyY2h5UG9zaXRpb246IG51bWJlciwgdGl0bGVIaWVyYXJjaHlJbmZvczogVGl0bGVJbmZvcm1hdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgYnJlYWRjcnVtYnNDdHJsID0gdGhpcy5nZXRDb250ZW50KCkhO1xuXHRcdGNvbnN0IGlzTGFzdExpbmsgPSBoaWVyYXJjaHlQb3NpdGlvbiA9PT0gdGl0bGVIaWVyYXJjaHlJbmZvcy5sZW5ndGggLSAxO1xuXHRcdGNvbnN0IGxpbmtUZXh0ID0gdGhpcy5nZXRMaW5rVGV4dCh0aXRsZUhpZXJhcmNoeUluZm8sIGlzTGFzdExpbmssIGhpZXJhcmNoeVBvc2l0aW9uKTtcblx0XHRpZiAoIWxpbmtUZXh0KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJCcmVhZGNydW1iczogTm8gbGluayB0ZXh0IGF2YWlsYWJsZSBmb3IgdGhlIGJyZWFkY3J1bWIgbGluayBhdCBwb3NpdGlvbiBcIiArIGhpZXJhcmNoeVBvc2l0aW9uKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGlzTGFzdExpbmsgJiYgdGhpcy5oaWVyYXJjaHlNb2RlID09PSBoaWVyYWNoeU1vZGVPcHRpb25zLkZVTEwpIHtcblx0XHRcdC8vIE5PVEU6IEFzIG9mIDEuMTM2LjAsIHRoZSBzZXRDdXJyZW50TG9jYXRpb25UZXh0IG1ldGhvZCBpcyBub3QgZGVwcmVjYXRlZC5cblx0XHRcdC8vIEl0IHdhcyBkZXByaWNhdGVkIGluIFVJNSAxLjEyMyBidXQgcmVpbnRyb2R1Y2VkIG9uL2JlZm9yZSBVSTUgMS4xMjcuXG5cdFx0XHQvLyBBcyBvZiBkYXkgb2Ygd3JpdGluZyB0aGlzLCB3ZSB1c2UgVUk1IDEuMTI0IGZvciBvcGVudWk1IHR5cGVzLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRicmVhZGNydW1ic0N0cmwuc2V0Q3VycmVudExvY2F0aW9uVGV4dChsaW5rVGV4dCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGxpbmsgPSBicmVhZGNydW1ic0N0cmwuZ2V0TGlua3MoKVtoaWVyYXJjaHlQb3NpdGlvbl0gPyBicmVhZGNydW1ic0N0cmwuZ2V0TGlua3MoKVtoaWVyYXJjaHlQb3NpdGlvbl0gOiBuZXcgTGluaygpO1xuXHRcdFx0Ly9zQ3VycmVudEVudGl0eSBpcyBhIGZhbGxiYWNrIHZhbHVlIGluIGNhc2Ugb2YgZW1wdHkgdGl0bGVcblx0XHRcdGxpbmsuc2V0VGV4dChsaW5rVGV4dCk7XG5cdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdGxpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCEpKTtcblxuXHRcdFx0Ly8gQXR0YWNoIHByZXNzIGhhbmRsZXIgdG8gY2hlY2sgZm9yIGRyYWZ0IGRhdGEgbG9zcyBiZWZvcmUgbmF2aWdhdGlvbi4gT25seSByZXF1aXJlZCBmb3IgdGhlIGZpcnN0IHR3byBicmVhZGNydW1iXG5cdFx0XHQvLyBsaW5rcyBpbiBGVUxMIG1vZGUgKGhvbWUgYW5kIExSKSwgYXMgaW4gT0JKRUNUIG1vZGUsIGJyZWFkY3J1bWJzIHN0YXJ0IGZyb20gdGhlIHN1YiBvYmplY3QgcGFnZSwgd2hlcmVpbiBub1xuXHRcdFx0Ly8gcG9wdXAgaXMgcmVxdWlyZWQuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMuaGllcmFyY2h5TW9kZSA9PT0gaGllcmFjaHlNb2RlT3B0aW9ucy5GVUxMICYmXG5cdFx0XHRcdGhpZXJhcmNoeVBvc2l0aW9uIDw9IDEgJiZcblx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGxpbmsuZGV0YWNoUHJlc3ModGhpcy5vbkxpbmtQcmVzcywgdGhpcyk7XG5cdFx0XHRcdGxpbmsuYXR0YWNoUHJlc3ModGhpcy5vbkxpbmtQcmVzcywgdGhpcyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghYnJlYWRjcnVtYnNDdHJsLmdldExpbmtzKClbaGllcmFyY2h5UG9zaXRpb25dKSB7XG5cdFx0XHRcdGJyZWFkY3J1bWJzQ3RybC5hZGRMaW5rKGxpbmspO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgbGluayBwcmVzcyBldmVudCB0byBjaGVjayBmb3IgdW5zYXZlZCBjaGFuZ2VzIGJlZm9yZSBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIHByZXNzIGV2ZW50IGZyb20gdGhlIGxpbmtcblx0ICovXG5cdGFzeW5jIG9uTGlua1ByZXNzKGV2ZW50OiBMaW5rJFByZXNzRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGNvbnN0IGhyZWYgPSBldmVudC5nZXRTb3VyY2UoKS5nZXRIcmVmKCk7XG5cdFx0Y29uc3QgcGFnZUNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBwYWdlQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdGlmIChNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksIGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdGF3YWl0IGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhhc2ggPSBocmVmO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdHBhZ2VDb250cm9sbGVyLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRwYWdlQ29udHJvbGxlcixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaGFzaCA9IGhyZWY7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBsaW5rIHRleHQgYmFzZWQgb24gdGl0bGUgYW5kIHN1YnRpdGxlLlxuXHQgKiBAcGFyYW0gdGl0bGVJbmZvIFRpdGxlIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgdGl0bGUgYW5kIHN1YnRpdGxlXG5cdCAqIEBwYXJhbSBpc0xhc3RMaW5rIERldGVybWluZXMgaWYgaXQgaXMgdGhlIGxhc3QgbGluayBpbiB0aGUgYnJlYWRjcnVtYnNcblx0ICogQHBhcmFtIGhpZXJhcmNoeVBvc2l0aW9uIFBvc2l0aW9uIG9mIHRoZSBsaW5rIGluIHRoZSBoaWVyYXJjaHlcblx0ICogQHJldHVybnMgTGluayB0ZXh0XG5cdCAqL1xuXHRnZXRMaW5rVGV4dCh0aXRsZUluZm86IFRpdGxlSW5mb3JtYXRpb24sIGlzTGFzdExpbms6IGJvb2xlYW4sIGhpZXJhcmNoeVBvc2l0aW9uOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHsgdGl0bGUsIHN1YnRpdGxlIH0gPSB0aXRsZUluZm87XG5cdFx0Y29uc3QgdGl0bGVFeGlzdHMgPSB0aXRsZSAhPT0gdW5kZWZpbmVkICYmIHRpdGxlICE9PSBcIlwiO1xuXHRcdGNvbnN0IHN1YnRpdGxlRXhpc3RzID0gc3VidGl0bGUgIT09IHVuZGVmaW5lZCAmJiBzdWJ0aXRsZSAhPT0gXCJcIjtcblx0XHRpZiAodGl0bGVFeGlzdHMgJiYgc3VidGl0bGVFeGlzdHMgJiYgdGhpcy5oaWVyYXJjaHlNb2RlID09PSBoaWVyYWNoeU1vZGVPcHRpb25zLkZVTEwpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpO1xuXHRcdFx0Y29uc3QgaXNGaXJzdFBhZ2UgPSBoaWVyYXJjaHlQb3NpdGlvbiA9PT0gMTtcblx0XHRcdHJldHVybiAhaXNGaXJzdFBhZ2UgJiYgaXNMYXN0TGluayA/IHRpdGxlIDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9CUkVBRENSVU1CU19USVRMRV9MT05HX1RFTVBMQVRFXCIsIFt0aXRsZSwgc3VidGl0bGVdKTtcblx0XHR9XG5cdFx0aWYgKHN1YnRpdGxlRXhpc3RzKSB7XG5cdFx0XHRyZXR1cm4gc3VidGl0bGU7XG5cdFx0fSBlbHNlIGlmICh0aXRsZUV4aXN0cykge1xuXHRcdFx0cmV0dXJuIHRpdGxlO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogVUk1QnJlYWRjcnVtYnMge1xuXHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0VmlldygpLmdldElkKCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxVSTVCcmVhZGNydW1ic1xuXHRcdFx0XHQvLyBUaGlzIGlzIHNldCBhcyBhYnNvbHV0ZSBJRC5cblx0XHRcdFx0aWQ9e3ZpZXdJZCA/IGdlbmVyYXRlKFtgJHt2aWV3SWR9LS1mZWAsIFwiQnJlYWRjcnVtYnNcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRtb2RlbENvbnRleHRDaGFuZ2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLnNldEJyZWFkY3J1bWJMaW5rcygpO1xuXHRcdFx0XHR9fVxuXHRcdFx0PjwvVUk1QnJlYWRjcnVtYnM+XG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBY08sTUFBTUEsbUJBQW1CLEdBQUc7SUFDbENDLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUJDLElBQUksRUFBRTtFQUNQLENBQVU7RUFBQ0MsUUFBQSxDQUFBSCxtQkFBQSxHQUFBQSxtQkFBQTtFQUdYO0FBQ0E7QUFDQTtFQUZBLElBSXFCSSxXQUFXLElBQUFDLElBQUEsR0FEL0JDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFBQyxLQUFBLEdBRTFDQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFBQyxLQUFBLEdBT3hDQyxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLFFBQVE7SUFDZEMsWUFBWSxFQUFFWixtQkFBbUIsQ0FBQ0MsTUFBTTtJQUN4Q1ksYUFBYSxFQUFFQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ2YsbUJBQW1CO0VBQ2pELENBQUMsQ0FBQyxFQUFBSyxJQUFBLENBQUFXLE1BQUEsSUFBQUMs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
@@ -2,10 +2,13 @@ import Log from "sap/base/Log";
2
2
  import { defineUI5Class, implementInterface, property } from "sap/fe/base/ClassSupport";
3
3
  import BuildingBlock from "sap/fe/core/buildingBlocks/BuildingBlock";
4
4
  import CommonUtils from "sap/fe/core/CommonUtils";
5
+ import draft from "sap/fe/core/controllerextensions/editFlow/draft";
6
+ import ModelHelper from "sap/fe/core/helpers/ModelHelper";
5
7
  import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
6
8
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
7
9
  import type { TitleInformation } from "sap/fe/core/rootView/RootViewBaseController";
8
10
  import UI5Breadcrumbs from "sap/m/Breadcrumbs";
11
+ import type { Link$PressEvent } from "sap/m/Link";
9
12
  import Link from "sap/m/Link";
10
13
  import type { ManifestContent } from "sap/ui/core/Manifest";
11
14
 
@@ -107,18 +110,6 @@ export default class Breadcrumbs extends BuildingBlock<UI5Breadcrumbs> {
107
110
  return pathParts;
108
111
  }
109
112
 
110
- /**
111
- * Get the context path from the hash.
112
- * @param sHash The hash to get the context path from
113
- * @returns Context path from the corresponding route target options
114
- */
115
- _getContextPathFromHash(sHash: string): string | undefined {
116
- const appComponent = this.getAppComponent()!,
117
- rootViewController = appComponent.getRootViewController();
118
- const { entitySet, contextPath } = rootViewController.getTargetOptionsFromHash(sHash)?.options?.settings ?? {};
119
- return contextPath ?? (entitySet ? `/${entitySet}` : undefined);
120
- }
121
-
122
113
  async _getFirstPageTitleInformation(): Promise<TitleInformation> {
123
114
  const appComponent = this.getAppComponent()!,
124
115
  rootViewController = appComponent.getRootViewController(),
@@ -193,12 +184,54 @@ export default class Breadcrumbs extends BuildingBlock<UI5Breadcrumbs> {
193
184
  link.setText(linkText);
194
185
  //We apply an additional encodeURI in case of special characters (ie "/") used in the url through the semantic keys
195
186
  link.setHref(encodeURI(titleHierarchyInfo.intent!));
187
+
188
+ // Attach press handler to check for draft data loss before navigation. Only required for the first two breadcrumb
189
+ // links in FULL mode (home and LR), as in OBJECT mode, breadcrumbs start from the sub object page, wherein no
190
+ // popup is required.
191
+ if (
192
+ this.hierarchyMode === hierachyModeOptions.FULL &&
193
+ hierarchyPosition <= 1 &&
194
+ this.getPageController().isA("sap.fe.templates.ObjectPage.ObjectPageController")
195
+ ) {
196
+ link.detachPress(this.onLinkPress, this);
197
+ link.attachPress(this.onLinkPress, this);
198
+ }
199
+
196
200
  if (!breadcrumbsCtrl.getLinks()[hierarchyPosition]) {
197
201
  breadcrumbsCtrl.addLink(link);
198
202
  }
199
203
  }
200
204
  }
201
205
 
206
+ /**
207
+ * Handle link press event to check for unsaved changes before navigation.
208
+ * @param event The press event from the link
209
+ */
210
+ async onLinkPress(event: Link$PressEvent): Promise<void> {
211
+ event.preventDefault();
212
+ const href = event.getSource().getHref();
213
+ const pageController = this.getPageController();
214
+ const bindingContext = pageController.getView().getBindingContext();
215
+
216
+ if (ModelHelper.isDraftSupported(bindingContext.getModel().getMetaModel(), bindingContext.getPath())) {
217
+ await draft.processDataLossOrDraftDiscardConfirmation(
218
+ () => {
219
+ window.location.hash = href;
220
+ },
221
+ Function.prototype,
222
+ pageController.getView().getBindingContext(),
223
+ pageController,
224
+ true,
225
+ draft.NavigationType.BackNavigation,
226
+ undefined,
227
+ undefined,
228
+ true
229
+ );
230
+ } else {
231
+ window.location.hash = href;
232
+ }
233
+ }
234
+
202
235
  /**
203
236
  * Get link text based on title and subtitle.
204
237
  * @param titleInfo Title information containing title and subtitle