@sap_oss/wdio-qmate-service 1.0.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/.eslintignore +3 -0
- package/.eslintrc.yml +33 -0
- package/.reuse/dep5 +29 -0
- package/LICENSE +201 -0
- package/LICENSES/Apache-2.0.txt +73 -0
- package/README.md +20 -0
- package/docs/contact.md +10 -0
- package/docs/doc.md +5188 -0
- package/docs/gettingStarted/selectors.md +168 -0
- package/docs/gettingStarted/setup.md +8 -0
- package/docs/index.md +14 -0
- package/docs/style/custom.css +24 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +171 -0
- package/lib/index.js.map +1 -0
- package/lib/reuse/authenticator/authConfig.d.ts +54 -0
- package/lib/reuse/authenticator/authConfig.js +55 -0
- package/lib/reuse/authenticator/authConfig.js.map +1 -0
- package/lib/reuse/authenticator/authHandler.d.ts +6 -0
- package/lib/reuse/authenticator/authHandler.js +37 -0
- package/lib/reuse/authenticator/authHandler.js.map +1 -0
- package/lib/reuse/authenticator/basicUrlAuthenticator.d.ts +2 -0
- package/lib/reuse/authenticator/basicUrlAuthenticator.js +36 -0
- package/lib/reuse/authenticator/basicUrlAuthenticator.js.map +1 -0
- package/lib/reuse/authenticator/customAuthenticator.d.ts +2 -0
- package/lib/reuse/authenticator/customAuthenticator.js +60 -0
- package/lib/reuse/authenticator/customAuthenticator.js.map +1 -0
- package/lib/reuse/authenticator/formAuthenticator.d.ts +2 -0
- package/lib/reuse/authenticator/formAuthenticator.js +57 -0
- package/lib/reuse/authenticator/formAuthenticator.js.map +1 -0
- package/lib/reuse/authenticator/plainAuthenticator.d.ts +2 -0
- package/lib/reuse/authenticator/plainAuthenticator.js +20 -0
- package/lib/reuse/authenticator/plainAuthenticator.js.map +1 -0
- package/lib/reuse/data/authenticators.json +16 -0
- package/lib/reuse/helper/clientsideUI5scripts.d.ts +1 -0
- package/lib/reuse/helper/clientsideUI5scripts.js +388 -0
- package/lib/reuse/helper/clientsideUI5scripts.js.map +1 -0
- package/lib/reuse/helper/jsDocGen.d.ts +1 -0
- package/lib/reuse/helper/jsDocGen.js +45 -0
- package/lib/reuse/helper/jsDocGen.js.map +1 -0
- package/lib/reuse/index.d.ts +5 -0
- package/lib/reuse/index.js +89 -0
- package/lib/reuse/index.js.map +1 -0
- package/lib/reuse/modules/common/Common.d.ts +12 -0
- package/lib/reuse/modules/common/Common.js +21 -0
- package/lib/reuse/modules/common/Common.js.map +1 -0
- package/lib/reuse/modules/common/assertion.d.ts +65 -0
- package/lib/reuse/modules/common/assertion.js +91 -0
- package/lib/reuse/modules/common/assertion.js.map +1 -0
- package/lib/reuse/modules/common/constants/date.constants.d.ts +8 -0
- package/lib/reuse/modules/common/constants/date.constants.js +13 -0
- package/lib/reuse/modules/common/constants/date.constants.js.map +1 -0
- package/lib/reuse/modules/common/constants/userInteraction.constants.d.ts +9 -0
- package/lib/reuse/modules/common/constants/userInteraction.constants.js +14 -0
- package/lib/reuse/modules/common/constants/userInteraction.constants.js.map +1 -0
- package/lib/reuse/modules/common/date.d.ts +84 -0
- package/lib/reuse/modules/common/date.js +164 -0
- package/lib/reuse/modules/common/date.js.map +1 -0
- package/lib/reuse/modules/common/navigation.d.ts +26 -0
- package/lib/reuse/modules/common/navigation.js +56 -0
- package/lib/reuse/modules/common/navigation.js.map +1 -0
- package/lib/reuse/modules/common/types/date.types.d.ts +2 -0
- package/lib/reuse/modules/common/types/date.types.js +3 -0
- package/lib/reuse/modules/common/types/date.types.js.map +1 -0
- package/lib/reuse/modules/common/userInteraction.d.ts +104 -0
- package/lib/reuse/modules/common/userInteraction.js +199 -0
- package/lib/reuse/modules/common/userInteraction.js.map +1 -0
- package/lib/reuse/modules/nonUi5/NonUi5.d.ts +12 -0
- package/lib/reuse/modules/nonUi5/NonUi5.js +21 -0
- package/lib/reuse/modules/nonUi5/NonUi5.js.map +1 -0
- package/lib/reuse/modules/nonUi5/assertion.d.ts +62 -0
- package/lib/reuse/modules/nonUi5/assertion.js +127 -0
- package/lib/reuse/modules/nonUi5/assertion.js.map +1 -0
- package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.d.ts +6 -0
- package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.js +11 -0
- package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.js.map +1 -0
- package/lib/reuse/modules/nonUi5/element.d.ts +286 -0
- package/lib/reuse/modules/nonUi5/element.js +639 -0
- package/lib/reuse/modules/nonUi5/element.js.map +1 -0
- package/lib/reuse/modules/nonUi5/navigation.d.ts +17 -0
- package/lib/reuse/modules/nonUi5/navigation.js +44 -0
- package/lib/reuse/modules/nonUi5/navigation.js.map +1 -0
- package/lib/reuse/modules/nonUi5/userInteraction.d.ts +170 -0
- package/lib/reuse/modules/nonUi5/userInteraction.js +415 -0
- package/lib/reuse/modules/nonUi5/userInteraction.js.map +1 -0
- package/lib/reuse/modules/service/Service.d.ts +8 -0
- package/lib/reuse/modules/service/Service.js +17 -0
- package/lib/reuse/modules/service/Service.js.map +1 -0
- package/lib/reuse/modules/service/odata.d.ts +177 -0
- package/lib/reuse/modules/service/odata.js +347 -0
- package/lib/reuse/modules/service/odata.js.map +1 -0
- package/lib/reuse/modules/service/rest.d.ts +66 -0
- package/lib/reuse/modules/service/rest.js +168 -0
- package/lib/reuse/modules/service/rest.js.map +1 -0
- package/lib/reuse/modules/service/soap.d.ts +0 -0
- package/lib/reuse/modules/service/soap.js +2 -0
- package/lib/reuse/modules/service/soap.js.map +1 -0
- package/lib/reuse/modules/ui5/Ui5.d.ts +34 -0
- package/lib/reuse/modules/ui5/Ui5.js +41 -0
- package/lib/reuse/modules/ui5/Ui5.js.map +1 -0
- package/lib/reuse/modules/ui5/assertion.d.ts +183 -0
- package/lib/reuse/modules/ui5/assertion.js +493 -0
- package/lib/reuse/modules/ui5/assertion.js.map +1 -0
- package/lib/reuse/modules/ui5/confirmationDialog.d.ts +86 -0
- package/lib/reuse/modules/ui5/confirmationDialog.js +145 -0
- package/lib/reuse/modules/ui5/confirmationDialog.js.map +1 -0
- package/lib/reuse/modules/ui5/constants/mockserver.constants.d.ts +4 -0
- package/lib/reuse/modules/ui5/constants/mockserver.constants.js +9 -0
- package/lib/reuse/modules/ui5/constants/mockserver.constants.js.map +1 -0
- package/lib/reuse/modules/ui5/control.d.ts +84 -0
- package/lib/reuse/modules/ui5/control.js +132 -0
- package/lib/reuse/modules/ui5/control.js.map +1 -0
- package/lib/reuse/modules/ui5/date.d.ts +48 -0
- package/lib/reuse/modules/ui5/date.js +153 -0
- package/lib/reuse/modules/ui5/date.js.map +1 -0
- package/lib/reuse/modules/ui5/element.d.ts +160 -0
- package/lib/reuse/modules/ui5/element.js +349 -0
- package/lib/reuse/modules/ui5/element.js.map +1 -0
- package/lib/reuse/modules/ui5/errorDialog.d.ts +39 -0
- package/lib/reuse/modules/ui5/errorDialog.js +65 -0
- package/lib/reuse/modules/ui5/errorDialog.js.map +1 -0
- package/lib/reuse/modules/ui5/footerBar.d.ts +153 -0
- package/lib/reuse/modules/ui5/footerBar.js +240 -0
- package/lib/reuse/modules/ui5/footerBar.js.map +1 -0
- package/lib/reuse/modules/ui5/mockserver.d.ts +154 -0
- package/lib/reuse/modules/ui5/mockserver.js +665 -0
- package/lib/reuse/modules/ui5/mockserver.js.map +1 -0
- package/lib/reuse/modules/ui5/navigation.d.ts +103 -0
- package/lib/reuse/modules/ui5/navigation.js +275 -0
- package/lib/reuse/modules/ui5/navigation.js.map +1 -0
- package/lib/reuse/modules/ui5/navigationBar.d.ts +48 -0
- package/lib/reuse/modules/ui5/navigationBar.js +141 -0
- package/lib/reuse/modules/ui5/navigationBar.js.map +1 -0
- package/lib/reuse/modules/ui5/qunit.d.ts +17 -0
- package/lib/reuse/modules/ui5/qunit.js +52 -0
- package/lib/reuse/modules/ui5/qunit.js.map +1 -0
- package/lib/reuse/modules/ui5/session.d.ts +117 -0
- package/lib/reuse/modules/ui5/session.js +374 -0
- package/lib/reuse/modules/ui5/session.js.map +1 -0
- package/lib/reuse/modules/ui5/table.d.ts +61 -0
- package/lib/reuse/modules/ui5/table.js +188 -0
- package/lib/reuse/modules/ui5/table.js.map +1 -0
- package/lib/reuse/modules/ui5/types/mockserver.types.d.ts +2 -0
- package/lib/reuse/modules/ui5/types/mockserver.types.js +3 -0
- package/lib/reuse/modules/ui5/types/mockserver.types.js.map +1 -0
- package/lib/reuse/modules/ui5/userInteraction.d.ts +304 -0
- package/lib/reuse/modules/ui5/userInteraction.js +690 -0
- package/lib/reuse/modules/ui5/userInteraction.js.map +1 -0
- package/lib/reuse/modules/util/Util.d.ts +22 -0
- package/lib/reuse/modules/util/Util.js +27 -0
- package/lib/reuse/modules/util/Util.js.map +1 -0
- package/lib/reuse/modules/util/browser.d.ts +167 -0
- package/lib/reuse/modules/util/browser.js +367 -0
- package/lib/reuse/modules/util/browser.js.map +1 -0
- package/lib/reuse/modules/util/console.d.ts +56 -0
- package/lib/reuse/modules/util/console.js +152 -0
- package/lib/reuse/modules/util/console.js.map +1 -0
- package/lib/reuse/modules/util/constants/formatter.constants.d.ts +11 -0
- package/lib/reuse/modules/util/constants/formatter.constants.js +16 -0
- package/lib/reuse/modules/util/constants/formatter.constants.js.map +1 -0
- package/lib/reuse/modules/util/data.d.ts +36 -0
- package/lib/reuse/modules/util/data.js +87 -0
- package/lib/reuse/modules/util/data.js.map +1 -0
- package/lib/reuse/modules/util/file.d.ts +55 -0
- package/lib/reuse/modules/util/file.js +159 -0
- package/lib/reuse/modules/util/file.js.map +1 -0
- package/lib/reuse/modules/util/formatter.d.ts +90 -0
- package/lib/reuse/modules/util/formatter.js +210 -0
- package/lib/reuse/modules/util/formatter.js.map +1 -0
- package/lib/reuse/modules/util/function.d.ts +48 -0
- package/lib/reuse/modules/util/function.js +161 -0
- package/lib/reuse/modules/util/function.js.map +1 -0
- package/lib/reuse/modules/util/system.d.ts +17 -0
- package/lib/reuse/modules/util/system.js +58 -0
- package/lib/reuse/modules/util/system.js.map +1 -0
- package/lib/reuse/modules/util/types/formatter.types.d.ts +2 -0
- package/lib/reuse/modules/util/types/formatter.types.js +3 -0
- package/lib/reuse/modules/util/types/formatter.types.js.map +1 -0
- package/lib/scripts/clientsideUI5scripts.d.ts +1 -0
- package/lib/scripts/clientsideUI5scripts.js +315 -0
- package/lib/scripts/clientsideUI5scripts.js.map +1 -0
- package/lib/scripts/dataExchange/dataExchange.d.ts +1 -0
- package/lib/scripts/dataExchange/dataExchange.js +224 -0
- package/lib/scripts/dataExchange/dataExchange.js.map +1 -0
- package/lib/scripts/dataExchange/dataExchangeUtil.d.ts +63 -0
- package/lib/scripts/dataExchange/dataExchangeUtil.js +211 -0
- package/lib/scripts/dataExchange/dataExchangeUtil.js.map +1 -0
- package/lib/scripts/hooks/after.d.ts +8 -0
- package/lib/scripts/hooks/after.js +30 -0
- package/lib/scripts/hooks/after.js.map +1 -0
- package/lib/scripts/hooks/before.d.ts +8 -0
- package/lib/scripts/hooks/before.js +38 -0
- package/lib/scripts/hooks/before.js.map +1 -0
- package/lib/scripts/hooks/beforeSession.d.ts +8 -0
- package/lib/scripts/hooks/beforeSession.js +37 -0
- package/lib/scripts/hooks/beforeSession.js.map +1 -0
- package/lib/scripts/hooks/onComplete.d.ts +9 -0
- package/lib/scripts/hooks/onComplete.js +31 -0
- package/lib/scripts/hooks/onComplete.js.map +1 -0
- package/lib/scripts/hooks/onPrepare.d.ts +6 -0
- package/lib/scripts/hooks/onPrepare.js +36 -0
- package/lib/scripts/hooks/onPrepare.js.map +1 -0
- package/lib/scripts/hooks/utils/addLocatorCommands.d.ts +2 -0
- package/lib/scripts/hooks/utils/addLocatorCommands.js +193 -0
- package/lib/scripts/hooks/utils/addLocatorCommands.js.map +1 -0
- package/lib/scripts/hooks/utils/browserLog.d.ts +2 -0
- package/lib/scripts/hooks/utils/browserLog.js +39 -0
- package/lib/scripts/hooks/utils/browserLog.js.map +1 -0
- package/lib/scripts/hooks/utils/dataExchangeCommands.d.ts +9 -0
- package/lib/scripts/hooks/utils/dataExchangeCommands.js +46 -0
- package/lib/scripts/hooks/utils/dataExchangeCommands.js.map +1 -0
- package/lib/scripts/hooks/utils/decryption.d.ts +13 -0
- package/lib/scripts/hooks/utils/decryption.js +90 -0
- package/lib/scripts/hooks/utils/decryption.js.map +1 -0
- package/lib/scripts/hooks/utils/lib.d.ts +4 -0
- package/lib/scripts/hooks/utils/lib.js +330 -0
- package/lib/scripts/hooks/utils/lib.js.map +1 -0
- package/lib/scripts/hooks/utils/locatorCommands.d.ts +10 -0
- package/lib/scripts/hooks/utils/locatorCommands.js +216 -0
- package/lib/scripts/hooks/utils/locatorCommands.js.map +1 -0
- package/lib/scripts/locators/qmateLocator.d.ts +1 -0
- package/lib/scripts/locators/qmateLocator.js +1384 -0
- package/lib/scripts/locators/qmateLocator.js.map +1 -0
- package/lib/scripts/locators/uiveri5Locator.d.ts +1 -0
- package/lib/scripts/locators/uiveri5Locator.js +21 -0
- package/lib/scripts/locators/uiveri5Locator.js.map +1 -0
- package/mkdocs.yml +53 -0
- package/package.json +152 -0
- package/test/.eslintrc.yml +6 -0
- package/test/authenticator/package.json +13 -0
- package/test/authenticator/staticLogin/configCustom.js +22 -0
- package/test/authenticator/staticLogin/configCustomViaConfig.js +20 -0
- package/test/authenticator/staticLogin/configFiori.js +19 -0
- package/test/authenticator/staticLogin/configPlain.js +17 -0
- package/test/authenticator/staticLogin/configSapCloud.js +18 -0
- package/test/authenticator/staticLogin/html/custom.html +10 -0
- package/test/authenticator/staticLogin/html/fiori.html +10 -0
- package/test/authenticator/staticLogin/html/home.html +7 -0
- package/test/authenticator/staticLogin/html/sapCloud.html +10 -0
- package/test/authenticator/staticLogin/specs/custom.spec.js +6 -0
- package/test/authenticator/staticLogin/specs/customViaConfig.spec.js +10 -0
- package/test/authenticator/staticLogin/specs/fiori.spec.js +6 -0
- package/test/authenticator/staticLogin/specs/plain.spec.js +64 -0
- package/test/authenticator/staticLogin/specs/sapCloud.spec.js +6 -0
- package/test/authenticator/staticLogin/staticServerConfig.js +20 -0
- package/test/authenticator/systemLogin/configCustom.js +26 -0
- package/test/authenticator/systemLogin/configFiori.js +24 -0
- package/test/authenticator/systemLogin/configPlain.js +22 -0
- package/test/authenticator/systemLogin/configSapCloud.js +24 -0
- package/test/authenticator/systemLogin/specs/custom.spec.js +13 -0
- package/test/authenticator/systemLogin/specs/fiori.spec.js +12 -0
- package/test/authenticator/systemLogin/specs/plain.spec.js +21 -0
- package/test/authenticator/systemLogin/specs/sapCloud.spec.js +13 -0
- package/test/core/README.md +17 -0
- package/test/core/dataExchange/config.export.js +56 -0
- package/test/core/dataExchange/config.import.js +47 -0
- package/test/core/dataExchange/config.js +52 -0
- package/test/core/dataExchange/config.parallel.group.js +61 -0
- package/test/core/dataExchange/config.parallel.js +58 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/dummy1.txt +0 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchase-orders/Limit-Purchase-Order.json +29 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchase-orders/ServicePurchaseOrder.2Items.json +67 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchaseRequisition_HI.json +31 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/LimitPurchaseOrder.json +29 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/PurchaseOrderItems.json +58 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/PurchaseOrderWithScheduline.json +27 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServiceAndMaterialPurchaseOrder.json +65 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServicePurchaseOrder.json +39 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServicePurchaseOrder2Items.json +67 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/data.json +5 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/dummy1.txt +0 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/dummy2.txt +0 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/empty.json +0 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/purchaseRequisition.json +31 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/supplierInvoice.json +17 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/webUser.json +6 -0
- package/test/core/dataExchange/data/ui/moreDataFolder/anotherUser.json +6 -0
- package/test/core/dataExchange/data/ui/user.json +6 -0
- package/test/core/dataExchange/data/ui/webUser.json +6 -0
- package/test/core/dataExchange/specs/export.fast.spec.js +48 -0
- package/test/core/dataExchange/specs/export.slow.spec.js +50 -0
- package/test/core/dataExchange/specs/export.spec.js +103 -0
- package/test/core/dataExchange/specs/import.spec.js +144 -0
- package/test/core/dataExchange/specs/importExport.spec.js +196 -0
- package/test/core/dataExchange/utils.js +160 -0
- package/test/core/functional/README.md +30 -0
- package/test/core/functional/chaining/chaining.test.js +137 -0
- package/test/core/functional/chaining/test.conf.js +31 -0
- package/test/core/functional/locators/ancestorProperties.test.js +99 -0
- package/test/core/functional/locators/childProperties.test.js +40 -0
- package/test/core/functional/locators/descendantProperties.test.js +107 -0
- package/test/core/functional/locators/domProperties.test.js +60 -0
- package/test/core/functional/locators/elementProperties.test.js +114 -0
- package/test/core/functional/locators/mixedProperties.test.js +170 -0
- package/test/core/functional/locators/parentProperties.test.js +47 -0
- package/test/core/functional/locators/siblingProperties.test.js +120 -0
- package/test/core/functional/locators/test.locator.conf.js +38 -0
- package/test/core/functional/locators/utils.js +6 -0
- package/test/core/functional/nativeBrowser/runInBrowser.test.js +111 -0
- package/test/core/functional/nativeBrowser/test.conf.js +31 -0
- package/test/core/functional/nonUi5/basic.test.js +10 -0
- package/test/core/functional/nonUi5/getWithDomElement.test.js +51 -0
- package/test/core/functional/nonUi5/getWithDomElements.test.js +141 -0
- package/test/core/functional/nonUi5/test.conf.js +32 -0
- package/test/core/functional/ui5Properties/getAggregations.test.js +102 -0
- package/test/core/functional/ui5Properties/getAssociations.test.js +24 -0
- package/test/core/functional/ui5Properties/getBindingInfos.test.js +71 -0
- package/test/core/functional/ui5Properties/getProperties.test.js +226 -0
- package/test/core/functional/ui5Properties/test.conf.js +16 -0
- package/test/core/functional/uiveri5/sample.test.js +61 -0
- package/test/core/functional/uiveri5/test.conf.js +31 -0
- package/test/core/package-lock.json +0 -0
- package/test/core/package.json +12 -0
- package/test/core/testIntegration/config.js +17 -0
- package/test/core/testIntegration/configMultiCombo.js +17 -0
- package/test/core/testIntegration/configTable.js +18 -0
- package/test/core/testIntegration/filters1.spec.js +1849 -0
- package/test/core/testIntegration/multicombobox.spec.js +134 -0
- package/test/core/testIntegration/table.spec.js +80 -0
- package/test/helper/configurations/base.conf.js +43 -0
- package/test/helper/configurations/chrome.conf.js +47 -0
- package/test/helper/configurations/chrome.headless.conf.js +45 -0
- package/test/helper/configurations/sauce.labs.conf.js +37 -0
- package/test/helper/configurations/sauce.labs.tunnel.conf.js +39 -0
- package/test/helper/sleeper.js +19 -0
- package/test/helper/utils.js +15 -0
- package/test/helper/website/buttons.html +85 -0
- package/test/helper/website/checkBox.html +83 -0
- package/test/helper/website/dragAndDropFailing.html +83 -0
- package/test/helper/website/dragAndDropWdioExample.html +41 -0
- package/test/helper/website/dropdown.html +78 -0
- package/test/helper/website/forms.html +82 -0
- package/test/helper/website/hiddenAndVisible.html +60 -0
- package/test/helper/website/main.css +36 -0
- package/test/helper/website/scrollPage.html +261 -0
- package/test/helper/website/style.css +52 -0
- package/test/helper/website/tables.html +140 -0
- package/test/helper/website/waitForElements.html +73 -0
- package/test/reuse/common/assertion/expectDefined.spec.js +11 -0
- package/test/reuse/common/assertion/expectEqual.spec.js +52 -0
- package/test/reuse/common/assertion/expectFalse.spec.js +9 -0
- package/test/reuse/common/assertion/expectTrue.spec.js +9 -0
- package/test/reuse/common/assertion/expectUndefined.spec.js +11 -0
- package/test/reuse/common/assertion/expectUnequal.spec.js +25 -0
- package/test/reuse/common/assertion/expectUrlToBe.spec.js +27 -0
- package/test/reuse/common/assertion/test.assertion.conf.js +59 -0
- package/test/reuse/common/date/calculate.spec.js +163 -0
- package/test/reuse/common/date/getNextMonth.spec.js +105 -0
- package/test/reuse/common/date/getNextYear.spec.js +72 -0
- package/test/reuse/common/date/getPreviousMonth.spec.js +71 -0
- package/test/reuse/common/date/getPreviousYear.spec.js +72 -0
- package/test/reuse/common/date/getSpecific.spec.js +63 -0
- package/test/reuse/common/date/getToday.spec.js +78 -0
- package/test/reuse/common/date/getTomorrow.spec.js +72 -0
- package/test/reuse/common/date/test.date.conf.js +19 -0
- package/test/reuse/common/date/utils.js +6 -0
- package/test/reuse/common/navigation/navigateToUrl.spec.js +28 -0
- package/test/reuse/common/navigation/navigateToUrlAndRetry.spec.js +27 -0
- package/test/reuse/common/navigation/test.navigation.conf.js +25 -0
- package/test/reuse/common/userInteraction/clearAndFillActive.spec.js +100 -0
- package/test/reuse/common/userInteraction/clearAndFillActiveAndRetry.spec.js +106 -0
- package/test/reuse/common/userInteraction/fillActive.spec.js +230 -0
- package/test/reuse/common/userInteraction/fillActiveAndRetry.spec.js +172 -0
- package/test/reuse/common/userInteraction/pressKey.spec.js +105 -0
- package/test/reuse/common/userInteraction/test.userInteraction.conf.js +53 -0
- package/test/reuse/nonUi5/assertion/expectAttributeToBe.spec.js +45 -0
- package/test/reuse/nonUi5/assertion/expectAttributeToContain.spec.js +43 -0
- package/test/reuse/nonUi5/assertion/expectToBeNotVisible.spec.js +37 -0
- package/test/reuse/nonUi5/assertion/expectToBeVisible.spec.js +63 -0
- package/test/reuse/nonUi5/assertion/expectValueToBe.spec.js +25 -0
- package/test/reuse/nonUi5/assertion/test.assertion.conf.js +60 -0
- package/test/reuse/nonUi5/assertion/test.assertion.sauceLabs.conf.js +64 -0
- package/test/reuse/nonUi5/element/getAllDisplayed.spec.js +39 -0
- package/test/reuse/nonUi5/element/getAttributeValue.spec.js +58 -0
- package/test/reuse/nonUi5/element/getByChild.spec.js +70 -0
- package/test/reuse/nonUi5/element/getByClass.spec.js +64 -0
- package/test/reuse/nonUi5/element/getByCss.spec.js +65 -0
- package/test/reuse/nonUi5/element/getByCssContainingText.spec.js +83 -0
- package/test/reuse/nonUi5/element/getById.spec.js +35 -0
- package/test/reuse/nonUi5/element/getByName.spec.js +30 -0
- package/test/reuse/nonUi5/element/getByParent.spec.js +71 -0
- package/test/reuse/nonUi5/element/getByXPath.spec.js +30 -0
- package/test/reuse/nonUi5/element/getValue.spec.js +51 -0
- package/test/reuse/nonUi5/element/highlight.spec.js +18 -0
- package/test/reuse/nonUi5/element/isPresent.spec.js +39 -0
- package/test/reuse/nonUi5/element/isPresentByCss.spec.js +73 -0
- package/test/reuse/nonUi5/element/isPresentByXPath.spec.js +31 -0
- package/test/reuse/nonUi5/element/setInnerHTML.spec.js +23 -0
- package/test/reuse/nonUi5/element/test.element.conf.js +55 -0
- package/test/reuse/nonUi5/element/test.element.sauceLabs.conf.js +58 -0
- package/test/reuse/nonUi5/element/waitForAll.spec.js +24 -0
- package/test/reuse/nonUi5/element/waitToBeClickable.spec.js +24 -0
- package/test/reuse/nonUi5/element/waitToBePresent.spec.js +32 -0
- package/test/reuse/nonUi5/element/waitToBeVisible.spec.js +36 -0
- package/test/reuse/nonUi5/navigation/navigateToApplication.spec.js +13 -0
- package/test/reuse/nonUi5/navigation/test.navigation.conf.js +14 -0
- package/test/reuse/nonUi5/userInteraction/checkAttributeAndValue.spec.js +135 -0
- package/test/reuse/nonUi5/userInteraction/clear.spec.js +43 -0
- package/test/reuse/nonUi5/userInteraction/clearAndFill.spec.js +51 -0
- package/test/reuse/nonUi5/userInteraction/clearAndFillAndRetry.spec.js +58 -0
- package/test/reuse/nonUi5/userInteraction/clearAndRetry.spec.js +43 -0
- package/test/reuse/nonUi5/userInteraction/click.spec.js +60 -0
- package/test/reuse/nonUi5/userInteraction/clickAndRetry.spec.js +60 -0
- package/test/reuse/nonUi5/userInteraction/clickElementInSvg.spec.js +24 -0
- package/test/reuse/nonUi5/userInteraction/doubleClick.spec.js +22 -0
- package/test/reuse/nonUi5/userInteraction/dragAndDrop.spec.js +40 -0
- package/test/reuse/nonUi5/userInteraction/fill.spec.js +37 -0
- package/test/reuse/nonUi5/userInteraction/fillAndRetry.spec.js +39 -0
- package/test/reuse/nonUi5/userInteraction/mouseOverElement.spec.js +36 -0
- package/test/reuse/nonUi5/userInteraction/moveCursorAndClick.spec.js +24 -0
- package/test/reuse/nonUi5/userInteraction/rightClick.spec.js +13 -0
- package/test/reuse/nonUi5/userInteraction/scrollToElement.spec.js +35 -0
- package/test/reuse/nonUi5/userInteraction/test.userInteraction.conf.js +72 -0
- package/test/reuse/nonUi5/userInteraction/test.userInteraction.sauceLabs.conf.js +78 -0
- package/test/reuse/service/rest/db.json +8 -0
- package/test/reuse/service/rest/delete.spec.js +20 -0
- package/test/reuse/service/rest/get.spec.js +19 -0
- package/test/reuse/service/rest/init.spec.js +35 -0
- package/test/reuse/service/rest/patch.spec.js +29 -0
- package/test/reuse/service/rest/post.spec.js +37 -0
- package/test/reuse/service/rest/test.rest.conf.js +18 -0
- package/test/reuse/ui5/assertion/expectAttributeToBe.spec.js +106 -0
- package/test/reuse/ui5/assertion/expectAttributeToContain.spec.js +78 -0
- package/test/reuse/ui5/assertion/expectBindingContextPathToBe.spec.js +103 -0
- package/test/reuse/ui5/assertion/expectBindingPathToBe.spec.js +164 -0
- package/test/reuse/ui5/assertion/expectMessageToastTextToBe.spec.js +43 -0
- package/test/reuse/ui5/assertion/expectTextToBe.spec.js +39 -0
- package/test/reuse/ui5/assertion/expectToBeEnabled.spec.js +90 -0
- package/test/reuse/ui5/assertion/expectToBeNotEnabled.spec.js +62 -0
- package/test/reuse/ui5/assertion/expectToBeNotVisible.spec.js +52 -0
- package/test/reuse/ui5/assertion/expectToBeVisible.spec.js +69 -0
- package/test/reuse/ui5/assertion/expectToBeVisibleInViewport.spec.js +49 -0
- package/test/reuse/ui5/assertion/expectValidationError.spec.js +54 -0
- package/test/reuse/ui5/assertion/expectValidationSuccess.spec.js +53 -0
- package/test/reuse/ui5/assertion/expectValueToBe.spec.js +57 -0
- package/test/reuse/ui5/assertion/expectValueToBeDefined.spec.js +35 -0
- package/test/reuse/ui5/assertion/test.assertion.conf.js +28 -0
- package/test/reuse/ui5/assertion/test.assertion.sauceLab.conf.js +37 -0
- package/test/reuse/ui5/confirmationDialog/clickCancel.spec.js +88 -0
- package/test/reuse/ui5/confirmationDialog/clickCreate.spec.js +3 -0
- package/test/reuse/ui5/confirmationDialog/clickDelete.spec.js +89 -0
- package/test/reuse/ui5/confirmationDialog/clickNo.spec.js +96 -0
- package/test/reuse/ui5/confirmationDialog/clickOk.spec.js +66 -0
- package/test/reuse/ui5/confirmationDialog/clickRevokeApproval.spec.js +3 -0
- package/test/reuse/ui5/confirmationDialog/clickYes.spec.js +70 -0
- package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.conf.js +20 -0
- package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.sauceLab.conf.js +29 -0
- package/test/reuse/ui5/control/execute.spec.js +29 -0
- package/test/reuse/ui5/control/getAggregationProperty.spec.js +29 -0
- package/test/reuse/ui5/control/getAssociationProperty.spec.js +1 -0
- package/test/reuse/ui5/control/getBindingContextPathProperty.spec.js +30 -0
- package/test/reuse/ui5/control/getProperty.spec.js +30 -0
- package/test/reuse/ui5/control/getPropertyBinding.spec.js +30 -0
- package/test/reuse/ui5/control/test.control.conf.js +19 -0
- package/test/reuse/ui5/control/test.control.sauceLab.conf.js +30 -0
- package/test/reuse/ui5/date/fillRange.spec.js +53 -0
- package/test/reuse/ui5/date/pick.spec.js +136 -0
- package/test/reuse/ui5/date/pickRange.spec.js +143 -0
- package/test/reuse/ui5/date/test.date.conf.js +14 -0
- package/test/reuse/ui5/date/test.date.sauceLab.conf.js +26 -0
- package/test/reuse/ui5/element/getAllDisplayed.spec.js +71 -0
- package/test/reuse/ui5/element/getBindingValue.spec.js +78 -0
- package/test/reuse/ui5/element/getByChild.spec.js +124 -0
- package/test/reuse/ui5/element/getByParent.spec.js +134 -0
- package/test/reuse/ui5/element/getByText.spec.js +67 -0
- package/test/reuse/ui5/element/getDisplayed.spec.js +82 -0
- package/test/reuse/ui5/element/getId.spec.js +72 -0
- package/test/reuse/ui5/element/getPropertyValue.spec.js +91 -0
- package/test/reuse/ui5/element/highlight.spec.js +46 -0
- package/test/reuse/ui5/element/isVisible.spec.js +68 -0
- package/test/reuse/ui5/element/test.element.conf.js +22 -0
- package/test/reuse/ui5/element/test.element.sauceLab.conf.js +33 -0
- package/test/reuse/ui5/errorDialog/clickClose.spec.js +31 -0
- package/test/reuse/ui5/errorDialog/expectToBeVisible.spec.js +30 -0
- package/test/reuse/ui5/errorDialog/test.errorDialog.conf.js +13 -0
- package/test/reuse/ui5/errorDialog/test.errorDialog.sauceLab.conf.js +26 -0
- package/test/reuse/ui5/formatter/addRemoveLeadingZeros.spec.js +18 -0
- package/test/reuse/ui5/formatter/extractNumberFromString.spec.js +34 -0
- package/test/reuse/ui5/formatter/formatDate.spec.js +103 -0
- package/test/reuse/ui5/formatter/test.formatter.conf.js +14 -0
- package/test/reuse/ui5/formatter/test.formatter.sauceLab.conf.js +24 -0
- package/test/reuse/ui5/mockserver_qunit/Component.js +23 -0
- package/test/reuse/ui5/mockserver_qunit/LICENSE.txt +957 -0
- package/test/reuse/ui5/mockserver_qunit/NOTICE.txt +1 -0
- package/test/reuse/ui5/mockserver_qunit/controller/App.controller.js +37 -0
- package/test/reuse/ui5/mockserver_qunit/controller/BaseController.js +30 -0
- package/test/reuse/ui5/mockserver_qunit/controller/Home.controller.js +27 -0
- package/test/reuse/ui5/mockserver_qunit/controller/NotFound.controller.js +34 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/Employee.controller.js +64 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/EmployeeList.controller.js +22 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/Resume.controller.js +83 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/overview/EmployeeOverview.controller.js +11 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/overview/EmployeeOverviewContent.controller.js +192 -0
- package/test/reuse/ui5/mockserver_qunit/i18n/i18n.properties +42 -0
- package/test/reuse/ui5/mockserver_qunit/index.html +21 -0
- package/test/reuse/ui5/mockserver_qunit/initMockServer.js +16 -0
- package/test/reuse/ui5/mockserver_qunit/localService/metadata.xml +61 -0
- package/test/reuse/ui5/mockserver_qunit/localService/mockdata/Employees.json +155 -0
- package/test/reuse/ui5/mockserver_qunit/localService/mockdata/Resumes.json +65 -0
- package/test/reuse/ui5/mockserver_qunit/localService/mockserver.js +146 -0
- package/test/reuse/ui5/mockserver_qunit/localService/mockserverLoadAllData.js +75 -0
- package/test/reuse/ui5/mockserver_qunit/manifest.json +169 -0
- package/test/reuse/ui5/mockserver_qunit/test/flpSandboxMockServer.html +63 -0
- package/test/reuse/ui5/mockserver_qunit/test/flpSandboxMockServerAllData.html +68 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/config.js +92 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/qunitExecution/specs/runQUnitTests.spec.js +14 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testDisplayNotFound/data/setup.json +11 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testDisplayNotFound/specs/testDisplayNotFound.spec.js +71 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/mock/Employees.json +204 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/mock/Resumes.json +114 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/setup.json +11 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/testShowEmployeeList.json +1 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/specs/testShowEmployeeList.spec.js +118 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/constants.js +25 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/mockDataMapper.js +23 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/mockHelper.js +222 -0
- package/test/reuse/ui5/mockserver_qunit/test/unit/allTests.js +6 -0
- package/test/reuse/ui5/mockserver_qunit/test/unit/unitTests.qunit.html +38 -0
- package/test/reuse/ui5/mockserver_qunit/test/unit/utils/Conversions.js +13 -0
- package/test/reuse/ui5/mockserver_qunit/view/App.view.xml +9 -0
- package/test/reuse/ui5/mockserver_qunit/view/Home.view.xml +12 -0
- package/test/reuse/ui5/mockserver_qunit/view/NotFound.view.xml +11 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/Employee.view.xml +52 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/EmployeeList.view.xml +24 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/Resume.view.xml +35 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeHobbies.view.xml +3 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeNotes.view.xml +3 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeProjects.view.xml +3 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverview.view.xml +13 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverviewContent.view.xml +43 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverviewTop.view.xml +3 -0
- package/test/reuse/ui5/navigation/closePopups.spec.js +16 -0
- package/test/reuse/ui5/navigation/expectUnsupportedNavigationPopup.spec.js +81 -0
- package/test/reuse/ui5/navigation/navigateToApplication.spec.js +148 -0
- package/test/reuse/ui5/navigation/navigateToApplicationAndRetry.spec.js +153 -0
- package/test/reuse/ui5/navigation/navigateToApplicationWithQueryParams.spec.js +63 -0
- package/test/reuse/ui5/navigation/navigateToApplicationWithQueryParamsAndRetry.spec.js +64 -0
- package/test/reuse/ui5/navigation/navigateToSystemAndApplication.spec.js +45 -0
- package/test/reuse/ui5/navigation/navigateToSystemAndApplicationAndRetry.spec.js +43 -0
- package/test/reuse/ui5/navigation/test.navigation.conf.js +17 -0
- package/test/reuse/ui5/navigation/test.navigation.sauceLab.conf.js +33 -0
- package/test/reuse/ui5/navigation/test.navigation.static.conf.js +34 -0
- package/test/reuse/ui5/navigation/test.navigation.static.sauceLab.conf.js +41 -0
- package/test/reuse/ui5/navigation/website/main.css +36 -0
- package/test/reuse/ui5/navigation/website/main.html +50 -0
- package/test/reuse/ui5/navigationBar/clickBack.spec.js +38 -0
- package/test/reuse/ui5/navigationBar/clickUserIcon.spec.js +36 -0
- package/test/reuse/ui5/navigationBar/expectPageTitle.spec.js +22 -0
- package/test/reuse/ui5/navigationBar/expectShellHeader.spec.js +22 -0
- package/test/reuse/ui5/navigationBar/test.navigationBar.conf.js +17 -0
- package/test/reuse/ui5/navigationBar/test.navigationBar.sauceLab.conf.js +28 -0
- package/test/reuse/ui5/session/login.spec.js +78 -0
- package/test/reuse/ui5/session/loginFiori.spec.js +52 -0
- package/test/reuse/ui5/session/loginSapCloud.spec.js +51 -0
- package/test/reuse/ui5/session/logout.spec.js +48 -0
- package/test/reuse/ui5/session/switchUser.spec.js +48 -0
- package/test/reuse/ui5/session/test.session.conf.js +20 -0
- package/test/reuse/ui5/session/test.session.sauceLab.conf.js +29 -0
- package/test/reuse/ui5/table/clickSettingsButton.spec.js +58 -0
- package/test/reuse/ui5/table/sortColumnAscending.spec.js +84 -0
- package/test/reuse/ui5/table/sortColumnDescending.spec.js +84 -0
- package/test/reuse/ui5/table/test.table.conf.js +14 -0
- package/test/reuse/ui5/table/test.table.sauceLab.conf.js +25 -0
- package/test/reuse/ui5/table/test.table.sauceLab.tunnel.conf.js +25 -0
- package/test/reuse/ui5/userInteraction/clear.spec.js +75 -0
- package/test/reuse/ui5/userInteraction/clearAndFill.spec.js +157 -0
- package/test/reuse/ui5/userInteraction/clearAndFillAndRetry.spec.js +132 -0
- package/test/reuse/ui5/userInteraction/clearAndFillSmartFieldInput.spec.js +73 -0
- package/test/reuse/ui5/userInteraction/clearAndRetry.spec.js +57 -0
- package/test/reuse/ui5/userInteraction/click.spec.js +73 -0
- package/test/reuse/ui5/userInteraction/clickAndRetry.spec.js +52 -0
- package/test/reuse/ui5/userInteraction/clickSelectArrow.spec.js +87 -0
- package/test/reuse/ui5/userInteraction/clickSelectArrowAndRetry.spec.js +147 -0
- package/test/reuse/ui5/userInteraction/clickTab.spec.js +59 -0
- package/test/reuse/ui5/userInteraction/doubleClick.spec.js +73 -0
- package/test/reuse/ui5/userInteraction/dragAndDrop.spec.js +34 -0
- package/test/reuse/ui5/userInteraction/fill.spec.js +114 -0
- package/test/reuse/ui5/userInteraction/fillAndRetry.spec.js +120 -0
- package/test/reuse/ui5/userInteraction/mouseOverElement.spec.js +55 -0
- package/test/reuse/ui5/userInteraction/openF4Help.spec.js +56 -0
- package/test/reuse/ui5/userInteraction/rightClick.spec.js +72 -0
- package/test/reuse/ui5/userInteraction/scrollToElement.spec.js +89 -0
- package/test/reuse/ui5/userInteraction/searchFor.spec.js +155 -0
- package/test/reuse/ui5/userInteraction/selectBox.spec.js +128 -0
- package/test/reuse/ui5/userInteraction/selectCombobox.spec.js +115 -0
- package/test/reuse/ui5/userInteraction/selectMultiComboBox.spec.js +155 -0
- package/test/reuse/ui5/userInteraction/test.userInteraction.conf.js +35 -0
- package/test/reuse/ui5/userInteraction/test.userInteraction.sauceLab.conf.js +46 -0
- package/test/reuse/util/browser/back.spec.js +32 -0
- package/test/reuse/util/browser/clearBrowser.spec.js +35 -0
- package/test/reuse/util/browser/executeScript.spec.js +49 -0
- package/test/reuse/util/browser/getBaseUrl.spec.js +13 -0
- package/test/reuse/util/browser/getBrowserName.spec.js +18 -0
- package/test/reuse/util/browser/getCurrentUrl.spec.js +34 -0
- package/test/reuse/util/browser/getCurrentWindow.spec.js +42 -0
- package/test/reuse/util/browser/getUI5Version.spec.js +31 -0
- package/test/reuse/util/browser/logCurrentUrl.spec.js +23 -0
- package/test/reuse/util/browser/refresh.spec.js +52 -0
- package/test/reuse/util/browser/setBaseUrl.spec.js +13 -0
- package/test/reuse/util/browser/switchToDefaultContent.spec.js +34 -0
- package/test/reuse/util/browser/switchToIframe.spec.js +29 -0
- package/test/reuse/util/browser/switchToNewWindow.spec.js +142 -0
- package/test/reuse/util/browser/switchToWindow.spec.js +57 -0
- package/test/reuse/util/browser/test.browser.conf.js +27 -0
- package/test/reuse/util/data/data/test.json +3 -0
- package/test/reuse/util/data/data/test.secure.json +11 -0
- package/test/reuse/util/data/decrypt.spec.js +15 -0
- package/test/reuse/util/data/getData.spec.js +15 -0
- package/test/reuse/util/data/getSecureData.spec.js +57 -0
- package/test/reuse/util/data/test.data.conf.js +22 -0
- package/test/reuse/util/file/file.spec.js +90 -0
- package/test/reuse/util/file/pdfParser.spec.js +55 -0
- package/test/reuse/util/file/test.file.conf.js +15 -0
- package/test/reuse/util/file/testFiles/sample.pdf +198 -0
- package/test/reuse/util/file/testFiles/test.txt +5 -0
- package/test/reuse/util/file/testFiles/test2.txt +2 -0
- package/test/reuse/util/formatter/addRemoveLeadingZeros.spec.js +38 -0
- package/test/reuse/util/formatter/extractNumberFromString.spec.js +67 -0
- package/test/reuse/util/formatter/formatDate.spec.js +150 -0
- package/test/reuse/util/formatter/sliceStringAfter.spec.js +62 -0
- package/test/reuse/util/formatter/sliceStringAt.spec.js +62 -0
- package/test/reuse/util/formatter/stringifyJSON.spec.js +24 -0
- package/test/reuse/util/formatter/test.formatter.conf.js +20 -0
- package/test/reuse/util/formatter/trimString.spec.js +37 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,1384 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = {
|
|
3
|
+
ui5All: function ui5All(ui5Selector, index, opt_parentElement) {
|
|
4
|
+
//Polyfill
|
|
5
|
+
// https://tc39.github.io/ecma262/#sec-array.prototype.findindex
|
|
6
|
+
if (!Array.prototype.findIndex) {
|
|
7
|
+
Object.defineProperty(Array.prototype, "findIndex", {
|
|
8
|
+
value: function (predicate) {
|
|
9
|
+
// 1. Let O be ? ToObject(this value).
|
|
10
|
+
if (this == null) {
|
|
11
|
+
throw new TypeError('"this" is null or not defined');
|
|
12
|
+
}
|
|
13
|
+
var o = Object(this);
|
|
14
|
+
// 2. Let len be ? ToLength(? Get(O, "length")).
|
|
15
|
+
var len = o.length >>> 0;
|
|
16
|
+
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
|
|
17
|
+
if (typeof predicate !== "function") {
|
|
18
|
+
throw new TypeError("predicate must be a function");
|
|
19
|
+
}
|
|
20
|
+
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
|
|
21
|
+
var thisArg = arguments[1];
|
|
22
|
+
// 5. Let k be 0.
|
|
23
|
+
var k = 0;
|
|
24
|
+
// 6. Repeat, while k < len
|
|
25
|
+
while (k < len) {
|
|
26
|
+
// a. Let Pk be ! ToString(k).
|
|
27
|
+
// b. Let kValue be ? Get(O, Pk).
|
|
28
|
+
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
|
|
29
|
+
// d. If testResult is true, return k.
|
|
30
|
+
var kValue = o[k];
|
|
31
|
+
if (predicate.call(thisArg, kValue, k, o)) {
|
|
32
|
+
return k;
|
|
33
|
+
}
|
|
34
|
+
// e. Increase k by 1.
|
|
35
|
+
k++;
|
|
36
|
+
}
|
|
37
|
+
// 7. Return -1.
|
|
38
|
+
return -1;
|
|
39
|
+
},
|
|
40
|
+
configurable: true,
|
|
41
|
+
writable: true
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (!Object.entries) {
|
|
45
|
+
Object.entries = function (obj) {
|
|
46
|
+
var ownProps = Object.keys(obj), i = ownProps.length, resArray = new Array(i); // preallocate the Array
|
|
47
|
+
while (i--)
|
|
48
|
+
resArray[i] = [ownProps[i], obj[ownProps[i]]];
|
|
49
|
+
return resArray;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
var aCandidateControls = [];
|
|
53
|
+
function isEmptyObject(obj) {
|
|
54
|
+
return Object.entries(obj).length === 0 && obj.constructor === Object;
|
|
55
|
+
}
|
|
56
|
+
function getControlAllProperties(oControl) {
|
|
57
|
+
if (!oControl ||
|
|
58
|
+
!oControl.getMetadata ||
|
|
59
|
+
!oControl.getMetadata() ||
|
|
60
|
+
!oControl.getMetadata().getAllProperties) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return oControl.getMetadata().getAllProperties();
|
|
64
|
+
}
|
|
65
|
+
function getControlAllAggregations(oControl) {
|
|
66
|
+
if (!oControl ||
|
|
67
|
+
!oControl.getMetadata ||
|
|
68
|
+
!oControl.getMetadata() ||
|
|
69
|
+
!oControl.getMetadata().getAllAggregations) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return oControl.getMetadata().getAllAggregations();
|
|
73
|
+
}
|
|
74
|
+
function getControlAllAssociations(oControl) {
|
|
75
|
+
if (!oControl ||
|
|
76
|
+
!oControl.getMetadata ||
|
|
77
|
+
!oControl.getMetadata() ||
|
|
78
|
+
!oControl.getMetadata().getAllAssociations) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return oControl.getMetadata().getAllAssociations();
|
|
82
|
+
}
|
|
83
|
+
function getControlProperty(oControl, sPropKey) {
|
|
84
|
+
if (!oControl ||
|
|
85
|
+
!oControl.getProperty ||
|
|
86
|
+
!oControl.getMetadata() ||
|
|
87
|
+
!oControl.getMetadata().getProperty ||
|
|
88
|
+
!oControl.getMetadata().getProperty(sPropKey) ||
|
|
89
|
+
!oControl.getMetadata().getProperty(sPropKey).get) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return oControl.getMetadata().getProperty(sPropKey).get(oControl);
|
|
93
|
+
}
|
|
94
|
+
function getAggregationProperty(oControl, sPropKey) {
|
|
95
|
+
if (!oControl ||
|
|
96
|
+
!oControl.getAggregation ||
|
|
97
|
+
!oControl.getMetadata() ||
|
|
98
|
+
!oControl.getMetadata().getAggregation ||
|
|
99
|
+
!oControl.getMetadata().getAggregation(sPropKey) ||
|
|
100
|
+
!oControl.getMetadata().getAggregation(sPropKey).get) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return oControl.getMetadata().getAggregation(sPropKey).get(oControl);
|
|
104
|
+
}
|
|
105
|
+
function getAssociationProperty(oControl, sPropKey) {
|
|
106
|
+
if (!oControl ||
|
|
107
|
+
!oControl.getAssociation ||
|
|
108
|
+
!oControl.getMetadata() ||
|
|
109
|
+
!oControl.getMetadata().getAssociation ||
|
|
110
|
+
!oControl.getMetadata().getAssociation(sPropKey) ||
|
|
111
|
+
!oControl.getMetadata().getAssociation(sPropKey).get) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return oControl.getMetadata().getAssociation(sPropKey).get(oControl);
|
|
115
|
+
}
|
|
116
|
+
function getControlBindingContextPaths(oControl) {
|
|
117
|
+
if (!oControl)
|
|
118
|
+
return null;
|
|
119
|
+
var bindingContexts = jQuery.extend({}, oControl.oPropagatedProperties && oControl.oPropagatedProperties.oBindingContexts, oControl.oBindingContexts, oControl.mElementBindingContexts);
|
|
120
|
+
// reduce object to non-empty contexts
|
|
121
|
+
bindingContexts = Object.keys(bindingContexts).reduce(function (finalContexts, key) {
|
|
122
|
+
if (bindingContexts[key]) {
|
|
123
|
+
finalContexts[key] = bindingContexts[key];
|
|
124
|
+
}
|
|
125
|
+
return finalContexts;
|
|
126
|
+
}, {});
|
|
127
|
+
if (bindingContexts && Object.keys(bindingContexts).length > 0) {
|
|
128
|
+
var aKeys = Object.keys(bindingContexts);
|
|
129
|
+
var aBindingContextPaths = [];
|
|
130
|
+
for (let index = 0; index < aKeys.length; index++) {
|
|
131
|
+
if (aKeys[index] === "$cmd")
|
|
132
|
+
continue;
|
|
133
|
+
const oBindingContext = bindingContexts[aKeys[index]];
|
|
134
|
+
if (oBindingContext &&
|
|
135
|
+
oBindingContext.getPath &&
|
|
136
|
+
oBindingContext.getPath())
|
|
137
|
+
aBindingContextPaths.push(oBindingContext.getPath());
|
|
138
|
+
}
|
|
139
|
+
return aBindingContextPaths;
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
function isControlInViewName(oControl, sViewName) {
|
|
144
|
+
try {
|
|
145
|
+
// eslint-disable-next-line no-undef
|
|
146
|
+
if (!oControl || !sap.ui.core.Element || !sap.ui.core.mvc.View) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
if (oControl.getViewName &&
|
|
150
|
+
// eslint-disable-next-line no-undef
|
|
151
|
+
oControl instanceof sap.ui.core.mvc.View &&
|
|
152
|
+
wildCardAndNormalCompare(sViewName, oControl.getViewName())) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
return isControlInViewName(oControl.getParent(), sViewName);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function isControlInViewId(oControl, sViewId) {
|
|
164
|
+
try {
|
|
165
|
+
// eslint-disable-next-line no-undef
|
|
166
|
+
if (!oControl || !sap.ui.core.Element || !sap.ui.core.mvc.View) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
if (oControl.getId &&
|
|
170
|
+
wildCardAndNormalCompare(sViewId, oControl.getId()) &&
|
|
171
|
+
// eslint-disable-next-line no-undef
|
|
172
|
+
oControl instanceof sap.ui.core.mvc.View) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
return isControlInViewId(oControl.getParent(), sViewId);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function convertToString(value) {
|
|
184
|
+
if (value === undefined || value === null) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
return value.toString();
|
|
188
|
+
}
|
|
189
|
+
function isInt(value) {
|
|
190
|
+
return !isNaN(value) && (function (x) { return (x | 0) === x; })(parseFloat(value));
|
|
191
|
+
}
|
|
192
|
+
function retrieveNodesFromBody(index, opt_parentElement) {
|
|
193
|
+
// Logic to retrieve the element for chaining
|
|
194
|
+
if (index) {
|
|
195
|
+
if (!isInt(index) && index.nodeType) {
|
|
196
|
+
return index.querySelectorAll("*");
|
|
197
|
+
}
|
|
198
|
+
else if (opt_parentElement && opt_parentElement.nodeType) {
|
|
199
|
+
return opt_parentElement.querySelectorAll("*");
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
var sapBody = document.getElementsByClassName("sapUiBody");
|
|
203
|
+
if (!sapBody || !sapBody[0]) {
|
|
204
|
+
throw new Error("No body found");
|
|
205
|
+
}
|
|
206
|
+
return sapBody[0].querySelectorAll("*");
|
|
207
|
+
}
|
|
208
|
+
function retrieveNodeName(oNode) {
|
|
209
|
+
if (oNode) {
|
|
210
|
+
return oNode.nodeName;
|
|
211
|
+
}
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
function retrieveNodeAttributes(oNode) {
|
|
215
|
+
var domProperties = [];
|
|
216
|
+
if (oNode.attributes && oNode.attributes.length > 0) {
|
|
217
|
+
for (let index = 0; index < oNode.attributes.length; index++) {
|
|
218
|
+
var oElm = oNode.attributes[index];
|
|
219
|
+
if (oElm.nodeName && oElm.nodeValue) {
|
|
220
|
+
var nodeNm = oElm.nodeName;
|
|
221
|
+
var nodeValue = oElm.nodeValue;
|
|
222
|
+
var nodeVN = {};
|
|
223
|
+
nodeVN[nodeNm] = nodeValue;
|
|
224
|
+
domProperties.push(nodeVN);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return domProperties;
|
|
229
|
+
}
|
|
230
|
+
function retrieveCompositeBindings(oBinding, aBindingInfos) {
|
|
231
|
+
if (!oBinding)
|
|
232
|
+
return;
|
|
233
|
+
if (oBinding.getBindings && oBinding.getBindings() && aBindingInfos) {
|
|
234
|
+
var aBindings = oBinding.getBindings();
|
|
235
|
+
for (let i = 0; i < aBindings.length; i++) {
|
|
236
|
+
for (let j = 0; j < aBindingInfos.length; j++) {
|
|
237
|
+
try {
|
|
238
|
+
if (!aBindings[i].getBindings &&
|
|
239
|
+
aBindingInfos[j].path === aBindings[i].getPath() &&
|
|
240
|
+
aBindings[i].getValue) {
|
|
241
|
+
aBindingInfos[j].value = aBindings[i].getValue();
|
|
242
|
+
}
|
|
243
|
+
else if (aBindings[i].getBindings) {
|
|
244
|
+
retrieveCompositeBindings(aBindings[i], aBindingInfos);
|
|
245
|
+
}
|
|
246
|
+
// eslint-disable-next-line no-empty
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else if (!oBinding.getBindings && aBindingInfos) {
|
|
254
|
+
for (let j = 0; j < aBindingInfos.length; j++) {
|
|
255
|
+
try {
|
|
256
|
+
if (aBindingInfos[j].path === oBinding.getPath() &&
|
|
257
|
+
oBinding.getValue) {
|
|
258
|
+
aBindingInfos[j].value = oBinding.getValue();
|
|
259
|
+
}
|
|
260
|
+
// eslint-disable-next-line no-empty
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function retrieverBindingPaths(oControl, sPropKey) {
|
|
268
|
+
var aBindingInfos = [];
|
|
269
|
+
var aBindingInfoParts = oControl.getBindingInfo(sPropKey).parts;
|
|
270
|
+
try {
|
|
271
|
+
if (aBindingInfoParts && aBindingInfoParts.length > 0) {
|
|
272
|
+
for (let i = 0; i < aBindingInfoParts.length; i++) {
|
|
273
|
+
var sModel = "";
|
|
274
|
+
if (!aBindingInfoParts[i].path)
|
|
275
|
+
continue;
|
|
276
|
+
if (aBindingInfoParts[i].model)
|
|
277
|
+
sModel = aBindingInfoParts[i].model;
|
|
278
|
+
aBindingInfos.push({
|
|
279
|
+
model: sModel,
|
|
280
|
+
path: aBindingInfoParts[i].path,
|
|
281
|
+
value: ""
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
var sBindingDataStr = oControl.getBindingInfo(sPropKey).path;
|
|
287
|
+
var sBindingDataModelStr = oControl.getBindingInfo(sPropKey).model;
|
|
288
|
+
if (sBindingDataStr) {
|
|
289
|
+
aBindingInfos.push({
|
|
290
|
+
model: sBindingDataModelStr,
|
|
291
|
+
path: sBindingDataStr,
|
|
292
|
+
value: ""
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// Get values
|
|
297
|
+
if (oControl.getBinding && oControl.getBinding(sPropKey)) {
|
|
298
|
+
var oBinding = oControl.getBinding(sPropKey);
|
|
299
|
+
retrieveCompositeBindings(oBinding, aBindingInfos);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
//Continue
|
|
304
|
+
}
|
|
305
|
+
return aBindingInfos;
|
|
306
|
+
}
|
|
307
|
+
function getBindDataForAggregation(oControl, sPropKey) {
|
|
308
|
+
var aAggregation = getControlAllAggregations(oControl);
|
|
309
|
+
var aBindingInfos = [];
|
|
310
|
+
try {
|
|
311
|
+
if (aAggregation.hasOwnProperty(sPropKey)) {
|
|
312
|
+
if (!oControl || !sPropKey
|
|
313
|
+
|| !aAggregation.hasOwnProperty(sPropKey)
|
|
314
|
+
|| !oControl.getBindingInfo
|
|
315
|
+
|| !oControl.getBindingInfo(sPropKey))
|
|
316
|
+
return aBindingInfos;
|
|
317
|
+
aBindingInfos = retrieverBindingPaths(oControl, sPropKey);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch (e) {
|
|
321
|
+
// Do nothing
|
|
322
|
+
}
|
|
323
|
+
return aBindingInfos;
|
|
324
|
+
}
|
|
325
|
+
function getBindDataForAssociation(oControl, sPropKey) {
|
|
326
|
+
var aAssociation = getControlAllAssociations(oControl);
|
|
327
|
+
var aBindingInfos = [];
|
|
328
|
+
try {
|
|
329
|
+
if (aAssociation.hasOwnProperty(sPropKey)) {
|
|
330
|
+
if (!oControl || !sPropKey
|
|
331
|
+
|| !aAssociation.hasOwnProperty(sPropKey)
|
|
332
|
+
|| !oControl.getBindingInfo
|
|
333
|
+
|| !oControl.getBindingInfo(sPropKey))
|
|
334
|
+
return aBindingInfos;
|
|
335
|
+
aBindingInfos = retrieverBindingPaths(oControl, sPropKey);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch (e) {
|
|
339
|
+
// Do nothing
|
|
340
|
+
}
|
|
341
|
+
return aBindingInfos;
|
|
342
|
+
}
|
|
343
|
+
function getBindDataForProperty(oControl, sPropKey) {
|
|
344
|
+
var aProperties = getControlAllProperties(oControl);
|
|
345
|
+
var aBindingInfos = [];
|
|
346
|
+
try {
|
|
347
|
+
if (aProperties.hasOwnProperty(sPropKey)) {
|
|
348
|
+
if (!oControl || !sPropKey
|
|
349
|
+
|| !aProperties.hasOwnProperty(sPropKey)
|
|
350
|
+
|| !oControl.getBindingInfo
|
|
351
|
+
|| !oControl.getBindingInfo(sPropKey))
|
|
352
|
+
return aBindingInfos;
|
|
353
|
+
aBindingInfos = retrieverBindingPaths(oControl, sPropKey);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
catch (e) {
|
|
357
|
+
// Do nothing
|
|
358
|
+
}
|
|
359
|
+
return aBindingInfos;
|
|
360
|
+
}
|
|
361
|
+
function retrieveValidUI5ControlsSubElements(nodes) {
|
|
362
|
+
if (!nodes || nodes.length === 0) {
|
|
363
|
+
//console.log('no node html elements found');
|
|
364
|
+
return aCandidateControls;
|
|
365
|
+
}
|
|
366
|
+
Array.prototype.filter.call(nodes, function (node) {
|
|
367
|
+
//console.log("node -->" + node);
|
|
368
|
+
var nodeId = node.getAttribute("id");
|
|
369
|
+
if (!nodeId) {
|
|
370
|
+
var childNod = node.children;
|
|
371
|
+
//console.log("Number of child elements-->"+ childNod.length);
|
|
372
|
+
if (!childNod)
|
|
373
|
+
return false;
|
|
374
|
+
Array.prototype.filter.call(childNod, function (chNode) {
|
|
375
|
+
var chNodeId = chNode.getAttribute("id");
|
|
376
|
+
if (chNodeId) {
|
|
377
|
+
// eslint-disable-next-line no-undef
|
|
378
|
+
var oControl = sap.ui.getCore().byId(chNodeId);
|
|
379
|
+
if (oControl) {
|
|
380
|
+
//console.log("Control pushed-->"+ oControl.getId());
|
|
381
|
+
aCandidateControls.push(oControl);
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
//console.log("Im in else iterate 1");
|
|
385
|
+
retrieveValidUI5ControlsSubElements(chNode.children);
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
//console.log("Im in else iterate 2");
|
|
391
|
+
retrieveValidUI5ControlsSubElements(chNode.children);
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
// eslint-disable-next-line no-undef
|
|
398
|
+
var oControl = sap.ui.getCore().byId(nodeId);
|
|
399
|
+
if (oControl) {
|
|
400
|
+
//console.log("Control pushed-->" + oControl.getId());
|
|
401
|
+
//console.log("Control pushed-->"+ oControl.getId());
|
|
402
|
+
aCandidateControls.push(oControl);
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
//console.log("Im in else iterate 3 -->" + node.children.length);
|
|
406
|
+
retrieveValidUI5ControlsSubElements(node.children);
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return oControl;
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
function findSiblingControls(oControl, oParentControl) {
|
|
414
|
+
if (!oControl || !oControl.getId || !oControl.getId())
|
|
415
|
+
return null;
|
|
416
|
+
if (!oParentControl.getId || !oParentControl.getId())
|
|
417
|
+
return null;
|
|
418
|
+
var sParentId = oParentControl.getId();
|
|
419
|
+
var aAllSiblingNodes = document.getElementById(sParentId).children;
|
|
420
|
+
aCandidateControls = [];
|
|
421
|
+
retrieveValidUI5ControlsSubElements(aAllSiblingNodes);
|
|
422
|
+
var aValidControls = aCandidateControls;
|
|
423
|
+
if (!aValidControls || aValidControls.length === 0)
|
|
424
|
+
return null;
|
|
425
|
+
var oControlIndx = aValidControls.findIndex(function (element) {
|
|
426
|
+
return element.getId() === oControl.getId();
|
|
427
|
+
});
|
|
428
|
+
if (oControlIndx === -1) {
|
|
429
|
+
throw new Error("Something is very wrong with prev/next control finder");
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
aValidControls.splice(oControlIndx, 1);
|
|
433
|
+
return aValidControls;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
function findPrevNextControl(oControl, oParentControl, bIsNext) {
|
|
437
|
+
if (!oControl || !oControl.getId || !oControl.getId())
|
|
438
|
+
return null;
|
|
439
|
+
if (!oParentControl.getId || !oParentControl.getId())
|
|
440
|
+
return null;
|
|
441
|
+
var sParentId = oParentControl.getId();
|
|
442
|
+
var aAllSiblingNodes = document.getElementById(sParentId).children;
|
|
443
|
+
aCandidateControls = [];
|
|
444
|
+
retrieveValidUI5ControlsSubElements(aAllSiblingNodes);
|
|
445
|
+
var aValidControls = aCandidateControls;
|
|
446
|
+
if (!aValidControls || aValidControls.length === 0)
|
|
447
|
+
return null;
|
|
448
|
+
var oControlIndx = aValidControls.findIndex(function (element) {
|
|
449
|
+
return element.getId() === oControl.getId();
|
|
450
|
+
});
|
|
451
|
+
if (oControlIndx === -1) {
|
|
452
|
+
throw new Error("Something is very wrong with prev/next control finder");
|
|
453
|
+
}
|
|
454
|
+
if (bIsNext && ((aValidControls.length - 1) > oControlIndx)) {
|
|
455
|
+
return aValidControls[oControlIndx + 1];
|
|
456
|
+
}
|
|
457
|
+
else if (!bIsNext && (oControlIndx > 0)) {
|
|
458
|
+
return aValidControls[oControlIndx - 1];
|
|
459
|
+
}
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
function extractBindingPathAndModelProperty(pathObj) {
|
|
463
|
+
var binding = {
|
|
464
|
+
model: "",
|
|
465
|
+
path: ""
|
|
466
|
+
};
|
|
467
|
+
if (!pathObj || !pathObj.path)
|
|
468
|
+
return binding;
|
|
469
|
+
if (pathObj.path.indexOf(">") !== -1) {
|
|
470
|
+
binding.model = pathObj.path.substring(0, pathObj.path.indexOf(">"));
|
|
471
|
+
binding.path = pathObj.path.substring(pathObj.path.indexOf(">") + 1, pathObj.path.length);
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
binding.path = pathObj.path;
|
|
475
|
+
}
|
|
476
|
+
return binding;
|
|
477
|
+
}
|
|
478
|
+
function compareBindingPathAndModelProperty(key, locatorProperty, oControl) {
|
|
479
|
+
var extrPath = extractBindingPathAndModelProperty(locatorProperty);
|
|
480
|
+
var aBindindInfo = getBindDataForProperty(oControl, key);
|
|
481
|
+
if (aBindindInfo.length === 0) {
|
|
482
|
+
aBindindInfo = getBindDataForAggregation(oControl, key);
|
|
483
|
+
}
|
|
484
|
+
if (aBindindInfo.length === 0) {
|
|
485
|
+
aBindindInfo = getBindDataForAssociation(oControl, key);
|
|
486
|
+
}
|
|
487
|
+
if ((!extrPath.path && aBindindInfo.length > 0) ||
|
|
488
|
+
(!extrPath.path && aBindindInfo.length === 0)) {
|
|
489
|
+
return true;
|
|
490
|
+
}
|
|
491
|
+
else if (extrPath.path && aBindindInfo.length === 0) {
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
494
|
+
var aCandidatePath = [];
|
|
495
|
+
for (let index = 0; index < aBindindInfo.length; index++) {
|
|
496
|
+
const bindindInfo = aBindindInfo[index];
|
|
497
|
+
if ((extrPath.model && bindindInfo.model)) {
|
|
498
|
+
if ((extrPath.path && (bindindInfo.path !== null && bindindInfo.path !== undefined))
|
|
499
|
+
&& wildCardAndNormalCompare(extrPath.model, bindindInfo.model)) {
|
|
500
|
+
//if(convertToString(bindindInfo.path) === convertToString(extrPath.path))
|
|
501
|
+
if (wildCardAndNormalCompare(extrPath.path, bindindInfo.path))
|
|
502
|
+
aCandidatePath.push(bindindInfo.path);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
if (extrPath.path && (bindindInfo.path !== null && bindindInfo.path !== undefined)) {
|
|
507
|
+
//if(convertToString(bindindInfo.path) === convertToString(extrPath.path))
|
|
508
|
+
if (wildCardAndNormalCompare(extrPath.path, bindindInfo.path)) {
|
|
509
|
+
aCandidatePath.push(bindindInfo.path);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
return aCandidatePath.length > 0;
|
|
515
|
+
}
|
|
516
|
+
function wildCardAndNormalCompare(sWild, sValue) {
|
|
517
|
+
if ((sValue === undefined || sValue === null)
|
|
518
|
+
&& (sWild === undefined || sWild === null))
|
|
519
|
+
return true;
|
|
520
|
+
else {
|
|
521
|
+
if (sValue === undefined || sValue === null)
|
|
522
|
+
sValue = "";
|
|
523
|
+
if (sWild === undefined || sWild === null)
|
|
524
|
+
sWild = "";
|
|
525
|
+
}
|
|
526
|
+
if (!sWild.trim() || sWild.indexOf("*") === -1) {
|
|
527
|
+
return (convertToString(sWild) === convertToString(sValue));
|
|
528
|
+
}
|
|
529
|
+
var aWilds = convertToString(sWild).trim().split("*");
|
|
530
|
+
sValue = convertToString(sValue);
|
|
531
|
+
for (var i = 0; i < aWilds.length; i++) {
|
|
532
|
+
if (!aWilds[i])
|
|
533
|
+
continue;
|
|
534
|
+
if (sValue.indexOf(aWilds[i]) === -1)
|
|
535
|
+
return false;
|
|
536
|
+
}
|
|
537
|
+
return true;
|
|
538
|
+
}
|
|
539
|
+
function compareAttributeToElementAttributes(sKey, sValue, aNodeAttributes) {
|
|
540
|
+
if (!sKey || !sValue || !aNodeAttributes)
|
|
541
|
+
return false;
|
|
542
|
+
for (let index = 0; index < aNodeAttributes.length; index++) {
|
|
543
|
+
var oElm = aNodeAttributes[index];
|
|
544
|
+
if (oElm) {
|
|
545
|
+
const aAttrKey = Object.keys(oElm);
|
|
546
|
+
const aAttrValue = Object.values(oElm);
|
|
547
|
+
if (aAttrKey && aAttrValue &&
|
|
548
|
+
aAttrKey.length > 0 && aAttrValue.length > 0 &&
|
|
549
|
+
aAttrValue[0] !== undefined && aAttrValue[0] !== null) {
|
|
550
|
+
if (aAttrKey[0] === sKey) {
|
|
551
|
+
var val = aAttrValue[0].toString();
|
|
552
|
+
if (wildCardAndNormalCompare(sValue, val)) {
|
|
553
|
+
return true;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
function compareToDomProperties(oNode, mProperties) {
|
|
562
|
+
var bPass = true;
|
|
563
|
+
if (!mProperties || !oNode) {
|
|
564
|
+
console.log("No dom properties or no node to compare");
|
|
565
|
+
return bPass;
|
|
566
|
+
}
|
|
567
|
+
var aNodeAttributes = retrieveNodeAttributes(oNode);
|
|
568
|
+
for (var key in mProperties) {
|
|
569
|
+
var value = mProperties[key];
|
|
570
|
+
if (value) {
|
|
571
|
+
if (key === "nodeName") {
|
|
572
|
+
const nodeName = retrieveNodeName(oNode);
|
|
573
|
+
bPass = bPass && (nodeName.toLowerCase() === value.toLowerCase());
|
|
574
|
+
}
|
|
575
|
+
else {
|
|
576
|
+
if (Array.isArray(value)) {
|
|
577
|
+
value.map(function (attrValue) {
|
|
578
|
+
bPass = bPass && compareAttributeToElementAttributes(key, attrValue, aNodeAttributes);
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
bPass = bPass && compareAttributeToElementAttributes(key, value, aNodeAttributes);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
return false;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
return bPass;
|
|
591
|
+
}
|
|
592
|
+
function compareToProperties(mProperties, oControl) {
|
|
593
|
+
var bPass = true;
|
|
594
|
+
if (!mProperties) {
|
|
595
|
+
console.log("No properties to compare");
|
|
596
|
+
return bPass;
|
|
597
|
+
}
|
|
598
|
+
for (var key in mProperties) {
|
|
599
|
+
var value = mProperties[key];
|
|
600
|
+
if (key !== "domProperties" &&
|
|
601
|
+
key !== "metadata" &&
|
|
602
|
+
key !== "ancestorProperties" &&
|
|
603
|
+
key !== "descendantProperties" &&
|
|
604
|
+
key !== "siblingProperties") {
|
|
605
|
+
if (value && Array.isArray(value)) {
|
|
606
|
+
let bIsStringVal = false;
|
|
607
|
+
if (value.length > 0) {
|
|
608
|
+
//Check type
|
|
609
|
+
const stVal = value[0];
|
|
610
|
+
if (typeof stVal === "string") {
|
|
611
|
+
bIsStringVal = true;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
value.map(function (valData) {
|
|
615
|
+
if (bIsStringVal) {
|
|
616
|
+
bPass = bPass && compareArrayStrElements(key, valData, oControl);
|
|
617
|
+
}
|
|
618
|
+
else {
|
|
619
|
+
bPass = bPass && compareBindingPathAndModelProperty(key, valData, oControl);
|
|
620
|
+
}
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
else if (value && typeof value === "object") {
|
|
624
|
+
bPass = bPass && compareBindingPathAndModelProperty(key, value, oControl);
|
|
625
|
+
}
|
|
626
|
+
else if (key === "bindingContextPath") {
|
|
627
|
+
var aPaths = getControlBindingContextPaths(oControl);
|
|
628
|
+
var bFound = false;
|
|
629
|
+
if (aPaths && aPaths.length) {
|
|
630
|
+
for (let index = 0; index < aPaths.length; index++) {
|
|
631
|
+
if (aPaths[index] && value) {
|
|
632
|
+
bFound = wildCardAndNormalCompare(value, aPaths[index]);
|
|
633
|
+
if (bFound) {
|
|
634
|
+
break;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
bPass = bPass && bFound;
|
|
640
|
+
}
|
|
641
|
+
else if (key === "viewName") {
|
|
642
|
+
bPass = bPass && isControlInViewName(oControl, value);
|
|
643
|
+
}
|
|
644
|
+
else if (key === "viewId") {
|
|
645
|
+
bPass = bPass && isControlInViewId(oControl, value);
|
|
646
|
+
}
|
|
647
|
+
else {
|
|
648
|
+
if (key === "id") {
|
|
649
|
+
var bIdProp = compareId(oControl, value);
|
|
650
|
+
bPass = bPass && bIdProp;
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
653
|
+
var bPropVal = compareProperty(oControl, key, value);
|
|
654
|
+
if (!bPropVal)
|
|
655
|
+
bPropVal = compareAggregation(oControl, key, value);
|
|
656
|
+
if (!bPropVal)
|
|
657
|
+
bPropVal = compareAssociation(oControl, key, value);
|
|
658
|
+
bPass = bPass && bPropVal;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
return bPass;
|
|
664
|
+
}
|
|
665
|
+
function compareArrayStrElements(key, elemId, oControl) {
|
|
666
|
+
let bPass = false;
|
|
667
|
+
var aPropValues = [];
|
|
668
|
+
try {
|
|
669
|
+
aPropValues = getAssociationProperty(oControl, key) || [];
|
|
670
|
+
// eslint-disable-next-line no-empty
|
|
671
|
+
}
|
|
672
|
+
catch (error) {
|
|
673
|
+
}
|
|
674
|
+
if (aPropValues.length === 0) {
|
|
675
|
+
try {
|
|
676
|
+
//Try again
|
|
677
|
+
aPropValues = getAggregationProperty(oControl, key) || [];
|
|
678
|
+
// eslint-disable-next-line no-empty
|
|
679
|
+
}
|
|
680
|
+
catch (error) {
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
if (aPropValues.length === 0) {
|
|
684
|
+
try {
|
|
685
|
+
aPropValues = getControlProperty(oControl, key) || [];
|
|
686
|
+
}
|
|
687
|
+
catch (error) {
|
|
688
|
+
// Continue
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
if ((aPropValues.length === 0 && elemId) ||
|
|
692
|
+
(aPropValues.length > 0 && !elemId)) {
|
|
693
|
+
return bPass;
|
|
694
|
+
}
|
|
695
|
+
else if (aPropValues.length === 0 && !elemId) {
|
|
696
|
+
return true;
|
|
697
|
+
}
|
|
698
|
+
for (let index = 0; index < aPropValues.length; index++) {
|
|
699
|
+
const elem = aPropValues[index];
|
|
700
|
+
if (elem && elemId) {
|
|
701
|
+
let elemStr = elem;
|
|
702
|
+
if (typeof elem === "object" && elem.getId) {
|
|
703
|
+
elemStr = elem.getId();
|
|
704
|
+
}
|
|
705
|
+
else {
|
|
706
|
+
elemStr = elem;
|
|
707
|
+
}
|
|
708
|
+
const elemLow = elemStr.toLowerCase();
|
|
709
|
+
const elemIdLow = elemId.toLowerCase();
|
|
710
|
+
if (wildCardAndNormalCompare(elemIdLow, elemLow)) {
|
|
711
|
+
bPass = true;
|
|
712
|
+
break;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
return bPass;
|
|
717
|
+
}
|
|
718
|
+
function compareProperty(oControl, key, value) {
|
|
719
|
+
var controlVal = null;
|
|
720
|
+
try {
|
|
721
|
+
controlVal = getControlProperty(oControl, key);
|
|
722
|
+
}
|
|
723
|
+
catch (e) {
|
|
724
|
+
// Property doesnt exist
|
|
725
|
+
}
|
|
726
|
+
if (controlVal !== null && controlVal !== undefined && value !== null && value !== undefined) {
|
|
727
|
+
//return convertToString(controlVal) === convertToString(value);
|
|
728
|
+
return wildCardAndNormalCompare(value, controlVal);
|
|
729
|
+
}
|
|
730
|
+
else if ((controlVal === null || controlVal === undefined) && value) {
|
|
731
|
+
return false;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
function getId(oControl) {
|
|
735
|
+
if (!oControl ||
|
|
736
|
+
!oControl.getId) {
|
|
737
|
+
return null;
|
|
738
|
+
}
|
|
739
|
+
return oControl.getId();
|
|
740
|
+
}
|
|
741
|
+
function compareId(oControl, value) {
|
|
742
|
+
var controlVal = null;
|
|
743
|
+
try {
|
|
744
|
+
controlVal = getId(oControl);
|
|
745
|
+
}
|
|
746
|
+
catch (e) {
|
|
747
|
+
// Property doesnt exist
|
|
748
|
+
}
|
|
749
|
+
if (controlVal !== null && controlVal !== undefined && value) {
|
|
750
|
+
//return convertToString(controlVal) === convertToString(value);
|
|
751
|
+
return wildCardAndNormalCompare(value, controlVal);
|
|
752
|
+
}
|
|
753
|
+
else if ((controlVal === null || controlVal === undefined) && value) {
|
|
754
|
+
return false;
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
function compareAggregation(oControl, key, value) {
|
|
758
|
+
var controlVal = null;
|
|
759
|
+
try {
|
|
760
|
+
controlVal = getAggregationProperty(oControl, key);
|
|
761
|
+
}
|
|
762
|
+
catch (e) {
|
|
763
|
+
// Aggregation doesnt exist
|
|
764
|
+
}
|
|
765
|
+
if (controlVal !== null && controlVal !== undefined && value) {
|
|
766
|
+
//return convertToString(controlVal) === convertToString(value);
|
|
767
|
+
return wildCardAndNormalCompare(value, controlVal);
|
|
768
|
+
}
|
|
769
|
+
else if ((controlVal === null || controlVal === undefined) && value) {
|
|
770
|
+
return false;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
function compareAssociation(oControl, key, value) {
|
|
774
|
+
var controlVal = null;
|
|
775
|
+
try {
|
|
776
|
+
controlVal = getAssociationProperty(oControl, key);
|
|
777
|
+
}
|
|
778
|
+
catch (e) {
|
|
779
|
+
// Association doesnt exist
|
|
780
|
+
}
|
|
781
|
+
if (controlVal !== null && controlVal !== undefined && value) {
|
|
782
|
+
//return convertToString(controlVal) === convertToString(value);
|
|
783
|
+
return wildCardAndNormalCompare(value, controlVal);
|
|
784
|
+
}
|
|
785
|
+
else if ((controlVal === null || controlVal === undefined) && value) {
|
|
786
|
+
return false;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
function filterMetadata(elementProperties, oControl) {
|
|
790
|
+
//console.log("Beggining control---->" + controlVal);
|
|
791
|
+
var bPass = true;
|
|
792
|
+
var controlVal = oControl.getMetadata().getName();
|
|
793
|
+
if (!elementProperties)
|
|
794
|
+
return bPass;
|
|
795
|
+
if (!elementProperties.metadata)
|
|
796
|
+
return bPass;
|
|
797
|
+
var metadata = elementProperties.metadata;
|
|
798
|
+
if (!controlVal && metadata) {
|
|
799
|
+
bPass = false;
|
|
800
|
+
return bPass;
|
|
801
|
+
}
|
|
802
|
+
else if (controlVal && metadata) {
|
|
803
|
+
//console.log("Control val---->" + controlVal + " metadata--->"+ metadata);
|
|
804
|
+
bPass = bPass && (controlVal === metadata);
|
|
805
|
+
}
|
|
806
|
+
return bPass;
|
|
807
|
+
}
|
|
808
|
+
function compareToElementProperties(elementProperties, oControl) {
|
|
809
|
+
var bPass = true;
|
|
810
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oControl) {
|
|
811
|
+
return bPass;
|
|
812
|
+
}
|
|
813
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oControl) {
|
|
814
|
+
return false;
|
|
815
|
+
}
|
|
816
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oControl) {
|
|
817
|
+
return bPass;
|
|
818
|
+
}
|
|
819
|
+
bPass = bPass && filterMetadata(elementProperties, oControl);
|
|
820
|
+
if (!bPass)
|
|
821
|
+
return bPass;
|
|
822
|
+
if (elementProperties && elementProperties.mProperties && typeof elementProperties.mProperties === "object") {
|
|
823
|
+
//if(oControl.getId() === "__box0")
|
|
824
|
+
bPass = bPass && compareToProperties(elementProperties.mProperties, oControl);
|
|
825
|
+
}
|
|
826
|
+
else if (elementProperties && typeof elementProperties === "object"
|
|
827
|
+
&& !elementProperties.mProperties) {
|
|
828
|
+
bPass = bPass && compareToProperties(elementProperties, oControl);
|
|
829
|
+
}
|
|
830
|
+
if (elementProperties.domProperties && typeof elementProperties.domProperties === "object") {
|
|
831
|
+
var oNode = convertToDomElement(oControl);
|
|
832
|
+
bPass = bPass && compareToDomProperties(oNode, elementProperties.domProperties);
|
|
833
|
+
}
|
|
834
|
+
if (bPass) {
|
|
835
|
+
var selectObj = elementProperties;
|
|
836
|
+
if (elementProperties.mProperties) {
|
|
837
|
+
selectObj = elementProperties.mProperties;
|
|
838
|
+
}
|
|
839
|
+
if (selectObj.ancestorProperties) {
|
|
840
|
+
bPass = bPass && compareToAncestorProperties(selectObj.ancestorProperties, oControl);
|
|
841
|
+
}
|
|
842
|
+
if (selectObj.descendantProperties) {
|
|
843
|
+
bPass = bPass && compareToDescendantElementProperties(selectObj.descendantProperties, oControl);
|
|
844
|
+
}
|
|
845
|
+
if (selectObj.siblingProperties) {
|
|
846
|
+
var oParentControl = getValidParentControl(oControl);
|
|
847
|
+
bPass = bPass && compareToSiblingElementProperties(selectObj.siblingProperties, oControl, oParentControl);
|
|
848
|
+
}
|
|
849
|
+
if (selectObj.prevSiblingProperties || selectObj.nextSiblingProperties || selectObj.childProperties || selectObj.parentProperties) {
|
|
850
|
+
throw new Error("Nested properties can only be used for ancestorProperties, descendantProperties or siblingProperties.");
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
return bPass;
|
|
854
|
+
}
|
|
855
|
+
function compareToPrevElementProperties(elementProperties, oControl, oParentControl) {
|
|
856
|
+
var bPass = true;
|
|
857
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oParentControl) {
|
|
858
|
+
return bPass;
|
|
859
|
+
}
|
|
860
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oParentControl) {
|
|
861
|
+
return false;
|
|
862
|
+
}
|
|
863
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oParentControl) {
|
|
864
|
+
return bPass;
|
|
865
|
+
}
|
|
866
|
+
var oPrevControl = findPrevNextControl(oControl, oParentControl, false);
|
|
867
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oPrevControl) {
|
|
868
|
+
return bPass;
|
|
869
|
+
}
|
|
870
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oPrevControl) {
|
|
871
|
+
return false;
|
|
872
|
+
}
|
|
873
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oPrevControl) {
|
|
874
|
+
return bPass;
|
|
875
|
+
}
|
|
876
|
+
/*console.log("Previous Property Control Type -->"
|
|
877
|
+
+ oPrevControl.getMetadata().getName()
|
|
878
|
+
+ ", Id-->" + oPrevControl.getId());*/
|
|
879
|
+
return compareToElementProperties(elementProperties, oPrevControl);
|
|
880
|
+
}
|
|
881
|
+
function retrieveValidUI5Controls(nodes) {
|
|
882
|
+
var aCandidateValidControls = [];
|
|
883
|
+
if (!nodes || nodes.length === 0) {
|
|
884
|
+
throw new Error("no node html elements found");
|
|
885
|
+
}
|
|
886
|
+
Array.prototype.filter.call(nodes, function (node) {
|
|
887
|
+
var nodeId = node.getAttribute("id");
|
|
888
|
+
if (!nodeId) {
|
|
889
|
+
return false;
|
|
890
|
+
}
|
|
891
|
+
// eslint-disable-next-line no-undef
|
|
892
|
+
var oControl = sap.ui.getCore().byId(nodeId);
|
|
893
|
+
if (oControl) {
|
|
894
|
+
aCandidateValidControls.push(oControl);
|
|
895
|
+
}
|
|
896
|
+
return oControl;
|
|
897
|
+
});
|
|
898
|
+
return aCandidateValidControls;
|
|
899
|
+
}
|
|
900
|
+
function injectDataForProperties(domElement, oControl) {
|
|
901
|
+
// Inject properties
|
|
902
|
+
var aProperties = Object.keys(getControlAllProperties(oControl));
|
|
903
|
+
Array.prototype.filter.call(aProperties, function (key) {
|
|
904
|
+
var controlVal = getControlProperty(oControl, key);
|
|
905
|
+
domElement.setAttribute("data-" + key, controlVal);
|
|
906
|
+
return domElement;
|
|
907
|
+
});
|
|
908
|
+
// Inject aggregations
|
|
909
|
+
var aAggregation = Object.keys(getControlAllAggregations(oControl));
|
|
910
|
+
Array.prototype.filter.call(aAggregation, function (key) {
|
|
911
|
+
var controlVal = getAggregationProperty(oControl, key);
|
|
912
|
+
domElement.setAttribute("data-" + key, controlVal);
|
|
913
|
+
return domElement;
|
|
914
|
+
});
|
|
915
|
+
// Inject associations
|
|
916
|
+
var aAssociation = Object.keys(getControlAllAssociations(oControl));
|
|
917
|
+
Array.prototype.filter.call(aAssociation, function (key) {
|
|
918
|
+
var controlVal = getAssociationProperty(oControl, key);
|
|
919
|
+
domElement.setAttribute("data-" + key, controlVal);
|
|
920
|
+
return domElement;
|
|
921
|
+
});
|
|
922
|
+
//Inject bindingContextPath
|
|
923
|
+
var aBindingPathValues = getControlBindingContextPaths(oControl);
|
|
924
|
+
if (aBindingPathValues && aBindingPathValues.length > 0) {
|
|
925
|
+
domElement.setAttribute("data-bindingContextPath-size", aBindingPathValues.length);
|
|
926
|
+
for (let index = 0; index < aBindingPathValues.length; index++) {
|
|
927
|
+
const sBindingPathValue = aBindingPathValues[index];
|
|
928
|
+
domElement.setAttribute("data-bindingContextPath" + index, sBindingPathValue);
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
else {
|
|
932
|
+
domElement.setAttribute("data-bindingContextPath-size", 0);
|
|
933
|
+
}
|
|
934
|
+
//Inject BindingPath for property
|
|
935
|
+
Array.prototype.filter.call(aProperties, function (key) {
|
|
936
|
+
var oBindingDataStr = getBindingInfoDataString(oControl, key);
|
|
937
|
+
if (oBindingDataStr !== null && oBindingDataStr !== undefined) {
|
|
938
|
+
var sBindingDataStr = oBindingDataStr.toString();
|
|
939
|
+
if (sBindingDataStr && sBindingDataStr.trim() !== "") {
|
|
940
|
+
domElement.setAttribute("data-" + key + "-path", sBindingDataStr);
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
else {
|
|
944
|
+
return false;
|
|
945
|
+
}
|
|
946
|
+
return domElement;
|
|
947
|
+
});
|
|
948
|
+
//Inject BindingPath for aggregation
|
|
949
|
+
Array.prototype.filter.call(aAggregation, function (key) {
|
|
950
|
+
var oBindingDataStr = getBindingInfoDataAggregationString(oControl, key);
|
|
951
|
+
if (oBindingDataStr !== null && oBindingDataStr !== undefined) {
|
|
952
|
+
var sBindingDataStr = oBindingDataStr.toString();
|
|
953
|
+
if (sBindingDataStr && sBindingDataStr.trim() !== "") {
|
|
954
|
+
/*console.log("control-->"+ oControl.getId()
|
|
955
|
+
+ ", key-->" + key
|
|
956
|
+
+", binding path-->" + sBindingDataStr);*/
|
|
957
|
+
domElement.setAttribute("data-" + key + "-path", sBindingDataStr);
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
else {
|
|
961
|
+
return false;
|
|
962
|
+
}
|
|
963
|
+
return domElement;
|
|
964
|
+
});
|
|
965
|
+
//Inject BindingPath for associations
|
|
966
|
+
Array.prototype.filter.call(aAssociation, function (key) {
|
|
967
|
+
var oBindingDataStr = getBindingInfoDataAssociationString(oControl, key);
|
|
968
|
+
if (oBindingDataStr !== null && oBindingDataStr !== undefined) {
|
|
969
|
+
var sBindingDataStr = oBindingDataStr.toString();
|
|
970
|
+
if (sBindingDataStr && sBindingDataStr.trim() !== "") {
|
|
971
|
+
/*console.log("control-->"+ oControl.getId()
|
|
972
|
+
+ ", key-->" + key
|
|
973
|
+
+", binding path-->" + sBindingDataStr);*/
|
|
974
|
+
domElement.setAttribute("data-" + key + "-path", sBindingDataStr);
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
else {
|
|
978
|
+
return false;
|
|
979
|
+
}
|
|
980
|
+
return domElement;
|
|
981
|
+
});
|
|
982
|
+
}
|
|
983
|
+
function getBindingInfoDataString(oControl, key) {
|
|
984
|
+
var aBindingInfos = [];
|
|
985
|
+
try {
|
|
986
|
+
if (!oControl || !key
|
|
987
|
+
|| !oControl.getBindingInfo
|
|
988
|
+
|| !oControl.getBindingInfo(key))
|
|
989
|
+
return aBindingInfos;
|
|
990
|
+
var aBindingInfoParts = oControl.getBindingInfo(key).parts;
|
|
991
|
+
if (aBindingInfoParts && aBindingInfoParts.length > 0) {
|
|
992
|
+
for (var i = 0; i < aBindingInfoParts.length; i++) {
|
|
993
|
+
if (!aBindingInfoParts[i].path)
|
|
994
|
+
continue;
|
|
995
|
+
var sJoin = "";
|
|
996
|
+
if (!aBindingInfoParts[i].model)
|
|
997
|
+
sJoin = aBindingInfoParts[i].path;
|
|
998
|
+
else
|
|
999
|
+
sJoin = aBindingInfoParts[i].model + ">" + aBindingInfoParts[i].path;
|
|
1000
|
+
aBindingInfos.push(sJoin);
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
else {
|
|
1004
|
+
sJoin = oControl.getBindingInfo(key).path;
|
|
1005
|
+
aBindingInfos.push(sJoin);
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
catch (e) {
|
|
1009
|
+
// Just ignore and move forward
|
|
1010
|
+
}
|
|
1011
|
+
if (aBindingInfos.length > 0) {
|
|
1012
|
+
return aBindingInfos.join();
|
|
1013
|
+
}
|
|
1014
|
+
else {
|
|
1015
|
+
return null;
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
function getBindingInfoDataAggregationString(oControl, key) {
|
|
1019
|
+
var aBindingInfos = [];
|
|
1020
|
+
try {
|
|
1021
|
+
if (!oControl || !key
|
|
1022
|
+
|| !oControl.getBindingInfo
|
|
1023
|
+
|| !oControl.getBindingInfo(key)
|
|
1024
|
+
|| !oControl.getBindingInfo(key))
|
|
1025
|
+
return aBindingInfos;
|
|
1026
|
+
var aBindingInfoParts = oControl.getBindingInfo(key).parts;
|
|
1027
|
+
if (aBindingInfoParts && aBindingInfoParts.length > 0) {
|
|
1028
|
+
for (var i = 0; i < aBindingInfoParts.length; i++) {
|
|
1029
|
+
if (!aBindingInfoParts[i].path)
|
|
1030
|
+
continue;
|
|
1031
|
+
var sJoin = "";
|
|
1032
|
+
if (!aBindingInfoParts[i].model)
|
|
1033
|
+
sJoin = aBindingInfoParts[i].path;
|
|
1034
|
+
else
|
|
1035
|
+
sJoin = aBindingInfoParts[i].model + ">" + aBindingInfoParts[i].path;
|
|
1036
|
+
aBindingInfos.push(sJoin);
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
else {
|
|
1040
|
+
sJoin = oControl.getBindingInfo(key).path;
|
|
1041
|
+
aBindingInfos.push(sJoin);
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
catch (e) {
|
|
1045
|
+
// Just ignore and move forward
|
|
1046
|
+
}
|
|
1047
|
+
if (aBindingInfos.length > 0) {
|
|
1048
|
+
return aBindingInfos.join();
|
|
1049
|
+
}
|
|
1050
|
+
else {
|
|
1051
|
+
return null;
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
function getBindingInfoDataAssociationString(oControl, key) {
|
|
1055
|
+
var aBindingInfos = [];
|
|
1056
|
+
try {
|
|
1057
|
+
if (!oControl || !key
|
|
1058
|
+
|| !oControl.getBindingInfo
|
|
1059
|
+
|| !oControl.getBindingInfo(key)
|
|
1060
|
+
|| !oControl.getBindingInfo(key))
|
|
1061
|
+
return aBindingInfos;
|
|
1062
|
+
var aBindingInfoParts = oControl.getBindingInfo(key).parts;
|
|
1063
|
+
if (aBindingInfoParts && aBindingInfoParts.length > 0) {
|
|
1064
|
+
for (var i = 0; i < aBindingInfoParts.length; i++) {
|
|
1065
|
+
if (!aBindingInfoParts[i].path)
|
|
1066
|
+
continue;
|
|
1067
|
+
var sJoin = "";
|
|
1068
|
+
if (!aBindingInfoParts[i].model)
|
|
1069
|
+
sJoin = aBindingInfoParts[i].path;
|
|
1070
|
+
else
|
|
1071
|
+
sJoin = aBindingInfoParts[i].model + ">" + aBindingInfoParts[i].path;
|
|
1072
|
+
aBindingInfos.push(sJoin);
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
else {
|
|
1076
|
+
sJoin = oControl.getBindingInfo(key).path;
|
|
1077
|
+
aBindingInfos.push(sJoin);
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
catch (e) {
|
|
1081
|
+
// Just ignore and move forward
|
|
1082
|
+
}
|
|
1083
|
+
if (aBindingInfos.length > 0) {
|
|
1084
|
+
return aBindingInfos.join();
|
|
1085
|
+
}
|
|
1086
|
+
else {
|
|
1087
|
+
return null;
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
function convertToDomElement(oControl) {
|
|
1091
|
+
if (!oControl || !oControl.getId || !oControl.getId()) {
|
|
1092
|
+
return null;
|
|
1093
|
+
}
|
|
1094
|
+
var domElem = document.getElementById(oControl.getId());
|
|
1095
|
+
if (domElem) {
|
|
1096
|
+
return domElem;
|
|
1097
|
+
}
|
|
1098
|
+
return null;
|
|
1099
|
+
}
|
|
1100
|
+
function convertToDomElements(aControls) {
|
|
1101
|
+
var aFoundNodes = [];
|
|
1102
|
+
Array.prototype.filter.call(aControls, function (oControl) {
|
|
1103
|
+
if (!oControl || !oControl.getId || !oControl.getId()) {
|
|
1104
|
+
return false;
|
|
1105
|
+
}
|
|
1106
|
+
var domElem = document.getElementById(oControl.getId());
|
|
1107
|
+
if (domElem) {
|
|
1108
|
+
injectDataForProperties(domElem, oControl);
|
|
1109
|
+
aFoundNodes.push(domElem);
|
|
1110
|
+
}
|
|
1111
|
+
return domElem;
|
|
1112
|
+
});
|
|
1113
|
+
return aFoundNodes;
|
|
1114
|
+
}
|
|
1115
|
+
function compareToNextElementProperties(elementProperties, oControl, oParentControl) {
|
|
1116
|
+
var bPass = true;
|
|
1117
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oParentControl) {
|
|
1118
|
+
return bPass;
|
|
1119
|
+
}
|
|
1120
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oParentControl) {
|
|
1121
|
+
return false;
|
|
1122
|
+
}
|
|
1123
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oParentControl) {
|
|
1124
|
+
return bPass;
|
|
1125
|
+
}
|
|
1126
|
+
var oNextControl = findPrevNextControl(oControl, oParentControl, true);
|
|
1127
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oNextControl) {
|
|
1128
|
+
return bPass;
|
|
1129
|
+
}
|
|
1130
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oNextControl) {
|
|
1131
|
+
return false;
|
|
1132
|
+
}
|
|
1133
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oNextControl) {
|
|
1134
|
+
return bPass;
|
|
1135
|
+
}
|
|
1136
|
+
/*console.log("Next Property Control Type -->"
|
|
1137
|
+
+ oNextControl.getMetadata().getName()
|
|
1138
|
+
+ ", Id-->" + oNextControl.getId()
|
|
1139
|
+
+ ", bPass-->"+ bPass);*/
|
|
1140
|
+
return compareToElementProperties(elementProperties, oNextControl);
|
|
1141
|
+
}
|
|
1142
|
+
function compareToDescendantElementProperties(elementProperties, oControl) {
|
|
1143
|
+
var bPass = true;
|
|
1144
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oControl) {
|
|
1145
|
+
return bPass;
|
|
1146
|
+
}
|
|
1147
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oControl) {
|
|
1148
|
+
return false;
|
|
1149
|
+
}
|
|
1150
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oControl) {
|
|
1151
|
+
return bPass;
|
|
1152
|
+
}
|
|
1153
|
+
var aChildrenControls = [];
|
|
1154
|
+
var aAllChildrenNodes = document.getElementById(oControl.getId()).children;
|
|
1155
|
+
aCandidateControls = [];
|
|
1156
|
+
retrieveValidUI5ControlsSubElements(aAllChildrenNodes);
|
|
1157
|
+
var aValidControls = aCandidateControls;
|
|
1158
|
+
if ((elementProperties || !isEmptyObject(elementProperties))
|
|
1159
|
+
&& (!aValidControls || aValidControls.length === 0)) {
|
|
1160
|
+
return false;
|
|
1161
|
+
}
|
|
1162
|
+
else if ((!elementProperties || isEmptyObject(elementProperties))
|
|
1163
|
+
&& (aValidControls && aValidControls.length > 0)) {
|
|
1164
|
+
return bPass;
|
|
1165
|
+
}
|
|
1166
|
+
else if ((!elementProperties || isEmptyObject(elementProperties))
|
|
1167
|
+
&& (!aValidControls || aValidControls.length === 0)) {
|
|
1168
|
+
return bPass;
|
|
1169
|
+
}
|
|
1170
|
+
Array.prototype.filter.call(aValidControls, function (oChildControl) {
|
|
1171
|
+
var bIsEqual = compareToElementProperties(elementProperties, oChildControl);
|
|
1172
|
+
if (bIsEqual) {
|
|
1173
|
+
aChildrenControls.push(oChildControl);
|
|
1174
|
+
}
|
|
1175
|
+
return bIsEqual;
|
|
1176
|
+
});
|
|
1177
|
+
if (aChildrenControls && aChildrenControls.length > 0) {
|
|
1178
|
+
return true;
|
|
1179
|
+
}
|
|
1180
|
+
else {
|
|
1181
|
+
if (!aValidControls)
|
|
1182
|
+
return false;
|
|
1183
|
+
for (let index = 0; index < aValidControls.length; index++) {
|
|
1184
|
+
const childControl = aValidControls[index];
|
|
1185
|
+
if (compareToDescendantElementProperties(elementProperties, childControl)) {
|
|
1186
|
+
return true;
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
return false;
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
function compareToChildElementProperties(elementProperties, oControl) {
|
|
1193
|
+
var bPass = true;
|
|
1194
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oControl) {
|
|
1195
|
+
return bPass;
|
|
1196
|
+
}
|
|
1197
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oControl) {
|
|
1198
|
+
return false;
|
|
1199
|
+
}
|
|
1200
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oControl) {
|
|
1201
|
+
return bPass;
|
|
1202
|
+
}
|
|
1203
|
+
var aChildrenControls = [];
|
|
1204
|
+
var aAllChildrenNodes = document.getElementById(oControl.getId()).children;
|
|
1205
|
+
aCandidateControls = [];
|
|
1206
|
+
retrieveValidUI5ControlsSubElements(aAllChildrenNodes);
|
|
1207
|
+
var aValidControls = aCandidateControls;
|
|
1208
|
+
if ((elementProperties || !isEmptyObject(elementProperties))
|
|
1209
|
+
&& (!aValidControls || aValidControls.length === 0)) {
|
|
1210
|
+
return false;
|
|
1211
|
+
}
|
|
1212
|
+
else if ((!elementProperties || isEmptyObject(elementProperties))
|
|
1213
|
+
&& (aValidControls && aValidControls.length > 0)) {
|
|
1214
|
+
return bPass;
|
|
1215
|
+
}
|
|
1216
|
+
else if ((!elementProperties || isEmptyObject(elementProperties))
|
|
1217
|
+
&& (!aValidControls || aValidControls.length === 0)) {
|
|
1218
|
+
return bPass;
|
|
1219
|
+
}
|
|
1220
|
+
Array.prototype.filter.call(aValidControls, function (oChildControl) {
|
|
1221
|
+
var bIsEqual = compareToElementProperties(elementProperties, oChildControl);
|
|
1222
|
+
if (bIsEqual) {
|
|
1223
|
+
aChildrenControls.push(oChildControl);
|
|
1224
|
+
}
|
|
1225
|
+
return bIsEqual;
|
|
1226
|
+
});
|
|
1227
|
+
if (aChildrenControls && aChildrenControls.length > 0) {
|
|
1228
|
+
/*console.log("Child Property Control Type -->"
|
|
1229
|
+
+ aChildrenControls[0].getMetadata().getName()
|
|
1230
|
+
+ ", Id-->" + aChildrenControls[0].getId());*/
|
|
1231
|
+
}
|
|
1232
|
+
return aChildrenControls && aChildrenControls.length > 0;
|
|
1233
|
+
}
|
|
1234
|
+
function compareToSiblingElementProperties(elementProperties, oControl, oParentControl) {
|
|
1235
|
+
var bPass = true;
|
|
1236
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oParentControl) {
|
|
1237
|
+
return bPass;
|
|
1238
|
+
}
|
|
1239
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oParentControl) {
|
|
1240
|
+
return false;
|
|
1241
|
+
}
|
|
1242
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oParentControl) {
|
|
1243
|
+
return bPass;
|
|
1244
|
+
}
|
|
1245
|
+
var aSiblingControls = findSiblingControls(oControl, oParentControl);
|
|
1246
|
+
if ((elementProperties || !isEmptyObject(elementProperties))
|
|
1247
|
+
&& (!aSiblingControls || aSiblingControls.length === 0)) {
|
|
1248
|
+
return false;
|
|
1249
|
+
}
|
|
1250
|
+
else if ((!elementProperties || isEmptyObject(elementProperties))
|
|
1251
|
+
&& (aSiblingControls && aSiblingControls.length > 0)) {
|
|
1252
|
+
return bPass;
|
|
1253
|
+
}
|
|
1254
|
+
else if ((!elementProperties || isEmptyObject(elementProperties))
|
|
1255
|
+
&& (!aSiblingControls || aSiblingControls.length === 0)) {
|
|
1256
|
+
return bPass;
|
|
1257
|
+
}
|
|
1258
|
+
for (var i = 0; i < aValidControls.length; i++) {
|
|
1259
|
+
var bIsEqual = compareToElementProperties(elementProperties, aValidControls[i]);
|
|
1260
|
+
if (bIsEqual) {
|
|
1261
|
+
return bPass;
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
return false;
|
|
1265
|
+
}
|
|
1266
|
+
function getValidParentControl(oControl) {
|
|
1267
|
+
if (!oControl || !oControl.getId || !oControl.getId())
|
|
1268
|
+
return null;
|
|
1269
|
+
var oParentControl = null;
|
|
1270
|
+
var domElem = document.getElementById(oControl.getId());
|
|
1271
|
+
if (!domElem)
|
|
1272
|
+
return null;
|
|
1273
|
+
var domParent = domElem.parentElement;
|
|
1274
|
+
for (;;) {
|
|
1275
|
+
if (!domParent)
|
|
1276
|
+
return null;
|
|
1277
|
+
var nodeId = domParent.getAttribute("id");
|
|
1278
|
+
if (nodeId) {
|
|
1279
|
+
// eslint-disable-next-line no-undef
|
|
1280
|
+
oParentControl = sap.ui.getCore().byId(nodeId);
|
|
1281
|
+
if (oParentControl) {
|
|
1282
|
+
/*console.log("Candidate Parent Property Control Type -->"
|
|
1283
|
+
+ oParentControl.getMetadata().getName()
|
|
1284
|
+
+ ", Id-->" + oParentControl.getId());*/
|
|
1285
|
+
return oParentControl;
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
domParent = domParent.parentElement;
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
function filterByIndex(aControls) {
|
|
1292
|
+
if ((index !== null && index !== undefined)
|
|
1293
|
+
&& aControls && aControls.length > 0) {
|
|
1294
|
+
if (typeof index === "object" && index.nodeType) {
|
|
1295
|
+
return aControls;
|
|
1296
|
+
}
|
|
1297
|
+
else if ((index <= (aControls.length - 1)) && (index >= 0)) {
|
|
1298
|
+
return [aControls[index]];
|
|
1299
|
+
}
|
|
1300
|
+
else {
|
|
1301
|
+
return [];
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1304
|
+
return aControls;
|
|
1305
|
+
}
|
|
1306
|
+
function compareToAncestorProperties(elementProperties, oControl) {
|
|
1307
|
+
if ((!elementProperties || isEmptyObject(elementProperties)) && oControl) {
|
|
1308
|
+
return true;
|
|
1309
|
+
}
|
|
1310
|
+
else if ((elementProperties && !isEmptyObject(elementProperties)) && !oControl) {
|
|
1311
|
+
return false;
|
|
1312
|
+
}
|
|
1313
|
+
else if ((!elementProperties || isEmptyObject(elementProperties)) && !oControl) {
|
|
1314
|
+
return true;
|
|
1315
|
+
}
|
|
1316
|
+
var oAncestorControl = oControl;
|
|
1317
|
+
for (;;) {
|
|
1318
|
+
oAncestorControl = getValidParentControl(oAncestorControl);
|
|
1319
|
+
if (!oAncestorControl)
|
|
1320
|
+
return false;
|
|
1321
|
+
if (compareToElementProperties(elementProperties, oAncestorControl)) {
|
|
1322
|
+
return true;
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
// eslint-disable-next-line no-undef
|
|
1327
|
+
if (!sap.ui || !sap.ui.getCore()) {
|
|
1328
|
+
throw new Error("This is not an UI5 App, please use other locators");
|
|
1329
|
+
}
|
|
1330
|
+
var nodes = retrieveNodesFromBody(index, opt_parentElement);
|
|
1331
|
+
if (!nodes || nodes.length === 0) {
|
|
1332
|
+
throw new Error("no node html elements found");
|
|
1333
|
+
}
|
|
1334
|
+
var aCandidateControl = [];
|
|
1335
|
+
var aValidControls = retrieveValidUI5Controls(nodes);
|
|
1336
|
+
if (aValidControls === null || aValidControls === undefined)
|
|
1337
|
+
return aCandidateControl;
|
|
1338
|
+
if (!ui5Selector) {
|
|
1339
|
+
throw new Error(`The selector your provided ${ui5Selector} is undefined/null, please provide a valid selector`);
|
|
1340
|
+
}
|
|
1341
|
+
if (!ui5Selector.elementProperties) {
|
|
1342
|
+
throw new Error(`The selector your provided ${JSON.stringify(ui5Selector)} does not contain elementProperties, please provide a valid selector with elementProperties`);
|
|
1343
|
+
}
|
|
1344
|
+
//console.log("going in...");
|
|
1345
|
+
Array.prototype.filter.call(aValidControls, function (oControl) {
|
|
1346
|
+
var isNotCandidate = !compareToElementProperties(ui5Selector.elementProperties, oControl);
|
|
1347
|
+
if (isNotCandidate)
|
|
1348
|
+
return false;
|
|
1349
|
+
var oParentControl = getValidParentControl(oControl);
|
|
1350
|
+
if (!oParentControl && ui5Selector.parentProperties) {
|
|
1351
|
+
throw new Error("no parent control found");
|
|
1352
|
+
}
|
|
1353
|
+
var isParentNotCandidate = !compareToElementProperties(ui5Selector.parentProperties, oParentControl);
|
|
1354
|
+
if (isParentNotCandidate)
|
|
1355
|
+
return false;
|
|
1356
|
+
var isAncestorNotCandidate = !compareToAncestorProperties(ui5Selector.ancestorProperties, oControl);
|
|
1357
|
+
if (isAncestorNotCandidate)
|
|
1358
|
+
return false;
|
|
1359
|
+
var isSiblingNotCandidate = !compareToSiblingElementProperties(ui5Selector.siblingProperties, oControl, oParentControl);
|
|
1360
|
+
if (isSiblingNotCandidate)
|
|
1361
|
+
return false;
|
|
1362
|
+
var isPrevSiblingNotCandidate = !compareToPrevElementProperties(ui5Selector.prevSiblingProperties, oControl, oParentControl);
|
|
1363
|
+
if (isPrevSiblingNotCandidate)
|
|
1364
|
+
return false;
|
|
1365
|
+
var isNextSiblingNotCandidate = !compareToNextElementProperties(ui5Selector.nextSiblingProperties, oControl, oParentControl);
|
|
1366
|
+
if (isNextSiblingNotCandidate)
|
|
1367
|
+
return false;
|
|
1368
|
+
var isChildNotCandidate = !compareToChildElementProperties(ui5Selector.childProperties, oControl);
|
|
1369
|
+
if (isChildNotCandidate)
|
|
1370
|
+
return false;
|
|
1371
|
+
var isDescendantNotCandidate = !compareToDescendantElementProperties(ui5Selector.descendantProperties, oControl);
|
|
1372
|
+
if (isDescendantNotCandidate)
|
|
1373
|
+
return false;
|
|
1374
|
+
if (oControl !== null && oControl !== undefined) {
|
|
1375
|
+
aCandidateControl.push(oControl);
|
|
1376
|
+
}
|
|
1377
|
+
return oControl !== null && oControl !== undefined;
|
|
1378
|
+
});
|
|
1379
|
+
aCandidateControl = filterByIndex(aCandidateControl);
|
|
1380
|
+
//console.log("Candidates found --->" + aCandidateControl.length);
|
|
1381
|
+
return convertToDomElements(aCandidateControl);
|
|
1382
|
+
}
|
|
1383
|
+
};
|
|
1384
|
+
//# sourceMappingURL=qmateLocator.js.map
|