@sapui5/sap.fe.core 1.135.0 → 1.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -2
- package/src/sap/fe/core/ActionRuntime.ts +3 -1
- package/src/sap/fe/core/AppComponent.js +6 -4
- package/src/sap/fe/core/AppComponent.ts +3 -1
- package/src/sap/fe/core/AppStateHandler.js +8 -6
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/CommonUtils.js +4 -1
- package/src/sap/fe/core/CommonUtils.ts +12 -2
- package/src/sap/fe/core/ExtensionAPI.js +5 -3
- package/src/sap/fe/core/ExtensionAPI.ts +4 -2
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +13 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +13 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +19 -6
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +4 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +58 -14
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +71 -11
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +184 -17
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +204 -12
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -3
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +11 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +35 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -6
- package/src/sap/fe/core/controllerextensions/Routing.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -11
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +11 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +21 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +19 -5
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +17 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +19 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +33 -31
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +4 -3
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +7 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +18 -8
- package/src/sap/fe/core/converters/controls/Common/Action.js +54 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -4
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +13 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +29 -9
- package/src/sap/fe/core/converters/controls/Common/Table.ts +38 -8
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +14 -16
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +61 -96
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +62 -13
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +75 -13
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -33
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -44
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +9 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +7 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +29 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +34 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +35 -16
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +24 -3
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +4 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +3 -8
- package/src/sap/fe/core/helpers/ModelHelper.js +14 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +38 -39
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/WebSocket.js +10 -1
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +23 -2
- package/src/sap/fe/core/messagebundle_bg.properties +23 -2
- package/src/sap/fe/core/messagebundle_ca.properties +21 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +23 -2
- package/src/sap/fe/core/messagebundle_cs.properties +21 -0
- package/src/sap/fe/core/messagebundle_cy.properties +21 -0
- package/src/sap/fe/core/messagebundle_da.properties +23 -2
- package/src/sap/fe/core/messagebundle_de.properties +23 -2
- package/src/sap/fe/core/messagebundle_el.properties +21 -0
- package/src/sap/fe/core/messagebundle_en.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_GB.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +23 -2
- package/src/sap/fe/core/messagebundle_es.properties +21 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +21 -0
- package/src/sap/fe/core/messagebundle_et.properties +21 -0
- package/src/sap/fe/core/messagebundle_fi.properties +21 -0
- package/src/sap/fe/core/messagebundle_fr.properties +22 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +21 -0
- package/src/sap/fe/core/messagebundle_hi.properties +22 -1
- package/src/sap/fe/core/messagebundle_hr.properties +24 -3
- package/src/sap/fe/core/messagebundle_hu.properties +21 -0
- package/src/sap/fe/core/messagebundle_id.properties +21 -0
- package/src/sap/fe/core/messagebundle_it.properties +23 -2
- package/src/sap/fe/core/messagebundle_iw.properties +21 -0
- package/src/sap/fe/core/messagebundle_ja.properties +21 -0
- package/src/sap/fe/core/messagebundle_kk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ko.properties +21 -0
- package/src/sap/fe/core/messagebundle_lt.properties +21 -0
- package/src/sap/fe/core/messagebundle_lv.properties +23 -2
- package/src/sap/fe/core/messagebundle_mk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ms.properties +22 -1
- package/src/sap/fe/core/messagebundle_nl.properties +21 -0
- package/src/sap/fe/core/messagebundle_no.properties +21 -0
- package/src/sap/fe/core/messagebundle_pl.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +21 -0
- package/src/sap/fe/core/messagebundle_ro.properties +23 -2
- package/src/sap/fe/core/messagebundle_ru.properties +22 -1
- package/src/sap/fe/core/messagebundle_sh.properties +23 -2
- package/src/sap/fe/core/messagebundle_sk.properties +21 -0
- package/src/sap/fe/core/messagebundle_sl.properties +23 -2
- package/src/sap/fe/core/messagebundle_sr.properties +23 -2
- package/src/sap/fe/core/messagebundle_sv.properties +21 -0
- package/src/sap/fe/core/messagebundle_th.properties +21 -0
- package/src/sap/fe/core/messagebundle_tr.properties +21 -0
- package/src/sap/fe/core/messagebundle_uk.properties +23 -2
- package/src/sap/fe/core/messagebundle_vi.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_CN.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +21 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +5 -5
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -4
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +61 -9
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +70 -7
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +28 -12
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +4 -3
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +27 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +198 -58
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +9 -7
|
@@ -13,7 +13,7 @@ import { StandardActions, TriggerType, triggerConfiguredSurvey } from "sap/fe/co
|
|
|
13
13
|
import type InternalRouting from "sap/fe/core/controllerextensions/InternalRouting";
|
|
14
14
|
import type MessageHandler from "sap/fe/core/controllerextensions/MessageHandler";
|
|
15
15
|
import type { CustomMessage } from "sap/fe/core/controllerextensions/MessageHandler";
|
|
16
|
-
import { Activity, shareObject } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
|
|
16
|
+
import { Activity, CollaborationUtils, shareObject } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
|
|
17
17
|
import type { CancelParameters, CreateParameters } from "sap/fe/core/controllerextensions/editFlow/TransactionHelper";
|
|
18
18
|
import TransactionHelper from "sap/fe/core/controllerextensions/editFlow/TransactionHelper";
|
|
19
19
|
import type { BindContextParameters, RootContextInfo, SiblingInformation } from "sap/fe/core/controllerextensions/editFlow/draft";
|
|
@@ -117,6 +117,8 @@ class EditFlow extends BaseControllerExtension {
|
|
|
117
117
|
|
|
118
118
|
private _hiddenDraft: HiddenDraft | undefined;
|
|
119
119
|
|
|
120
|
+
private fetchCollaborativeDraftUsersPromise: Promise<unknown> | undefined;
|
|
121
|
+
|
|
120
122
|
@methodOverride()
|
|
121
123
|
onInit(): void {
|
|
122
124
|
this._hiddenDraft = this.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft as HiddenDraft;
|
|
@@ -211,6 +213,14 @@ class EditFlow extends BaseControllerExtension {
|
|
|
211
213
|
|
|
212
214
|
let overrideMessageUIDecision = false;
|
|
213
215
|
if (newDocumentContext) {
|
|
216
|
+
if (programmingModel !== ProgrammingModel.Sticky && ModelHelper.isCollaborationDraftSupported(model.getMetaModel())) {
|
|
217
|
+
// according to UX in case of enabled collaboration draft we share the object immediately
|
|
218
|
+
shareObject(newDocumentContext);
|
|
219
|
+
this.fetchCollaborativeDraftUsersPromise = newDocumentContext.requestSideEffects(
|
|
220
|
+
["DraftAdministrativeData/DraftAdministrativeUser"],
|
|
221
|
+
"$auto.Workers"
|
|
222
|
+
);
|
|
223
|
+
}
|
|
214
224
|
await this.base.editFlow.onAfterEdit({ context: contextToNavigate });
|
|
215
225
|
await this._handleNewContext(contextToNavigate as Context, {
|
|
216
226
|
editable: true,
|
|
@@ -228,9 +238,6 @@ class EditFlow extends BaseControllerExtension {
|
|
|
228
238
|
stickyContext = newDocumentContext;
|
|
229
239
|
}
|
|
230
240
|
await this.handleStickyOn(stickyContext);
|
|
231
|
-
} else if (ModelHelper.isCollaborationDraftSupported(model.getMetaModel())) {
|
|
232
|
-
// according to UX in case of enabled collaboration draft we share the object immediately
|
|
233
|
-
shareObject(newDocumentContext);
|
|
234
241
|
}
|
|
235
242
|
overrideMessageUIDecision = true;
|
|
236
243
|
|
|
@@ -799,7 +806,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
799
806
|
),
|
|
800
807
|
keepTransientContextOnFailed: false, // currently not fully supported
|
|
801
808
|
busyMode: "Local", // busy handling shall be done locally only
|
|
802
|
-
busyId: table?.
|
|
809
|
+
busyId: (table?.getParent() as TableAPI | undefined)?.getTableDefinition()?.annotation.id,
|
|
803
810
|
parentControl: this.getView(),
|
|
804
811
|
beforeCreateCallBack: this.base.editFlow.onBeforeCreate,
|
|
805
812
|
skipParameterDialog: appComponent.getStartupMode() === StartupMode.AutoCreate, // In case the application was called with preferredMode=autoCreateWith, we want to skip the action parameter dialog
|
|
@@ -889,6 +896,8 @@ class EditFlow extends BaseControllerExtension {
|
|
|
889
896
|
}
|
|
890
897
|
}
|
|
891
898
|
});
|
|
899
|
+
} else {
|
|
900
|
+
table = undefined;
|
|
892
901
|
}
|
|
893
902
|
|
|
894
903
|
// take care on message handling, draft indicator (in case of draft)
|
|
@@ -900,7 +909,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
900
909
|
//Check if All parameters are needed
|
|
901
910
|
keepTransientContextOnFailed: false, // currently not fully supported
|
|
902
911
|
busyMode: "Local", // busy handling shall be done locally only
|
|
903
|
-
busyId: table?.
|
|
912
|
+
busyId: (table?.getParent() as TableAPI | undefined)?.getTableDefinition()?.annotation.id,
|
|
904
913
|
parentControl: this.getView(),
|
|
905
914
|
beforeCreateCallBack: this.base.editFlow.onBeforeCreate,
|
|
906
915
|
skipParameterDialog: this.getAppComponent().getStartupMode() === StartupMode.AutoCreate, // In case the application was called with preferredMode=autoCreateWith, we want to skip the action parameter dialog
|
|
@@ -1011,7 +1020,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1011
1020
|
//Check if All parameters are needed
|
|
1012
1021
|
keepTransientContextOnFailed: false, // currently not fully supported
|
|
1013
1022
|
busyMode: "Local", // busy handling shall be done locally only
|
|
1014
|
-
busyId: table?.
|
|
1023
|
+
busyId: (table?.getParent() as TableAPI | undefined)?.getTableDefinition()?.annotation.id,
|
|
1015
1024
|
parentControl: this.getView(),
|
|
1016
1025
|
beforeCreateCallBack: this.base.editFlow.onBeforeCreate,
|
|
1017
1026
|
afterCreateCallBack: afterCreateInDialog,
|
|
@@ -1561,6 +1570,24 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1561
1570
|
return Promise.resolve();
|
|
1562
1571
|
}
|
|
1563
1572
|
|
|
1573
|
+
/**
|
|
1574
|
+
* This function can be used to intercept the action execution. You can execute custom coding in this function.
|
|
1575
|
+
* The framework waits for the returned promise to be resolved before continuing the action.
|
|
1576
|
+
* If you reject the promise, the action is stopped.
|
|
1577
|
+
*
|
|
1578
|
+
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
1579
|
+
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1580
|
+
* @param _mParameters Object containing the parameters passed to onBeforeExecuteAction
|
|
1581
|
+
* @param _mParameters.contexts An array of contexts that are going to be used for the action execution
|
|
1582
|
+
* @returns A promise to be returned by the overridden method. If resolved, the 'Delete' action is triggered. If rejected, the action is not triggered.
|
|
1583
|
+
*/
|
|
1584
|
+
@publicExtension()
|
|
1585
|
+
@extensible("AfterAsync")
|
|
1586
|
+
async onBeforeExecuteAction(_mParameters?: { contexts?: Context[] | Context | null }): Promise<void> {
|
|
1587
|
+
// to be overridden
|
|
1588
|
+
return Promise.resolve();
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1564
1591
|
/**
|
|
1565
1592
|
* This function can be used to execute code after the 'Save' action.
|
|
1566
1593
|
* You can execute custom coding in this function.
|
|
@@ -1673,6 +1700,16 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1673
1700
|
@publicExtension()
|
|
1674
1701
|
@finalExtension()
|
|
1675
1702
|
async saveDocument(oContext: Context, mParameters: SaveDocumentParameters): Promise<void> {
|
|
1703
|
+
// saveDocument is called from inline edit keyboard shortcut
|
|
1704
|
+
if (
|
|
1705
|
+
!this.getGlobalUIModel().getProperty("/isEditable") &&
|
|
1706
|
+
this.base.inlineEditFlow?.isInlineEditPossible() &&
|
|
1707
|
+
this.getGlobalUIModel().getProperty("/isInlineEditActive")
|
|
1708
|
+
) {
|
|
1709
|
+
this.base.inlineEditFlow.inlineEditSave();
|
|
1710
|
+
return;
|
|
1711
|
+
}
|
|
1712
|
+
|
|
1676
1713
|
mParameters = mParameters || {};
|
|
1677
1714
|
const bExecuteSideEffectsOnError = mParameters.bExecuteSideEffectsOnError || undefined;
|
|
1678
1715
|
const transactionHelper = this.getTransactionHelper();
|
|
@@ -1820,8 +1857,6 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1820
1857
|
siblingInfo = await this._computeSiblingInformation(oContext, oContext, ProgrammingModel.Draft, false);
|
|
1821
1858
|
}
|
|
1822
1859
|
if (siblingInfo) {
|
|
1823
|
-
this.setEditMode(editable ? EditMode.Editable : EditMode.Display, false); //switch to edit mode only if a draft is available
|
|
1824
|
-
|
|
1825
1860
|
if (oRootViewController.isFclEnabled()) {
|
|
1826
1861
|
const lastSemanticMapping = this._getSemanticMapping();
|
|
1827
1862
|
if (lastSemanticMapping?.technicalPath === oContext.getPath()) {
|
|
@@ -2365,6 +2400,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2365
2400
|
|
|
2366
2401
|
try {
|
|
2367
2402
|
await this.syncTask();
|
|
2403
|
+
await this.base.editFlow.onBeforeExecuteAction({ contexts: mParameters.contexts });
|
|
2368
2404
|
const response = await transactionHelper.callAction(sActionName, mParameters, this.getAppComponent(), this.getMessageHandler());
|
|
2369
2405
|
const successFullExecution = response.filter(isFulfilled);
|
|
2370
2406
|
if (response.length !== successFullExecution.length) {
|
|
@@ -2677,8 +2713,33 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2677
2713
|
this.setDraftStatus(DraftStatus.Clear);
|
|
2678
2714
|
const globalModel = this.getGlobalUIModel();
|
|
2679
2715
|
globalModel.setProperty("/isEditablePending", true, undefined, true);
|
|
2716
|
+
|
|
2717
|
+
const model = this.getView().getModel();
|
|
2718
|
+
const isCollaborationDraftSupported = ModelHelper.isCollaborationDraftSupported(model!.getMetaModel());
|
|
2719
|
+
let forceDisplayMode = false;
|
|
2680
2720
|
const isActiveEntity = await context.requestObject("IsActiveEntity");
|
|
2681
|
-
|
|
2721
|
+
|
|
2722
|
+
if (isCollaborationDraftSupported && isActiveEntity === false) {
|
|
2723
|
+
await this.fetchCollaborativeDraftUsersPromise;
|
|
2724
|
+
const usersInvited = (await context.requestObject("DraftAdministrativeData/DraftAdministrativeUser")) as {
|
|
2725
|
+
DraftEntityType: string;
|
|
2726
|
+
DraftUUID: string;
|
|
2727
|
+
UserID: string;
|
|
2728
|
+
}[];
|
|
2729
|
+
const me = CollaborationUtils.getMe(this.getAppComponent()),
|
|
2730
|
+
hasMe = usersInvited?.filter((singleUser) => singleUser.UserID === me.id) ?? [];
|
|
2731
|
+
if (hasMe.length > 0) {
|
|
2732
|
+
globalModel.setProperty("/hasCollaborationAuthorization", true);
|
|
2733
|
+
} else {
|
|
2734
|
+
forceDisplayMode = true;
|
|
2735
|
+
globalModel.setProperty("/hasCollaborationAuthorization", false);
|
|
2736
|
+
}
|
|
2737
|
+
} else {
|
|
2738
|
+
globalModel.setProperty("/hasCollaborationAuthorization", undefined);
|
|
2739
|
+
}
|
|
2740
|
+
this.fetchCollaborativeDraftUsersPromise = undefined;
|
|
2741
|
+
|
|
2742
|
+
if (isActiveEntity === false && !forceDisplayMode) {
|
|
2682
2743
|
// in case the document is draft set it in edit mode
|
|
2683
2744
|
this.setEditMode(EditMode.Editable);
|
|
2684
2745
|
const hasActiveEntity = await context.requestObject("HasActiveEntity");
|
|
@@ -2723,7 +2784,6 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2723
2784
|
* @param parameters.noDialog
|
|
2724
2785
|
* @param parameters.title
|
|
2725
2786
|
* @param parameters.description
|
|
2726
|
-
* @param parameters.entitySetName
|
|
2727
2787
|
* @param parameters.numberOfSelectedContexts
|
|
2728
2788
|
* @param parameters.unSavedContexts
|
|
2729
2789
|
* @param parameters.lockedContexts
|
|
@@ -2,18 +2,19 @@
|
|
|
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/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BaseControllerExtension", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/TypeGuards", "sap/ui/core/Messaging"], function (Log, ClassSupport, HookSupport, CommonUtils, BaseControllerExtension, messageHandling, MetaModelConverter, TypeGuards, Messaging) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BaseControllerExtension", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controls/inlineEditFlow/BeforeActionDialog", "sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/TypeGuards", "sap/m/MessageToast", "sap/ui/core/Lib", "sap/ui/core/Messaging", "../controls/inlineEditFlow/DraftExistsDialog"], function (Log, ClassSupport, HookSupport, CommonUtils, BaseControllerExtension, messageHandling, BeforeActionDialog, BeforeNavigationDialog, MetaModelConverter, TypeGuards, MessageToast, Lib, Messaging, DraftExistsDialog) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _class, _class2;
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _class2;
|
|
9
9
|
var _exports = {};
|
|
10
10
|
var isProperty = TypeGuards.isProperty;
|
|
11
11
|
var hookable = HookSupport.hookable;
|
|
12
|
+
var methodOverride = ClassSupport.methodOverride;
|
|
12
13
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
13
14
|
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
14
15
|
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
15
16
|
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
16
|
-
let InlineEditFlow = (_dec = defineUI5Class("sap.fe.core.controllerextensions.InlineEditFlow"), _dec2 = hookable("Before"), _dec(_class = (_class2 = /*#__PURE__*/function (_BaseControllerExtens) {
|
|
17
|
+
let InlineEditFlow = (_dec = defineUI5Class("sap.fe.core.controllerextensions.InlineEditFlow"), _dec2 = hookable("Before"), _dec3 = methodOverride("routing"), _dec4 = methodOverride("editFlow"), _dec5 = methodOverride("editFlow"), _dec6 = methodOverride("editFlow"), _dec7 = methodOverride("editFlow"), _dec(_class = (_class2 = /*#__PURE__*/function (_BaseControllerExtens) {
|
|
17
18
|
function InlineEditFlow() {
|
|
18
19
|
var _this;
|
|
19
20
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
@@ -36,10 +37,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
36
37
|
|
|
37
38
|
/**
|
|
38
39
|
* Save the inline edit changes.
|
|
39
|
-
* @param bindingContextPath
|
|
40
40
|
* @returns A promise that resolved once the batch has returned.
|
|
41
41
|
*/;
|
|
42
|
-
_proto.inlineEditSave = async function inlineEditSave(
|
|
42
|
+
_proto.inlineEditSave = async function inlineEditSave() {
|
|
43
43
|
const model = this.base.getView().getModel();
|
|
44
44
|
const messages = Messaging.getMessageModel().getData();
|
|
45
45
|
const hasTechnicalMessages = messages.some(message => !messageHandling.isNonTechnicalMessage(message));
|
|
@@ -54,7 +54,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
54
54
|
}
|
|
55
55
|
try {
|
|
56
56
|
Messaging.removeAllMessages();
|
|
57
|
-
this.inlineEditBindingContextPath = bindingContextPath;
|
|
58
57
|
await model.submitBatch(CommonUtils.INLINEEDIT_UPDATEGROUPID);
|
|
59
58
|
} catch (error) {
|
|
60
59
|
Log.warning("Error while saving inline edit changes");
|
|
@@ -66,30 +65,40 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
66
65
|
*/;
|
|
67
66
|
_proto.inlineEditDiscard = function inlineEditDiscard() {
|
|
68
67
|
this.base.getView().getModel().resetChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID);
|
|
69
|
-
this.inlineEditEnd();
|
|
68
|
+
this.inlineEditEnd(true);
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
/**
|
|
73
72
|
* End the inline edit.
|
|
73
|
+
* @param refreshDescription
|
|
74
74
|
*/;
|
|
75
|
-
_proto.inlineEditEnd = function inlineEditEnd() {
|
|
75
|
+
_proto.inlineEditEnd = function inlineEditEnd(refreshDescription) {
|
|
76
76
|
Messaging.removeAllMessages();
|
|
77
77
|
this.base.setShowFooter(false);
|
|
78
78
|
for (const control of this.inlineEditControls) {
|
|
79
|
-
control.inlineEditEnd();
|
|
79
|
+
control.inlineEditEnd(refreshDescription);
|
|
80
80
|
}
|
|
81
81
|
this.inlineEditControls = [];
|
|
82
|
+
this.base.getView().getModel("ui").setProperty("/isInlineEditActive", false);
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
/**
|
|
85
86
|
* Start the inline edit on the bindingContextPath for the propertyFullyQualifiedName.
|
|
86
87
|
* @param propertyFullyQualifiedName
|
|
87
88
|
* @param bindingContextPath
|
|
89
|
+
* @param controlTrigger
|
|
88
90
|
*/;
|
|
89
|
-
_proto.startInlineEdit = function startInlineEdit(propertyFullyQualifiedName, bindingContextPath) {
|
|
91
|
+
_proto.startInlineEdit = function startInlineEdit(propertyFullyQualifiedName, bindingContextPath, controlTrigger) {
|
|
92
|
+
if (controlTrigger?.getBindingContext()?.getProperty("HasDraftEntity")) {
|
|
93
|
+
// there is already a draft on the entity. We should not start inline edit
|
|
94
|
+
new DraftExistsDialog(this.base.getView()).open();
|
|
95
|
+
controlTrigger?.resetIndicatorPopup();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
90
98
|
const inlineEditService = this.base.getAppComponent().getInlineEditService();
|
|
91
99
|
const dependentProperties = inlineEditService.getInlineConnectedProperties(this.base.getRoutingTargetName(), propertyFullyQualifiedName);
|
|
92
100
|
this.inlineEditStart([], dependentProperties?.length ? dependentProperties : [propertyFullyQualifiedName], bindingContextPath);
|
|
101
|
+
this.base.getView().getModel("ui").setProperty("/isInlineEditActive", true);
|
|
93
102
|
}
|
|
94
103
|
|
|
95
104
|
/**
|
|
@@ -112,15 +121,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
112
121
|
* @param properties
|
|
113
122
|
* @param bindingContextPath
|
|
114
123
|
*/;
|
|
115
|
-
_proto.
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
_proto.inlineEditStart = async function inlineEditStart(inlineEditControls, properties, bindingContextPath) {
|
|
125
|
+
if (this.abortTimerBeforeSave) {
|
|
126
|
+
// if there is a timer to save
|
|
127
|
+
this.abortTimerBeforeSave();
|
|
128
|
+
this.abortTimerBeforeSave = undefined;
|
|
129
|
+
await this.inlineEditSave();
|
|
130
|
+
}
|
|
118
131
|
const alreadyRegisteredControls = this.inlineEditControls.map(control => control.getId());
|
|
119
132
|
for (const control of inlineEditControls) {
|
|
120
133
|
if (!alreadyRegisteredControls.includes(control.getId())) {
|
|
121
134
|
this.inlineEditControls.push(control);
|
|
122
135
|
}
|
|
123
136
|
}
|
|
137
|
+
this.inlineEditBindingContextPath = bindingContextPath;
|
|
138
|
+
return;
|
|
124
139
|
}
|
|
125
140
|
|
|
126
141
|
/**
|
|
@@ -137,7 +152,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
137
152
|
* @param event The event sent by the binding
|
|
138
153
|
*/;
|
|
139
154
|
_proto.handleInlineEditPatchSent = async function handleInlineEditPatchSent(event) {
|
|
140
|
-
|
|
155
|
+
this.patchPromise = new Promise((resolve, reject) => {
|
|
141
156
|
event.getSource().attachEventOnce("patchCompleted", patchCompletedEvent => {
|
|
142
157
|
const bSuccess = patchCompletedEvent.getParameter("success");
|
|
143
158
|
if (bSuccess) {
|
|
@@ -148,9 +163,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
148
163
|
});
|
|
149
164
|
});
|
|
150
165
|
try {
|
|
151
|
-
await patchPromise;
|
|
166
|
+
await this.patchPromise;
|
|
167
|
+
this.patchPromise = undefined;
|
|
168
|
+
const resourceBundle = Lib.getResourceBundleFor("sap.fe.core");
|
|
169
|
+
if (resourceBundle) {
|
|
170
|
+
MessageToast.show(resourceBundle.getText("C_INLINE_EDIT_SAVED"));
|
|
171
|
+
}
|
|
152
172
|
this.inlineEditEnd();
|
|
153
173
|
} catch (patchCompletedEvent) {
|
|
174
|
+
this.patchPromise = undefined;
|
|
154
175
|
this.handleInlineEditSaveFailed();
|
|
155
176
|
}
|
|
156
177
|
}
|
|
@@ -163,6 +184,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
163
184
|
const messages = Messaging.getMessageModel().getData();
|
|
164
185
|
if (messages.length) {
|
|
165
186
|
this.base.setShowFooter(true);
|
|
187
|
+
this.propagateInlineFieldGroupIdToMessageButton();
|
|
166
188
|
}
|
|
167
189
|
if (!this.inlineEditBindingContextPath) {
|
|
168
190
|
return;
|
|
@@ -179,10 +201,155 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
179
201
|
}
|
|
180
202
|
}
|
|
181
203
|
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Performs a delayedCall when you focus out of a field.
|
|
208
|
+
*/;
|
|
209
|
+
_proto.delayedCallToSave = async function delayedCallToSave() {
|
|
210
|
+
if (this.abortTimerBeforeSave || this.patchPromise) {
|
|
211
|
+
// if there is already a timer running or a save in process do nothing
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const timerBeforeSave = new Promise((resolve, reject) => {
|
|
215
|
+
this.abortTimerBeforeSave = reject;
|
|
216
|
+
setTimeout(() => resolve(), 500);
|
|
217
|
+
});
|
|
218
|
+
try {
|
|
219
|
+
await timerBeforeSave;
|
|
220
|
+
this.abortTimerBeforeSave = undefined;
|
|
221
|
+
this.inlineEditSave();
|
|
222
|
+
} catch (e) {
|
|
223
|
+
// Nothing to see it is just someone that cancelled the timer
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Method to ensure we leave inline edit before any navigation..
|
|
229
|
+
* @returns Promise that retruns true if we need to cancel navigation and stay in inline edit
|
|
230
|
+
*/;
|
|
231
|
+
_proto.onBeforeNavigation = async function onBeforeNavigation() {
|
|
232
|
+
if (this.inlineEditControls.length > 0) {
|
|
233
|
+
// there are controls in inline edit we need to prevent the navigation and show the dialog
|
|
234
|
+
if (this.abortTimerBeforeSave) {
|
|
235
|
+
this.abortTimerBeforeSave();
|
|
236
|
+
this.abortTimerBeforeSave = undefined;
|
|
237
|
+
}
|
|
238
|
+
if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
|
|
239
|
+
// fields are in inline edit and there are no pending changes. We need to show the dialog
|
|
240
|
+
this.inlineEditEnd();
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
try {
|
|
244
|
+
if (this.patchPromise) {
|
|
245
|
+
await this.patchPromise;
|
|
246
|
+
} else {
|
|
247
|
+
const dialogResult = await this.openInlineEditBeforeNavigationDialogAndWaitForResult();
|
|
248
|
+
if (dialogResult === "Save") {
|
|
249
|
+
// we save and wait for the patchPromise
|
|
250
|
+
await this.inlineEditSave();
|
|
251
|
+
if (this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
|
|
252
|
+
// if after saves there are still changes this means save has failed. we need to cancel navigation
|
|
253
|
+
this.focusHandling(this.inlineEditControls[0]);
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
} else if (dialogResult === "Cancel") {
|
|
257
|
+
this.focusHandling(this.inlineEditControls[0]);
|
|
258
|
+
return true;
|
|
259
|
+
} else {
|
|
260
|
+
// we discard the changes
|
|
261
|
+
this.inlineEditDiscard();
|
|
262
|
+
}
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
} catch (e) {
|
|
266
|
+
this.focusHandling(this.inlineEditControls[0]);
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Method to open the dialog before navigation.
|
|
275
|
+
* @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
|
|
276
|
+
*/;
|
|
277
|
+
_proto.openInlineEditBeforeNavigationDialogAndWaitForResult = async function openInlineEditBeforeNavigationDialogAndWaitForResult() {
|
|
278
|
+
return new Promise(resolve => {
|
|
279
|
+
new BeforeNavigationDialog(this.base.getView(), resolve).open();
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Method to ensure we leave inline edit before any standard edit flowaction.
|
|
285
|
+
* @returns Promise that reject and triggers save or discard if we are in inline edit
|
|
286
|
+
*/;
|
|
287
|
+
_proto.onBeforeAnyEditFlowAction = async function onBeforeAnyEditFlowAction() {
|
|
288
|
+
if (this.inlineEditControls.length > 0) {
|
|
289
|
+
if (this.abortTimerBeforeSave) {
|
|
290
|
+
this.abortTimerBeforeSave();
|
|
291
|
+
this.abortTimerBeforeSave = undefined;
|
|
292
|
+
}
|
|
293
|
+
if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
|
|
294
|
+
// fields are in inline edit and there are no pending changes. We don't need to show the dialog
|
|
295
|
+
this.inlineEditEnd();
|
|
296
|
+
return Promise.resolve();
|
|
297
|
+
}
|
|
298
|
+
new BeforeActionDialog(this.base.getView()).open();
|
|
299
|
+
// there are controls in inline edit we need to prevent the action and show the dialog
|
|
300
|
+
return Promise.reject();
|
|
301
|
+
}
|
|
302
|
+
return Promise.resolve();
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Handle before edit.
|
|
307
|
+
* @returns Promise that reject if edit needs to be cancelled
|
|
308
|
+
*/;
|
|
309
|
+
_proto.onBeforeEdit = async function onBeforeEdit() {
|
|
310
|
+
return this.onBeforeAnyEditFlowAction();
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Handle before create.
|
|
315
|
+
* @returns Promise that reject if cretae needs to be cancelled
|
|
316
|
+
*/;
|
|
317
|
+
_proto.onBeforeCreate = async function onBeforeCreate() {
|
|
318
|
+
return this.onBeforeAnyEditFlowAction();
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Handle before delete.
|
|
323
|
+
* @returns Promise that reject if delete needs to be cancelled
|
|
324
|
+
*/;
|
|
325
|
+
_proto.onBeforeDelete = async function onBeforeDelete() {
|
|
326
|
+
return this.onBeforeAnyEditFlowAction();
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Handle before action.
|
|
331
|
+
* @returns Promise that reject if delete needs to be cancelled
|
|
332
|
+
*/;
|
|
333
|
+
_proto.onBeforeExecuteAction = async function onBeforeExecuteAction() {
|
|
334
|
+
return this.onBeforeAnyEditFlowAction();
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Propagate the field group id to the message button.
|
|
339
|
+
*/;
|
|
340
|
+
_proto.propagateInlineFieldGroupIdToMessageButton = function propagateInlineFieldGroupIdToMessageButton() {
|
|
341
|
+
// we propagate the fieldgroupId to the footer and all its descendants to ensure that
|
|
342
|
+
// clicking on the footer does not trigger a focusout and a save for the inline edit
|
|
343
|
+
const footerControls = this.base.getFooter()?.findAggregatedObjects(true, managedObject => managedObject.isA("sap.ui.core.Control")) ?? [];
|
|
344
|
+
for (const control of footerControls) {
|
|
345
|
+
const childFieldGroupIds = new Set(control.getFieldGroupIds());
|
|
346
|
+
childFieldGroupIds.add("InlineEdit");
|
|
347
|
+
control.setFieldGroupIds(Array.from(childFieldGroupIds));
|
|
348
|
+
}
|
|
182
349
|
};
|
|
183
350
|
return InlineEditFlow;
|
|
184
|
-
}(BaseControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "inlineEditStart", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "inlineEditStart"), _class2.prototype), _class2)) || _class);
|
|
351
|
+
}(BaseControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "inlineEditStart", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "inlineEditStart"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeNavigation", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeEdit", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeEdit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeCreate", [_dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeCreate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeDelete", [_dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeDelete"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeExecuteAction", [_dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeExecuteAction"), _class2.prototype), _class2)) || _class);
|
|
185
352
|
_exports = InlineEditFlow;
|
|
186
353
|
return _exports;
|
|
187
354
|
}, false);
|
|
188
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbmxpbmVFZGl0RmxvdyIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaG9va2FibGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyRXh0ZW5zIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJpbmxpbmVFZGl0Q29udHJvbHMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaXNJbmxpbmVFZGl0UG9zc2libGUiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0SW5saW5lRWRpdFNlcnZpY2UiLCJkb2VzUGFnZUhhdmVJbmxpbmVFZGl0IiwiZ2V0Um91dGluZ1RhcmdldE5hbWUiLCJpbmxpbmVFZGl0U2F2ZSIsImJpbmRpbmdDb250ZXh0UGF0aCIsIm1vZGVsIiwiZ2V0VmlldyIsImdldE1vZGVsIiwibWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiaGFzVGVjaG5pY2FsTWVzc2FnZXMiLCJzb21lIiwibWVzc2FnZSIsIm1lc3NhZ2VIYW5kbGluZyIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInNldFNob3dGb290ZXIiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsIkNvbW1vblV0aWxzIiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwiaW5saW5lRWRpdEVuZCIsInJlbW92ZUFsbE1lc3NhZ2VzIiwiaW5saW5lRWRpdEJpbmRpbmdDb250ZXh0UGF0aCIsInN1Ym1pdEJhdGNoIiwiZXJyb3IiLCJMb2ciLCJ3YXJuaW5nIiwiaW5saW5lRWRpdERpc2NhcmQiLCJyZXNldENoYW5nZXMiLCJjb250cm9sIiwic3RhcnRJbmxpbmVFZGl0IiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJpbmxpbmVFZGl0U2VydmljZSIsImRlcGVuZGVudFByb3BlcnRpZXMiLCJnZXRJbmxpbmVDb25uZWN0ZWRQcm9wZXJ0aWVzIiwiaW5saW5lRWRpdFN0YXJ0IiwiZm9jdXNIYW5kbGluZyIsImlubGluZUVkaXRDb250cm9sIiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBFZGl0TW9kZSIsImZvY3VzIiwicHJvcGVydGllcyIsImFscmVhZHlSZWdpc3RlcmVkQ29udHJvbHMiLCJtYXAiLCJnZXRJZCIsImluY2x1ZGVzIiwicHVzaCIsImlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdCIsImhhbmRsZUlubGluZUVkaXRQYXRjaFNlbnQiLCJldmVudCIsInBhdGNoUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0U291cmNlIiwiYXR0YWNoRXZlbnRPbmNlIiwicGF0Y2hDb21wbGV0ZWRFdmVudCIsImJTdWNjZXNzIiwiZ2V0UGFyYW1ldGVyIiwiaGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXQiLCJnZXRUYXJnZXRzIiwidGFyZ2V0TWV0YUNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE1ldGFQYXRoIiwibWVzc2FnZVRhcmdldERhdGFNb2RlbE9iamVjdCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzUHJvcGVydHkiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRGdWxseVF1YWxpZmllZE5hbWUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIklubGluZUVkaXRGbG93LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgaG9va2FibGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIElubGluZUVkaXQgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5saW5lRWRpdC9JbmxpbmVFZGl0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IE9EYXRhQ29udGV4dEJpbmRpbmckUGF0Y2hTZW50RXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW5saW5lRWRpdEZsb3dcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElubGluZUVkaXRGbG93IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10gPSBbXTtcblxuXHRwcml2YXRlIGlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIHRoZXJlIGNhbiBiZSBpbmxpbmUgZWRpdCBvbiB0aGUgcGFnZS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpbmxpbmUgZWRpdCBpcyBwb3NzaWJsZVxuXHQgKi9cblx0aXNJbmxpbmVFZGl0UG9zc2libGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRJbmxpbmVFZGl0U2VydmljZSgpLmRvZXNQYWdlSGF2ZUlubGluZUVkaXQodGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmUgdGhlIGlubGluZSBlZGl0IGNoYW5nZXMuXG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dFBhdGhcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZWQgb25jZSB0aGUgYmF0Y2ggaGFzIHJldHVybmVkLlxuXHQgKi9cblx0YXN5bmMgaW5saW5lRWRpdFNhdmUoYmluZGluZ0NvbnRleHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKTtcblxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBoYXNUZWNobmljYWxNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+ICFtZXNzYWdlSGFuZGxpbmcuaXNOb25UZWNobmljYWxNZXNzYWdlKG1lc3NhZ2UpKTtcblx0XHRpZiAoaGFzVGVjaG5pY2FsTWVzc2FnZXMpIHtcblx0XHRcdHRoaXMuYmFzZS5zZXRTaG93Rm9vdGVyKHRydWUpO1xuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIGludmFsaWQgdHlwZXMgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gc2F2ZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIW1vZGVsLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdHRoaXMuaW5saW5lRWRpdEVuZCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZUFsbE1lc3NhZ2VzKCk7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGggPSBiaW5kaW5nQ29udGV4dFBhdGg7XG5cdFx0XHRhd2FpdCBtb2RlbC5zdWJtaXRCYXRjaChDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHNhdmluZyBpbmxpbmUgZWRpdCBjaGFuZ2VzXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNjYXJkIHRoZSBpbmxpbmUgZWRpdCBjaGFuZ2VzLlxuXHQgKi9cblx0aW5saW5lRWRpdERpc2NhcmQoKTogdm9pZCB7XG5cdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLnJlc2V0Q2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpO1xuXHRcdHRoaXMuaW5saW5lRWRpdEVuZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuZCB0aGUgaW5saW5lIGVkaXQuXG5cdCAqL1xuXHRpbmxpbmVFZGl0RW5kKCk6IHZvaWQge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVBbGxNZXNzYWdlcygpO1xuXHRcdHRoaXMuYmFzZS5zZXRTaG93Rm9vdGVyKGZhbHNlKTtcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5pbmxpbmVFZGl0Q29udHJvbHMpIHtcblx0XHRcdChjb250cm9sIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpLmlubGluZUVkaXRFbmQoKTtcblx0XHR9XG5cdFx0dGhpcy5pbmxpbmVFZGl0Q29udHJvbHMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdGFydCB0aGUgaW5saW5lIGVkaXQgb24gdGhlIGJpbmRpbmdDb250ZXh0UGF0aCBmb3IgdGhlIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWVcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0UGF0aFxuXHQgKi9cblx0c3RhcnRJbmxpbmVFZGl0KHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcsIGJpbmRpbmdDb250ZXh0UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgaW5saW5lRWRpdFNlcnZpY2UgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SW5saW5lRWRpdFNlcnZpY2UoKTtcblx0XHRjb25zdCBkZXBlbmRlbnRQcm9wZXJ0aWVzID0gaW5saW5lRWRpdFNlcnZpY2UuZ2V0SW5saW5lQ29ubmVjdGVkUHJvcGVydGllcyhcblx0XHRcdHRoaXMuYmFzZS5nZXRSb3V0aW5nVGFyZ2V0TmFtZSgpLFxuXHRcdFx0cHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWVcblx0XHQpO1xuXG5cdFx0dGhpcy5pbmxpbmVFZGl0U3RhcnQoW10sIGRlcGVuZGVudFByb3BlcnRpZXM/Lmxlbmd0aCA/IGRlcGVuZGVudFByb3BlcnRpZXMgOiBbcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWVdLCBiaW5kaW5nQ29udGV4dFBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsaW5nIGZvciBpbmxpbmUgZWRpdC4gV2hlbiBvbmUgZmllbGQgZ2V0cyBmb2N1cywgYWxsIG90aGVyIGlubGluZSBlZGl0IHBvcHVwcywgdGhhdCBhcmUgY3VycmVudGx5IG9wZW5lZCwgc2hvdWxkIGJlIGNsb3NlZC5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9sIENvbnRyb2xzIHdoaWNoIGFyZSBjdXJyZW50bHkgaW4gaW5saW5lIGVkaXQgbW9kZS5cblx0ICovXG5cdGZvY3VzSGFuZGxpbmcoaW5saW5lRWRpdENvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5pbmxpbmVFZGl0Q29udHJvbHMpIHtcblx0XHRcdGlmIChjb250cm9sICE9PSBpbmxpbmVFZGl0Q29udHJvbCkge1xuXHRcdFx0XHQoY29udHJvbCBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KS5jbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgPT09IGlubGluZUVkaXRDb250cm9sKSB7XG5cdFx0XHRcdGNvbnRyb2wuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlybSB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBlZGl0IG9uIHRoZSBiaW5kaW5nQ29udGV4dFBhdGggZm9yIHRoZSBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gaW5saW5lRWRpdENvbnRyb2xzIFRoZSBmaWVsZHMgdGhhdCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dFBhdGhcblx0ICovXG5cdEBob29rYWJsZShcIkJlZm9yZVwiKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGlubGluZUVkaXRTdGFydChpbmxpbmVFZGl0Q29udHJvbHM6IENvbnRyb2xbXSwgcHJvcGVydGllczogc3RyaW5nW10sIGJpbmRpbmdDb250ZXh0UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgYWxyZWFkeVJlZ2lzdGVyZWRDb250cm9scyA9IHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLm1hcCgoY29udHJvbDogQ29udHJvbCkgPT4gY29udHJvbC5nZXRJZCgpKTtcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgaW5saW5lRWRpdENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoIWFscmVhZHlSZWdpc3RlcmVkQ29udHJvbHMuaW5jbHVkZXMoY29udHJvbC5nZXRJZCgpKSkge1xuXHRcdFx0XHR0aGlzLmlubGluZUVkaXRDb250cm9scy5wdXNoKGNvbnRyb2wpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWVcblx0ICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBjb25zaWRlcmVkIGZvciBJbmxpbmUgZWRpdC5cblx0ICovXG5cdGlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdChwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZVxuXHRcdFx0LmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0SW5saW5lRWRpdFNlcnZpY2UoKVxuXHRcdFx0LmlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdCh0aGlzLmJhc2UuZ2V0Um91dGluZ1RhcmdldE5hbWUoKSwgcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHBhdGNoU2VudCBldmVudDogaGFuZGxlIGlubGluZSBlZGl0IHNhdmUgc3VjY2VzcyBvciBmYWlsdXJlLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHNlbnQgYnkgdGhlIGJpbmRpbmdcblx0ICovXG5cdGFzeW5jIGhhbmRsZUlubGluZUVkaXRQYXRjaFNlbnQoZXZlbnQ6IE9EYXRhQ29udGV4dEJpbmRpbmckUGF0Y2hTZW50RXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBwYXRjaFByb21pc2UgPSBuZXcgUHJvbWlzZTxVSTVFdmVudD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0ZXZlbnQuZ2V0U291cmNlKCkuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgKHBhdGNoQ29tcGxldGVkRXZlbnQ6IFVJNUV2ZW50PHsgc3VjY2VzczogYm9vbGVhbiB9PikgPT4ge1xuXHRcdFx0XHRjb25zdCBiU3VjY2VzcyA9IHBhdGNoQ29tcGxldGVkRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3VjY2Vzc1wiKTtcblx0XHRcdFx0aWYgKGJTdWNjZXNzKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShwYXRjaENvbXBsZXRlZEV2ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWplY3QocGF0Y2hDb21wbGV0ZWRFdmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBwYXRjaFByb21pc2U7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHR9IGNhdGNoIChwYXRjaENvbXBsZXRlZEV2ZW50KSB7XG5cdFx0XHR0aGlzLmhhbmRsZUlubGluZUVkaXRTYXZlRmFpbGVkKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBlcnJvcnMgd2hlbiB0aGUgaW5saW5lIGVkaXQgc2F2ZSBmYWlscy5cblx0ICovXG5cdGhhbmRsZUlubGluZUVkaXRTYXZlRmFpbGVkKCk6IHZvaWQge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmJhc2Uuc2V0U2hvd0Zvb3Rlcih0cnVlKTtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRhcmdldCBvZiBtZXNzYWdlLmdldFRhcmdldHMoKSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRNZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGFyZ2V0KSk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgPSB0YXJnZXRNZXRhQ29udGV4dFxuXHRcdFx0XHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czx1bmtub3duPih0YXJnZXRNZXRhQ29udGV4dClcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRcdGlmIChpc1Byb3BlcnR5KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCkpIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRGdWxseVF1YWxpZmllZE5hbWUgPVxuXHRcdFx0XHRcdFx0KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik/LnRhcmdldE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lID8/IFwiXCI7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3RhcnRJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSwgdGhpcy5pbmxpbmVFZGl0QmluZGluZ0NvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O01BcUJxQkEsY0FBYyxJQUFBQyxJQUFBLEdBRGxDQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQW1HaEVDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBQUgsSUFBQSxDQUFBSSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLHFCQUFBO0lBQUEsU0FBQVAsZUFBQTtNQUFBLElBQUFRLEtBQUE7TUFBQSxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJ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
|
|
355
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbmxpbmVFZGl0RmxvdyIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaG9va2FibGUiLCJfZGVjMyIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyRXh0ZW5zIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJpbmxpbmVFZGl0Q29udHJvbHMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaXNJbmxpbmVFZGl0UG9zc2libGUiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0SW5saW5lRWRpdFNlcnZpY2UiLCJkb2VzUGFnZUhhdmVJbmxpbmVFZGl0IiwiZ2V0Um91dGluZ1RhcmdldE5hbWUiLCJpbmxpbmVFZGl0U2F2ZSIsIm1vZGVsIiwiZ2V0VmlldyIsImdldE1vZGVsIiwibWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiaGFzVGVjaG5pY2FsTWVzc2FnZXMiLCJzb21lIiwibWVzc2FnZSIsIm1lc3NhZ2VIYW5kbGluZyIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInNldFNob3dGb290ZXIiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsIkNvbW1vblV0aWxzIiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwiaW5saW5lRWRpdEVuZCIsInJlbW92ZUFsbE1lc3NhZ2VzIiwic3VibWl0QmF0Y2giLCJlcnJvciIsIkxvZyIsIndhcm5pbmciLCJpbmxpbmVFZGl0RGlzY2FyZCIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2hEZXNjcmlwdGlvbiIsImNvbnRyb2wiLCJzZXRQcm9wZXJ0eSIsInN0YXJ0SW5saW5lRWRpdCIsInByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lIiwiYmluZGluZ0NvbnRleHRQYXRoIiwiY29udHJvbFRyaWdnZXIiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFByb3BlcnR5IiwiRHJhZnRFeGlzdHNEaWFsb2ciLCJvcGVuIiwicmVzZXRJbmRpY2F0b3JQb3B1cCIsImlubGluZUVkaXRTZXJ2aWNlIiwiZGVwZW5kZW50UHJvcGVydGllcyIsImdldElubGluZUNvbm5lY3RlZFByb3BlcnRpZXMiLCJpbmxpbmVFZGl0U3RhcnQiLCJmb2N1c0hhbmRsaW5nIiwiaW5saW5lRWRpdENvbnRyb2wiLCJjbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlIiwiZm9jdXMiLCJwcm9wZXJ0aWVzIiwiYWJvcnRUaW1lckJlZm9yZVNhdmUiLCJ1bmRlZmluZWQiLCJhbHJlYWR5UmVnaXN0ZXJlZENvbnRyb2xzIiwibWFwIiwiZ2V0SWQiLCJpbmNsdWRlcyIsInB1c2giLCJpbmxpbmVFZGl0QmluZGluZ0NvbnRleHRQYXRoIiwiaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0IiwiaGFuZGxlSW5saW5lRWRpdFBhdGNoU2VudCIsImV2ZW50IiwicGF0Y2hQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJnZXRTb3VyY2UiLCJhdHRhY2hFdmVudE9uY2UiLCJwYXRjaENvbXBsZXRlZEV2ZW50IiwiYlN1Y2Nlc3MiLCJnZXRQYXJhbWV0ZXIiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldFRleHQiLCJoYW5kbGVJbmxpbmVFZGl0U2F2ZUZhaWxlZCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInByb3BhZ2F0ZUlubGluZUZpZWxkR3JvdXBJZFRvTWVzc2FnZUJ1dHRvbiIsInRhcmdldCIsImdldFRhcmdldHMiLCJ0YXJnZXRNZXRhQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJtZXNzYWdlVGFyZ2V0RGF0YU1vZGVsT2JqZWN0IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNQcm9wZXJ0eSIsInRhcmdldE9iamVjdCIsInRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImRlbGF5ZWRDYWxsVG9TYXZlIiwidGltZXJCZWZvcmVTYXZlIiwic2V0VGltZW91dCIsImUiLCJvbkJlZm9yZU5hdmlnYXRpb24iLCJkaWFsb2dSZXN1bHQiLCJvcGVuSW5saW5lRWRpdEJlZm9yZU5hdmlnYXRpb25EaWFsb2dBbmRXYWl0Rm9yUmVzdWx0IiwiQmVmb3JlTmF2aWdhdGlvbkRpYWxvZyIsIm9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24iLCJCZWZvcmVBY3Rpb25EaWFsb2ciLCJvbkJlZm9yZUVkaXQiLCJvbkJlZm9yZUNyZWF0ZSIsIm9uQmVmb3JlRGVsZXRlIiwib25CZWZvcmVFeGVjdXRlQWN0aW9uIiwiZm9vdGVyQ29udHJvbHMiLCJnZXRGb290ZXIiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJtYW5hZ2VkT2JqZWN0IiwiaXNBIiwiY2hpbGRGaWVsZEdyb3VwSWRzIiwiU2V0IiwiZ2V0RmllbGRHcm91cElkcyIsImFkZCIsInNldEZpZWxkR3JvdXBJZHMiLCJmcm9tIiwiQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbmxpbmVFZGl0Rmxvdy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBtZXRob2RPdmVycmlkZSwgdHlwZSBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGhvb2thYmxlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBCYXNlQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQmFzZUNvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IEJlZm9yZUFjdGlvbkRpYWxvZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvaW5saW5lRWRpdEZsb3cvQmVmb3JlQWN0aW9uRGlhbG9nXCI7XG5pbXBvcnQgQmVmb3JlTmF2aWdhdGlvbkRpYWxvZywgeyB0eXBlIERJQUxPR1JFU1VMVCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9pbmxpbmVFZGl0Rmxvdy9CZWZvcmVOYXZpZ2F0aW9uRGlhbG9nXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIElubGluZUVkaXQgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5saW5lRWRpdC9JbmxpbmVFZGl0XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYiBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YUNvbnRleHRCaW5kaW5nJFBhdGNoU2VudEV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgRHJhZnRFeGlzdHNEaWFsb2cgZnJvbSBcIi4uL2NvbnRyb2xzL2lubGluZUVkaXRGbG93L0RyYWZ0RXhpc3RzRGlhbG9nXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLklubGluZUVkaXRGbG93XCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmVFZGl0RmxvdyBleHRlbmRzIEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJvdGVjdGVkIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIGlubGluZUVkaXRDb250cm9sczogQ29udHJvbFtdID0gW107XG5cblx0cHJpdmF0ZSBpbmxpbmVFZGl0QmluZGluZ0NvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgYWJvcnRUaW1lckJlZm9yZVNhdmU/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIHBhdGNoUHJvbWlzZT86IFByb21pc2U8VUk1RXZlbnQ+O1xuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiB0aGVyZSBjYW4gYmUgaW5saW5lIGVkaXQgb24gdGhlIHBhZ2UuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgaW5saW5lIGVkaXQgaXMgcG9zc2libGVcblx0ICovXG5cdGlzSW5saW5lRWRpdFBvc3NpYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SW5saW5lRWRpdFNlcnZpY2UoKS5kb2VzUGFnZUhhdmVJbmxpbmVFZGl0KHRoaXMuYmFzZS5nZXRSb3V0aW5nVGFyZ2V0TmFtZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIHRoZSBpbmxpbmUgZWRpdCBjaGFuZ2VzLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlZCBvbmNlIHRoZSBiYXRjaCBoYXMgcmV0dXJuZWQuXG5cdCAqL1xuXHRhc3luYyBpbmxpbmVFZGl0U2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKTtcblxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBoYXNUZWNobmljYWxNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+ICFtZXNzYWdlSGFuZGxpbmcuaXNOb25UZWNobmljYWxNZXNzYWdlKG1lc3NhZ2UpKTtcblx0XHRpZiAoaGFzVGVjaG5pY2FsTWVzc2FnZXMpIHtcblx0XHRcdHRoaXMuYmFzZS5zZXRTaG93Rm9vdGVyKHRydWUpO1xuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIGludmFsaWQgdHlwZXMgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gc2F2ZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIW1vZGVsLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdHRoaXMuaW5saW5lRWRpdEVuZCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZUFsbE1lc3NhZ2VzKCk7XG5cdFx0XHRhd2FpdCBtb2RlbC5zdWJtaXRCYXRjaChDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHNhdmluZyBpbmxpbmUgZWRpdCBjaGFuZ2VzXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNjYXJkIHRoZSBpbmxpbmUgZWRpdCBjaGFuZ2VzLlxuXHQgKi9cblx0aW5saW5lRWRpdERpc2NhcmQoKTogdm9pZCB7XG5cdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLnJlc2V0Q2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpO1xuXHRcdHRoaXMuaW5saW5lRWRpdEVuZCh0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbmQgdGhlIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcmVmcmVzaERlc2NyaXB0aW9uXG5cdCAqL1xuXHRpbmxpbmVFZGl0RW5kKHJlZnJlc2hEZXNjcmlwdGlvbj86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlQWxsTWVzc2FnZXMoKTtcblx0XHR0aGlzLmJhc2Uuc2V0U2hvd0Zvb3RlcihmYWxzZSk7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5saW5lRWRpdENvbnRyb2xzKSB7XG5cdFx0XHQoY29udHJvbCBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KS5pbmxpbmVFZGl0RW5kKHJlZnJlc2hEZXNjcmlwdGlvbik7XG5cdFx0fVxuXHRcdHRoaXMuaW5saW5lRWRpdENvbnRyb2xzID0gW107XG5cdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEFjdGl2ZVwiLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogU3RhcnQgdGhlIGlubGluZSBlZGl0IG9uIHRoZSBiaW5kaW5nQ29udGV4dFBhdGggZm9yIHRoZSBwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZS5cblx0ICogQHBhcmFtIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lXG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dFBhdGhcblx0ICogQHBhcmFtIGNvbnRyb2xUcmlnZ2VyXG5cdCAqL1xuXHRzdGFydElubGluZUVkaXQoXG5cdFx0cHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyxcblx0XHRiaW5kaW5nQ29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRjb250cm9sVHJpZ2dlcj86IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXRcblx0KTogdm9pZCB7XG5cdFx0aWYgKGNvbnRyb2xUcmlnZ2VyPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpKSB7XG5cdFx0XHQvLyB0aGVyZSBpcyBhbHJlYWR5IGEgZHJhZnQgb24gdGhlIGVudGl0eS4gV2Ugc2hvdWxkIG5vdCBzdGFydCBpbmxpbmUgZWRpdFxuXHRcdFx0bmV3IERyYWZ0RXhpc3RzRGlhbG9nKHRoaXMuYmFzZS5nZXRWaWV3KCkpLm9wZW4oKTtcblx0XHRcdGNvbnRyb2xUcmlnZ2VyPy5yZXNldEluZGljYXRvclBvcHVwKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGlubGluZUVkaXRTZXJ2aWNlID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldElubGluZUVkaXRTZXJ2aWNlKCk7XG5cdFx0Y29uc3QgZGVwZW5kZW50UHJvcGVydGllcyA9IGlubGluZUVkaXRTZXJ2aWNlLmdldElubGluZUNvbm5lY3RlZFByb3BlcnRpZXMoXG5cdFx0XHR0aGlzLmJhc2UuZ2V0Um91dGluZ1RhcmdldE5hbWUoKSxcblx0XHRcdHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0KTtcblxuXHRcdHRoaXMuaW5saW5lRWRpdFN0YXJ0KFtdLCBkZXBlbmRlbnRQcm9wZXJ0aWVzPy5sZW5ndGggPyBkZXBlbmRlbnRQcm9wZXJ0aWVzIDogW3Byb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lXSwgYmluZGluZ0NvbnRleHRQYXRoKTtcblx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuc2V0UHJvcGVydHkoXCIvaXNJbmxpbmVFZGl0QWN0aXZlXCIsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsaW5nIGZvciBpbmxpbmUgZWRpdC4gV2hlbiBvbmUgZmllbGQgZ2V0cyBmb2N1cywgYWxsIG90aGVyIGlubGluZSBlZGl0IHBvcHVwcywgdGhhdCBhcmUgY3VycmVudGx5IG9wZW5lZCwgc2hvdWxkIGJlIGNsb3NlZC5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9sIENvbnRyb2xzIHdoaWNoIGFyZSBjdXJyZW50bHkgaW4gaW5saW5lIGVkaXQgbW9kZS5cblx0ICovXG5cdGZvY3VzSGFuZGxpbmcoaW5saW5lRWRpdENvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5pbmxpbmVFZGl0Q29udHJvbHMpIHtcblx0XHRcdGlmIChjb250cm9sICE9PSBpbmxpbmVFZGl0Q29udHJvbCkge1xuXHRcdFx0XHQoY29udHJvbCBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KS5jbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgPT09IGlubGluZUVkaXRDb250cm9sKSB7XG5cdFx0XHRcdGNvbnRyb2wuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlybSB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBlZGl0IG9uIHRoZSBiaW5kaW5nQ29udGV4dFBhdGggZm9yIHRoZSBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gaW5saW5lRWRpdENvbnRyb2xzIFRoZSBmaWVsZHMgdGhhdCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dFBhdGhcblx0ICovXG5cdEBob29rYWJsZShcIkJlZm9yZVwiKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFzeW5jIGlubGluZUVkaXRTdGFydChpbmxpbmVFZGl0Q29udHJvbHM6IENvbnRyb2xbXSwgcHJvcGVydGllczogc3RyaW5nW10sIGJpbmRpbmdDb250ZXh0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzICBhIHRpbWVyIHRvIHNhdmVcblx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUoKTtcblx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUgPSB1bmRlZmluZWQ7XG5cdFx0XHRhd2FpdCB0aGlzLmlubGluZUVkaXRTYXZlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IGFscmVhZHlSZWdpc3RlcmVkQ29udHJvbHMgPSB0aGlzLmlubGluZUVkaXRDb250cm9scy5tYXAoKGNvbnRyb2w6IENvbnRyb2wpID0+IGNvbnRyb2wuZ2V0SWQoKSk7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGlubGluZUVkaXRDb250cm9scykge1xuXHRcdFx0aWYgKCFhbHJlYWR5UmVnaXN0ZXJlZENvbnRyb2xzLmluY2x1ZGVzKGNvbnRyb2wuZ2V0SWQoKSkpIHtcblx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0Q29udHJvbHMucHVzaChjb250cm9sKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5pbmxpbmVFZGl0QmluZGluZ0NvbnRleHRQYXRoID0gYmluZGluZ0NvbnRleHRQYXRoO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWVcblx0ICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBjb25zaWRlcmVkIGZvciBJbmxpbmUgZWRpdC5cblx0ICovXG5cdGlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdChwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZVxuXHRcdFx0LmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0SW5saW5lRWRpdFNlcnZpY2UoKVxuXHRcdFx0LmlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdCh0aGlzLmJhc2UuZ2V0Um91dGluZ1RhcmdldE5hbWUoKSwgcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHBhdGNoU2VudCBldmVudDogaGFuZGxlIGlubGluZSBlZGl0IHNhdmUgc3VjY2VzcyBvciBmYWlsdXJlLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHNlbnQgYnkgdGhlIGJpbmRpbmdcblx0ICovXG5cdGFzeW5jIGhhbmRsZUlubGluZUVkaXRQYXRjaFNlbnQoZXZlbnQ6IE9EYXRhQ29udGV4dEJpbmRpbmckUGF0Y2hTZW50RXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLnBhdGNoUHJvbWlzZSA9IG5ldyBQcm9taXNlPFVJNUV2ZW50PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRldmVudC5nZXRTb3VyY2UoKS5hdHRhY2hFdmVudE9uY2UoXCJwYXRjaENvbXBsZXRlZFwiLCAocGF0Y2hDb21wbGV0ZWRFdmVudDogVUk1RXZlbnQ8eyBzdWNjZXNzOiBib29sZWFuIH0+KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJTdWNjZXNzID0gcGF0Y2hDb21wbGV0ZWRFdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWNjZXNzXCIpO1xuXHRcdFx0XHRpZiAoYlN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRyZXNvbHZlKHBhdGNoQ29tcGxldGVkRXZlbnQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlamVjdChwYXRjaENvbXBsZXRlZEV2ZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMucGF0Y2hQcm9taXNlO1xuXHRcdFx0dGhpcy5wYXRjaFByb21pc2UgPSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpO1xuXHRcdFx0aWYgKHJlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0lOTElORV9FRElUX1NBVkVEXCIpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaW5saW5lRWRpdEVuZCgpO1xuXHRcdH0gY2F0Y2ggKHBhdGNoQ29tcGxldGVkRXZlbnQpIHtcblx0XHRcdHRoaXMucGF0Y2hQcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0dGhpcy5oYW5kbGVJbmxpbmVFZGl0U2F2ZUZhaWxlZCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2hvdyB0aGUgZXJyb3JzIHdoZW4gdGhlIGlubGluZSBlZGl0IHNhdmUgZmFpbHMuXG5cdCAqL1xuXHRoYW5kbGVJbmxpbmVFZGl0U2F2ZUZhaWxlZCgpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0aWYgKG1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5iYXNlLnNldFNob3dGb290ZXIodHJ1ZSk7XG5cdFx0XHR0aGlzLnByb3BhZ2F0ZUlubGluZUZpZWxkR3JvdXBJZFRvTWVzc2FnZUJ1dHRvbigpO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuaW5saW5lRWRpdEJpbmRpbmdDb250ZXh0UGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcblx0XHRcdGZvciAoY29uc3QgdGFyZ2V0IG9mIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldE1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0YXJnZXQpKTtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZVRhcmdldERhdGFNb2RlbE9iamVjdCA9IHRhcmdldE1ldGFDb250ZXh0XG5cdFx0XHRcdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPHVua25vd24+KHRhcmdldE1ldGFDb250ZXh0KVxuXHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdFx0aWYgKGlzUHJvcGVydHkobWVzc2FnZVRhcmdldERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSA9XG5cdFx0XHRcdFx0XHQobWVzc2FnZVRhcmdldERhdGFNb2RlbE9iamVjdCBhcyB1bmtub3duIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KT8udGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgPz8gXCJcIjtcblx0XHRcdFx0XHRpZiAodGhpcy5pc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQodGFyZ2V0RnVsbHlRdWFsaWZpZWROYW1lKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zdGFydElubGluZUVkaXQodGFyZ2V0RnVsbHlRdWFsaWZpZWROYW1lLCB0aGlzLmlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQZXJmb3JtcyBhIGRlbGF5ZWRDYWxsIHdoZW4geW91IGZvY3VzIG91dCBvZiBhIGZpZWxkLlxuXHQgKi9cblx0YXN5bmMgZGVsYXllZENhbGxUb1NhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUgfHwgdGhpcy5wYXRjaFByb21pc2UpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSB0aW1lciBydW5uaW5nIG9yIGEgc2F2ZSBpbiBwcm9jZXNzIGRvIG5vdGhpbmdcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdGltZXJCZWZvcmVTYXZlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHJlamVjdDtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSgpLCA1MDApO1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aW1lckJlZm9yZVNhdmU7XG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlID0gdW5kZWZpbmVkO1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIE5vdGhpbmcgdG8gc2VlIGl0IGlzIGp1c3Qgc29tZW9uZSB0aGF0IGNhbmNlbGxlZCB0aGUgdGltZXJcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGVuc3VyZSB3ZSBsZWF2ZSBpbmxpbmUgZWRpdCBiZWZvcmUgYW55IG5hdmlnYXRpb24uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmV0cnVucyB0cnVlIGlmIHdlIG5lZWQgdG8gY2FuY2VsIG5hdmlnYXRpb24gYW5kIHN0YXkgaW4gaW5saW5lIGVkaXRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcInJvdXRpbmdcIilcblx0YXN5bmMgb25CZWZvcmVOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh0aGlzLmlubGluZUVkaXRDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyB0aGVyZSBhcmUgY29udHJvbHMgaW4gaW5saW5lIGVkaXQgd2UgbmVlZCB0byBwcmV2ZW50IHRoZSBuYXZpZ2F0aW9uIGFuZCBzaG93IHRoZSBkaWFsb2dcblx0XHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUoKTtcblx0XHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdFx0Ly8gZmllbGRzIGFyZSBpbiBpbmxpbmUgZWRpdCBhbmQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgY2hhbmdlcy4gV2UgbmVlZCB0byBzaG93IHRoZSBkaWFsb2dcblx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0RW5kKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICh0aGlzLnBhdGNoUHJvbWlzZSkge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGF0Y2hQcm9taXNlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ1Jlc3VsdCA9IGF3YWl0IHRoaXMub3BlbklubGluZUVkaXRCZWZvcmVOYXZpZ2F0aW9uRGlhbG9nQW5kV2FpdEZvclJlc3VsdCgpO1xuXHRcdFx0XHRcdGlmIChkaWFsb2dSZXN1bHQgPT09IFwiU2F2ZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyB3ZSBzYXZlIGFuZCB3YWl0IGZvciB0aGUgcGF0Y2hQcm9taXNlXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLmlubGluZUVkaXRTYXZlKCk7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgYWZ0ZXIgc2F2ZXMgdGhlcmUgYXJlIHN0aWxsIGNoYW5nZXMgdGhpcyBtZWFucyBzYXZlIGhhcyBmYWlsZWQuIHdlIG5lZWQgdG8gY2FuY2VsIG5hdmlnYXRpb25cblx0XHRcdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzWzBdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChkaWFsb2dSZXN1bHQgPT09IFwiQ2FuY2VsXCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZyh0aGlzLmlubGluZUVkaXRDb250cm9sc1swXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gd2UgZGlzY2FyZCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0RGlzY2FyZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzWzBdKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gb3BlbiB0aGUgZGlhbG9nIGJlZm9yZSBuYXZpZ2F0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgZGlhbG9nIGNob2ljZSBvbmNlIHRoZSB1c2VyIGhhcyBjbGlja2VkIG9uIG9rIG9yIGNhbmNlbFxuXHQgKi9cblx0YXN5bmMgb3BlbklubGluZUVkaXRCZWZvcmVOYXZpZ2F0aW9uRGlhbG9nQW5kV2FpdEZvclJlc3VsdCgpOiBQcm9taXNlPERJQUxPR1JFU1VMVD4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTxESUFMT0dSRVNVTFQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRuZXcgQmVmb3JlTmF2aWdhdGlvbkRpYWxvZyh0aGlzLmJhc2UuZ2V0VmlldygpLCByZXNvbHZlKS5vcGVuKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGVuc3VyZSB3ZSBsZWF2ZSBpbmxpbmUgZWRpdCBiZWZvcmUgYW55IHN0YW5kYXJkIGVkaXQgZmxvd2FjdGlvbi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlamVjdCBhbmQgdHJpZ2dlcnMgc2F2ZSBvciBkaXNjYXJkIGlmIHdlIGFyZSBpbiBpbmxpbmUgZWRpdFxuXHQgKi9cblx0YXN5bmMgb25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5pbmxpbmVFZGl0Q29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUpIHtcblx0XHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSgpO1xuXHRcdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMoQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKSkge1xuXHRcdFx0XHQvLyBmaWVsZHMgYXJlIGluIGlubGluZSBlZGl0IGFuZCB0aGVyZSBhcmUgbm8gcGVuZGluZyBjaGFuZ2VzLiBXZSBkb24ndCBuZWVkIHRvIHNob3cgdGhlIGRpYWxvZ1xuXHRcdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0fVxuXHRcdFx0bmV3IEJlZm9yZUFjdGlvbkRpYWxvZyh0aGlzLmJhc2UuZ2V0VmlldygpKS5vcGVuKCk7XG5cdFx0XHQvLyB0aGVyZSBhcmUgY29udHJvbHMgaW4gaW5saW5lIGVkaXQgd2UgbmVlZCB0byBwcmV2ZW50IHRoZSBhY3Rpb24gYW5kIHNob3cgdGhlIGRpYWxvZ1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYmVmb3JlIGVkaXQuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgaWYgZWRpdCBuZWVkcyB0byBiZSBjYW5jZWxsZWRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcImVkaXRGbG93XCIpXG5cdGFzeW5jIG9uQmVmb3JlRWRpdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIGJlZm9yZSBjcmVhdGUuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgaWYgY3JldGFlIG5lZWRzIHRvIGJlIGNhbmNlbGxlZFxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiZWRpdEZsb3dcIilcblx0YXN5bmMgb25CZWZvcmVDcmVhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBiZWZvcmUgZGVsZXRlLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVqZWN0IGlmIGRlbGV0ZSBuZWVkcyB0byBiZSBjYW5jZWxsZWRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcImVkaXRGbG93XCIpXG5cdGFzeW5jIG9uQmVmb3JlRGVsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLm9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYmVmb3JlIGFjdGlvbi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlamVjdCBpZiBkZWxldGUgbmVlZHMgdG8gYmUgY2FuY2VsbGVkXG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJlZGl0Rmxvd1wiKVxuXHRhc3luYyBvbkJlZm9yZUV4ZWN1dGVBY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3BhZ2F0ZSB0aGUgZmllbGQgZ3JvdXAgaWQgdG8gdGhlIG1lc3NhZ2UgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBwcm9wYWdhdGVJbmxpbmVGaWVsZEdyb3VwSWRUb01lc3NhZ2VCdXR0b24oKTogdm9pZCB7XG5cdFx0Ly8gd2UgcHJvcGFnYXRlIHRoZSBmaWVsZGdyb3VwSWQgdG8gdGhlIGZvb3RlciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cyB0byBlbnN1cmUgdGhhdFxuXHRcdC8vIGNsaWNraW5nIG9uIHRoZSBmb290ZXIgZG9lcyBub3QgdHJpZ2dlciBhIGZvY3Vzb3V0IGFuZCBhIHNhdmUgZm9yIHRoZSBpbmxpbmUgZWRpdFxuXHRcdGNvbnN0IGZvb3RlckNvbnRyb2xzID1cblx0XHRcdCh0aGlzLmJhc2Vcblx0XHRcdFx0LmdldEZvb3RlcigpXG5cdFx0XHRcdD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PiBtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIGFzXG5cdFx0XHRcdHwgQ29udHJvbFtdXG5cdFx0XHRcdHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBmb290ZXJDb250cm9scykge1xuXHRcdFx0Y29uc3QgY2hpbGRGaWVsZEdyb3VwSWRzID0gbmV3IFNldChjb250cm9sLmdldEZpZWxkR3JvdXBJZHMoKSk7XG5cdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdGNvbnRyb2wuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGNoaWxkRmllbGRHcm91cElkcykpO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O01BMEJxQkEsY0FBYyxJQUFBQyxJQUFBLEdBRGxDQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQW1IaEVDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBQUMsS0FBQSxHQW9IbEJDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBQUMsS0FBQSxHQStFekJELGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUUsS0FBQSxHQVMxQkYsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBRyxLQUFBLEdBUzFCSCxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUFJLEtB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Q0FBVSxxQkFBcUIsQ0FBQyxDQUFDLElBRWxHLEVBQUU7TUFFcEIsS0FBSyxNQUFNaEYsT0FBTyxJQUFJNEUsY0FBYyxFQUFFO1FBQ3JDLE1BQU1LLGtCQUFrQixHQUFHLElBQUlDLEdBQUcsQ0FBQ2xGLE9BQU8sQ0FBQ21GLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5REYsa0JBQWtCLENBQUNHLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDcENwRixPQUFPLENBQUNxRixnQkFBZ0IsQ0FBQzdILEtBQUssQ0FBQzhILElBQUksQ0FBQ0wsa0JBQWtCLENBQUMsQ0FBQztNQUN6RDtJQUNELENBQUM7SUFBQSxPQUFBNUksY0FBQTtFQUFBLEVBdlcwQ2tKLHVCQUF1QixHQUFBQyx5QkFBQSxDQUFBdkksT0FBQSxDQUFBYyxTQUFBLHNCQUFBdkIsS0FBQSxHQUFBaUosTUFBQSxDQUFBQyx3QkFBQSxDQUFBekksT0FBQSxDQUFBYyxTQUFBLHNCQUFBZCxPQUFBLENBQUFjLFNBQUEsR0FBQXlILHlCQUFBLENBQUF2SSxPQUFBLENBQUFjLFNBQUEseUJBQUFyQixLQUFBLEdBQUErSSxNQUFBLENBQUFDLHdCQUFBLENBQUF6SSxPQUFBLENBQUFjLFNBQUEseUJBQUFkLE9BQUEsQ0FBQWMsU0FBQSxHQUFBeUgseUJBQUEsQ0FBQXZJLE9BQUEsQ0FBQWMsU0FBQSxtQkFBQW5CLEtBQUEsR0FBQTZJLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQXpJLE9BQUEsQ0FBQWMsU0FBQSxtQkFBQWQsT0FBQSxDQUFBYyxTQUFBLEdBQUF5SCx5QkFBQSxDQUFBdkksT0FBQSxDQUFBYyxTQUFBLHFCQUFBbEIsS0FBQSxHQUFBNEksTUFBQSxDQUFBQyx3QkFBQSxDQUFBekksT0FBQSxDQUFBYyxTQUFBLHFCQUFBZCxPQUFBLENBQUFjLFNBQUEsR0FBQXlILHlCQUFBLENBQUF2SSxPQUFBLENBQUFjLFNBQUEscUJBQUFqQixLQUFBLEdBQUEySSxNQUFBLENBQUFDLHdCQUFBLENBQUF6SSxPQUFBLENBQUFjLFNBQUEscUJBQUFkLE9BQUEsQ0FBQWMsU0FBQSxHQUFBeUgseUJBQUEsQ0FBQXZJLE9BQUEsQ0FBQWMsU0FBQSw0QkFBQWhCLEtBQUEsR0FBQTBJLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQXpJLE9BQUEsQ0FBQWMsU0FBQSw0QkFBQWQsT0FBQSxDQUFBYyxTQUFBLEdBQUFkLE9BQUEsTUFBQUQsTUFBQTtFQUFBWSxRQUFBLEdBQUF2QixjQUFBO0VBQUEsT0FBQXVCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|