@sap_oss/wdio-qmate-service 2.19.0 → 3.0.1
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/.eslintignore +2 -1
- package/.eslintrc.yml +2 -2
- package/lib/reuse/helper/clientsideUI5scripts.js +0 -53
- package/lib/reuse/helper/clientsideUI5scripts.js.map +1 -1
- package/lib/reuse/helper/elementResolving.d.ts +1 -1
- package/lib/reuse/helper/elementResolving.js +3 -2
- package/lib/reuse/helper/elementResolving.js.map +1 -1
- package/lib/reuse/modules/constants.d.ts +2 -0
- package/lib/reuse/modules/constants.js +6 -0
- package/lib/reuse/modules/constants.js.map +1 -0
- package/lib/reuse/modules/mobile/element.js +9 -8
- package/lib/reuse/modules/mobile/element.js.map +1 -1
- package/lib/reuse/modules/mobile/userInteraction.js +8 -7
- package/lib/reuse/modules/mobile/userInteraction.js.map +1 -1
- package/lib/reuse/modules/nonUi5/assertion.js +5 -4
- package/lib/reuse/modules/nonUi5/assertion.js.map +1 -1
- package/lib/reuse/modules/nonUi5/element.js +20 -18
- package/lib/reuse/modules/nonUi5/element.js.map +1 -1
- package/lib/reuse/modules/nonUi5/userInteraction.d.ts +1 -1
- package/lib/reuse/modules/nonUi5/userInteraction.js +13 -12
- package/lib/reuse/modules/nonUi5/userInteraction.js.map +1 -1
- package/lib/reuse/modules/ui5/assertion.js +20 -19
- package/lib/reuse/modules/ui5/assertion.js.map +1 -1
- package/lib/reuse/modules/ui5/confirmationDialog.js +9 -8
- package/lib/reuse/modules/ui5/confirmationDialog.js.map +1 -1
- package/lib/reuse/modules/ui5/control.js +2 -1
- package/lib/reuse/modules/ui5/control.js.map +1 -1
- package/lib/reuse/modules/ui5/element.js +14 -14
- package/lib/reuse/modules/ui5/element.js.map +1 -1
- package/lib/reuse/modules/ui5/footerBar.js +10 -9
- package/lib/reuse/modules/ui5/footerBar.js.map +1 -1
- package/lib/reuse/modules/ui5/mockserver.d.ts +1 -2
- package/lib/reuse/modules/ui5/mockserver.js +2 -3
- package/lib/reuse/modules/ui5/mockserver.js.map +1 -1
- package/lib/reuse/modules/ui5/navigation.js +3 -2
- package/lib/reuse/modules/ui5/navigation.js.map +1 -1
- package/lib/reuse/modules/ui5/navigationBar.js +49 -34
- package/lib/reuse/modules/ui5/navigationBar.js.map +1 -1
- package/lib/reuse/modules/ui5/session.js +30 -33
- package/lib/reuse/modules/ui5/session.js.map +1 -1
- package/lib/reuse/modules/ui5/table.d.ts +2 -2
- package/lib/reuse/modules/ui5/table.js +113 -26
- package/lib/reuse/modules/ui5/table.js.map +1 -1
- package/lib/reuse/modules/ui5/userInteraction.js +42 -28
- package/lib/reuse/modules/ui5/userInteraction.js.map +1 -1
- package/lib/reuse/modules/util/file.js +2 -1
- package/lib/reuse/modules/util/file.js.map +1 -1
- package/lib/scripts/clientsideUI5scripts.js +36 -33
- package/lib/scripts/clientsideUI5scripts.js.map +1 -1
- package/lib/scripts/hooks/before.d.ts +1 -1
- package/lib/scripts/hooks/before.js +7 -0
- package/lib/scripts/hooks/before.js.map +1 -1
- package/lib/scripts/hooks/utils/Ui5ExtensionMocker.d.ts +5 -0
- package/lib/scripts/hooks/utils/Ui5ExtensionMocker.js +42 -0
- package/lib/scripts/hooks/utils/Ui5ExtensionMocker.js.map +1 -0
- package/lib/scripts/hooks/utils/lib.d.ts +1 -0
- package/lib/scripts/hooks/utils/lib.js +13 -18
- package/lib/scripts/hooks/utils/lib.js.map +1 -1
- package/lib/scripts/hooks/utils/locatorCommands.js +5 -12
- package/lib/scripts/hooks/utils/locatorCommands.js.map +1 -1
- package/lib/scripts/locators/qmateLocator.d.ts +1 -1
- package/lib/scripts/locators/qmateLocator.js +686 -1310
- package/lib/scripts/locators/qmateLocator.js.map +1 -1
- package/lib/scripts/locators/qmateLocatorSrc/Locator.d.ts +6 -0
- package/lib/scripts/locators/qmateLocatorSrc/Locator.js +49 -0
- package/lib/scripts/locators/qmateLocatorSrc/Locator.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/Comparator.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/Comparator.js +18 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/Comparator.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/DomPropertiesComparator.d.ts +5 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/DomPropertiesComparator.js +28 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/DomPropertiesComparator.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/ElementPropertiesComparator.d.ts +10 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/ElementPropertiesComparator.js +79 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/ElementPropertiesComparator.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/MetadataComparator.d.ts +3 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/MetadataComparator.js +13 -0
- package/lib/scripts/locators/qmateLocatorSrc/comparators/MetadataComparator.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/AncestorFilter.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/AncestorFilter.js +15 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/AncestorFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/BaseFilter.d.ts +12 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/BaseFilter.js +52 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/BaseFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ChildFilter.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ChildFilter.js +19 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ChildFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/DescendantFilter.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/DescendantFilter.js +21 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/DescendantFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ElementFilter.d.ts +7 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ElementFilter.js +51 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ElementFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/NextSiblingFilter.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/NextSiblingFilter.js +17 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/NextSiblingFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ParentFilter.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ParentFilter.js +18 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/ParentFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/PrevSiblingFilter.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/PrevSiblingFilter.js +17 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/PrevSiblingFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/PropertiesFilter.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/PropertiesFilter.js +17 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/PropertiesFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/SiblingFilter.d.ts +4 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/SiblingFilter.js +15 -0
- package/lib/scripts/locators/qmateLocatorSrc/filters/SiblingFilter.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/index.d.ts +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/index.js +8 -0
- package/lib/scripts/locators/qmateLocatorSrc/index.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/ControlFinder.d.ts +6 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/ControlFinder.js +36 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/ControlFinder.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/FilterFactory.d.ts +5 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/FilterFactory.js +20 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/FilterFactory.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/LocatorDebug.d.ts +11 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/LocatorDebug.js +84 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/LocatorDebug.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/UI5ControlDataInjector.d.ts +7 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/UI5ControlDataInjector.js +63 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/UI5ControlDataInjector.js.map +1 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/UI5ControlHandler.d.ts +15 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/UI5ControlHandler.js +187 -0
- package/lib/scripts/locators/qmateLocatorSrc/utils/UI5ControlHandler.js.map +1 -0
- package/package.json +6 -4
- package/test/core/testIntegration/filters1.spec.js +27 -26
- package/test/helper/utils.js +30 -11
- package/test/reuse/ui5/session/logout.spec.js +1 -1
- package/test/reuse/ui5/table/sortColumnDescending.spec.js +0 -26
- package/test/reuse/ui5/userInteraction/searchFor.spec.js +56 -42
- package/tsconfig.json +2 -2
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ElementFilter = void 0;
|
|
4
|
+
const AncestorFilter_1 = require("./AncestorFilter");
|
|
5
|
+
const DescendantFilter_1 = require("./DescendantFilter");
|
|
6
|
+
const SiblingFilter_1 = require("./SiblingFilter");
|
|
7
|
+
const PropertiesFilter_1 = require("./PropertiesFilter");
|
|
8
|
+
const ChildFilter_1 = require("./ChildFilter");
|
|
9
|
+
const ParentFilter_1 = require("./ParentFilter");
|
|
10
|
+
const PrevSiblingFilter_1 = require("./PrevSiblingFilter");
|
|
11
|
+
const NextSiblingFilter_1 = require("./NextSiblingFilter");
|
|
12
|
+
const BaseFilter_1 = require("./BaseFilter");
|
|
13
|
+
const FilterFactory_1 = require("../utils/FilterFactory");
|
|
14
|
+
class ElementFilter extends BaseFilter_1.BaseFilter {
|
|
15
|
+
doFiltering(controls) {
|
|
16
|
+
this.checkElementProperties();
|
|
17
|
+
let filteredControls = this.filterFactory.getInstance(PropertiesFilter_1.PropertiesFilter, this.elementProperties).filter(controls);
|
|
18
|
+
filteredControls = this.filterFactory.getInstance(AncestorFilter_1.AncestorFilter, this.elementProperties?.ancestorProperties).filter(filteredControls);
|
|
19
|
+
filteredControls = this.filterFactory.getInstance(DescendantFilter_1.DescendantFilter, this.elementProperties?.descendantProperties).filter(filteredControls);
|
|
20
|
+
filteredControls = this.filterFactory.getInstance(SiblingFilter_1.SiblingFilter, this.elementProperties?.siblingProperties).filter(filteredControls);
|
|
21
|
+
return filteredControls;
|
|
22
|
+
}
|
|
23
|
+
doCheckSingle(control) {
|
|
24
|
+
this.checkElementProperties();
|
|
25
|
+
let pass = this.filterFactory.getInstance(PropertiesFilter_1.PropertiesFilter, this.elementProperties).checkSingle(control);
|
|
26
|
+
pass &&= this.filterFactory.getInstance(AncestorFilter_1.AncestorFilter, this.elementProperties?.ancestorProperties).checkSingle(control);
|
|
27
|
+
pass &&= this.filterFactory.getInstance(DescendantFilter_1.DescendantFilter, this.elementProperties?.descendantProperties).checkSingle(control);
|
|
28
|
+
pass &&= this.filterFactory.getInstance(SiblingFilter_1.SiblingFilter, this.elementProperties?.siblingProperties).checkSingle(control);
|
|
29
|
+
return pass;
|
|
30
|
+
}
|
|
31
|
+
checkElementProperties() {
|
|
32
|
+
if (this.elementProperties?.prevSiblingProperties || this.elementProperties?.nextSiblingProperties || this.elementProperties?.childProperties || this.elementProperties?.parentProperties) {
|
|
33
|
+
console.error(`The selector your provided ${JSON.stringify(this.elementProperties)} contains childProperties, parentProperties, prevSiblingProperties or nextSiblingProperties, please provide a valid selector without these properties`);
|
|
34
|
+
throw new Error("Nested properties can only be used for ancestorProperties, descendantProperties or siblingProperties.");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
static filterBySelector(ui5Selector, controls) {
|
|
38
|
+
const filterFactory = new FilterFactory_1.FilterFactory();
|
|
39
|
+
let validUi5Controls = filterFactory.getInstance(ElementFilter, ui5Selector.elementProperties).filter(controls);
|
|
40
|
+
validUi5Controls = filterFactory.getInstance(ParentFilter_1.ParentFilter, ui5Selector.parentProperties).filter(validUi5Controls);
|
|
41
|
+
validUi5Controls = filterFactory.getInstance(AncestorFilter_1.AncestorFilter, ui5Selector.ancestorProperties).filter(validUi5Controls);
|
|
42
|
+
validUi5Controls = filterFactory.getInstance(ChildFilter_1.ChildFilter, ui5Selector.childProperties).filter(validUi5Controls);
|
|
43
|
+
validUi5Controls = filterFactory.getInstance(DescendantFilter_1.DescendantFilter, ui5Selector.descendantProperties).filter(validUi5Controls);
|
|
44
|
+
validUi5Controls = filterFactory.getInstance(SiblingFilter_1.SiblingFilter, ui5Selector.siblingProperties).filter(validUi5Controls);
|
|
45
|
+
validUi5Controls = filterFactory.getInstance(PrevSiblingFilter_1.PrevSiblingFilter, ui5Selector.prevSiblingProperties).filter(validUi5Controls);
|
|
46
|
+
validUi5Controls = filterFactory.getInstance(NextSiblingFilter_1.NextSiblingFilter, ui5Selector.nextSiblingProperties).filter(validUi5Controls);
|
|
47
|
+
return validUi5Controls;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.ElementFilter = ElementFilter;
|
|
51
|
+
//# sourceMappingURL=ElementFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElementFilter.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/filters/ElementFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NextSiblingFilter = void 0;
|
|
4
|
+
const UI5ControlHandler_1 = require("../utils/UI5ControlHandler");
|
|
5
|
+
const BaseFilter_1 = require("./BaseFilter");
|
|
6
|
+
const ElementFilter_1 = require("./ElementFilter");
|
|
7
|
+
class NextSiblingFilter extends BaseFilter_1.BaseFilter {
|
|
8
|
+
doCheckSingle(control) {
|
|
9
|
+
const nextControl = UI5ControlHandler_1.UI5ControlHandler.findPreviousOrNextControl(control, true);
|
|
10
|
+
if (!nextControl) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return this.filterFactory.getInstance(ElementFilter_1.ElementFilter, this.elementProperties).checkSingle(nextControl);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.NextSiblingFilter = NextSiblingFilter;
|
|
17
|
+
//# sourceMappingURL=NextSiblingFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NextSiblingFilter.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/filters/NextSiblingFilter.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAC/D,6CAA0C;AAC1C,mDAAgD;AAEhD,MAAa,iBAAkB,SAAQ,uBAAU;IACxC,aAAa,CAAC,OAAmB;QACtC,MAAM,WAAW,GAAG,qCAAiB,CAAC,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,6BAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACxG,CAAC;CACF;AARD,8CAQC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParentFilter = void 0;
|
|
4
|
+
const UI5ControlHandler_1 = require("../utils/UI5ControlHandler");
|
|
5
|
+
const BaseFilter_1 = require("./BaseFilter");
|
|
6
|
+
const ElementFilter_1 = require("./ElementFilter");
|
|
7
|
+
class ParentFilter extends BaseFilter_1.BaseFilter {
|
|
8
|
+
doCheckSingle(control) {
|
|
9
|
+
const parentControl = UI5ControlHandler_1.UI5ControlHandler.getUI5Parent(control);
|
|
10
|
+
if (!parentControl) {
|
|
11
|
+
console.error(`The parent control of ${control.getId()} is not valid, please check the control`);
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return this.filterFactory.getInstance(ElementFilter_1.ElementFilter, this.elementProperties).checkSingle(parentControl);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.ParentFilter = ParentFilter;
|
|
18
|
+
//# sourceMappingURL=ParentFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParentFilter.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/filters/ParentFilter.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAC/D,6CAA0C;AAC1C,mDAAgD;AAEhD,MAAa,YAAa,SAAQ,uBAAU;IACnC,aAAa,CAAC,OAAmB;QACtC,MAAM,aAAa,GAAG,qCAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAC;YACjG,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,6BAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1G,CAAC;CACF;AATD,oCASC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PrevSiblingFilter = void 0;
|
|
4
|
+
const UI5ControlHandler_1 = require("../utils/UI5ControlHandler");
|
|
5
|
+
const BaseFilter_1 = require("./BaseFilter");
|
|
6
|
+
const ElementFilter_1 = require("./ElementFilter");
|
|
7
|
+
class PrevSiblingFilter extends BaseFilter_1.BaseFilter {
|
|
8
|
+
doCheckSingle(control) {
|
|
9
|
+
const prevControl = UI5ControlHandler_1.UI5ControlHandler.findPreviousOrNextControl(control, false);
|
|
10
|
+
if (!prevControl) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return this.filterFactory.getInstance(ElementFilter_1.ElementFilter, this.elementProperties).checkSingle(prevControl);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.PrevSiblingFilter = PrevSiblingFilter;
|
|
17
|
+
//# sourceMappingURL=PrevSiblingFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrevSiblingFilter.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/filters/PrevSiblingFilter.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAC/D,6CAA0C;AAC1C,mDAAgD;AAEhD,MAAa,iBAAkB,SAAQ,uBAAU;IACxC,aAAa,CAAC,OAAmB;QACtC,MAAM,WAAW,GAAG,qCAAiB,CAAC,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,6BAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACxG,CAAC;CACF;AARD,8CAQC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PropertiesFilter = void 0;
|
|
4
|
+
const DomPropertiesComparator_1 = require("../comparators/DomPropertiesComparator");
|
|
5
|
+
const ElementPropertiesComparator_1 = require("../comparators/ElementPropertiesComparator");
|
|
6
|
+
const MetadataComparator_1 = require("../comparators/MetadataComparator");
|
|
7
|
+
const BaseFilter_1 = require("./BaseFilter");
|
|
8
|
+
class PropertiesFilter extends BaseFilter_1.BaseFilter {
|
|
9
|
+
doCheckSingle(control) {
|
|
10
|
+
let pass = MetadataComparator_1.MetadataComparator.compareMetadata(this.elementProperties, control);
|
|
11
|
+
pass &&= ElementPropertiesComparator_1.ElementPropertiesComparator.compareToProperties(this.elementProperties, control);
|
|
12
|
+
pass &&= DomPropertiesComparator_1.DomPropertiesComparator.compareToDomProperties(this.elementProperties.domProperties, control);
|
|
13
|
+
return pass;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.PropertiesFilter = PropertiesFilter;
|
|
17
|
+
//# sourceMappingURL=PropertiesFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertiesFilter.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/filters/PropertiesFilter.ts"],"names":[],"mappings":";;;AAAA,oFAAiF;AACjF,4FAAyF;AACzF,0EAAuE;AACvE,6CAA0C;AAE1C,MAAa,gBAAiB,SAAQ,uBAAU;IACvC,aAAa,CAAC,OAAmB;QACtC,IAAI,IAAI,GAAG,uCAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC/E,IAAI,KAAK,yDAA2B,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC1F,IAAI,KAAK,iDAAuB,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvG,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAPD,4CAOC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SiblingFilter = void 0;
|
|
4
|
+
const UI5ControlHandler_1 = require("../utils/UI5ControlHandler");
|
|
5
|
+
const BaseFilter_1 = require("./BaseFilter");
|
|
6
|
+
const ElementFilter_1 = require("./ElementFilter");
|
|
7
|
+
class SiblingFilter extends BaseFilter_1.BaseFilter {
|
|
8
|
+
doCheckSingle(control) {
|
|
9
|
+
const aSiblingControls = UI5ControlHandler_1.UI5ControlHandler.findSiblingControls(control);
|
|
10
|
+
const elementFilter = this.filterFactory.getInstance(ElementFilter_1.ElementFilter, this.elementProperties);
|
|
11
|
+
return aSiblingControls.some((siblingControl) => elementFilter.checkSingle(siblingControl));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.SiblingFilter = SiblingFilter;
|
|
15
|
+
//# sourceMappingURL=SiblingFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiblingFilter.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/filters/SiblingFilter.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAC/D,6CAA0C;AAC1C,mDAAgD;AAEhD,MAAa,aAAc,SAAQ,uBAAU;IACpC,aAAa,CAAC,OAAmB;QACtC,MAAM,gBAAgB,GAAG,qCAAiB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,6BAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5F,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9F,CAAC;CACF;AAND,sCAMC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function locate(ui5Selector: UI5Selector, rootElement: HTMLElement): HTMLElement[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.locate = locate;
|
|
4
|
+
const Locator_1 = require("./Locator");
|
|
5
|
+
function locate(ui5Selector, rootElement) {
|
|
6
|
+
return Locator_1.Locator.locate(ui5Selector, rootElement);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/scripts/locators/qmateLocatorSrc/index.ts"],"names":[],"mappings":";;AAEA,wBAEC;AAJD,uCAAoC;AAEpC,SAAgB,MAAM,CAAC,WAAwB,EAAE,WAAwB;IACvE,OAAO,iBAAO,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare class ControlFinder {
|
|
2
|
+
static retrieveUI5Controls(selector: UI5Selector, rootElement: HTMLElement): UI5Control[];
|
|
3
|
+
private static retrieveNodesFromBody;
|
|
4
|
+
private static retrieveValidUI5Controls;
|
|
5
|
+
static getUI5Control(id: string | null | undefined): UI5Control | null;
|
|
6
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ControlFinder = void 0;
|
|
4
|
+
const LocatorDebug_1 = require("../utils/LocatorDebug");
|
|
5
|
+
class ControlFinder {
|
|
6
|
+
static retrieveUI5Controls(selector, rootElement) {
|
|
7
|
+
const nodes = ControlFinder.retrieveNodesFromBody(selector, rootElement) || [];
|
|
8
|
+
return ControlFinder.retrieveValidUI5Controls(nodes);
|
|
9
|
+
}
|
|
10
|
+
static retrieveNodesFromBody(selector, rootElement) {
|
|
11
|
+
// build smart css selector if possible
|
|
12
|
+
let cssSelector = "*";
|
|
13
|
+
if (selector.elementProperties?.id) {
|
|
14
|
+
if (selector.elementProperties.id.includes("*") && !selector.elementProperties.id.substring(1, selector.elementProperties.id.length - 1).includes("*")) {
|
|
15
|
+
const idWithoutWildcards = selector.elementProperties.id.replaceAll("*", "");
|
|
16
|
+
LocatorDebug_1.LocatorDebug.debugLog("shortened id is '", idWithoutWildcards, "' from '", selector.elementProperties.id, "'");
|
|
17
|
+
cssSelector = `*[id*="${idWithoutWildcards}"]`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (rootElement) {
|
|
21
|
+
return Array.from(rootElement.querySelectorAll(cssSelector));
|
|
22
|
+
}
|
|
23
|
+
const sapBodies = Array.from(document.getElementsByClassName("sapUiBody"));
|
|
24
|
+
return sapBodies.reduce((acc, body) => {
|
|
25
|
+
return acc.concat(Array.from(body.querySelectorAll(cssSelector)));
|
|
26
|
+
}, []);
|
|
27
|
+
}
|
|
28
|
+
static retrieveValidUI5Controls(nodes) {
|
|
29
|
+
return nodes.map((node) => ControlFinder.getUI5Control(node.getAttribute("id"))).filter((element) => element);
|
|
30
|
+
}
|
|
31
|
+
static getUI5Control(id) {
|
|
32
|
+
return (sap.ui.core?.Element?.getElementById || sap.ui.getCore().byId)(id);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ControlFinder = ControlFinder;
|
|
36
|
+
//# sourceMappingURL=ControlFinder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlFinder.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/utils/ControlFinder.ts"],"names":[],"mappings":";;;AAAA,wDAAqD;AAErD,MAAa,aAAa;IACjB,MAAM,CAAC,mBAAmB,CAAC,QAAqB,EAAE,WAAwB;QAC/E,MAAM,KAAK,GAAG,aAAa,CAAC,qBAAqB,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;QAC/E,OAAO,aAAa,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,QAAqB,EAAE,WAAwB;QAClF,uCAAuC;QACvC,IAAI,WAAW,GAAG,GAAG,CAAC;QACtB,IAAI,QAAQ,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC;YACnC,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvJ,MAAM,kBAAkB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC7E,2BAAY,CAAC,QAAQ,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC/G,WAAW,GAAG,UAAU,kBAAkB,IAAI,CAAC;YACjD,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3E,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACpC,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,KAAgB;QACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAiB,CAAC;IAChI,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,EAA6B;QACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;CACF;AAlCD,sCAkCC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterFactory = void 0;
|
|
4
|
+
// should take a class type and elementProperties and create an instance of the class
|
|
5
|
+
// if none has been created for the same class type and elementProperties
|
|
6
|
+
// if a class type has been created for the same elementProperties and class type, return the instance
|
|
7
|
+
class FilterFactory {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.instances = new Map();
|
|
10
|
+
}
|
|
11
|
+
getInstance(classType, elementProperties) {
|
|
12
|
+
const key = `${classType.name}-${JSON.stringify(elementProperties)}`;
|
|
13
|
+
if (!this.instances.has(key)) {
|
|
14
|
+
this.instances.set(key, new classType(this, elementProperties));
|
|
15
|
+
}
|
|
16
|
+
return this.instances.get(key);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.FilterFactory = FilterFactory;
|
|
20
|
+
//# sourceMappingURL=FilterFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterFactory.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/utils/FilterFactory.ts"],"names":[],"mappings":";;;AAEA,qFAAqF;AACrF,yEAAyE;AACzE,sGAAsG;AACtG,MAAa,aAAa;IAA1B;QACU,cAAS,GAA4B,IAAI,GAAG,EAAE,CAAC;IASzD,CAAC;IAPQ,WAAW,CAAuB,SAAoC,EAAE,iBAAgD;QAC7H,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;IACtC,CAAC;CACF;AAVD,sCAUC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class LocatorDebug {
|
|
2
|
+
static logs: any[];
|
|
3
|
+
static indentation: string;
|
|
4
|
+
static initializeLogs(ui5Selector: UI5Selector): void;
|
|
5
|
+
static debugLog(...messages: any[]): void;
|
|
6
|
+
static beginLog(name: string, elementCount: number): void;
|
|
7
|
+
static endLog(name: string, elementCount: number): void;
|
|
8
|
+
static printLogs(finalElementCount: number): void;
|
|
9
|
+
private static indent;
|
|
10
|
+
private static sameLogAlreadyPrinted;
|
|
11
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LocatorDebug = void 0;
|
|
4
|
+
/*
|
|
5
|
+
cyrb53 (c) 2018 bryc (github.com/bryc)
|
|
6
|
+
License: Public domain (or MIT if needed). Attribution appreciated.
|
|
7
|
+
A fast and simple 53-bit string hash function with decent collision resistance.
|
|
8
|
+
Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.
|
|
9
|
+
*/
|
|
10
|
+
const cyrb53 = function (str, seed = 0) {
|
|
11
|
+
let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
|
|
12
|
+
for (let i = 0, ch; i < str.length; i++) {
|
|
13
|
+
ch = str.charCodeAt(i);
|
|
14
|
+
h1 = Math.imul(h1 ^ ch, 2654435761);
|
|
15
|
+
h2 = Math.imul(h2 ^ ch, 1597334677);
|
|
16
|
+
}
|
|
17
|
+
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);
|
|
18
|
+
h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);
|
|
19
|
+
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);
|
|
20
|
+
h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);
|
|
21
|
+
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
|
|
22
|
+
};
|
|
23
|
+
class LocatorDebug {
|
|
24
|
+
// Public
|
|
25
|
+
static initializeLogs(ui5Selector) {
|
|
26
|
+
LocatorDebug.logs = [];
|
|
27
|
+
LocatorDebug.indentation = "";
|
|
28
|
+
// @ts-ignore
|
|
29
|
+
if (!document.qmateLogHashes) {
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
document.qmateLogHashes = [];
|
|
32
|
+
}
|
|
33
|
+
LocatorDebug.debugLog("QmateLocator Debug Logs for Selector:" + JSON.stringify(ui5Selector));
|
|
34
|
+
}
|
|
35
|
+
static debugLog(...messages) {
|
|
36
|
+
LocatorDebug.logs.push([LocatorDebug.indentation, ...messages]);
|
|
37
|
+
}
|
|
38
|
+
static beginLog(name, elementCount) {
|
|
39
|
+
LocatorDebug.indent(true);
|
|
40
|
+
LocatorDebug.debugLog("Valid ui5Controls before " + name + ":", elementCount);
|
|
41
|
+
}
|
|
42
|
+
static endLog(name, elementCount) {
|
|
43
|
+
LocatorDebug.debugLog("Valid ui5Controls after " + name + ":", elementCount);
|
|
44
|
+
LocatorDebug.indent(false);
|
|
45
|
+
}
|
|
46
|
+
static printLogs(finalElementCount) {
|
|
47
|
+
if (finalElementCount > 0) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
LocatorDebug.debugLog("Result elements:", finalElementCount);
|
|
51
|
+
if (LocatorDebug.sameLogAlreadyPrinted()) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
let fullLog = [];
|
|
55
|
+
for (const log of LocatorDebug.logs) {
|
|
56
|
+
fullLog = fullLog.concat(log);
|
|
57
|
+
fullLog.push("\n");
|
|
58
|
+
}
|
|
59
|
+
console.warn(...fullLog);
|
|
60
|
+
}
|
|
61
|
+
// Private
|
|
62
|
+
static indent(positive) {
|
|
63
|
+
if (positive)
|
|
64
|
+
LocatorDebug.indentation += "....";
|
|
65
|
+
else
|
|
66
|
+
LocatorDebug.indentation = LocatorDebug.indentation.substring(0, LocatorDebug.indentation.length - 4);
|
|
67
|
+
}
|
|
68
|
+
static sameLogAlreadyPrinted() {
|
|
69
|
+
// time with 10 second precision as a string
|
|
70
|
+
const now = new Date();
|
|
71
|
+
now.setSeconds(Math.floor(now.getSeconds() / 10) * 10, 0);
|
|
72
|
+
const time = now.toISOString().replace(/T/, " ").replace(/\..+/, "");
|
|
73
|
+
const hash = cyrb53(JSON.stringify(LocatorDebug.logs) + time);
|
|
74
|
+
// @ts-ignore
|
|
75
|
+
if (document.qmateLogHashes.includes(hash)) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
document.qmateLogHashes.push(hash);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.LocatorDebug = LocatorDebug;
|
|
84
|
+
//# sourceMappingURL=LocatorDebug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocatorDebug.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/utils/LocatorDebug.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare class UI5ControlDataInjector {
|
|
2
|
+
static convertAndInjectDataForProperties(controls: UI5Control[]): HTMLElement[];
|
|
3
|
+
private static injectDataForProperties;
|
|
4
|
+
private static injectAttributes;
|
|
5
|
+
private static injectBindingContextPaths;
|
|
6
|
+
private static getBindingInfoDataString;
|
|
7
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UI5ControlDataInjector = void 0;
|
|
4
|
+
const UI5ControlHandler_1 = require("../utils/UI5ControlHandler");
|
|
5
|
+
class UI5ControlDataInjector {
|
|
6
|
+
static convertAndInjectDataForProperties(controls) {
|
|
7
|
+
return controls
|
|
8
|
+
.map((control) => {
|
|
9
|
+
const domElement = document.getElementById(control.getId?.());
|
|
10
|
+
UI5ControlDataInjector.injectDataForProperties(domElement, control);
|
|
11
|
+
return domElement;
|
|
12
|
+
})
|
|
13
|
+
.filter(Boolean);
|
|
14
|
+
}
|
|
15
|
+
static injectDataForProperties(domElement, oControl) {
|
|
16
|
+
if (!domElement || !oControl)
|
|
17
|
+
return;
|
|
18
|
+
UI5ControlDataInjector.injectBindingContextPaths(domElement, oControl);
|
|
19
|
+
UI5ControlDataInjector.injectAttributes(domElement, oControl, Object.keys(UI5ControlHandler_1.UI5ControlHandler.getControlAllProperties(oControl)), (key) => UI5ControlHandler_1.UI5ControlHandler.getControlProperty(oControl, key));
|
|
20
|
+
}
|
|
21
|
+
static injectAttributes(domElement, oControl, keys, valueGetter) {
|
|
22
|
+
keys.forEach((key) => {
|
|
23
|
+
domElement.setAttribute(`data-${key}`, valueGetter(key));
|
|
24
|
+
const sBindingDataStr = UI5ControlDataInjector.getBindingInfoDataString(oControl, key);
|
|
25
|
+
if (sBindingDataStr && sBindingDataStr.trim() !== "") {
|
|
26
|
+
domElement.setAttribute(`data-${key}-path`, sBindingDataStr);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
static injectBindingContextPaths(domElement, oControl) {
|
|
31
|
+
const aBindingPathValues = UI5ControlHandler_1.UI5ControlHandler.getControlBindingContextPaths(oControl);
|
|
32
|
+
domElement.setAttribute("data-bindingContextPath-size", aBindingPathValues.length.toString());
|
|
33
|
+
aBindingPathValues.forEach((sBindingPathValue, i) => {
|
|
34
|
+
domElement.setAttribute(`data-bindingContextPath${i}`, sBindingPathValue);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
static getBindingInfoDataString(oControl, key) {
|
|
38
|
+
if (!oControl.getBindingInfo?.(key))
|
|
39
|
+
return "";
|
|
40
|
+
const aBindingInfos = [];
|
|
41
|
+
const aBindingInfoParts = oControl.getBindingInfo?.(key)?.parts;
|
|
42
|
+
if (aBindingInfoParts && aBindingInfoParts.length > 0) {
|
|
43
|
+
for (let i = 0; i < aBindingInfoParts.length; i++) {
|
|
44
|
+
if (!aBindingInfoParts[i].path)
|
|
45
|
+
continue;
|
|
46
|
+
if (aBindingInfoParts[i].model)
|
|
47
|
+
aBindingInfos.push(aBindingInfoParts[i].model + ">");
|
|
48
|
+
aBindingInfos.push(aBindingInfoParts[i].path || "");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
aBindingInfos.push(oControl.getBindingInfo?.(key)?.path || "");
|
|
53
|
+
}
|
|
54
|
+
if (aBindingInfos.length > 0) {
|
|
55
|
+
return aBindingInfos.join();
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return "";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.UI5ControlDataInjector = UI5ControlDataInjector;
|
|
63
|
+
//# sourceMappingURL=UI5ControlDataInjector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UI5ControlDataInjector.js","sourceRoot":"","sources":["../../../../../src/scripts/locators/qmateLocatorSrc/utils/UI5ControlDataInjector.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAC/D,MAAa,sBAAsB;IAC1B,MAAM,CAAC,iCAAiC,CAAC,QAAsB;QACpE,OAAO,QAAQ;aACZ,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9D,sBAAsB,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpE,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAkB,CAAC;IACtC,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,UAA8B,EAAE,QAAoB;QACzF,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ;YAAE,OAAO;QAErC,sBAAsB,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEvE,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,qCAAiB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,qCAAiB,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAChM,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,UAAuB,EAAE,QAAoB,EAAE,IAAc,EAAE,WAAoC;QACjI,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnB,UAAU,CAAC,YAAY,CAAC,QAAQ,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,MAAM,eAAe,GAAG,sBAAsB,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACvF,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACrD,UAAU,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAO,EAAE,eAAe,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,yBAAyB,CAAC,UAAuB,EAAE,QAAoB;QACpF,MAAM,kBAAkB,GAAG,qCAAiB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QACrF,UAAU,CAAC,YAAY,CAAC,8BAA8B,EAAE,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9F,kBAAkB,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE;YAClD,UAAU,CAAC,YAAY,CAAC,0BAA0B,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,QAAoB,EAAE,GAAW;QACvE,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/C,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;QAChE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI;oBAAE,SAAS;gBACzC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK;oBAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;gBACrF,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AA1DD,wDA0DC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class UI5ControlHandler {
|
|
2
|
+
static retrieveValidUI5ControlsSubElements(nodes: HTMLCollection): UI5Control[];
|
|
3
|
+
static extractBindingPathAndModelProperty(pathObj: any): any;
|
|
4
|
+
static findSiblingControls(control: UI5Control): UI5Control[];
|
|
5
|
+
static findPreviousOrNextControl(control: UI5Control, bIsNext: boolean): UI5Control | null;
|
|
6
|
+
static getControlBindingContextPaths(control: UI5Control): string[];
|
|
7
|
+
static getUI5Parent(control: UI5Control): UI5Control | undefined;
|
|
8
|
+
static getControlProperty(control: UI5Control, propKey: string): any;
|
|
9
|
+
static getControlAllProperties(control: UI5Control): any;
|
|
10
|
+
static getBindDataForProperty(control: UI5Control, propKey: string): QMateBindingInfo[];
|
|
11
|
+
private static createBindingInfo;
|
|
12
|
+
private static getBindingInfos;
|
|
13
|
+
private static retrieveCompositeBindings;
|
|
14
|
+
static getUI5Ancestors(control: UI5Control): UI5Control[];
|
|
15
|
+
}
|