@sapui5/sap.fe.test 1.127.2 → 1.129.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/test/.library +1 -1
- package/src/sap/fe/test/AppStateAdapter.js +1 -1
- package/src/sap/fe/test/BaseActions.js +0 -7
- package/src/sap/fe/test/BaseArrangements.js +0 -7
- package/src/sap/fe/test/BaseAssertions.js +0 -5
- package/src/sap/fe/test/CollaborationClient.js +1 -1
- package/src/sap/fe/test/FeMocks.js +1 -1
- package/src/sap/fe/test/Flexibility.js +2 -7
- package/src/sap/fe/test/JestFlexibilityHelper.js +1 -1
- package/src/sap/fe/test/JestTemplatingHelper.js +3 -12
- package/src/sap/fe/test/JestTemplatingHelper.tsx +2 -10
- package/src/sap/fe/test/JourneyRunner.js +0 -9
- package/src/sap/fe/test/ListReport.js +0 -14
- package/src/sap/fe/test/ObjectPage.js +144 -60
- package/src/sap/fe/test/Shell.js +0 -7
- package/src/sap/fe/test/TemplatePage.js +0 -17
- package/src/sap/fe/test/TemplatingTestUtils.js +0 -1
- package/src/sap/fe/test/UI5MockHelper.js +9 -18
- package/src/sap/fe/test/UI5MockHelper.ts +5 -16
- package/src/sap/fe/test/api/BaseAPI.js +0 -15
- package/src/sap/fe/test/api/ChartActions.js +0 -2
- package/src/sap/fe/test/api/ChartAssertions.js +0 -1
- package/src/sap/fe/test/api/CollaborationAPI.js +2 -10
- package/src/sap/fe/test/api/CollaborationAPI.ts +2 -9
- package/src/sap/fe/test/api/DialogAPI.js +0 -2
- package/src/sap/fe/test/api/DialogActions.js +0 -7
- package/src/sap/fe/test/api/DialogAssertions.js +0 -6
- package/src/sap/fe/test/api/DialogCreateActions.js +0 -2
- package/src/sap/fe/test/api/DialogCreateAssertions.js +0 -2
- package/src/sap/fe/test/api/DialogHelper.js +0 -1
- package/src/sap/fe/test/api/DialogMassEditActions.js +0 -4
- package/src/sap/fe/test/api/DialogMassEditAssertions.js +0 -5
- package/src/sap/fe/test/api/DialogMessageActions.js +0 -4
- package/src/sap/fe/test/api/DialogMessageAssertions.js +0 -4
- package/src/sap/fe/test/api/DialogType.js +0 -8
- package/src/sap/fe/test/api/DialogValueHelpActions.js +0 -12
- package/src/sap/fe/test/api/DialogValueHelpAssertions.js +0 -9
- package/src/sap/fe/test/api/EditState.js +0 -7
- package/src/sap/fe/test/api/FilterBarAPI.js +0 -6
- package/src/sap/fe/test/api/FilterBarActions.js +0 -12
- package/src/sap/fe/test/api/FilterBarAssertions.js +0 -10
- package/src/sap/fe/test/api/FooterAPI.js +0 -1
- package/src/sap/fe/test/api/FooterActionsBase.js +0 -2
- package/src/sap/fe/test/api/FooterActionsOP.js +0 -5
- package/src/sap/fe/test/api/FooterAssertionsBase.js +0 -3
- package/src/sap/fe/test/api/FooterAssertionsOP.js +0 -6
- package/src/sap/fe/test/api/FormAPI.js +0 -2
- package/src/sap/fe/test/api/FormActions.js +0 -8
- package/src/sap/fe/test/api/FormAssertions.js +0 -7
- package/src/sap/fe/test/api/HeaderAPI.js +0 -8
- package/src/sap/fe/test/api/HeaderActions.js +0 -14
- package/src/sap/fe/test/api/HeaderActionsLR.js +0 -4
- package/src/sap/fe/test/api/HeaderAssertions.js +0 -21
- package/src/sap/fe/test/api/HeaderAssertionsLR.js +0 -4
- package/src/sap/fe/test/api/HeaderLR.js +0 -2
- package/src/sap/fe/test/api/KPICardAPI.js +0 -1
- package/src/sap/fe/test/api/KPICardActions.js +0 -2
- package/src/sap/fe/test/api/KPICardAssertions.js +0 -8
- package/src/sap/fe/test/api/TableAPI.js +1 -14
- package/src/sap/fe/test/api/TableActions.js +0 -36
- package/src/sap/fe/test/api/TableAssertions.js +0 -28
- package/src/sap/fe/test/builder/FEBuilder.js +0 -5
- package/src/sap/fe/test/builder/KPIBuilder.js +0 -6
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +0 -1
- package/src/sap/fe/test/builder/MdcFieldBuilder.js +0 -6
- package/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +0 -2
- package/src/sap/fe/test/builder/MdcTableBuilder.js +2 -5
- package/src/sap/fe/test/builder/OverflowToolbarBuilder.js +12 -8
- package/src/sap/fe/test/builder/VMBuilder.js +0 -6
- package/src/sap/fe/test/internal/ConsoleErrorChecker.js +1 -1
- package/src/sap/fe/test/internal/FEArrangements.js +0 -1
- package/src/sap/fe/test/library.js +2 -3
- package/src/sap/fe/test/library.ts +0 -1
|
@@ -6,6 +6,7 @@ import ResourceModel from "sap/fe/core/ResourceModel";
|
|
|
6
6
|
import CollaborativeDraft from "sap/fe/core/controllerextensions/CollaborativeDraft";
|
|
7
7
|
import EditFlow from "sap/fe/core/controllerextensions/EditFlow";
|
|
8
8
|
import InternalRouting from "sap/fe/core/controllerextensions/InternalRouting";
|
|
9
|
+
import MessageHandler from "sap/fe/core/controllerextensions/MessageHandler";
|
|
9
10
|
import Recommendations from "sap/fe/core/controllerextensions/Recommendations";
|
|
10
11
|
import Share from "sap/fe/core/controllerextensions/Share";
|
|
11
12
|
import SideEffects from "sap/fe/core/controllerextensions/SideEffects";
|
|
@@ -32,7 +33,6 @@ export type MockContext = WithMock<Context> & {
|
|
|
32
33
|
};
|
|
33
34
|
/**
|
|
34
35
|
* Factory function to create a new MockContext.
|
|
35
|
-
*
|
|
36
36
|
* @param oContextData A map of the different properties of the context. The value for the key '$path' will be returned by the 'getPath' method
|
|
37
37
|
* @param oBinding The binding of the context
|
|
38
38
|
* @param isInactive Is the context iniactive or not
|
|
@@ -70,7 +70,7 @@ export function createMockContext(oContextData?: any, oBinding?: any, isInactive
|
|
|
70
70
|
mocked.mock.getObject.mockImplementation((path: string) => {
|
|
71
71
|
let result = path ? mocked._contextData[path] : mocked._contextData;
|
|
72
72
|
|
|
73
|
-
if (!result && path && path.
|
|
73
|
+
if (!result && path && path.includes("/")) {
|
|
74
74
|
const parts = path.split("/");
|
|
75
75
|
result = parts.reduce((sum, part: any) => {
|
|
76
76
|
sum = part ? sum[part] : sum;
|
|
@@ -105,8 +105,8 @@ export type MockEvent = WithMock<Event> & {
|
|
|
105
105
|
};
|
|
106
106
|
/**
|
|
107
107
|
* Factory function to create a new MockEvent.
|
|
108
|
-
*
|
|
109
108
|
* @param params The parameters of the event
|
|
109
|
+
* @param source
|
|
110
110
|
* @returns A new MockEvent
|
|
111
111
|
*/
|
|
112
112
|
export function createMockEvent(params?: { [key: string]: unknown }, source?: EventProvider): MockEvent {
|
|
@@ -144,7 +144,6 @@ export type MockListBinding = WithMock<ODataListBinding> & {
|
|
|
144
144
|
};
|
|
145
145
|
/**
|
|
146
146
|
* Factory function to create a new MockListBinding.
|
|
147
|
-
*
|
|
148
147
|
* @param aContextData An array of objects holding the different properties of the contexts referenced by the ListBinding
|
|
149
148
|
* @param oMockModel The model of the ListBinding
|
|
150
149
|
* @returns A new MockListBinding
|
|
@@ -200,7 +199,6 @@ export type MockPropertyBinding = WithMock<ODataPropertyBinding> & {
|
|
|
200
199
|
};
|
|
201
200
|
/**
|
|
202
201
|
* Factory function to create a new MockPropertyBinding.
|
|
203
|
-
*
|
|
204
202
|
* @param value The value returnd by the PropertyBinding
|
|
205
203
|
* @param path The path of the PropertyBinding
|
|
206
204
|
* @param oMockModel The model of the PropertyBinding
|
|
@@ -241,7 +239,6 @@ export type MockCompositeBinding = WithMock<CompositeBinding> & {
|
|
|
241
239
|
};
|
|
242
240
|
/**
|
|
243
241
|
* Factory function to create a new MockCompositeBinding.
|
|
244
|
-
*
|
|
245
242
|
* @param aBindings The bindings of the CompositeBinding
|
|
246
243
|
* @returns A new MockCompositeBinding
|
|
247
244
|
*/
|
|
@@ -286,7 +283,6 @@ export type MockContextBinding = WithMock<ODataContextBinding> & {
|
|
|
286
283
|
};
|
|
287
284
|
/**
|
|
288
285
|
* Factory function to create a new MockContextBinding.
|
|
289
|
-
*
|
|
290
286
|
* @param oContext The context of the ContextBinding
|
|
291
287
|
* @param oMockModel The model of the ContextBinding
|
|
292
288
|
* @returns A new MockContextBinding
|
|
@@ -331,7 +327,6 @@ export type MockMetaModel = WithMock<ODataMetaModel> & {
|
|
|
331
327
|
};
|
|
332
328
|
/**
|
|
333
329
|
* Factory function to create a new MockMetaModel.
|
|
334
|
-
*
|
|
335
330
|
* @param oMetaData A map of the different metadata properties of the MetaModel (path -> value).
|
|
336
331
|
* @returns A new MockMetaModel
|
|
337
332
|
*/
|
|
@@ -381,7 +376,6 @@ export type MockModel = WithMock<ODataModel> & {
|
|
|
381
376
|
};
|
|
382
377
|
/**
|
|
383
378
|
* Factory function to create a new MockModel.
|
|
384
|
-
*
|
|
385
379
|
* @param oMockListBinding A list binding that will be returned when calling bindList.
|
|
386
380
|
* @param oMockContextBinding A context binding that will be returned when calling bindContext.
|
|
387
381
|
* @returns A new MockModel
|
|
@@ -426,7 +420,6 @@ export const MockModel: new (oMockListBinding?: MockListBinding, oMockContextBin
|
|
|
426
420
|
createMockModel as any;
|
|
427
421
|
/**
|
|
428
422
|
* Factory function to create a new MockModel used with a listBinding.
|
|
429
|
-
*
|
|
430
423
|
* @param oMockListBinding A list binding that will be returned when calling bindList.
|
|
431
424
|
* @returns A new MockModel
|
|
432
425
|
*/
|
|
@@ -435,7 +428,6 @@ export function createMockModelFromListBinding(oMockListBinding: MockListBinding
|
|
|
435
428
|
}
|
|
436
429
|
/**
|
|
437
430
|
* Factory function to create a new MockModel used with a contextBinding.
|
|
438
|
-
*
|
|
439
431
|
* @param oMockContextBinding A context binding that will be returned when calling bindContext.
|
|
440
432
|
* @returns A new MockModel
|
|
441
433
|
*/
|
|
@@ -449,7 +441,6 @@ export function createMockModelFromContextBinding(oMockContextBinding: MockConte
|
|
|
449
441
|
export type MockView = WithMock<FEView>;
|
|
450
442
|
/**
|
|
451
443
|
* Factory function to create a new MockView.
|
|
452
|
-
*
|
|
453
444
|
* @returns A new MockView
|
|
454
445
|
*/
|
|
455
446
|
export function createMockView(): MockView {
|
|
@@ -477,11 +468,11 @@ export type MockController = WithMock<Controller> & {
|
|
|
477
468
|
share: WithMock<Share>;
|
|
478
469
|
recommendations: WithMock<Recommendations>;
|
|
479
470
|
collaborativeDraft: WithMock<CollaborativeDraft>;
|
|
471
|
+
messageHandler: WithMock<MessageHandler>;
|
|
480
472
|
getAppComponent: () => WithMock<AppComponent>;
|
|
481
473
|
};
|
|
482
474
|
/**
|
|
483
475
|
* Factory function to create a new MockController.
|
|
484
|
-
*
|
|
485
476
|
* @returns A new MockController
|
|
486
477
|
*/
|
|
487
478
|
export function createMockController(): MockController {
|
|
@@ -492,6 +483,7 @@ export function createMockController(): MockController {
|
|
|
492
483
|
mocked.share = mock(Share);
|
|
493
484
|
mocked.collaborativeDraft = mock(CollaborativeDraft);
|
|
494
485
|
mocked.recommendations = mock(Recommendations);
|
|
486
|
+
mocked.messageHandler = mock(MessageHandler);
|
|
495
487
|
mocked.getAppComponent = jest.fn().mockReturnValue(mock(AppComponent));
|
|
496
488
|
// Default Behavior
|
|
497
489
|
mocked.mock.getView.mockReturnValue(createMockView());
|
|
@@ -511,7 +503,6 @@ export interface MVCMock {
|
|
|
511
503
|
}
|
|
512
504
|
/**
|
|
513
505
|
* Generate model, view and controller mocks that refer to each other.
|
|
514
|
-
*
|
|
515
506
|
* @param existing Optional existing mocked instances that should be used
|
|
516
507
|
* @returns Mocked model, view and controller instances
|
|
517
508
|
*/
|
|
@@ -529,7 +520,6 @@ export function mockMVC(existing?: Partial<MVCMock>): MVCMock {
|
|
|
529
520
|
|
|
530
521
|
/**
|
|
531
522
|
* To be used to load messages bundles for tests without app/page component.
|
|
532
|
-
*
|
|
533
523
|
* @param textID ID of the Text
|
|
534
524
|
* @param parameters Array of parameters that are used to create the text
|
|
535
525
|
* @param metaPath Entity set name or action name to overload a text
|
|
@@ -550,7 +540,6 @@ export function getText(textID: string, parameters?: any[], metaPath?: string) {
|
|
|
550
540
|
export type MockResourceModel = WithMock<ResourceModel>;
|
|
551
541
|
/**
|
|
552
542
|
* Factory function to create a new MockView.
|
|
553
|
-
*
|
|
554
543
|
* @returns A new MockView
|
|
555
544
|
*/
|
|
556
545
|
export function createMockResourceModel(): MockResourceModel {
|
|
@@ -11,7 +11,6 @@ sap.ui.define(
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* A table identifier
|
|
14
|
-
*
|
|
15
14
|
* @typedef {object} TableIdentifier
|
|
16
15
|
* @property {string} property The name of the navigation property used for the table
|
|
17
16
|
* @property {string} [qualifier] The name of a qualifier for the table
|
|
@@ -21,7 +20,6 @@ sap.ui.define(
|
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
22
|
* A dialog identifier
|
|
24
|
-
*
|
|
25
23
|
* @typedef {object} DialogIdentifier
|
|
26
24
|
* @property {sap.fe.test.api.DialogType} type The type of the dialog
|
|
27
25
|
* @name sap.fe.test.api.DialogIdentifier
|
|
@@ -30,7 +28,6 @@ sap.ui.define(
|
|
|
30
28
|
|
|
31
29
|
/**
|
|
32
30
|
* An action identifier
|
|
33
|
-
*
|
|
34
31
|
* @typedef {object} ActionIdentifier
|
|
35
32
|
* @property {string} service The name of the service
|
|
36
33
|
* @property {string} action The name of the action
|
|
@@ -41,7 +38,6 @@ sap.ui.define(
|
|
|
41
38
|
|
|
42
39
|
/**
|
|
43
40
|
* A field identifier
|
|
44
|
-
*
|
|
45
41
|
* @typedef {object} FieldIdentifier
|
|
46
42
|
* @property {string} [fieldGroup] The name of the field group containing the field
|
|
47
43
|
* @property {string} property The name of the field
|
|
@@ -52,7 +48,6 @@ sap.ui.define(
|
|
|
52
48
|
|
|
53
49
|
/**
|
|
54
50
|
* A section identifier
|
|
55
|
-
*
|
|
56
51
|
* @typedef {object} SectionIdentifier
|
|
57
52
|
* @property {string} section The name of the section facet
|
|
58
53
|
* @property {string} [subSection] The name of the sub-section facet
|
|
@@ -62,7 +57,6 @@ sap.ui.define(
|
|
|
62
57
|
|
|
63
58
|
/**
|
|
64
59
|
* An action parameter dialog field identifier
|
|
65
|
-
*
|
|
66
60
|
* @typedef {object} ActionDialogFieldIdentifier
|
|
67
61
|
* @property {string} property The name of the field
|
|
68
62
|
* @name sap.fe.test.api.ActionDialogFieldIdentifier
|
|
@@ -71,7 +65,6 @@ sap.ui.define(
|
|
|
71
65
|
|
|
72
66
|
/**
|
|
73
67
|
* An dialog field identifier
|
|
74
|
-
*
|
|
75
68
|
* @typedef {object} DialogFieldIdentifier
|
|
76
69
|
* @property {string} property The name of the field
|
|
77
70
|
* In case of an action parameter dialog, this is the fieldname only
|
|
@@ -92,7 +85,6 @@ sap.ui.define(
|
|
|
92
85
|
|
|
93
86
|
/**
|
|
94
87
|
* A view identifier
|
|
95
|
-
*
|
|
96
88
|
* @typedef {object} ViewIdentifier
|
|
97
89
|
* @property {string} key The name of the view as defined in the manifest file
|
|
98
90
|
* @name sap.fe.test.api.ViewIdentifier
|
|
@@ -117,7 +109,6 @@ sap.ui.define(
|
|
|
117
109
|
/**
|
|
118
110
|
* Defines whether the current API is meant for actions (<code>true</code>) or assertions (<code>false</code>).
|
|
119
111
|
* It is used to enable parent chaining via <code>and.when</code> or <code>and.then</code>.
|
|
120
|
-
*
|
|
121
112
|
* @type {boolean}
|
|
122
113
|
* @public
|
|
123
114
|
* @ui5-restricted
|
|
@@ -126,7 +117,6 @@ sap.ui.define(
|
|
|
126
117
|
|
|
127
118
|
/**
|
|
128
119
|
* Gets a new builder instance based on the given one.
|
|
129
|
-
*
|
|
130
120
|
* @returns {sap.ui.test.OpaBuilder} An OpaBuilder instance
|
|
131
121
|
* @public
|
|
132
122
|
* @ui5-restricted
|
|
@@ -137,7 +127,6 @@ sap.ui.define(
|
|
|
137
127
|
|
|
138
128
|
/**
|
|
139
129
|
* Gets the underlying Opa5 instance.
|
|
140
|
-
*
|
|
141
130
|
* @returns {sap.ui.test.Opa5} An Opa instance
|
|
142
131
|
* @public
|
|
143
132
|
* @ui5-restricted
|
|
@@ -161,7 +150,6 @@ sap.ui.define(
|
|
|
161
150
|
|
|
162
151
|
/**
|
|
163
152
|
* Creates a matcher for actions.
|
|
164
|
-
*
|
|
165
153
|
* @param {sap.fe.api.ActionIdentifier | string} vActionIdentifier Identifier to be used for the matcher.
|
|
166
154
|
* @returns {object} A matcher
|
|
167
155
|
* @private
|
|
@@ -189,7 +177,6 @@ sap.ui.define(
|
|
|
189
177
|
|
|
190
178
|
/**
|
|
191
179
|
* Creates a matcher for fields.
|
|
192
|
-
*
|
|
193
180
|
* @param {sap.fe.test.api.FieldIdentifier | string} vFieldIdentifier Identifier to be used for the matcher
|
|
194
181
|
* @returns {object} A matcher
|
|
195
182
|
* @private
|
|
@@ -230,7 +217,6 @@ sap.ui.define(
|
|
|
230
217
|
|
|
231
218
|
/**
|
|
232
219
|
* Creates a matcher for FormElements (sap.ui.layout.form.FormElement).
|
|
233
|
-
*
|
|
234
220
|
* @param {sap.fe.test.api.FieldIdentifier | string} vFormElementIdentifier Identifier of the field to be used for the matcher
|
|
235
221
|
* @param {string} sDataFieldType Added as prefix for the id. Can be values like 'DataField',
|
|
236
222
|
* 'DataFieldWithUrl', 'DataFieldWithNavigationPath', etc.
|
|
@@ -259,7 +245,6 @@ sap.ui.define(
|
|
|
259
245
|
|
|
260
246
|
/**
|
|
261
247
|
* Create a matcher for FieldGroups (sap.ui.layout.form.FormContainer).
|
|
262
|
-
*
|
|
263
248
|
* @param {object | string} vFieldGroupIdentifier Identifier of the field-group to be used for the matcher.
|
|
264
249
|
* if passed as an object, the following pattern will be considered:
|
|
265
250
|
* <code><pre>
|
|
@@ -13,7 +13,6 @@ sap.ui.define(
|
|
|
13
13
|
* Constructs a new ChartActions instance.
|
|
14
14
|
*
|
|
15
15
|
* TODO this API does not fit the criteria for public API and needs some rework. Not considered critical for apps though.
|
|
16
|
-
*
|
|
17
16
|
* @param {sap.fe.test.builder.FEBuilder} oBuilderInstance The {@link sap.fe.test.builder.FEBuilder} instance used to interact with the UI
|
|
18
17
|
* @param {string} [vChartDescription] Description (optional) of the chart to be used for logging messages
|
|
19
18
|
* @returns {sap.fe.test.api.ChartActions} The new instance
|
|
@@ -29,7 +28,6 @@ sap.ui.define(
|
|
|
29
28
|
|
|
30
29
|
/**
|
|
31
30
|
* Selects the specified rows.
|
|
32
|
-
*
|
|
33
31
|
* @param {object} [mRowValues] a map of columns (either name or index) to its value, e.g. <code>{ 0: "Max", "Last Name": "Mustermann" }</code>
|
|
34
32
|
* @param {object} [mRowState] a map of states. Supported row states are
|
|
35
33
|
* <code><pre>
|
|
@@ -14,7 +14,6 @@ sap.ui.define(
|
|
|
14
14
|
* Constructs a new ChartAssertions instance.
|
|
15
15
|
*
|
|
16
16
|
* TODO this API does not fit the criteria for public API and needs some rework. Not considered critical for apps though.
|
|
17
|
-
*
|
|
18
17
|
* @param {sap.fe.test.builder.FEBuilder} oBuilderInstance The {@link sap.fe.test.builder.FEBuilder} instance used to interact with the UI
|
|
19
18
|
* @param {string} [vChartDescription] Description (optional) of the chart to be used for logging messages
|
|
20
19
|
* @returns {sap.fe.test.api.ChartAssertions} The new instance
|
|
@@ -18,7 +18,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
18
18
|
_receivedLocks: [],
|
|
19
19
|
/**
|
|
20
20
|
* Open an existing collaborative draft with a new user, and creates a 'ghost client' for this user.
|
|
21
|
-
*
|
|
22
21
|
* @param oContext The context of the collaborative draft
|
|
23
22
|
* @param userID The ID of the user
|
|
24
23
|
* @param userName The name of the user
|
|
@@ -46,7 +45,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
46
45
|
},
|
|
47
46
|
/**
|
|
48
47
|
* Checks if the ghost client has received a given message.
|
|
49
|
-
*
|
|
50
48
|
* @param message The message content to be looked for
|
|
51
49
|
* @param resetHistory If true, reset history of received messages
|
|
52
50
|
* @returns True if a previously received message matches the content
|
|
@@ -62,7 +60,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
62
60
|
if (resetHistory) {
|
|
63
61
|
this._lastReceivedMessages = []; // by default, reset history to avoid finding the same message twice
|
|
64
62
|
}
|
|
65
|
-
|
|
66
63
|
return found;
|
|
67
64
|
},
|
|
68
65
|
/**
|
|
@@ -77,7 +74,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
77
74
|
},
|
|
78
75
|
/**
|
|
79
76
|
* Simulates that the user starts typing in an input (live change).
|
|
80
|
-
*
|
|
81
77
|
* @param sPropertyPath The path of the property being modified
|
|
82
78
|
*/
|
|
83
79
|
lockField: function (sPropertyPath) {
|
|
@@ -92,7 +88,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
92
88
|
},
|
|
93
89
|
/**
|
|
94
90
|
* Simulates that the user has modified a property.
|
|
95
|
-
*
|
|
96
91
|
* @param sPropertyPath The path of the property being modified
|
|
97
92
|
* @param value The new value of the property being modified
|
|
98
93
|
*/
|
|
@@ -147,7 +142,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
147
142
|
},
|
|
148
143
|
/**
|
|
149
144
|
* Simulates that the user has deleted an object (child of draft root).
|
|
150
|
-
*
|
|
151
145
|
* @param objectPath The path of the object to delete
|
|
152
146
|
*/
|
|
153
147
|
deleteObject: function (objectPath) {
|
|
@@ -163,7 +157,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
163
157
|
},
|
|
164
158
|
/**
|
|
165
159
|
* Checks if a property has been locked by another user.
|
|
166
|
-
*
|
|
167
160
|
* @param objectPath
|
|
168
161
|
* @returns True if locked
|
|
169
162
|
*/
|
|
@@ -185,8 +178,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
185
178
|
},
|
|
186
179
|
/**
|
|
187
180
|
* Callback of the ghost client when receiving a message on the web socket.
|
|
188
|
-
*
|
|
189
|
-
* @param oMessage The message
|
|
181
|
+
* @param message
|
|
190
182
|
*/
|
|
191
183
|
_onMessageReceived: function (message) {
|
|
192
184
|
message.userAction = message.userAction || message.clientAction;
|
|
@@ -214,4 +206,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
|
|
|
214
206
|
};
|
|
215
207
|
return CollaborationAPI;
|
|
216
208
|
}, false);
|
|
217
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uQVBJIiwiX2xhc3RSZWNlaXZlZE1lc3NhZ2VzIiwiX3Jvb3RQYXRoIiwiX29Nb2RlbCIsInVuZGVmaW5lZCIsIl9sb2NrZWRQcm9wZXJ0eVBhdGgiLCJfaW50ZXJuYWxNb2RlbCIsIl9yZWNlaXZlZExvY2tzIiwiZW50ZXJEcmFmdCIsIm9Db250ZXh0IiwidXNlcklEIiwidXNlck5hbWUiLCJ3ZWJTb2NrZXRCYXNlVVJMIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJMb2ciLCJlcnJvciIsInNEcmFmdFVVSUQiLCJnZXRQcm9wZXJ0eSIsIkpTT05Nb2RlbCIsIm1vZGVsIiwiaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24iLCJpZCIsIm5hbWUiLCJpbml0aWFsTmFtZSIsIl9vbk1lc3NhZ2VSZWNlaXZlZCIsImJpbmQiLCJnZXRQYXRoIiwiY2hlY2tSZWNlaXZlZCIsIm1lc3NhZ2UiLCJyZXNldEhpc3RvcnkiLCJsZW5ndGgiLCJmb3VuZCIsInNvbWUiLCJyZWNlaXZlZE1lc3NhZ2UiLCJ1c2VyQWN0aW9uIiwiY2xpZW50Q29udGVudCIsImxlYXZlRHJhZnQiLCJlbmRDb2xsYWJvcmF0aW9uIiwiZGVzdHJveSIsImxvY2tGaWVsZCIsInNQcm9wZXJ0eVBhdGgiLCJ1bmxvY2tGaWVsZCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwiQWN0aXZpdHkiLCJMb2NrIiwidXBkYXRlUHJvcGVydHlWYWx1ZSIsInZhbHVlIiwib0NvbnRleHRCaW5kaW5nIiwiYmluZENvbnRleHQiLCIkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzIiwiJCRncm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwib1Byb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImdldEJvdW5kQ29udGV4dCIsInJlcXVlc3RWYWx1ZSIsInRoZW4iLCJzZXRWYWx1ZSIsImF0dGFjaEV2ZW50T25jZSIsIkNoYW5nZSIsImNhdGNoIiwiZXJyIiwiVW5sb2NrIiwiZGlzY2FyZERyYWZ0IiwiZHJhZnRDb250ZXh0IiwiX2dldERyYWZ0Q29udGV4dCIsInJlcXVlc3RQcm9wZXJ0eSIsImRyYWZ0IiwiZGVsZXRlRHJhZnQiLCJNZXNzYWdlSGFuZGxlciIsIkRpc2NhcmQiLCJyZXBsYWNlIiwiZGVsZXRlT2JqZWN0Iiwib2JqZWN0UGF0aCIsIm9iamVjdENvbnRleHQiLCJfZ2V0T2JqZWN0Q29udGV4dCIsImRlbGV0ZSIsIkRlbGV0ZSIsImNoZWNrTG9ja2VkQnlPdGhlciIsImluY2x1ZGVzIiwicGF0aCIsImNsaWVudEFjdGlvbiIsInB1c2giLCJKb2luIiwiSm9pbkVjaG8iLCJzcGxpdCIsImZpbHRlciIsImxvY2siXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHtcblx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UsXG5cdGVuZENvbGxhYm9yYXRpb24sXG5cdGluaXRpYWxpemVDb2xsYWJvcmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5QmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcblxuY29uc3QgQ29sbGFib3JhdGlvbkFQSSA9IHtcblx0X2xhc3RSZWNlaXZlZE1lc3NhZ2VzOiBbXSBhcyBNZXNzYWdlW10sXG5cdF9yb290UGF0aDogXCJcIixcblx0X29Nb2RlbDogdW5kZWZpbmVkIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQsXG5cdF9sb2NrZWRQcm9wZXJ0eVBhdGg6IFwiXCIsXG5cdF9pbnRlcm5hbE1vZGVsOiB1bmRlZmluZWQgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkLFxuXHRfcmVjZWl2ZWRMb2NrczogW10gYXMgc3RyaW5nW10sXG5cblx0LyoqXG5cdCAqIE9wZW4gYW4gZXhpc3RpbmcgY29sbGFib3JhdGl2ZSBkcmFmdCB3aXRoIGEgbmV3IHVzZXIsIGFuZCBjcmVhdGVzIGEgJ2dob3N0IGNsaWVudCcgZm9yIHRoaXMgdXNlci5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0XG5cdCAqIEBwYXJhbSB1c2VySUQgVGhlIElEIG9mIHRoZSB1c2VyXG5cdCAqIEBwYXJhbSB1c2VyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdXNlclxuXHQgKi9cblx0ZW50ZXJEcmFmdDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0LCB1c2VySUQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IHdlYlNvY2tldEJhc2VVUkw6IHN0cmluZyA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuV2ViU29ja2V0QmFzZVVSTFwiKTtcblxuXHRcdGlmICghd2ViU29ja2V0QmFzZVVSTCkge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGZpbmQgV2ViU29ja2V0QmFzZVVSTCBhbm5vdGF0aW9uXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNEcmFmdFVVSUQ6IHN0cmluZyA9IG9Db250ZXh0LmdldFByb3BlcnR5KFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRVVUlEXCIpO1xuXHRcdHRoaXMuX2ludGVybmFsTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRjb25zdCBtb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRpbml0aWFsaXplQ29sbGFib3JhdGlvbihcblx0XHRcdHtcblx0XHRcdFx0aWQ6IHVzZXJJRCxcblx0XHRcdFx0bmFtZTogdXNlck5hbWUsXG5cdFx0XHRcdGluaXRpYWxOYW1lOiB1c2VyTmFtZVxuXHRcdFx0fSxcblx0XHRcdHNEcmFmdFVVSUQsXG5cdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsLFxuXHRcdFx0dGhpcy5fb25NZXNzYWdlUmVjZWl2ZWQuYmluZCh0aGlzKSxcblx0XHRcdHtcblx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gbW9kZWw7XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgRkVWaWV3LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHR0aGlzLl9yb290UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHR0aGlzLl9vTW9kZWwgPSBtb2RlbDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBnaG9zdCBjbGllbnQgaGFzIHJlY2VpdmVkIGEgZ2l2ZW4gbWVzc2FnZS5cblx0ICpcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgY29udGVudCB0byBiZSBsb29rZWQgZm9yXG5cdCAqIEBwYXJhbSByZXNldEhpc3RvcnkgSWYgdHJ1ZSwgcmVzZXQgaGlzdG9yeSBvZiByZWNlaXZlZCBtZXNzYWdlc1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGEgcHJldmlvdXNseSByZWNlaXZlZCBtZXNzYWdlIG1hdGNoZXMgdGhlIGNvbnRlbnRcblx0ICovXG5cdGNoZWNrUmVjZWl2ZWQ6IGZ1bmN0aW9uIChtZXNzYWdlOiBQYXJ0aWFsPE1lc3NhZ2U+LCByZXNldEhpc3RvcnkgPSB0cnVlKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuX2xhc3RSZWNlaXZlZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZvdW5kID0gdGhpcy5fbGFzdFJlY2VpdmVkTWVzc2FnZXMuc29tZSgocmVjZWl2ZWRNZXNzYWdlKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQoIW1lc3NhZ2UudXNlcklEIHx8IG1lc3NhZ2UudXNlcklEID09PSByZWNlaXZlZE1lc3NhZ2UudXNlcklEKSAmJlxuXHRcdFx0XHQoIW1lc3NhZ2UudXNlckFjdGlvbiB8fCBtZXNzYWdlLnVzZXJBY3Rpb24gPT09IHJlY2VpdmVkTWVzc2FnZS51c2VyQWN0aW9uKSAmJlxuXHRcdFx0XHQoIW1lc3NhZ2UuY2xpZW50Q29udGVudCB8fCBtZXNzYWdlLmNsaWVudENvbnRlbnQgPT09IHJlY2VpdmVkTWVzc2FnZS5jbGllbnRDb250ZW50KVxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdGlmIChyZXNldEhpc3RvcnkpIHtcblx0XHRcdHRoaXMuX2xhc3RSZWNlaXZlZE1lc3NhZ2VzID0gW107IC8vIGJ5IGRlZmF1bHQsIHJlc2V0IGhpc3RvcnkgdG8gYXZvaWQgZmluZGluZyB0aGUgc2FtZSBtZXNzYWdlIHR3aWNlXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGdob3N0IGNsaWVudCBhbmQgcmVtb3ZlcyB0aGUgdXNlciBmcm9tIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0LlxuXHQgKi9cblx0bGVhdmVEcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRlbmRDb2xsYWJvcmF0aW9uKHRoaXMuX2ludGVybmFsTW9kZWwpO1xuXHRcdFx0dGhpcy5faW50ZXJuYWxNb2RlbC5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgc3RhcnRzIHR5cGluZyBpbiBhbiBpbnB1dCAobGl2ZSBjaGFuZ2UpLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5UGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgYmVpbmcgbW9kaWZpZWRcblx0ICovXG5cdGxvY2tGaWVsZDogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRpZiAodGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdC8vIFVubG9jayBwcmV2aW91cyBwcm9wZXJ0eSBwYXRoXG5cdFx0XHRcdHRoaXMudW5sb2NrRmllbGQoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2xvY2tlZFByb3BlcnR5UGF0aCA9IHNQcm9wZXJ0eVBhdGg7XG5cdFx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShBY3Rpdml0eS5Mb2NrLCBgJHt0aGlzLl9yb290UGF0aH0vJHtzUHJvcGVydHlQYXRofWAsIHRoaXMuX2ludGVybmFsTW9kZWwpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgaGFzIG1vZGlmaWVkIGEgcHJvcGVydHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBtb2RpZmllZFxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgbW9kaWZpZWRcblx0ICovXG5cdHVwZGF0ZVByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodGhpcy5faW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0aWYgKHRoaXMuX2xvY2tlZFByb3BlcnR5UGF0aCAhPT0gc1Byb3BlcnR5UGF0aCkge1xuXHRcdFx0XHR0aGlzLmxvY2tGaWVsZChzUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb0NvbnRleHRCaW5kaW5nID0gdGhpcy5fb01vZGVsIS5iaW5kQ29udGV4dCh0aGlzLl9yb290UGF0aCwgdW5kZWZpbmVkLCB7XG5cdFx0XHRcdCQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHM6IHRydWUsXG5cdFx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIlxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUJpbmRpbmcgPSB0aGlzLl9vTW9kZWwhLmJpbmRQcm9wZXJ0eShzUHJvcGVydHlQYXRoLCBvQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCkpO1xuXG5cdFx0XHRvUHJvcGVydHlCaW5kaW5nXG5cdFx0XHRcdC5yZXF1ZXN0VmFsdWUoKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0b1Byb3BlcnR5QmluZGluZy5zZXRWYWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0b0NvbnRleHRCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcInBhdGNoQ29tcGxldGVkXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkNoYW5nZSwgYCR7dGhpcy5fcm9vdFBhdGh9LyR7c1Byb3BlcnR5UGF0aH1gLCB0aGlzLl9pbnRlcm5hbE1vZGVsISk7XG5cdFx0XHRcdFx0XHR0aGlzLnVubG9ja0ZpZWxkKCk7XG5cdFx0XHRcdFx0XHR0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNpbXVsYXRlcyB0aGF0IHRoZSB1c2VyIHVubG9ja2VkIGEgZmllbGQgKHRvIGJlIGNhbGxlZCBhZnRlciBsb2NrRmllbGQpLlxuXHQgKi9cblx0dW5sb2NrRmllbGQ6IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShBY3Rpdml0eS5VbmxvY2ssIGAke3RoaXMuX3Jvb3RQYXRofS8ke3RoaXMuX2xvY2tlZFByb3BlcnR5UGF0aH1gLCB0aGlzLl9pbnRlcm5hbE1vZGVsISk7XG5cdFx0XHR0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgaGFzIGRpc2NhcmRlZCB0aGUgZHJhZnQuXG5cdCAqL1xuXHRkaXNjYXJkRHJhZnQ6IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodGhpcy5faW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0Y29uc3QgZHJhZnRDb250ZXh0ID0gdGhpcy5fZ2V0RHJhZnRDb250ZXh0KCk7XG5cblx0XHRcdGRyYWZ0Q29udGV4dFxuXHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGRyYWZ0LmRlbGV0ZURyYWZ0KGRyYWZ0Q29udGV4dCwgbmV3IE1lc3NhZ2VIYW5kbGVyKCkpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoXG5cdFx0XHRcdFx0XHRBY3Rpdml0eS5EaXNjYXJkLFxuXHRcdFx0XHRcdFx0dGhpcy5fcm9vdFBhdGgucmVwbGFjZShcIklzQWN0aXZlRW50aXR5PWZhbHNlXCIsIFwiSXNBY3RpdmVFbnRpdHk9dHJ1ZVwiKSxcblx0XHRcdFx0XHRcdHRoaXMuX2ludGVybmFsTW9kZWwhXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsIS5kZXN0cm95KCk7XG5cdFx0XHRcdFx0dGhpcy5faW50ZXJuYWxNb2RlbCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNpbXVsYXRlcyB0aGF0IHRoZSB1c2VyIGhhcyBkZWxldGVkIGFuIG9iamVjdCAoY2hpbGQgb2YgZHJhZnQgcm9vdCkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvYmplY3RQYXRoIFRoZSBwYXRoIG9mIHRoZSBvYmplY3QgdG8gZGVsZXRlXG5cdCAqL1xuXHRkZWxldGVPYmplY3Q6IGZ1bmN0aW9uIChvYmplY3RQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5faW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0Q29udGV4dCA9IHRoaXMuX2dldE9iamVjdENvbnRleHQob2JqZWN0UGF0aCk7XG5cblx0XHRcdG9iamVjdENvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRvYmplY3RDb250ZXh0LmRlbGV0ZSgpO1xuXHRcdFx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkRlbGV0ZSwgb2JqZWN0UGF0aCwgdGhpcy5faW50ZXJuYWxNb2RlbCEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGhhcyBiZWVuIGxvY2tlZCBieSBhbm90aGVyIHVzZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBvYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgbG9ja2VkXG5cdCAqL1xuXHRjaGVja0xvY2tlZEJ5T3RoZXI6IGZ1bmN0aW9uIChvYmplY3RQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVjZWl2ZWRMb2Nrcy5pbmNsdWRlcyhvYmplY3RQYXRoKTtcblx0fSxcblxuXHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBQcml2YXRlIG1ldGhvZHNcblxuXHRfZ2V0RHJhZnRDb250ZXh0OiBmdW5jdGlvbiAoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0T2JqZWN0Q29udGV4dCh0aGlzLl9yb290UGF0aCk7XG5cdH0sXG5cblx0X2dldE9iamVjdENvbnRleHQ6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcpOiBDb250ZXh0IHtcblx0XHRyZXR1cm4gdGhpcy5fb01vZGVsIS5iaW5kQ29udGV4dChwYXRoLCB1bmRlZmluZWQsIHtcblx0XHRcdCQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHM6IHRydWUsXG5cdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG9cIixcblx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCIkYXV0b1wiXG5cdFx0fSkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIG9mIHRoZSBnaG9zdCBjbGllbnQgd2hlbiByZWNlaXZpbmcgYSBtZXNzYWdlIG9uIHRoZSB3ZWIgc29ja2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2Vcblx0ICovXG5cdF9vbk1lc3NhZ2VSZWNlaXZlZDogZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRtZXNzYWdlLnVzZXJBY3Rpb24gPSBtZXNzYWdlLnVzZXJBY3Rpb24gfHwgbWVzc2FnZS5jbGllbnRBY3Rpb247XG5cdFx0aWYgKCFtZXNzYWdlLmNsaWVudENvbnRlbnQpIHtcblx0XHRcdG1lc3NhZ2UuY2xpZW50Q29udGVudCA9IFwiXCI7XG5cdFx0fVxuXHRcdHRoaXMuX2xhc3RSZWNlaXZlZE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cblx0XHRzd2l0Y2ggKG1lc3NhZ2UudXNlckFjdGlvbikge1xuXHRcdFx0Y2FzZSBBY3Rpdml0eS5Kb2luOlxuXHRcdFx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShcblx0XHRcdFx0XHRBY3Rpdml0eS5Kb2luRWNobyxcblx0XHRcdFx0XHR0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGggPyBgJHt0aGlzLl9yb290UGF0aH0vJHt0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGh9YCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5Kb2luRWNobzpcblx0XHRcdGNhc2UgQWN0aXZpdHkuTG9jazpcblx0XHRcdFx0dGhpcy5fcmVjZWl2ZWRMb2Nrcy5wdXNoKC4uLm1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIikpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5VbmxvY2s6XG5cdFx0XHRcdHRoaXMuX3JlY2VpdmVkTG9ja3MgPSB0aGlzLl9yZWNlaXZlZExvY2tzLmZpbHRlcigobG9jaykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAhbWVzc2FnZS5jbGllbnRDb250ZW50LnNwbGl0KFwifFwiKS5pbmNsdWRlcyhsb2NrKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gTm90aGluZ1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sbGFib3JhdGlvbkFQSTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7RUFlQSxNQUFNQSxnQkFBZ0IsR0FBRztJQUN4QkMscUJBQXFCLEVBQUUsRUFBZTtJQUN0Q0MsU0FBUyxFQUFFLEVBQUU7SUFDYkMsT0FBTyxFQUFFQyxTQUFtQztJQUM1Q0MsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QkMsY0FBYyxFQUFFRixTQUFrQztJQUNsREcsY0FBYyxFQUFFLEVBQWM7SUFFOUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsVUFBVSxFQUFFLFVBQVVDLFFBQWlCLEVBQUVDLE1BQWMsRUFBRUMsUUFBZ0IsRUFBRTtNQUMxRSxNQUFNQyxnQkFBd0IsR0FBR0gsUUFBUSxDQUFDSSxRQUFRLEVBQUUsQ0FBQ0MsWUFBWSxFQUFFLENBQUNDLFNBQVMsQ0FBQyxtREFBbUQsQ0FBQztNQUVsSSxJQUFJLENBQUNILGdCQUFnQixFQUFFO1FBQ3RCSSxHQUFHLENBQUNDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQztRQUNwRDtNQUNEO01BRUEsTUFBTUMsVUFBa0IsR0FBR1QsUUFBUSxDQUFDVSxXQUFXLENBQUMsbUNBQW1DLENBQUM7TUFDcEYsSUFBSSxDQUFDYixjQUFjLEdBQUcsSUFBSWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3ZDLE1BQU1DLEtBQUssR0FBR1osUUFBUSxDQUFDSSxRQUFRLEVBQUU7TUFFakNTLHVCQUF1QixDQUN0QjtRQUNDQyxFQUFFLEVBQUViLE1BQU07UUFDVmMsSUFBSSxFQUFFYixR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
|
|
209
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uQVBJIiwiX2xhc3RSZWNlaXZlZE1lc3NhZ2VzIiwiX3Jvb3RQYXRoIiwiX29Nb2RlbCIsInVuZGVmaW5lZCIsIl9sb2NrZWRQcm9wZXJ0eVBhdGgiLCJfaW50ZXJuYWxNb2RlbCIsIl9yZWNlaXZlZExvY2tzIiwiZW50ZXJEcmFmdCIsIm9Db250ZXh0IiwidXNlcklEIiwidXNlck5hbWUiLCJ3ZWJTb2NrZXRCYXNlVVJMIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJMb2ciLCJlcnJvciIsInNEcmFmdFVVSUQiLCJnZXRQcm9wZXJ0eSIsIkpTT05Nb2RlbCIsIm1vZGVsIiwiaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24iLCJpZCIsIm5hbWUiLCJpbml0aWFsTmFtZSIsIl9vbk1lc3NhZ2VSZWNlaXZlZCIsImJpbmQiLCJnZXRQYXRoIiwiY2hlY2tSZWNlaXZlZCIsIm1lc3NhZ2UiLCJyZXNldEhpc3RvcnkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3VuZCIsInNvbWUiLCJyZWNlaXZlZE1lc3NhZ2UiLCJ1c2VyQWN0aW9uIiwiY2xpZW50Q29udGVudCIsImxlYXZlRHJhZnQiLCJlbmRDb2xsYWJvcmF0aW9uIiwiZGVzdHJveSIsImxvY2tGaWVsZCIsInNQcm9wZXJ0eVBhdGgiLCJ1bmxvY2tGaWVsZCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwiQWN0aXZpdHkiLCJMb2NrIiwidXBkYXRlUHJvcGVydHlWYWx1ZSIsInZhbHVlIiwib0NvbnRleHRCaW5kaW5nIiwiYmluZENvbnRleHQiLCIkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzIiwiJCRncm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwib1Byb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImdldEJvdW5kQ29udGV4dCIsInJlcXVlc3RWYWx1ZSIsInRoZW4iLCJzZXRWYWx1ZSIsImF0dGFjaEV2ZW50T25jZSIsIkNoYW5nZSIsImNhdGNoIiwiZXJyIiwiVW5sb2NrIiwiZGlzY2FyZERyYWZ0IiwiZHJhZnRDb250ZXh0IiwiX2dldERyYWZ0Q29udGV4dCIsInJlcXVlc3RQcm9wZXJ0eSIsImRyYWZ0IiwiZGVsZXRlRHJhZnQiLCJNZXNzYWdlSGFuZGxlciIsIkRpc2NhcmQiLCJyZXBsYWNlIiwiZGVsZXRlT2JqZWN0Iiwib2JqZWN0UGF0aCIsIm9iamVjdENvbnRleHQiLCJfZ2V0T2JqZWN0Q29udGV4dCIsImRlbGV0ZSIsIkRlbGV0ZSIsImNoZWNrTG9ja2VkQnlPdGhlciIsImluY2x1ZGVzIiwicGF0aCIsImNsaWVudEFjdGlvbiIsInB1c2giLCJKb2luIiwiSm9pbkVjaG8iLCJzcGxpdCIsImZpbHRlciIsImxvY2siXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHtcblx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UsXG5cdGVuZENvbGxhYm9yYXRpb24sXG5cdGluaXRpYWxpemVDb2xsYWJvcmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5QmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuXG5jb25zdCBDb2xsYWJvcmF0aW9uQVBJID0ge1xuXHRfbGFzdFJlY2VpdmVkTWVzc2FnZXM6IFtdIGFzIE1lc3NhZ2VbXSxcblx0X3Jvb3RQYXRoOiBcIlwiLFxuXHRfb01vZGVsOiB1bmRlZmluZWQgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0X2xvY2tlZFByb3BlcnR5UGF0aDogXCJcIixcblx0X2ludGVybmFsTW9kZWw6IHVuZGVmaW5lZCBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQsXG5cdF9yZWNlaXZlZExvY2tzOiBbXSBhcyBzdHJpbmdbXSxcblxuXHQvKipcblx0ICogT3BlbiBhbiBleGlzdGluZyBjb2xsYWJvcmF0aXZlIGRyYWZ0IHdpdGggYSBuZXcgdXNlciwgYW5kIGNyZWF0ZXMgYSAnZ2hvc3QgY2xpZW50JyBmb3IgdGhpcyB1c2VyLlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnRcblx0ICogQHBhcmFtIHVzZXJJRCBUaGUgSUQgb2YgdGhlIHVzZXJcblx0ICogQHBhcmFtIHVzZXJOYW1lIFRoZSBuYW1lIG9mIHRoZSB1c2VyXG5cdCAqL1xuXHRlbnRlckRyYWZ0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQsIHVzZXJJRDogc3RyaW5nLCB1c2VyTmFtZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgd2ViU29ja2V0QmFzZVVSTDogc3RyaW5nID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5XZWJTb2NrZXRCYXNlVVJMXCIpO1xuXG5cdFx0aWYgKCF3ZWJTb2NrZXRCYXNlVVJMKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZmluZCBXZWJTb2NrZXRCYXNlVVJMIGFubm90YXRpb25cIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0RyYWZ0VVVJRDogc3RyaW5nID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdFVVSURcIik7XG5cdFx0dGhpcy5faW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdGNvbnN0IG1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdGluaXRpYWxpemVDb2xsYWJvcmF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogdXNlcklELFxuXHRcdFx0XHRuYW1lOiB1c2VyTmFtZSxcblx0XHRcdFx0aW5pdGlhbE5hbWU6IHVzZXJOYW1lXG5cdFx0XHR9LFxuXHRcdFx0c0RyYWZ0VVVJRCxcblx0XHRcdHRoaXMuX2ludGVybmFsTW9kZWwsXG5cdFx0XHR0aGlzLl9vbk1lc3NhZ2VSZWNlaXZlZC5iaW5kKHRoaXMpLFxuXHRcdFx0e1xuXHRcdFx0XHRnZXRNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJldHVybiBtb2RlbDtcblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBGRVZpZXcsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblxuXHRcdHRoaXMuX3Jvb3RQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHRoaXMuX29Nb2RlbCA9IG1vZGVsO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGdob3N0IGNsaWVudCBoYXMgcmVjZWl2ZWQgYSBnaXZlbiBtZXNzYWdlLlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBjb250ZW50IHRvIGJlIGxvb2tlZCBmb3Jcblx0ICogQHBhcmFtIHJlc2V0SGlzdG9yeSBJZiB0cnVlLCByZXNldCBoaXN0b3J5IG9mIHJlY2VpdmVkIG1lc3NhZ2VzXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYSBwcmV2aW91c2x5IHJlY2VpdmVkIG1lc3NhZ2UgbWF0Y2hlcyB0aGUgY29udGVudFxuXHQgKi9cblx0Y2hlY2tSZWNlaXZlZDogZnVuY3Rpb24gKG1lc3NhZ2U6IFBhcnRpYWw8TWVzc2FnZT4sIHJlc2V0SGlzdG9yeSA9IHRydWUpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5fbGFzdFJlY2VpdmVkTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZm91bmQgPSB0aGlzLl9sYXN0UmVjZWl2ZWRNZXNzYWdlcy5zb21lKChyZWNlaXZlZE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCghbWVzc2FnZS51c2VySUQgfHwgbWVzc2FnZS51c2VySUQgPT09IHJlY2VpdmVkTWVzc2FnZS51c2VySUQpICYmXG5cdFx0XHRcdCghbWVzc2FnZS51c2VyQWN0aW9uIHx8IG1lc3NhZ2UudXNlckFjdGlvbiA9PT0gcmVjZWl2ZWRNZXNzYWdlLnVzZXJBY3Rpb24pICYmXG5cdFx0XHRcdCghbWVzc2FnZS5jbGllbnRDb250ZW50IHx8IG1lc3NhZ2UuY2xpZW50Q29udGVudCA9PT0gcmVjZWl2ZWRNZXNzYWdlLmNsaWVudENvbnRlbnQpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKHJlc2V0SGlzdG9yeSkge1xuXHRcdFx0dGhpcy5fbGFzdFJlY2VpdmVkTWVzc2FnZXMgPSBbXTsgLy8gYnkgZGVmYXVsdCwgcmVzZXQgaGlzdG9yeSB0byBhdm9pZCBmaW5kaW5nIHRoZSBzYW1lIG1lc3NhZ2UgdHdpY2Vcblx0XHR9XG5cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgZ2hvc3QgY2xpZW50IGFuZCByZW1vdmVzIHRoZSB1c2VyIGZyb20gdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQuXG5cdCAqL1xuXHRsZWF2ZURyYWZ0OiBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHRoaXMuX2ludGVybmFsTW9kZWwpIHtcblx0XHRcdGVuZENvbGxhYm9yYXRpb24odGhpcy5faW50ZXJuYWxNb2RlbCk7XG5cdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuX2ludGVybmFsTW9kZWwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaW11bGF0ZXMgdGhhdCB0aGUgdXNlciBzdGFydHMgdHlwaW5nIGluIGFuIGlucHV0IChsaXZlIGNoYW5nZSkuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBtb2RpZmllZFxuXHQgKi9cblx0bG9ja0ZpZWxkOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuX2ludGVybmFsTW9kZWwpIHtcblx0XHRcdGlmICh0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Ly8gVW5sb2NrIHByZXZpb3VzIHByb3BlcnR5IHBhdGhcblx0XHRcdFx0dGhpcy51bmxvY2tGaWVsZCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoID0gc1Byb3BlcnR5UGF0aDtcblx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkxvY2ssIGAke3RoaXMuX3Jvb3RQYXRofS8ke3NQcm9wZXJ0eVBhdGh9YCwgdGhpcy5faW50ZXJuYWxNb2RlbCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaW11bGF0ZXMgdGhhdCB0aGUgdXNlciBoYXMgbW9kaWZpZWQgYSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IGJlaW5nIG1vZGlmaWVkXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBtb2RpZmllZFxuXHQgKi9cblx0dXBkYXRlUHJvcGVydHlWYWx1ZTogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRpZiAodGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoICE9PSBzUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdHRoaXMubG9ja0ZpZWxkKHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvQ29udGV4dEJpbmRpbmcgPSB0aGlzLl9vTW9kZWwhLmJpbmRDb250ZXh0KHRoaXMuX3Jvb3RQYXRoLCB1bmRlZmluZWQsIHtcblx0XHRcdFx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0czogdHJ1ZSxcblx0XHRcdFx0JCRncm91cElkOiBcIiRhdXRvXCIsXG5cdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCIkYXV0b1wiXG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5QmluZGluZyA9IHRoaXMuX29Nb2RlbCEuYmluZFByb3BlcnR5KHNQcm9wZXJ0eVBhdGgsIG9Db250ZXh0QmluZGluZy5nZXRCb3VuZENvbnRleHQoKSk7XG5cblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdcblx0XHRcdFx0LnJlcXVlc3RWYWx1ZSgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRvUHJvcGVydHlCaW5kaW5nLnNldFZhbHVlKHZhbHVlKTtcblx0XHRcdFx0XHRvQ29udGV4dEJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoQWN0aXZpdHkuQ2hhbmdlLCBgJHt0aGlzLl9yb290UGF0aH0vJHtzUHJvcGVydHlQYXRofWAsIHRoaXMuX2ludGVybmFsTW9kZWwhKTtcblx0XHRcdFx0XHRcdHRoaXMudW5sb2NrRmllbGQoKTtcblx0XHRcdFx0XHRcdHRoaXMuX2xvY2tlZFByb3BlcnR5UGF0aCA9IFwiXCI7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgdW5sb2NrZWQgYSBmaWVsZCAodG8gYmUgY2FsbGVkIGFmdGVyIGxvY2tGaWVsZCkuXG5cdCAqL1xuXHR1bmxvY2tGaWVsZDogZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LlVubG9jaywgYCR7dGhpcy5fcm9vdFBhdGh9LyR7dGhpcy5fbG9ja2VkUHJvcGVydHlQYXRofWAsIHRoaXMuX2ludGVybmFsTW9kZWwhKTtcblx0XHRcdHRoaXMuX2xvY2tlZFByb3BlcnR5UGF0aCA9IFwiXCI7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaW11bGF0ZXMgdGhhdCB0aGUgdXNlciBoYXMgZGlzY2FyZGVkIHRoZSBkcmFmdC5cblx0ICovXG5cdGRpc2NhcmREcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRjb25zdCBkcmFmdENvbnRleHQgPSB0aGlzLl9nZXREcmFmdENvbnRleHQoKTtcblxuXHRcdFx0ZHJhZnRDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0ZHJhZnQuZGVsZXRlRHJhZnQoZHJhZnRDb250ZXh0LCBuZXcgTWVzc2FnZUhhbmRsZXIoKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShcblx0XHRcdFx0XHRcdEFjdGl2aXR5LkRpc2NhcmQsXG5cdFx0XHRcdFx0XHR0aGlzLl9yb290UGF0aC5yZXBsYWNlKFwiSXNBY3RpdmVFbnRpdHk9ZmFsc2VcIiwgXCJJc0FjdGl2ZUVudGl0eT10cnVlXCIpLFxuXHRcdFx0XHRcdFx0dGhpcy5faW50ZXJuYWxNb2RlbCFcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHRoaXMuX2ludGVybmFsTW9kZWwhLmRlc3Ryb3koKTtcblx0XHRcdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgaGFzIGRlbGV0ZWQgYW4gb2JqZWN0IChjaGlsZCBvZiBkcmFmdCByb290KS5cblx0ICogQHBhcmFtIG9iamVjdFBhdGggVGhlIHBhdGggb2YgdGhlIG9iamVjdCB0byBkZWxldGVcblx0ICovXG5cdGRlbGV0ZU9iamVjdDogZnVuY3Rpb24gKG9iamVjdFBhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRjb25zdCBvYmplY3RDb250ZXh0ID0gdGhpcy5fZ2V0T2JqZWN0Q29udGV4dChvYmplY3RQYXRoKTtcblxuXHRcdFx0b2JqZWN0Q29udGV4dFxuXHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdG9iamVjdENvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoQWN0aXZpdHkuRGVsZXRlLCBvYmplY3RQYXRoLCB0aGlzLl9pbnRlcm5hbE1vZGVsISk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaGFzIGJlZW4gbG9ja2VkIGJ5IGFub3RoZXIgdXNlci5cblx0ICogQHBhcmFtIG9iamVjdFBhdGhcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBsb2NrZWRcblx0ICovXG5cdGNoZWNrTG9ja2VkQnlPdGhlcjogZnVuY3Rpb24gKG9iamVjdFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9yZWNlaXZlZExvY2tzLmluY2x1ZGVzKG9iamVjdFBhdGgpO1xuXHR9LFxuXG5cdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vIFByaXZhdGUgbWV0aG9kc1xuXG5cdF9nZXREcmFmdENvbnRleHQ6IGZ1bmN0aW9uICgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRPYmplY3RDb250ZXh0KHRoaXMuX3Jvb3RQYXRoKTtcblx0fSxcblxuXHRfZ2V0T2JqZWN0Q29udGV4dDogZnVuY3Rpb24gKHBhdGg6IHN0cmluZyk6IENvbnRleHQge1xuXHRcdHJldHVybiB0aGlzLl9vTW9kZWwhLmJpbmRDb250ZXh0KHBhdGgsIHVuZGVmaW5lZCwge1xuXHRcdFx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0czogdHJ1ZSxcblx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0JCR1cGRhdGVHcm91cElkOiBcIiRhdXRvXCJcblx0XHR9KS5nZXRCb3VuZENvbnRleHQoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGJhY2sgb2YgdGhlIGdob3N0IGNsaWVudCB3aGVuIHJlY2VpdmluZyBhIG1lc3NhZ2Ugb24gdGhlIHdlYiBzb2NrZXQuXG5cdCAqIEBwYXJhbSBtZXNzYWdlXG5cdCAqL1xuXHRfb25NZXNzYWdlUmVjZWl2ZWQ6IGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0bWVzc2FnZS51c2VyQWN0aW9uID0gbWVzc2FnZS51c2VyQWN0aW9uIHx8IG1lc3NhZ2UuY2xpZW50QWN0aW9uO1xuXHRcdGlmICghbWVzc2FnZS5jbGllbnRDb250ZW50KSB7XG5cdFx0XHRtZXNzYWdlLmNsaWVudENvbnRlbnQgPSBcIlwiO1xuXHRcdH1cblx0XHR0aGlzLl9sYXN0UmVjZWl2ZWRNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXG5cdFx0c3dpdGNoIChtZXNzYWdlLnVzZXJBY3Rpb24pIHtcblx0XHRcdGNhc2UgQWN0aXZpdHkuSm9pbjpcblx0XHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoXG5cdFx0XHRcdFx0QWN0aXZpdHkuSm9pbkVjaG8sXG5cdFx0XHRcdFx0dGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoID8gYCR7dGhpcy5fcm9vdFBhdGh9LyR7dGhpcy5fbG9ja2VkUHJvcGVydHlQYXRofWAgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0dGhpcy5faW50ZXJuYWxNb2RlbCFcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuSm9pbkVjaG86XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkxvY2s6XG5cdFx0XHRcdHRoaXMuX3JlY2VpdmVkTG9ja3MucHVzaCguLi5tZXNzYWdlLmNsaWVudENvbnRlbnQuc3BsaXQoXCJ8XCIpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuVW5sb2NrOlxuXHRcdFx0XHR0aGlzLl9yZWNlaXZlZExvY2tzID0gdGhpcy5fcmVjZWl2ZWRMb2Nrcy5maWx0ZXIoKGxvY2spID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gIW1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIikuaW5jbHVkZXMobG9jayk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdC8vIE5vdGhpbmdcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhYm9yYXRpb25BUEk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0VBZUEsTUFBTUEsZ0JBQWdCLEdBQUc7SUFDeEJDLHFCQUFxQixFQUFFLEVBQWU7SUFDdENDLFNBQVMsRUFBRSxFQUFFO0lBQ2JDLE9BQU8sRUFBRUMsU0FBbUM7SUFDNUNDLG1CQUFtQixFQUFFLEVBQUU7SUFDdkJDLGNBQWMsRUFBRUYsU0FBa0M7SUFDbERHLGNBQWMsRUFBRSxFQUFjO0lBRTlCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxVQUFVLEVBQUUsU0FBQUEsQ0FBVUMsUUFBaUIsRUFBRUMsTUFBYyxFQUFFQyxRQUFnQixFQUFFO01BQzFFLE1BQU1DLGdCQUF3QixHQUFHSCxRQUFRLENBQUNJLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxtREFBbUQsQ0FBQztNQUVsSSxJQUFJLENBQUNILGdCQUFnQixFQUFFO1FBQ3RCSSxHQUFHLENBQUNDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQztRQUNwRDtNQUNEO01BRUEsTUFBTUMsVUFBa0IsR0FBR1QsUUFBUSxDQUFDVSxXQUFXLENBQUMsbUNBQW1DLENBQUM7TUFDcEYsSUFBSSxDQUFDYixjQUFjLEdBQUcsSUFBSWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3ZDLE1BQU1DLEtBQUssR0FBR1osUUFBUSxDQUFDSSxRQUFRLENBQUMsQ0FBQztNQUVqQ1MsdUJBQXVCLENBQ3RCO1FBQ0NDLEVBQUUsRUFBRWIsTUFBTTtRQUNWYyxJQUFJLEVBQUViLFFBQVE7UUFDZGMsV0FBVyxFQUFFZDtNQUNkLENBQUMsRUFD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
|
|
@@ -10,7 +10,7 @@ import type { Message } from "sap/fe/core/controllerextensions/collaboration/Col
|
|
|
10
10
|
import { Activity } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
|
|
11
11
|
import draft from "sap/fe/core/controllerextensions/editFlow/draft";
|
|
12
12
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
13
|
-
import Context from "sap/ui/model/odata/v4/Context";
|
|
13
|
+
import type Context from "sap/ui/model/odata/v4/Context";
|
|
14
14
|
import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
15
15
|
|
|
16
16
|
const CollaborationAPI = {
|
|
@@ -23,7 +23,6 @@ const CollaborationAPI = {
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Open an existing collaborative draft with a new user, and creates a 'ghost client' for this user.
|
|
26
|
-
*
|
|
27
26
|
* @param oContext The context of the collaborative draft
|
|
28
27
|
* @param userID The ID of the user
|
|
29
28
|
* @param userName The name of the user
|
|
@@ -63,7 +62,6 @@ const CollaborationAPI = {
|
|
|
63
62
|
|
|
64
63
|
/**
|
|
65
64
|
* Checks if the ghost client has received a given message.
|
|
66
|
-
*
|
|
67
65
|
* @param message The message content to be looked for
|
|
68
66
|
* @param resetHistory If true, reset history of received messages
|
|
69
67
|
* @returns True if a previously received message matches the content
|
|
@@ -101,7 +99,6 @@ const CollaborationAPI = {
|
|
|
101
99
|
|
|
102
100
|
/**
|
|
103
101
|
* Simulates that the user starts typing in an input (live change).
|
|
104
|
-
*
|
|
105
102
|
* @param sPropertyPath The path of the property being modified
|
|
106
103
|
*/
|
|
107
104
|
lockField: function (sPropertyPath: string) {
|
|
@@ -117,7 +114,6 @@ const CollaborationAPI = {
|
|
|
117
114
|
|
|
118
115
|
/**
|
|
119
116
|
* Simulates that the user has modified a property.
|
|
120
|
-
*
|
|
121
117
|
* @param sPropertyPath The path of the property being modified
|
|
122
118
|
* @param value The new value of the property being modified
|
|
123
119
|
*/
|
|
@@ -190,7 +186,6 @@ const CollaborationAPI = {
|
|
|
190
186
|
|
|
191
187
|
/**
|
|
192
188
|
* Simulates that the user has deleted an object (child of draft root).
|
|
193
|
-
*
|
|
194
189
|
* @param objectPath The path of the object to delete
|
|
195
190
|
*/
|
|
196
191
|
deleteObject: function (objectPath: string) {
|
|
@@ -211,7 +206,6 @@ const CollaborationAPI = {
|
|
|
211
206
|
|
|
212
207
|
/**
|
|
213
208
|
* Checks if a property has been locked by another user.
|
|
214
|
-
*
|
|
215
209
|
* @param objectPath
|
|
216
210
|
* @returns True if locked
|
|
217
211
|
*/
|
|
@@ -236,8 +230,7 @@ const CollaborationAPI = {
|
|
|
236
230
|
|
|
237
231
|
/**
|
|
238
232
|
* Callback of the ghost client when receiving a message on the web socket.
|
|
239
|
-
*
|
|
240
|
-
* @param oMessage The message
|
|
233
|
+
* @param message
|
|
241
234
|
*/
|
|
242
235
|
_onMessageReceived: function (message: Message) {
|
|
243
236
|
message.userAction = message.userAction || message.clientAction;
|
|
@@ -17,7 +17,6 @@ sap.ui.define(
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Constructs a new DialogAPI instance.
|
|
20
|
-
*
|
|
21
20
|
* @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
|
|
22
21
|
* @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
|
|
23
22
|
* @param {number} [iConfirmButtonIndex] Index of the 'confirm' button in the button aggregation; the default setting is 0 (first button from the left)
|
|
@@ -38,7 +37,6 @@ sap.ui.define(
|
|
|
38
37
|
|
|
39
38
|
/**
|
|
40
39
|
* Creates a matcher for fields within create and action dialogs.
|
|
41
|
-
*
|
|
42
40
|
* @param {sap.fe.test.api.FieldIdentifier | string} vFieldIdentifier Identifier to be used for the matcher
|
|
43
41
|
* @param {object} oDialogIdentifier Identifier for the dialog (create/action)
|
|
44
42
|
* @returns {object} A matcher
|
|
@@ -9,7 +9,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Constructs a new DialogActions instance.
|
|
12
|
-
*
|
|
13
12
|
* @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
|
|
14
13
|
* @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
|
|
15
14
|
* @param {number} [iConfirmButtonIndex] Index of the 'confirm' button in the button aggregation; the default setting is 0 (first button from the left)
|
|
@@ -28,7 +27,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
|
|
|
28
27
|
|
|
29
28
|
/**
|
|
30
29
|
* Confirms the dialog by clicking the corresponding button (for example, 'OK').
|
|
31
|
-
*
|
|
32
30
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
33
31
|
* @public
|
|
34
32
|
*/
|
|
@@ -43,7 +41,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
|
|
|
43
41
|
|
|
44
42
|
/**
|
|
45
43
|
* Cancels the dialog by clicking the corresponding button (for example, 'Cancel').
|
|
46
|
-
*
|
|
47
44
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
48
45
|
* @public
|
|
49
46
|
*/
|
|
@@ -58,7 +55,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
|
|
|
58
55
|
|
|
59
56
|
/**
|
|
60
57
|
* Closes the dialog by pressing the 'Escape' key.
|
|
61
|
-
*
|
|
62
58
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
63
59
|
* @public
|
|
64
60
|
*/
|
|
@@ -73,7 +69,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
|
|
|
73
69
|
|
|
74
70
|
/**
|
|
75
71
|
* Changes the content of a field in a dialog.
|
|
76
|
-
*
|
|
77
72
|
* @param {sap.fe.test.api.DialogFieldIdentifier} vFieldIdentifier The identifier of the field
|
|
78
73
|
* @param {string} [vValue] The new target value.
|
|
79
74
|
* @param {boolean} [bClearFirst] Set to <code>true</code> to clear previously set filters, otherwise all previously set values will be kept
|
|
@@ -102,7 +97,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
|
|
|
102
97
|
* Changes the content of a field in an action parameter dialog.
|
|
103
98
|
*
|
|
104
99
|
* Deprecated: Please use dialog action iChangeDialogField.
|
|
105
|
-
*
|
|
106
100
|
* @param {sap.fe.test.api.ActionDialogFieldIdentifier} vFieldIdentifier The identifier of the field
|
|
107
101
|
* @param {string} [vValue] The new target value.
|
|
108
102
|
* @param {boolean} [bClearFirst] Set to <code>true</code> to clear previously set filters, otherwise all previously set values will be kept
|
|
@@ -115,7 +109,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
|
|
|
115
109
|
|
|
116
110
|
/**
|
|
117
111
|
* Executes a keyboard shortcut on dialog.
|
|
118
|
-
*
|
|
119
112
|
* @param {string} sShortcut The shortcut pattern
|
|
120
113
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
121
114
|
* @ui5-restricted
|
|
@@ -9,7 +9,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Constructs a new DialogAssertions instance.
|
|
12
|
-
*
|
|
13
12
|
* @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
|
|
14
13
|
* @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
|
|
15
14
|
* @param {number} [iConfirmButtonIndex] Index of the 'confirm' button in the button aggregation; the default setting is 0 (first button from the left)
|
|
@@ -28,7 +27,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
|
|
|
28
27
|
|
|
29
28
|
/**
|
|
30
29
|
* Checks the dialog.
|
|
31
|
-
*
|
|
32
30
|
* @param {object} [mDialogState] Defines the expected state of the dialog
|
|
33
31
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
34
32
|
* @public
|
|
@@ -44,7 +42,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
|
|
|
44
42
|
|
|
45
43
|
/**
|
|
46
44
|
* Checks the confirmation button of the dialog.
|
|
47
|
-
*
|
|
48
45
|
* @param {object} [mButtonState] Defines the expected state of the button
|
|
49
46
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
50
47
|
* @public
|
|
@@ -66,7 +63,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
|
|
|
66
63
|
|
|
67
64
|
/**
|
|
68
65
|
* Checks the cancellation button of the dialog.
|
|
69
|
-
*
|
|
70
66
|
* @param {object} [mButtonState] Defines the expected state of the button
|
|
71
67
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
72
68
|
* @public
|
|
@@ -88,7 +84,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
|
|
|
88
84
|
|
|
89
85
|
/**
|
|
90
86
|
* Checks the content and state of a field in a dialog.
|
|
91
|
-
*
|
|
92
87
|
* @param {sap.fe.test.api.DialogFieldIdentifier} vFieldIdentifier The identifier of the field
|
|
93
88
|
* @param {string | Array | object} [vValue] Expected value(s) of the field.
|
|
94
89
|
* if passed as an object, the following pattern will be considered:
|
|
@@ -122,7 +117,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
|
|
|
122
117
|
|
|
123
118
|
/**
|
|
124
119
|
* Checks the content and state of a field in an action parameter dialog.
|
|
125
|
-
*
|
|
126
120
|
* @param {sap.fe.test.api.ActionDialogFieldIdentifier} vFieldIdentifier The identifier of the field
|
|
127
121
|
* @param {string | Array | object} [vValue] Expected value(s) of the field.
|
|
128
122
|
* if passed as an object, the following pattern will be considered:
|
|
@@ -9,7 +9,6 @@ sap.ui.define(["./DialogActions", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"]
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Constructs a new DialogCreateActions instance.
|
|
12
|
-
*
|
|
13
12
|
* @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
|
|
14
13
|
* @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
|
|
15
14
|
* @returns {sap.fe.test.api.DialogCreateActions} The new instance
|
|
@@ -28,7 +27,6 @@ sap.ui.define(["./DialogActions", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"]
|
|
|
28
27
|
|
|
29
28
|
/**
|
|
30
29
|
* Executes the <code>Create</code> action on the create dialog.
|
|
31
|
-
*
|
|
32
30
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
33
31
|
* @public
|
|
34
32
|
*/
|