@alfresco/aca-playwright-shared 5.1.1 → 5.2.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/api/tags-api.d.ts +8 -2
- package/esm2022/api/api-client-factory.mjs +131 -0
- package/esm2022/api/categories-api.mjs +66 -0
- package/esm2022/api/favorites-api.mjs +130 -0
- package/esm2022/api/file-actions.mjs +167 -0
- package/esm2022/api/nodes-api.mjs +428 -0
- package/esm2022/api/people-api-models.mjs +41 -0
- package/esm2022/api/queries-api.mjs +70 -0
- package/esm2022/api/rules-api.mjs +258 -0
- package/esm2022/api/search-api.mjs +75 -0
- package/esm2022/api/shared-links-api.mjs +137 -0
- package/esm2022/api/sites-api.mjs +156 -0
- package/esm2022/api/tags-api.mjs +92 -0
- package/esm2022/api/trashcan-api.mjs +52 -0
- package/{esm2020 → esm2022}/models/user-model.mjs +11 -5
- package/esm2022/page-objects/components/aca-header.component.mjs +78 -0
- package/esm2022/page-objects/components/actions-dropdown.component.mjs +100 -0
- package/esm2022/page-objects/components/adf-info-drawer.component.mjs +102 -0
- package/esm2022/page-objects/components/base.component.mjs +70 -0
- package/esm2022/page-objects/components/breadcrumb/breadcrumb.component.mjs +47 -0
- package/esm2022/page-objects/components/conditions.component.mjs +72 -0
- package/esm2022/page-objects/components/dataTable/data-table.component.mjs +343 -0
- package/esm2022/page-objects/components/dataTable/mat-menu.component.mjs +67 -0
- package/{esm2020/page-objects/components/dialogs/manage-versions-dialog.component.mjs → esm2022/page-objects/components/dataTable/toolbar.component.mjs} +13 -8
- package/esm2022/page-objects/components/datetime-picker/datetime-picker.component.mjs +53 -0
- package/esm2022/page-objects/components/dialogs/adf-confirm-dialog.component.mjs +36 -0
- package/esm2022/page-objects/components/dialogs/adf-folder-dialog.component.mjs +57 -0
- package/esm2022/page-objects/components/dialogs/adf-library-dialog.component.mjs +64 -0
- package/esm2022/page-objects/components/dialogs/content-node-selector-dialog.mjs +68 -0
- package/esm2022/page-objects/components/dialogs/create-from-template-dialog-component.mjs +55 -0
- package/esm2022/page-objects/components/dialogs/delete-trash-dialog.component.mjs +54 -0
- package/esm2022/page-objects/components/dialogs/edit-dialog.component.mjs +39 -0
- package/esm2022/page-objects/components/dialogs/link-rules.component.mjs +58 -0
- package/esm2022/page-objects/components/dialogs/manage-versions-dialog.component.mjs +36 -0
- package/esm2022/page-objects/components/dialogs/password-overlay-dialog.component.mjs +71 -0
- package/esm2022/page-objects/components/dialogs/share-dialog.component.mjs +85 -0
- package/esm2022/page-objects/components/dialogs/upload-dialog.component.mjs +36 -0
- package/esm2022/page-objects/components/dialogs/upload-new-version-dialog.component.mjs +38 -0
- package/esm2022/page-objects/components/dialogs/viewer-overlay-dialog.component.mjs +56 -0
- package/esm2022/page-objects/components/error.component.mjs +34 -0
- package/esm2022/page-objects/components/manageRules/manage-rules-dialog.component.mjs +64 -0
- package/esm2022/page-objects/components/manageRules/manage-rules.component.mjs +70 -0
- package/esm2022/page-objects/components/pagination.component.mjs +174 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-categories.component.mjs +33 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-date.component.mjs +115 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-location.component.mjs +40 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-logic.component.mjs +36 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-properties.component.mjs +83 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-tags.component.mjs +40 -0
- package/esm2022/page-objects/components/search/search-filters.component.mjs +45 -0
- package/esm2022/page-objects/components/search/search-input.component.mjs +48 -0
- package/esm2022/page-objects/components/search/search-overlay.components.mjs +83 -0
- package/esm2022/page-objects/components/search/search-sorting-picker.components.mjs +72 -0
- package/esm2022/page-objects/components/sidenav.component.mjs +88 -0
- package/esm2022/page-objects/components/snackBar/snack-bar.component.mjs +54 -0
- package/esm2022/page-objects/components/spinner.component.mjs +41 -0
- package/esm2022/page-objects/components/viewer.component.mjs +110 -0
- package/esm2022/page-objects/pages/base.page.mjs +84 -0
- package/esm2022/page-objects/pages/favorites-libraries.page.mjs +43 -0
- package/esm2022/page-objects/pages/favorites.page.mjs +49 -0
- package/esm2022/page-objects/pages/login.page.mjs +62 -0
- package/esm2022/page-objects/pages/my-libraries.page.mjs +54 -0
- package/esm2022/page-objects/pages/nodes.page.mjs +40 -0
- package/esm2022/page-objects/pages/personal-files.page.mjs +85 -0
- package/esm2022/page-objects/pages/recent-files.page.mjs +45 -0
- package/esm2022/page-objects/pages/search.page.mjs +79 -0
- package/esm2022/page-objects/pages/shared.page.mjs +45 -0
- package/esm2022/page-objects/pages/trash.page.mjs +45 -0
- package/esm2022/page-objects/playwright-base.mjs +33 -0
- package/esm2022/resources/test-files/index.mjs +102 -0
- package/esm2022/utils/logger.mjs +71 -0
- package/esm2022/utils/utils.mjs +145 -0
- package/{fesm2020 → fesm2022}/alfresco-aca-playwright-shared.mjs +816 -675
- package/fesm2022/alfresco-aca-playwright-shared.mjs.map +1 -0
- package/package.json +5 -11
- package/page-objects/components/adf-info-drawer.component.d.ts +18 -0
- package/page-objects/components/viewer.component.d.ts +11 -0
- package/page-objects/pages/search.page.d.ts +1 -1
- package/resources/test-files/index.d.ts +24 -0
- package/utils/utils.d.ts +2 -2
- package/esm2020/api/api-client-factory.mjs +0 -111
- package/esm2020/api/categories-api.mjs +0 -65
- package/esm2020/api/favorites-api.mjs +0 -129
- package/esm2020/api/file-actions.mjs +0 -166
- package/esm2020/api/nodes-api.mjs +0 -427
- package/esm2020/api/people-api-models.mjs +0 -34
- package/esm2020/api/queries-api.mjs +0 -69
- package/esm2020/api/rules-api.mjs +0 -251
- package/esm2020/api/search-api.mjs +0 -74
- package/esm2020/api/shared-links-api.mjs +0 -136
- package/esm2020/api/sites-api.mjs +0 -155
- package/esm2020/api/tags-api.mjs +0 -61
- package/esm2020/api/trashcan-api.mjs +0 -54
- package/esm2020/page-objects/components/aca-header.component.mjs +0 -77
- package/esm2020/page-objects/components/actions-dropdown.component.mjs +0 -99
- package/esm2020/page-objects/components/adf-info-drawer.component.mjs +0 -83
- package/esm2020/page-objects/components/base.component.mjs +0 -69
- package/esm2020/page-objects/components/breadcrumb/breadcrumb.component.mjs +0 -46
- package/esm2020/page-objects/components/conditions.component.mjs +0 -75
- package/esm2020/page-objects/components/dataTable/data-table.component.mjs +0 -341
- package/esm2020/page-objects/components/dataTable/mat-menu.component.mjs +0 -66
- package/esm2020/page-objects/components/dataTable/toolbar.component.mjs +0 -39
- package/esm2020/page-objects/components/datetime-picker/datetime-picker.component.mjs +0 -52
- package/esm2020/page-objects/components/dialogs/adf-confirm-dialog.component.mjs +0 -35
- package/esm2020/page-objects/components/dialogs/adf-folder-dialog.component.mjs +0 -56
- package/esm2020/page-objects/components/dialogs/adf-library-dialog.component.mjs +0 -63
- package/esm2020/page-objects/components/dialogs/content-node-selector-dialog.mjs +0 -67
- package/esm2020/page-objects/components/dialogs/create-from-template-dialog-component.mjs +0 -54
- package/esm2020/page-objects/components/dialogs/delete-trash-dialog.component.mjs +0 -53
- package/esm2020/page-objects/components/dialogs/edit-dialog.component.mjs +0 -38
- package/esm2020/page-objects/components/dialogs/link-rules.component.mjs +0 -57
- package/esm2020/page-objects/components/dialogs/password-overlay-dialog.component.mjs +0 -70
- package/esm2020/page-objects/components/dialogs/share-dialog.component.mjs +0 -84
- package/esm2020/page-objects/components/dialogs/upload-dialog.component.mjs +0 -35
- package/esm2020/page-objects/components/dialogs/upload-new-version-dialog.component.mjs +0 -37
- package/esm2020/page-objects/components/dialogs/viewer-overlay-dialog.component.mjs +0 -55
- package/esm2020/page-objects/components/error.component.mjs +0 -33
- package/esm2020/page-objects/components/manageRules/manage-rules-dialog.component.mjs +0 -63
- package/esm2020/page-objects/components/manageRules/manage-rules.component.mjs +0 -69
- package/esm2020/page-objects/components/pagination.component.mjs +0 -173
- package/esm2020/page-objects/components/search/search-filters/search-filters-categories.component.mjs +0 -32
- package/esm2020/page-objects/components/search/search-filters/search-filters-date.component.mjs +0 -114
- package/esm2020/page-objects/components/search/search-filters/search-filters-location.component.mjs +0 -39
- package/esm2020/page-objects/components/search/search-filters/search-filters-logic.component.mjs +0 -35
- package/esm2020/page-objects/components/search/search-filters/search-filters-properties.component.mjs +0 -82
- package/esm2020/page-objects/components/search/search-filters/search-filters-tags.component.mjs +0 -39
- package/esm2020/page-objects/components/search/search-filters.component.mjs +0 -44
- package/esm2020/page-objects/components/search/search-input.component.mjs +0 -47
- package/esm2020/page-objects/components/search/search-overlay.components.mjs +0 -82
- package/esm2020/page-objects/components/search/search-sorting-picker.components.mjs +0 -71
- package/esm2020/page-objects/components/sidenav.component.mjs +0 -86
- package/esm2020/page-objects/components/snackBar/snack-bar.component.mjs +0 -53
- package/esm2020/page-objects/components/spinner.component.mjs +0 -40
- package/esm2020/page-objects/components/viewer.component.mjs +0 -92
- package/esm2020/page-objects/pages/base.page.mjs +0 -80
- package/esm2020/page-objects/pages/favorites-libraries.page.mjs +0 -42
- package/esm2020/page-objects/pages/favorites.page.mjs +0 -48
- package/esm2020/page-objects/pages/login.page.mjs +0 -61
- package/esm2020/page-objects/pages/my-libraries.page.mjs +0 -53
- package/esm2020/page-objects/pages/nodes.page.mjs +0 -39
- package/esm2020/page-objects/pages/personal-files.page.mjs +0 -84
- package/esm2020/page-objects/pages/recent-files.page.mjs +0 -44
- package/esm2020/page-objects/pages/search.page.mjs +0 -78
- package/esm2020/page-objects/pages/shared.page.mjs +0 -44
- package/esm2020/page-objects/pages/trash.page.mjs +0 -44
- package/esm2020/page-objects/playwright-base.mjs +0 -31
- package/esm2020/resources/test-files/index.mjs +0 -78
- package/esm2020/utils/logger.mjs +0 -69
- package/esm2020/utils/utils.mjs +0 -144
- package/fesm2015/alfresco-aca-playwright-shared.mjs +0 -6267
- package/fesm2015/alfresco-aca-playwright-shared.mjs.map +0 -1
- package/fesm2020/alfresco-aca-playwright-shared.mjs.map +0 -1
- /package/{esm2020 → esm2022}/alfresco-aca-playwright-shared.mjs +0 -0
- /package/{esm2020 → esm2022}/api/index.mjs +0 -0
- /package/{esm2020 → esm2022}/api/node-content-tree.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/global-variables.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/global.setup.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/index.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/playwright.config.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/report-portal.config.mjs +0 -0
- /package/{esm2020 → esm2022}/fixtures/index.mjs +0 -0
- /package/{esm2020 → esm2022}/fixtures/page-initialization.mjs +0 -0
- /package/{esm2020 → esm2022}/models/custom-config.mjs +0 -0
- /package/{esm2020 → esm2022}/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/components/dataTable/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/components/dialogs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/components/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/components/manageRules/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/pages/index.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/resources/index.mjs +0 -0
- /package/{esm2020 → esm2022}/resources/test-data/index.mjs +0 -0
- /package/{esm2020 → esm2022}/resources/test-data/test-data-files-folders.mjs +0 -0
- /package/{esm2020 → esm2022}/resources/test-data/test-data-permissions.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/api.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/config.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/error-strings.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/exclude-tests.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/library-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/paths.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/state-helper.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/timeouts.mjs +0 -0
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Alfresco Example Content Application
|
|
5
|
-
*
|
|
6
|
-
* This file is part of the Alfresco Example Content Application.
|
|
7
|
-
* If the software was purchased under a paid Alfresco license, the terms of
|
|
8
|
-
* the paid license agreement will prevail. Otherwise, the software is
|
|
9
|
-
* provided under the following open source license terms:
|
|
10
|
-
*
|
|
11
|
-
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
|
12
|
-
* it under the terms of the GNU Lesser General Public License as published by
|
|
13
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
14
|
-
* (at your option) any later version.
|
|
15
|
-
*
|
|
16
|
-
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
|
17
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
-
* GNU Lesser General Public License for more details.
|
|
20
|
-
*
|
|
21
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
22
|
-
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
-
*/
|
|
24
|
-
import { PlaywrightBase } from '../playwright-base';
|
|
25
|
-
import { timeouts } from '../../utils';
|
|
26
|
-
export class BaseComponent extends PlaywrightBase {
|
|
27
|
-
constructor(page, rootElement) {
|
|
28
|
-
super(page);
|
|
29
|
-
this.overlayElement = this.page.locator('.cdk-overlay-backdrop-showing');
|
|
30
|
-
this.progressBar = this.page.locator('mat-progress-bar');
|
|
31
|
-
this.rootElement = rootElement;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Method which should be used across the repository, while creating
|
|
35
|
-
* reference to elements, which are in root element of component.
|
|
36
|
-
*
|
|
37
|
-
* @param cssLocator css selector as String. Need to be in the tree under the root element
|
|
38
|
-
* @param options if you want to localize it by text, then provide an optional hasText
|
|
39
|
-
* @returns Locator object
|
|
40
|
-
*/
|
|
41
|
-
getChild(cssLocator, options) {
|
|
42
|
-
return this.page.locator(`${this.rootElement} ${cssLocator}`, options);
|
|
43
|
-
}
|
|
44
|
-
async closeAdditionalOverlayElementIfVisible() {
|
|
45
|
-
if (await this.overlayElement.isVisible()) {
|
|
46
|
-
await this.page.keyboard.press('Escape');
|
|
47
|
-
await this.overlayElement.waitFor({ state: 'detached', timeout: timeouts.medium });
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
async spinnerWaitForReload() {
|
|
51
|
-
try {
|
|
52
|
-
await this.page.locator('mat-progress-spinner').waitFor({ state: 'attached', timeout: timeouts.medium });
|
|
53
|
-
await this.page.locator('mat-progress-spinner').waitFor({ state: 'detached', timeout: timeouts.normal });
|
|
54
|
-
}
|
|
55
|
-
catch (e) {
|
|
56
|
-
this.logger.info('Spinner was not present');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async progressBarWaitForReload() {
|
|
60
|
-
try {
|
|
61
|
-
await this.progressBar.waitFor({ state: 'visible', timeout: timeouts.medium });
|
|
62
|
-
await this.progressBar.waitFor({ state: 'hidden', timeout: timeouts.normal });
|
|
63
|
-
}
|
|
64
|
-
catch (e) {
|
|
65
|
-
this.logger.info('Progress bar was not present');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtcGxheXdyaWdodC1zaGFyZWQvc3JjL3BhZ2Utb2JqZWN0cy9jb21wb25lbnRzL2Jhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBR0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxPQUFnQixhQUFjLFNBQVEsY0FBYztJQUt4RCxZQUFzQixJQUFVLEVBQUUsV0FBbUI7UUFDbkQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBSk4sbUJBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3BFLGdCQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUkxRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFFBQVEsQ0FBQyxVQUFrQixFQUFFLE9BQXNEO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLFVBQVUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLLENBQUMsc0NBQXNDO1FBQzFDLElBQUksTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUNwRjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CO1FBQ3hCLElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDekcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQzFHO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyx3QkFBd0I7UUFDNUIsSUFBSTtZQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMvRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDL0U7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgTG9jYXRvciwgUGFnZSB9IGZyb20gJ0BwbGF5d3JpZ2h0L3Rlc3QnO1xuaW1wb3J0IHsgUGxheXdyaWdodEJhc2UgfSBmcm9tICcuLi9wbGF5d3JpZ2h0LWJhc2UnO1xuaW1wb3J0IHsgdGltZW91dHMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGV4dGVuZHMgUGxheXdyaWdodEJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvb3RFbGVtZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgb3ZlcmxheUVsZW1lbnQgPSB0aGlzLnBhZ2UubG9jYXRvcignLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcnKTtcbiAgcHJpdmF0ZSBwcm9ncmVzc0JhciA9IHRoaXMucGFnZS5sb2NhdG9yKCdtYXQtcHJvZ3Jlc3MtYmFyJyk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHBhZ2U6IFBhZ2UsIHJvb3RFbGVtZW50OiBzdHJpbmcpIHtcbiAgICBzdXBlcihwYWdlKTtcbiAgICB0aGlzLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHdoaWNoIHNob3VsZCBiZSB1c2VkIGFjcm9zcyB0aGUgcmVwb3NpdG9yeSwgd2hpbGUgY3JlYXRpbmdcbiAgICogcmVmZXJlbmNlIHRvIGVsZW1lbnRzLCB3aGljaCBhcmUgaW4gcm9vdCBlbGVtZW50IG9mIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGNzc0xvY2F0b3IgY3NzIHNlbGVjdG9yIGFzIFN0cmluZy4gTmVlZCB0byBiZSBpbiB0aGUgdHJlZSB1bmRlciB0aGUgcm9vdCBlbGVtZW50XG4gICAqIEBwYXJhbSBvcHRpb25zIGlmIHlvdSB3YW50IHRvIGxvY2FsaXplIGl0IGJ5IHRleHQsIHRoZW4gcHJvdmlkZSBhbiBvcHRpb25hbCBoYXNUZXh0XG4gICAqIEByZXR1cm5zIExvY2F0b3Igb2JqZWN0XG4gICAqL1xuICBnZXRDaGlsZChjc3NMb2NhdG9yOiBzdHJpbmcsIG9wdGlvbnM/OiB7IGhhc1RleHQ/OiBzdHJpbmcgfCBSZWdFeHA7IGhhcz86IExvY2F0b3IgfSk6IExvY2F0b3Ige1xuICAgIHJldHVybiB0aGlzLnBhZ2UubG9jYXRvcihgJHt0aGlzLnJvb3RFbGVtZW50fSAke2Nzc0xvY2F0b3J9YCwgb3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjbG9zZUFkZGl0aW9uYWxPdmVybGF5RWxlbWVudElmVmlzaWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoYXdhaXQgdGhpcy5vdmVybGF5RWxlbWVudC5pc1Zpc2libGUoKSkge1xuICAgICAgYXdhaXQgdGhpcy5wYWdlLmtleWJvYXJkLnByZXNzKCdFc2NhcGUnKTtcbiAgICAgIGF3YWl0IHRoaXMub3ZlcmxheUVsZW1lbnQud2FpdEZvcih7IHN0YXRlOiAnZGV0YWNoZWQnLCB0aW1lb3V0OiB0aW1lb3V0cy5tZWRpdW0gfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3Bpbm5lcldhaXRGb3JSZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGFnZS5sb2NhdG9yKCdtYXQtcHJvZ3Jlc3Mtc3Bpbm5lcicpLndhaXRGb3IoeyBzdGF0ZTogJ2F0dGFjaGVkJywgdGltZW91dDogdGltZW91dHMubWVkaXVtIH0pO1xuICAgICAgYXdhaXQgdGhpcy5wYWdlLmxvY2F0b3IoJ21hdC1wcm9ncmVzcy1zcGlubmVyJykud2FpdEZvcih7IHN0YXRlOiAnZGV0YWNoZWQnLCB0aW1lb3V0OiB0aW1lb3V0cy5ub3JtYWwgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbygnU3Bpbm5lciB3YXMgbm90IHByZXNlbnQnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwcm9ncmVzc0JhcldhaXRGb3JSZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvZ3Jlc3NCYXIud2FpdEZvcih7IHN0YXRlOiAndmlzaWJsZScsIHRpbWVvdXQ6IHRpbWVvdXRzLm1lZGl1bSB9KTtcbiAgICAgIGF3YWl0IHRoaXMucHJvZ3Jlc3NCYXIud2FpdEZvcih7IHN0YXRlOiAnaGlkZGVuJywgdGltZW91dDogdGltZW91dHMubm9ybWFsIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ1Byb2dyZXNzIGJhciB3YXMgbm90IHByZXNlbnQnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Alfresco Example Content Application
|
|
5
|
-
*
|
|
6
|
-
* This file is part of the Alfresco Example Content Application.
|
|
7
|
-
* If the software was purchased under a paid Alfresco license, the terms of
|
|
8
|
-
* the paid license agreement will prevail. Otherwise, the software is
|
|
9
|
-
* provided under the following open source license terms:
|
|
10
|
-
*
|
|
11
|
-
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
|
12
|
-
* it under the terms of the GNU Lesser General Public License as published by
|
|
13
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
14
|
-
* (at your option) any later version.
|
|
15
|
-
*
|
|
16
|
-
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
|
17
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
-
* GNU Lesser General Public License for more details.
|
|
20
|
-
*
|
|
21
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
22
|
-
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
-
*/
|
|
24
|
-
import { BaseComponent } from '.././base.component';
|
|
25
|
-
export class Breadcrumb extends BaseComponent {
|
|
26
|
-
constructor(page) {
|
|
27
|
-
super(page, Breadcrumb.rootElement);
|
|
28
|
-
this.items = this.getChild('.adf-breadcrumb-item');
|
|
29
|
-
this.currentItem = this.getChild('.adf-breadcrumb-item-current');
|
|
30
|
-
this.getItemByTitle = (name) => this.getChild(`.adf-breadcrumb-item[title=${name}]`);
|
|
31
|
-
}
|
|
32
|
-
async getAllItems() {
|
|
33
|
-
const itemElements = await this.page.$$('adf-breadcrumb .adf-breadcrumb-item');
|
|
34
|
-
const itemTexts = await Promise.all(itemElements.map(async (elem) => {
|
|
35
|
-
const text = await elem.innerText();
|
|
36
|
-
return text.split('\nchevron_right')[0];
|
|
37
|
-
}));
|
|
38
|
-
return itemTexts;
|
|
39
|
-
}
|
|
40
|
-
async clickItem(name) {
|
|
41
|
-
const elem = this.getChild(`.adf-breadcrumb-item[title=${name}]`);
|
|
42
|
-
await elem.click();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
Breadcrumb.rootElement = 'adf-breadcrumb';
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtcGxheXdyaWdodC1zaGFyZWQvc3JjL3BhZ2Utb2JqZWN0cy9jb21wb25lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsTUFBTSxPQUFPLFVBQVcsU0FBUSxhQUFhO0lBTTNDLFlBQVksSUFBVTtRQUNwQixLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUwvQixVQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzlDLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ25FLG1CQUFjLEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsOEJBQThCLElBQUksR0FBRyxDQUFDLENBQUM7SUFJakcsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDakMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVk7UUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNsRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDOztBQXZCYyxzQkFBVyxHQUFHLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI0IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uL2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2F0b3IsIFBhZ2UgfSBmcm9tICdAcGxheXdyaWdodC90ZXN0JztcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1iIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgc3RhdGljIHJvb3RFbGVtZW50ID0gJ2FkZi1icmVhZGNydW1iJztcbiAgcHVibGljIGl0ZW1zID0gdGhpcy5nZXRDaGlsZCgnLmFkZi1icmVhZGNydW1iLWl0ZW0nKTtcbiAgcHVibGljIGN1cnJlbnRJdGVtID0gdGhpcy5nZXRDaGlsZCgnLmFkZi1icmVhZGNydW1iLWl0ZW0tY3VycmVudCcpO1xuICBnZXRJdGVtQnlUaXRsZSA9IChuYW1lOiBzdHJpbmcpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Q2hpbGQoYC5hZGYtYnJlYWRjcnVtYi1pdGVtW3RpdGxlPSR7bmFtZX1dYCk7XG5cbiAgY29uc3RydWN0b3IocGFnZTogUGFnZSkge1xuICAgIHN1cGVyKHBhZ2UsIEJyZWFkY3J1bWIucm9vdEVsZW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWxsSXRlbXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGl0ZW1FbGVtZW50cyA9IGF3YWl0IHRoaXMucGFnZS4kJCgnYWRmLWJyZWFkY3J1bWIgLmFkZi1icmVhZGNydW1iLWl0ZW0nKTtcbiAgICBjb25zdCBpdGVtVGV4dHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGl0ZW1FbGVtZW50cy5tYXAoYXN5bmMgKGVsZW0pID0+IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGVsZW0uaW5uZXJUZXh0KCk7XG4gICAgICAgIHJldHVybiB0ZXh0LnNwbGl0KCdcXG5jaGV2cm9uX3JpZ2h0JylbMF07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIGl0ZW1UZXh0cztcbiAgfVxuXG4gIGFzeW5jIGNsaWNrSXRlbShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbGVtID0gdGhpcy5nZXRDaGlsZChgLmFkZi1icmVhZGNydW1iLWl0ZW1bdGl0bGU9JHtuYW1lfV1gKTtcbiAgICBhd2FpdCBlbGVtLmNsaWNrKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Alfresco Example Content Application
|
|
5
|
-
*
|
|
6
|
-
* This file is part of the Alfresco Example Content Application.
|
|
7
|
-
* If the software was purchased under a paid Alfresco license, the terms of
|
|
8
|
-
* the paid license agreement will prevail. Otherwise, the software is
|
|
9
|
-
* provided under the following open source license terms:
|
|
10
|
-
*
|
|
11
|
-
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
|
12
|
-
* it under the terms of the GNU Lesser General Public License as published by
|
|
13
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
14
|
-
* (at your option) any later version.
|
|
15
|
-
*
|
|
16
|
-
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
|
17
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
-
* GNU Lesser General Public License for more details.
|
|
20
|
-
*
|
|
21
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
22
|
-
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
-
*/
|
|
24
|
-
import { ManageRulesDialogComponent } from './manageRules/manage-rules-dialog.component';
|
|
25
|
-
export var Field;
|
|
26
|
-
(function (Field) {
|
|
27
|
-
Field["Name"] = "Name";
|
|
28
|
-
Field["Size"] = "Size";
|
|
29
|
-
Field["Mimetype"] = "Mimetype";
|
|
30
|
-
Field["Encoding"] = "Encoding";
|
|
31
|
-
Field["HasCategory"] = "Has category";
|
|
32
|
-
Field["HasTag"] = "Has tag";
|
|
33
|
-
Field["HasAspect"] = "Has aspect";
|
|
34
|
-
})(Field || (Field = {}));
|
|
35
|
-
export var Comparator;
|
|
36
|
-
(function (Comparator) {
|
|
37
|
-
Comparator["Equals"] = "(=) Equals";
|
|
38
|
-
Comparator["Contains"] = "Contains";
|
|
39
|
-
Comparator["StartsWith"] = "Starts with";
|
|
40
|
-
Comparator["EndsWith"] = "Ends with";
|
|
41
|
-
})(Comparator || (Comparator = {}));
|
|
42
|
-
export class ConditionComponent extends ManageRulesDialogComponent {
|
|
43
|
-
constructor() {
|
|
44
|
-
super(...arguments);
|
|
45
|
-
this.getOptionLocator = (optionName) => this.page.locator(`.cdk-overlay-pane .mat-mdc-option span`, { hasText: optionName });
|
|
46
|
-
}
|
|
47
|
-
async selectField(fields, index) {
|
|
48
|
-
await this.fieldDropDown.nth(index).click();
|
|
49
|
-
const option = this.getOptionLocator(fields);
|
|
50
|
-
await option.click();
|
|
51
|
-
}
|
|
52
|
-
async selectComparator(comparators, index) {
|
|
53
|
-
await this.comparatorDropDown.nth(index).click();
|
|
54
|
-
const option = this.getOptionLocator(comparators);
|
|
55
|
-
await option.click();
|
|
56
|
-
}
|
|
57
|
-
async addCondition(fields, value, index, comparators) {
|
|
58
|
-
await this.addConditionButton.first().click();
|
|
59
|
-
await this.selectField(fields, index);
|
|
60
|
-
if (comparators) {
|
|
61
|
-
await this.selectComparator(comparators, index);
|
|
62
|
-
}
|
|
63
|
-
await this.valueField.nth(index).fill(value);
|
|
64
|
-
}
|
|
65
|
-
async addConditionGroup(fields, value, index, comparators) {
|
|
66
|
-
await this.addConditionGroupButton.last().click();
|
|
67
|
-
await this.addConditionButton.nth(index).click();
|
|
68
|
-
await this.selectField(fields, index);
|
|
69
|
-
if (comparators) {
|
|
70
|
-
await this.selectComparator(comparators, index);
|
|
71
|
-
}
|
|
72
|
-
await this.valueField.nth(index).fill(value);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtcGxheXdyaWdodC1zaGFyZWQvc3JjL3BhZ2Utb2JqZWN0cy9jb21wb25lbnRzL2NvbmRpdGlvbnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBR0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFekYsTUFBTSxDQUFOLElBQVksS0FRWDtBQVJELFdBQVksS0FBSztJQUNmLHNCQUFhLENBQUE7SUFDYixzQkFBYSxDQUFBO0lBQ2IsOEJBQXFCLENBQUE7SUFDckIsOEJBQXFCLENBQUE7SUFDckIscUNBQTRCLENBQUE7SUFDNUIsMkJBQWtCLENBQUE7SUFDbEIsaUNBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQVJXLEtBQUssS0FBTCxLQUFLLFFBUWhCO0FBRUQsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQixtQ0FBcUIsQ0FBQTtJQUNyQixtQ0FBcUIsQ0FBQTtJQUNyQix3Q0FBMEIsQ0FBQTtJQUMxQixvQ0FBc0IsQ0FBQTtBQUN4QixDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckI7QUFFRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsMEJBQTBCO0lBQWxFOztRQUNVLHFCQUFnQixHQUFHLENBQUMsVUFBa0IsRUFBVyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsd0NBQXdDLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQWdDbkosQ0FBQztJQTlCUyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQXNCLEVBQUUsS0FBYTtRQUM3RCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFdBQWdDLEVBQUUsS0FBYTtRQUM1RSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQXNCLEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxXQUFpQztRQUN4RyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFzQixFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsV0FBaUM7UUFDN0csTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEQsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakQ7UUFDRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgTG9jYXRvciB9IGZyb20gJ0BwbGF5d3JpZ2h0L3Rlc3QnO1xuaW1wb3J0IHsgTWFuYWdlUnVsZXNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL21hbmFnZVJ1bGVzL21hbmFnZS1ydWxlcy1kaWFsb2cuY29tcG9uZW50JztcblxuZXhwb3J0IGVudW0gRmllbGQge1xuICBOYW1lID0gJ05hbWUnLFxuICBTaXplID0gJ1NpemUnLFxuICBNaW1ldHlwZSA9ICdNaW1ldHlwZScsXG4gIEVuY29kaW5nID0gJ0VuY29kaW5nJyxcbiAgSGFzQ2F0ZWdvcnkgPSAnSGFzIGNhdGVnb3J5JyxcbiAgSGFzVGFnID0gJ0hhcyB0YWcnLFxuICBIYXNBc3BlY3QgPSAnSGFzIGFzcGVjdCdcbn1cblxuZXhwb3J0IGVudW0gQ29tcGFyYXRvciB7XG4gIEVxdWFscyA9ICcoPSkgRXF1YWxzJyxcbiAgQ29udGFpbnMgPSAnQ29udGFpbnMnLFxuICBTdGFydHNXaXRoID0gJ1N0YXJ0cyB3aXRoJyxcbiAgRW5kc1dpdGggPSAnRW5kcyB3aXRoJ1xufVxuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uQ29tcG9uZW50IGV4dGVuZHMgTWFuYWdlUnVsZXNEaWFsb2dDb21wb25lbnQge1xuICBwcml2YXRlIGdldE9wdGlvbkxvY2F0b3IgPSAob3B0aW9uTmFtZTogc3RyaW5nKTogTG9jYXRvciA9PiB0aGlzLnBhZ2UubG9jYXRvcihgLmNkay1vdmVybGF5LXBhbmUgLm1hdC1tZGMtb3B0aW9uIHNwYW5gLCB7IGhhc1RleHQ6IG9wdGlvbk5hbWUgfSk7XG5cbiAgcHJpdmF0ZSBhc3luYyBzZWxlY3RGaWVsZChmaWVsZHM6IFBhcnRpYWw8RmllbGQ+LCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5maWVsZERyb3BEb3duLm50aChpbmRleCkuY2xpY2soKTtcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLmdldE9wdGlvbkxvY2F0b3IoZmllbGRzKTtcbiAgICBhd2FpdCBvcHRpb24uY2xpY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0Q29tcGFyYXRvcihjb21wYXJhdG9yczogUGFydGlhbDxDb21wYXJhdG9yPiwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29tcGFyYXRvckRyb3BEb3duLm50aChpbmRleCkuY2xpY2soKTtcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLmdldE9wdGlvbkxvY2F0b3IoY29tcGFyYXRvcnMpO1xuICAgIGF3YWl0IG9wdGlvbi5jbGljaygpO1xuICB9XG5cbiAgYXN5bmMgYWRkQ29uZGl0aW9uKGZpZWxkczogUGFydGlhbDxGaWVsZD4sIHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGNvbXBhcmF0b3JzPzogUGFydGlhbDxDb21wYXJhdG9yPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuYWRkQ29uZGl0aW9uQnV0dG9uLmZpcnN0KCkuY2xpY2soKTtcbiAgICBhd2FpdCB0aGlzLnNlbGVjdEZpZWxkKGZpZWxkcywgaW5kZXgpO1xuICAgIGlmIChjb21wYXJhdG9ycykge1xuICAgICAgYXdhaXQgdGhpcy5zZWxlY3RDb21wYXJhdG9yKGNvbXBhcmF0b3JzLCBpbmRleCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudmFsdWVGaWVsZC5udGgoaW5kZXgpLmZpbGwodmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgYWRkQ29uZGl0aW9uR3JvdXAoZmllbGRzOiBQYXJ0aWFsPEZpZWxkPiwgdmFsdWU6IHN0cmluZywgaW5kZXg6IG51bWJlciwgY29tcGFyYXRvcnM/OiBQYXJ0aWFsPENvbXBhcmF0b3I+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5hZGRDb25kaXRpb25Hcm91cEJ1dHRvbi5sYXN0KCkuY2xpY2soKTtcbiAgICBhd2FpdCB0aGlzLmFkZENvbmRpdGlvbkJ1dHRvbi5udGgoaW5kZXgpLmNsaWNrKCk7XG4gICAgYXdhaXQgdGhpcy5zZWxlY3RGaWVsZChmaWVsZHMsIGluZGV4KTtcbiAgICBpZiAoY29tcGFyYXRvcnMpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VsZWN0Q29tcGFyYXRvcihjb21wYXJhdG9ycywgaW5kZXgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnZhbHVlRmllbGQubnRoKGluZGV4KS5maWxsKHZhbHVlKTtcbiAgfVxufVxuIl19
|
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Alfresco Example Content Application
|
|
5
|
-
*
|
|
6
|
-
* This file is part of the Alfresco Example Content Application.
|
|
7
|
-
* If the software was purchased under a paid Alfresco license, the terms of
|
|
8
|
-
* the paid license agreement will prevail. Otherwise, the software is
|
|
9
|
-
* provided under the following open source license terms:
|
|
10
|
-
*
|
|
11
|
-
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
|
12
|
-
* it under the terms of the GNU Lesser General Public License as published by
|
|
13
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
14
|
-
* (at your option) any later version.
|
|
15
|
-
*
|
|
16
|
-
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
|
17
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
-
* GNU Lesser General Public License for more details.
|
|
20
|
-
*
|
|
21
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
22
|
-
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
-
*/
|
|
24
|
-
import { BaseComponent } from '../base.component';
|
|
25
|
-
import { MatMenuComponent } from './mat-menu.component';
|
|
26
|
-
import { PaginationActionsType, PaginationComponent } from '../pagination.component';
|
|
27
|
-
import { timeouts } from '../../../utils';
|
|
28
|
-
export class DataTableComponent extends BaseComponent {
|
|
29
|
-
constructor(page, rootElement = DataTableComponent.rootElement) {
|
|
30
|
-
super(page, rootElement);
|
|
31
|
-
this.contextMenuActions = new MatMenuComponent(this.page);
|
|
32
|
-
this.pagination = new PaginationComponent(this.page);
|
|
33
|
-
this.body = this.getChild('.adf-datatable-body');
|
|
34
|
-
this.getEmptyFolderLocator = this.getChild('.adf-empty-folder');
|
|
35
|
-
this.getEmptyContentTitleLocator = this.getChild('adf-empty-content .adf-empty-content__title');
|
|
36
|
-
this.getEmptyContentSubTitleLocator = this.getChild('adf-empty-content .adf-empty-content__subtitle');
|
|
37
|
-
this.getSelectedRow = this.getChild('.adf-datatable-row.adf-is-selected');
|
|
38
|
-
this.sortedColumnHeader = this.getChild(`.adf-datatable__header--sorted-asc .adf-datatable-cell-header-content .adf-datatable-cell-value,
|
|
39
|
-
.adf-datatable__header--sorted-desc .adf-datatable-cell-header-content .adf-datatable-cell-value`);
|
|
40
|
-
this.columnHeaders = this.getChild('.adf-datatable-row .adf-datatable-cell-header .adf-datatable-cell-value');
|
|
41
|
-
this.emptyList = this.getChild('div.adf-no-content-container');
|
|
42
|
-
this.emptyListTitle = this.getChild('.adf-empty-content__title');
|
|
43
|
-
this.emptyListSubtitle = this.getChild('.adf-empty-content__subtitle');
|
|
44
|
-
this.emptySearchText = this.getChild('.empty-search__text');
|
|
45
|
-
this.emptyListTest = this.getChild('adf-custom-empty-content-template');
|
|
46
|
-
this.paginationButton = this.page.locator('.adf-pagination__block button').nth(0);
|
|
47
|
-
this.paginationOptions = this.page.locator('#cdk-overlay-0 button');
|
|
48
|
-
this.sitesVisibility = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Visibility"]');
|
|
49
|
-
this.sitesName = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Name"]');
|
|
50
|
-
this.sitesRole = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="My Role"]');
|
|
51
|
-
this.lockOwner = this.page.locator('.aca-locked-by--name');
|
|
52
|
-
this.uncheckedCheckbox = this.page.locator('.mat-mdc-checkbox');
|
|
53
|
-
this.checkedCheckbox = this.page.locator('.mat-mdc-checkbox-checked');
|
|
54
|
-
this.highlightedText = '.aca-highlight';
|
|
55
|
-
this.searchFileName = '.search-file-name';
|
|
56
|
-
this.searchFileDescription = '[data-automation-id="search-results-entry-description"]';
|
|
57
|
-
this.searchFileContent = '.aca-result-content';
|
|
58
|
-
/** Locator for row (or rows) */
|
|
59
|
-
this.getRowLocator = this.page.getByRole('rowgroup').nth(1).locator('adf-datatable-row');
|
|
60
|
-
/** Locator to get "No results found" message */
|
|
61
|
-
this.getNoResultsFoundMessage = this.getChild('adf-custom-empty-content-template', { hasText: 'No results found' });
|
|
62
|
-
/**
|
|
63
|
-
* Method used in cases where we want to check that some record is visible in the datatable. It will consider whole row
|
|
64
|
-
*
|
|
65
|
-
* @returns reference to cell element which contains text.
|
|
66
|
-
*/
|
|
67
|
-
this.getRowByName = (name) => this.getChild(`adf-datatable-row`, { hasText: name.toString() });
|
|
68
|
-
/**
|
|
69
|
-
* Method used in cases where we want to check that some record is visible in the datatable.
|
|
70
|
-
* But we want to check it by column header title and value of this column.
|
|
71
|
-
*
|
|
72
|
-
* @returns reference to cell element which contains text.
|
|
73
|
-
*/
|
|
74
|
-
this.getRowByColumnTitleAndItsCellValue = (columnTitle, cellValue) => this.page.locator(`//div[contains(@title, '${columnTitle}')]//span[contains(text(), '${cellValue}')]/ancestor::adf-datatable-row`);
|
|
75
|
-
/**
|
|
76
|
-
* Method used in cases where we want to retrieve a row from the datatable based on its numerical order within the array.
|
|
77
|
-
*
|
|
78
|
-
* @returns reference to cell element which contains text.
|
|
79
|
-
*/
|
|
80
|
-
this.getNthRow = (orderNum) => this.getRowLocator.nth(orderNum);
|
|
81
|
-
/**
|
|
82
|
-
* Method used in cases where user have possibility to navigate "inside" the element (it's clickable and has link attribute).
|
|
83
|
-
* Perform action .click() to navigate inside it
|
|
84
|
-
*
|
|
85
|
-
* @returns reference to cell element which contains link.
|
|
86
|
-
*/
|
|
87
|
-
this.getCellLinkByName = (name) => this.getChild('.adf-cell-value span[role="link"]', { hasText: name });
|
|
88
|
-
/**
|
|
89
|
-
* Method used in cases where we want to localize the element by [aria-label]
|
|
90
|
-
*
|
|
91
|
-
* @returns reference to cell element.
|
|
92
|
-
*/
|
|
93
|
-
this.getByAriaLabelTitle = (title) => this.getChild(`[aria-label="${title}"]`);
|
|
94
|
-
/**
|
|
95
|
-
* Method used in cases where we want to get the button (hamburger menu) for row element
|
|
96
|
-
*
|
|
97
|
-
* @returns reference to menu placed in row localized by the name
|
|
98
|
-
*/
|
|
99
|
-
this.getActionsButtonByName = (name) => this.getRowByName(name).locator('mat-icon', { hasText: new RegExp(`^\\s*more_vert\\s*$`, 'g') });
|
|
100
|
-
/**
|
|
101
|
-
* Method used in cases where we want to get the edit button and there is no hamburger menu
|
|
102
|
-
*
|
|
103
|
-
* @returns reference to edit button placed in row localized by the name
|
|
104
|
-
*/
|
|
105
|
-
this.getEditButtonByName = (name) => this.getRowByName(name).locator('button#editButton');
|
|
106
|
-
/**
|
|
107
|
-
* Method used in cases where we want to get the button and there is no hamburger menu
|
|
108
|
-
*
|
|
109
|
-
* @returns reference to button placed in row localized by the name
|
|
110
|
-
*/
|
|
111
|
-
this.getButtonByNameForSpecificRow = (elementTitleInRow, buttonTitle) => this.getRowByName(elementTitleInRow).locator('button', { hasText: buttonTitle });
|
|
112
|
-
/**
|
|
113
|
-
* Method used in cases where you want to get some specific cell (by column name) for row which contains some name/title/etc.
|
|
114
|
-
*
|
|
115
|
-
* @returns reference to cell element
|
|
116
|
-
*/
|
|
117
|
-
this.getCellByColumnNameAndRowItem = (item, columnName) => this.getRowByName(item).locator(`[title="${columnName}"]`);
|
|
118
|
-
/**
|
|
119
|
-
* Method used in cases where we want to get the checkbox for row element
|
|
120
|
-
*
|
|
121
|
-
* @returns reference to checkbox placed in row localized by the name
|
|
122
|
-
*/
|
|
123
|
-
this.getCheckboxForElement = (item) => this.getRowByName(item).locator('.mat-mdc-checkbox');
|
|
124
|
-
this.getColumnHeaderByTitleLocator = (headerTitle) => this.getChild('[role="columnheader"]', { hasText: headerTitle });
|
|
125
|
-
this.getSearchResultLinkByName = (name) => this.getChild('.aca-search-results-row span[role="link"]', { hasText: name });
|
|
126
|
-
this.getColumnValuesByName = (name) => this.getChild(`div[title="${name}"] span`);
|
|
127
|
-
this.getColumnHeaderByName = (headerTitle) => this.getChild('.adf-datatable-row .adf-datatable-cell-header .adf-datatable-cell-value', { hasText: headerTitle });
|
|
128
|
-
}
|
|
129
|
-
async sortBy(label, order) {
|
|
130
|
-
const sortColumn = await this.getSortedColumnHeaderText();
|
|
131
|
-
let sortOrder = await this.getSortingOrder();
|
|
132
|
-
if (sortColumn !== label) {
|
|
133
|
-
await this.getColumnHeaderByName(label).click({ force: true });
|
|
134
|
-
sortOrder = await this.getSortingOrder();
|
|
135
|
-
}
|
|
136
|
-
if (sortOrder !== order) {
|
|
137
|
-
await this.getChild('span[class*="adf-datatable__header--sorted"]').click();
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* This method is used when we want to perform right mouse click on the dataTable row and perform some action
|
|
142
|
-
*
|
|
143
|
-
* @param name of the data table element with which we want to click
|
|
144
|
-
* @param action provide which action you want to perform
|
|
145
|
-
*/
|
|
146
|
-
async performActionFromExpandableMenu(name, action) {
|
|
147
|
-
await this.goThroughPagesLookingForRowWithName(name);
|
|
148
|
-
const actionButtonLocator = await this.getActionLocatorFromExpandableMenu(name, action);
|
|
149
|
-
await actionButtonLocator.click();
|
|
150
|
-
await this.spinnerWaitForReload();
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Click action from the expandable kebab menu for the element in datatable
|
|
154
|
-
*
|
|
155
|
-
* @param name title of the record you would like to proceed
|
|
156
|
-
* @param action provide button title for the action
|
|
157
|
-
* @param subAction if the action is in sub menu, then provide it here
|
|
158
|
-
*/
|
|
159
|
-
async performActionForElement(name, action, subAction) {
|
|
160
|
-
await this.getActionsButtonByName(name).click();
|
|
161
|
-
await this.contextMenuActions.getButtonByText(action).click();
|
|
162
|
-
if (subAction) {
|
|
163
|
-
await this.contextMenuActions.getButtonByText(subAction).click();
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* This method is used when we want to perform double click on the dataTable row to open a file or folder
|
|
168
|
-
*
|
|
169
|
-
* @param name of the data table element with which we want to double click
|
|
170
|
-
*/
|
|
171
|
-
async performClickFolderOrFileToOpen(name) {
|
|
172
|
-
await this.getCellLinkByName(name).click();
|
|
173
|
-
await this.spinnerWaitForReload();
|
|
174
|
-
}
|
|
175
|
-
async isItemPresent(name) {
|
|
176
|
-
await this.goThroughPagesLookingForRowWithName(name);
|
|
177
|
-
return this.getRowByName(name).isVisible();
|
|
178
|
-
}
|
|
179
|
-
async getActionLocatorFromExpandableMenu(name, action) {
|
|
180
|
-
await this.getRowByName(name).click({ button: 'right' });
|
|
181
|
-
return this.contextMenuActions.getButtonByText(action);
|
|
182
|
-
}
|
|
183
|
-
async performActionInExpandableMenu(name, action) {
|
|
184
|
-
await this.getRowByName(name).click({ button: 'right' });
|
|
185
|
-
await this.contextMenuActions.getButtonByText(action).click();
|
|
186
|
-
}
|
|
187
|
-
async goThroughPagesLookingForRowWithName(name) {
|
|
188
|
-
await this.spinnerWaitForReload();
|
|
189
|
-
if (await this.getRowByName(name).isVisible()) {
|
|
190
|
-
return null;
|
|
191
|
-
}
|
|
192
|
-
if (await this.pagination.currentPageLocator.isVisible()) {
|
|
193
|
-
if ((await this.pagination.currentPageLocator.textContent()) === ' of 1 ') {
|
|
194
|
-
return null;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
if (await this.pagination.totalPageLocator.isVisible()) {
|
|
198
|
-
const maxPages = (await this.pagination.totalPageLocator?.textContent())?.match(/\d/)[0];
|
|
199
|
-
for (let page = 1; page <= Number(maxPages); page++) {
|
|
200
|
-
if (await this.getRowByName(name).isVisible()) {
|
|
201
|
-
break;
|
|
202
|
-
}
|
|
203
|
-
if (await this.pagination.getArrowLocatorFor(PaginationActionsType.NextPageSelector).isEnabled()) {
|
|
204
|
-
await this.pagination.getArrowLocatorFor(PaginationActionsType.NextPageSelector).click();
|
|
205
|
-
}
|
|
206
|
-
await this.spinnerWaitForReload();
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
async selectItems(...names) {
|
|
211
|
-
for (const name of names) {
|
|
212
|
-
const isSelected = await this.isRowSelected(name);
|
|
213
|
-
if (!isSelected) {
|
|
214
|
-
const row = this.getRowByName(name);
|
|
215
|
-
await row.hover();
|
|
216
|
-
await row.locator(this.uncheckedCheckbox).click();
|
|
217
|
-
await row.locator(this.checkedCheckbox).waitFor({ state: 'attached' });
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
async isRowSelected(itemName) {
|
|
222
|
-
const row = this.getRowByName(itemName);
|
|
223
|
-
return row.locator(this.checkedCheckbox).isVisible();
|
|
224
|
-
}
|
|
225
|
-
async getColumnHeaders() {
|
|
226
|
-
const columnNameLocator = this.columnHeaders;
|
|
227
|
-
await this.columnHeaders.nth(0).waitFor({ state: 'attached' });
|
|
228
|
-
return columnNameLocator.allTextContents();
|
|
229
|
-
}
|
|
230
|
-
async getSortedColumnHeaderText() {
|
|
231
|
-
return this.sortedColumnHeader.innerText();
|
|
232
|
-
}
|
|
233
|
-
getItemLocationEl(name) {
|
|
234
|
-
return this.getRowByName(name).locator('.aca-location-link');
|
|
235
|
-
}
|
|
236
|
-
async getItemLocationText(name) {
|
|
237
|
-
await this.getItemLocationEl(name).locator('a').waitFor({ state: 'attached' });
|
|
238
|
-
return this.getItemLocationEl(name).innerText();
|
|
239
|
-
}
|
|
240
|
-
async getItemLocationTooltip(name) {
|
|
241
|
-
const location = this.getItemLocationEl(name);
|
|
242
|
-
await location.hover();
|
|
243
|
-
return location.locator('a').getAttribute('title', { timeout: timeouts.normal });
|
|
244
|
-
}
|
|
245
|
-
async clickItemLocation(name) {
|
|
246
|
-
await this.getItemLocationEl(name).click();
|
|
247
|
-
}
|
|
248
|
-
async getSortingOrder() {
|
|
249
|
-
const str = await this.sortedColumnHeader.locator('../..').getAttribute('class');
|
|
250
|
-
if (str.includes('asc')) {
|
|
251
|
-
return 'asc';
|
|
252
|
-
}
|
|
253
|
-
else if (str.includes('desc')) {
|
|
254
|
-
return 'desc';
|
|
255
|
-
}
|
|
256
|
-
return 'none';
|
|
257
|
-
}
|
|
258
|
-
async getRowAllInnerTexts(name) {
|
|
259
|
-
return (await this.getRowByName(name).locator('span').allInnerTexts()).toString();
|
|
260
|
-
}
|
|
261
|
-
async getFirstElementDetail(name) {
|
|
262
|
-
const firstNode = this.getColumnValuesByName(name).first();
|
|
263
|
-
return firstNode.innerText();
|
|
264
|
-
}
|
|
265
|
-
async isEmpty() {
|
|
266
|
-
return this.emptyList.isVisible();
|
|
267
|
-
}
|
|
268
|
-
async getEmptyStateTitle() {
|
|
269
|
-
return (await this.isEmpty()) ? this.emptyListTitle.innerText() : '';
|
|
270
|
-
}
|
|
271
|
-
async getEmptyStateSubtitle() {
|
|
272
|
-
return (await this.isEmpty()) ? this.emptyListSubtitle.innerText() : '';
|
|
273
|
-
}
|
|
274
|
-
async getEmptyListText() {
|
|
275
|
-
return (await this.isEmpty()) ? this.emptyListTest.innerText() : '';
|
|
276
|
-
}
|
|
277
|
-
async getRowsCount() {
|
|
278
|
-
return this.getRowLocator.count();
|
|
279
|
-
}
|
|
280
|
-
async rightClickOnItem(itemName) {
|
|
281
|
-
await this.getCellByColumnNameAndRowItem(itemName, 'Name').click({ button: 'right' });
|
|
282
|
-
}
|
|
283
|
-
async setPaginationTo50() {
|
|
284
|
-
await this.paginationButton.click();
|
|
285
|
-
await this.paginationOptions.getByText('50').click();
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Method used to create objects from names and visibility of sites from datatable
|
|
289
|
-
*
|
|
290
|
-
* @returns an object with sites' names and their corresponding visibility values
|
|
291
|
-
*/
|
|
292
|
-
async getSitesNameAndVisibility() {
|
|
293
|
-
const rowsCount = await this.sitesName.count();
|
|
294
|
-
const sitesInfo = {};
|
|
295
|
-
for (let i = 0; i < rowsCount; i++) {
|
|
296
|
-
let siteVisibilityText = await this.sitesVisibility.nth(i).textContent();
|
|
297
|
-
let siteNameText = await this.sitesName.nth(i).textContent();
|
|
298
|
-
siteVisibilityText = siteVisibilityText.trim().toUpperCase();
|
|
299
|
-
siteNameText = siteNameText.trim();
|
|
300
|
-
sitesInfo[siteNameText] = siteVisibilityText;
|
|
301
|
-
}
|
|
302
|
-
return sitesInfo;
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Method used to create objects from names and roles of sites from datatable
|
|
306
|
-
*
|
|
307
|
-
* @returns an object with sites' names and their corresponding role values
|
|
308
|
-
*/
|
|
309
|
-
async getSitesNameAndRole() {
|
|
310
|
-
const rowsCount = await this.sitesName.count();
|
|
311
|
-
const sitesInfo = {};
|
|
312
|
-
for (let i = 0; i < rowsCount; i++) {
|
|
313
|
-
let siteNameText = await this.sitesName.nth(i).textContent();
|
|
314
|
-
let siteRoleText = await this.sitesRole.nth(i).textContent();
|
|
315
|
-
siteNameText = siteNameText.trim();
|
|
316
|
-
siteRoleText = siteRoleText.trim();
|
|
317
|
-
sitesInfo[siteNameText] = siteRoleText;
|
|
318
|
-
}
|
|
319
|
-
return sitesInfo;
|
|
320
|
-
}
|
|
321
|
-
async hasLockIcon(itemName) {
|
|
322
|
-
const row = this.getRowByName(itemName);
|
|
323
|
-
return row.locator('img[src*="lock"]').isVisible();
|
|
324
|
-
}
|
|
325
|
-
async getLockOwner(itemName) {
|
|
326
|
-
const row = this.getRowByName(itemName);
|
|
327
|
-
return row.locator(this.lockOwner).innerText();
|
|
328
|
-
}
|
|
329
|
-
async hasHighlightedText(location) {
|
|
330
|
-
switch (location) {
|
|
331
|
-
case 'name':
|
|
332
|
-
return this.page.locator(this.searchFileName).locator(this.highlightedText).isVisible();
|
|
333
|
-
case 'description':
|
|
334
|
-
return this.page.locator(this.searchFileDescription).locator(this.highlightedText).isVisible();
|
|
335
|
-
case 'content':
|
|
336
|
-
return this.page.locator(this.searchFileContent).locator(this.highlightedText).isVisible();
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
DataTableComponent.rootElement = 'adf-datatable';
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtcGxheXdyaWdodC1zaGFyZWQvc3JjL3BhZ2Utb2JqZWN0cy9jb21wb25lbnRzL2RhdGFUYWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUdILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGFBQWE7SUFJbkQsWUFBWSxJQUFVLEVBQUUsV0FBVyxHQUFHLGtCQUFrQixDQUFDLFdBQVc7UUFDbEUsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUgzQix1QkFBa0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQU05QyxlQUFVLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsU0FBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM1QywwQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0QsZ0NBQTJCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzNGLG1DQUE4QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUNqRyxtQkFB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MDUtMjAyNCBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBMb2NhdG9yLCBQYWdlIH0gZnJvbSAnQHBsYXl3cmlnaHQvdGVzdCc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vbWF0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRpb25BY3Rpb25zVHlwZSwgUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IHRpbWVvdXRzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgc3RhdGljIHJvb3RFbGVtZW50ID0gJ2FkZi1kYXRhdGFibGUnO1xuICBjb250ZXh0TWVudUFjdGlvbnMgPSBuZXcgTWF0TWVudUNvbXBvbmVudCh0aGlzLnBhZ2UpO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IFBhZ2UsIHJvb3RFbGVtZW50ID0gRGF0YVRhYmxlQ29tcG9uZW50LnJvb3RFbGVtZW50KSB7XG4gICAgc3VwZXIocGFnZSwgcm9vdEVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHBhZ2luYXRpb24gPSBuZXcgUGFnaW5hdGlvbkNvbXBvbmVudCh0aGlzLnBhZ2UpO1xuICBib2R5ID0gdGhpcy5nZXRDaGlsZCgnLmFkZi1kYXRhdGFibGUtYm9keScpO1xuICBnZXRFbXB0eUZvbGRlckxvY2F0b3IgPSB0aGlzLmdldENoaWxkKCcuYWRmLWVtcHR5LWZvbGRlcicpO1xuICBnZXRFbXB0eUNvbnRlbnRUaXRsZUxvY2F0b3IgPSB0aGlzLmdldENoaWxkKCdhZGYtZW1wdHktY29udGVudCAuYWRmLWVtcHR5LWNvbnRlbnRfX3RpdGxlJyk7XG4gIGdldEVtcHR5Q29udGVudFN1YlRpdGxlTG9jYXRvciA9IHRoaXMuZ2V0Q2hpbGQoJ2FkZi1lbXB0eS1jb250ZW50IC5hZGYtZW1wdHktY29udGVudF9fc3VidGl0bGUnKTtcbiAgZ2V0U2VsZWN0ZWRSb3cgPSB0aGlzLmdldENoaWxkKCcuYWRmLWRhdGF0YWJsZS1yb3cuYWRmLWlzLXNlbGVjdGVkJyk7XG4gIHNvcnRlZENvbHVtbkhlYWRlciA9IHRoaXMuZ2V0Q2hpbGQoYC5hZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1hc2MgLmFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItY29udGVudCAuYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRmLWRhdGF0YWJsZV9faGVhZGVyLS1zb3J0ZWQtZGVzYyAuYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1jb250ZW50IC5hZGYtZGF0YXRhYmxlLWNlbGwtdmFsdWVgKTtcbiAgY29sdW1uSGVhZGVycyA9IHRoaXMuZ2V0Q2hpbGQoJy5hZGYtZGF0YXRhYmxlLXJvdyAuYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlciAuYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlJyk7XG4gIGVtcHR5TGlzdCA9IHRoaXMuZ2V0Q2hpbGQoJ2Rpdi5hZGYtbm8tY29udGVudC1jb250YWluZXInKTtcbiAgZW1wdHlMaXN0VGl0bGUgPSB0aGlzLmdldENoaWxkKCcuYWRmLWVtcHR5LWNvbnRlbnRfX3RpdGxlJyk7XG4gIGVtcHR5TGlzdFN1YnRpdGxlID0gdGhpcy5nZXRDaGlsZCgnLmFkZi1lbXB0eS1jb250ZW50X19zdWJ0aXRsZScpO1xuICBlbXB0eVNlYXJjaFRleHQgPSB0aGlzLmdldENoaWxkKCcuZW1wdHktc2VhcmNoX190ZXh0Jyk7XG4gIGVtcHR5TGlzdFRlc3QgPSB0aGlzLmdldENoaWxkKCdhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGUnKTtcbiAgcGFnaW5hdGlvbkJ1dHRvbiA9IHRoaXMucGFnZS5sb2NhdG9yKCcuYWRmLXBhZ2luYXRpb25fX2Jsb2NrIGJ1dHRvbicpLm50aCgwKTtcbiAgcGFnaW5hdGlvbk9wdGlvbnMgPSB0aGlzLnBhZ2UubG9jYXRvcignI2Nkay1vdmVybGF5LTAgYnV0dG9uJyk7XG4gIHNpdGVzVmlzaWJpbGl0eSA9IHRoaXMucGFnZS5sb2NhdG9yKCcuYWRmLWRhdGF0YWJsZS1ib2R5IFtkYXRhLWF1dG9tYXRpb24taWQqPVwiZGF0YXRhYmxlLXJvd1wiXSBbYXJpYS1sYWJlbD1cIlZpc2liaWxpdHlcIl0nKTtcbiAgc2l0ZXNOYW1lID0gdGhpcy5wYWdlLmxvY2F0b3IoJy5hZGYtZGF0YXRhYmxlLWJvZHkgW2RhdGEtYXV0b21hdGlvbi1pZCo9XCJkYXRhdGFibGUtcm93XCJdIFthcmlhLWxhYmVsPVwiTmFtZVwiXScpO1xuICBzaXRlc1JvbGUgPSB0aGlzLnBhZ2UubG9jYXRvcignLmFkZi1kYXRhdGFibGUtYm9keSBbZGF0YS1hdXRvbWF0aW9uLWlkKj1cImRhdGF0YWJsZS1yb3dcIl0gW2FyaWEtbGFiZWw9XCJNeSBSb2xlXCJdJyk7XG4gIGxvY2tPd25lciA9IHRoaXMucGFnZS5sb2NhdG9yKCcuYWNhLWxvY2tlZC1ieS0tbmFtZScpO1xuICB1bmNoZWNrZWRDaGVja2JveCA9IHRoaXMucGFnZS5sb2NhdG9yKCcubWF0LW1kYy1jaGVja2JveCcpO1xuICBjaGVja2VkQ2hlY2tib3ggPSB0aGlzLnBhZ2UubG9jYXRvcignLm1hdC1tZGMtY2hlY2tib3gtY2hlY2tlZCcpO1xuICBoaWdobGlnaHRlZFRleHQgPSAnLmFjYS1oaWdobGlnaHQnO1xuICBzZWFyY2hGaWxlTmFtZSA9ICcuc2VhcmNoLWZpbGUtbmFtZSc7XG4gIHNlYXJjaEZpbGVEZXNjcmlwdGlvbiA9ICdbZGF0YS1hdXRvbWF0aW9uLWlkPVwic2VhcmNoLXJlc3VsdHMtZW50cnktZGVzY3JpcHRpb25cIl0nO1xuICBzZWFyY2hGaWxlQ29udGVudCA9ICcuYWNhLXJlc3VsdC1jb250ZW50JztcblxuICAvKiogTG9jYXRvciBmb3Igcm93IChvciByb3dzKSAqL1xuICBnZXRSb3dMb2NhdG9yID0gdGhpcy5wYWdlLmdldEJ5Um9sZSgncm93Z3JvdXAnKS5udGgoMSkubG9jYXRvcignYWRmLWRhdGF0YWJsZS1yb3cnKTtcblxuICAvKiogTG9jYXRvciB0byBnZXQgXCJObyByZXN1bHRzIGZvdW5kXCIgbWVzc2FnZSAqL1xuICBnZXROb1Jlc3VsdHNGb3VuZE1lc3NhZ2UgPSB0aGlzLmdldENoaWxkKCdhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGUnLCB7IGhhc1RleHQ6ICdObyByZXN1bHRzIGZvdW5kJyB9KTtcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2Ugd2FudCB0byBjaGVjayB0aGF0IHNvbWUgcmVjb3JkIGlzIHZpc2libGUgaW4gdGhlIGRhdGF0YWJsZS4gSXQgd2lsbCBjb25zaWRlciB3aG9sZSByb3dcbiAgICpcbiAgICogQHJldHVybnMgcmVmZXJlbmNlIHRvIGNlbGwgZWxlbWVudCB3aGljaCBjb250YWlucyB0ZXh0LlxuICAgKi9cbiAgZ2V0Um93QnlOYW1lID0gKG5hbWU6IHN0cmluZyB8IG51bWJlcik6IExvY2F0b3IgPT4gdGhpcy5nZXRDaGlsZChgYWRmLWRhdGF0YWJsZS1yb3dgLCB7IGhhc1RleHQ6IG5hbWUudG9TdHJpbmcoKSB9KTtcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2Ugd2FudCB0byBjaGVjayB0aGF0IHNvbWUgcmVjb3JkIGlzIHZpc2libGUgaW4gdGhlIGRhdGF0YWJsZS5cbiAgICogQnV0IHdlIHdhbnQgdG8gY2hlY2sgaXQgYnkgY29sdW1uIGhlYWRlciB0aXRsZSBhbmQgdmFsdWUgb2YgdGhpcyBjb2x1bW4uXG4gICAqXG4gICAqIEByZXR1cm5zIHJlZmVyZW5jZSB0byBjZWxsIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgdGV4dC5cbiAgICovXG4gIGdldFJvd0J5Q29sdW1uVGl0bGVBbmRJdHNDZWxsVmFsdWUgPSAoY29sdW1uVGl0bGU6IHN0cmluZywgY2VsbFZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBMb2NhdG9yID0+XG4gICAgdGhpcy5wYWdlLmxvY2F0b3IoYC8vZGl2W2NvbnRhaW5zKEB0aXRsZSwgJyR7Y29sdW1uVGl0bGV9JyldLy9zcGFuW2NvbnRhaW5zKHRleHQoKSwgJyR7Y2VsbFZhbHVlfScpXS9hbmNlc3Rvcjo6YWRmLWRhdGF0YWJsZS1yb3dgKTtcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2Ugd2FudCB0byByZXRyaWV2ZSBhIHJvdyBmcm9tIHRoZSBkYXRhdGFibGUgYmFzZWQgb24gaXRzIG51bWVyaWNhbCBvcmRlciB3aXRoaW4gdGhlIGFycmF5LlxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gY2VsbCBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHRleHQuXG4gICAqL1xuICBnZXROdGhSb3cgPSAob3JkZXJOdW06IG51bWJlcik6IExvY2F0b3IgPT4gdGhpcy5nZXRSb3dMb2NhdG9yLm50aChvcmRlck51bSk7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1c2VkIGluIGNhc2VzIHdoZXJlIHVzZXIgaGF2ZSBwb3NzaWJpbGl0eSB0byBuYXZpZ2F0ZSBcImluc2lkZVwiIHRoZSBlbGVtZW50IChpdCdzIGNsaWNrYWJsZSBhbmQgaGFzIGxpbmsgYXR0cmlidXRlKS5cbiAgICogUGVyZm9ybSBhY3Rpb24gLmNsaWNrKCkgdG8gbmF2aWdhdGUgaW5zaWRlIGl0XG4gICAqXG4gICAqIEByZXR1cm5zIHJlZmVyZW5jZSB0byBjZWxsIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgbGluay5cbiAgICovXG4gIGdldENlbGxMaW5rQnlOYW1lID0gKG5hbWU6IHN0cmluZyk6IExvY2F0b3IgPT4gdGhpcy5nZXRDaGlsZCgnLmFkZi1jZWxsLXZhbHVlIHNwYW5bcm9sZT1cImxpbmtcIl0nLCB7IGhhc1RleHQ6IG5hbWUgfSk7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1c2VkIGluIGNhc2VzIHdoZXJlIHdlIHdhbnQgdG8gbG9jYWxpemUgdGhlIGVsZW1lbnQgYnkgW2FyaWEtbGFiZWxdXG4gICAqXG4gICAqIEByZXR1cm5zIHJlZmVyZW5jZSB0byBjZWxsIGVsZW1lbnQuXG4gICAqL1xuICBnZXRCeUFyaWFMYWJlbFRpdGxlID0gKHRpdGxlOiBzdHJpbmcpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Q2hpbGQoYFthcmlhLWxhYmVsPVwiJHt0aXRsZX1cIl1gKTtcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2Ugd2FudCB0byBnZXQgdGhlIGJ1dHRvbiAoaGFtYnVyZ2VyIG1lbnUpIGZvciByb3cgZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gbWVudSBwbGFjZWQgaW4gcm93IGxvY2FsaXplZCBieSB0aGUgbmFtZVxuICAgKi9cbiAgZ2V0QWN0aW9uc0J1dHRvbkJ5TmFtZSA9IChuYW1lOiBzdHJpbmcpOiBMb2NhdG9yID0+XG4gICAgdGhpcy5nZXRSb3dCeU5hbWUobmFtZSkubG9jYXRvcignbWF0LWljb24nLCB7IGhhc1RleHQ6IG5ldyBSZWdFeHAoYF5cXFxccyptb3JlX3ZlcnRcXFxccyokYCwgJ2cnKSB9KTtcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2Ugd2FudCB0byBnZXQgdGhlIGVkaXQgYnV0dG9uIGFuZCB0aGVyZSBpcyBubyBoYW1idXJnZXIgbWVudVxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gZWRpdCBidXR0b24gcGxhY2VkIGluIHJvdyBsb2NhbGl6ZWQgYnkgdGhlIG5hbWVcbiAgICovXG4gIGdldEVkaXRCdXR0b25CeU5hbWUgPSAobmFtZTogc3RyaW5nKTogTG9jYXRvciA9PiB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5sb2NhdG9yKCdidXR0b24jZWRpdEJ1dHRvbicpO1xuXG4gIC8qKlxuICAgKiBNZXRob2QgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZSB3YW50IHRvIGdldCB0aGUgYnV0dG9uIGFuZCB0aGVyZSBpcyBubyBoYW1idXJnZXIgbWVudVxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gYnV0dG9uIHBsYWNlZCBpbiByb3cgbG9jYWxpemVkIGJ5IHRoZSBuYW1lXG4gICAqL1xuICBnZXRCdXR0b25CeU5hbWVGb3JTcGVjaWZpY1JvdyA9IChlbGVtZW50VGl0bGVJblJvdzogc3RyaW5nLCBidXR0b25UaXRsZTogc3RyaW5nKTogTG9jYXRvciA9PlxuICAgIHRoaXMuZ2V0Um93QnlOYW1lKGVsZW1lbnRUaXRsZUluUm93KS5sb2NhdG9yKCdidXR0b24nLCB7IGhhc1RleHQ6IGJ1dHRvblRpdGxlIH0pO1xuXG4gIC8qKlxuICAgKiBNZXRob2QgdXNlZCBpbiBjYXNlcyB3aGVyZSB5b3Ugd2FudCB0byBnZXQgc29tZSBzcGVjaWZpYyBjZWxsIChieSBjb2x1bW4gbmFtZSkgZm9yIHJvdyB3aGljaCBjb250YWlucyBzb21lIG5hbWUvdGl0bGUvZXRjLlxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gY2VsbCBlbGVtZW50XG4gICAqL1xuICBnZXRDZWxsQnlDb2x1bW5OYW1lQW5kUm93SXRlbSA9IChpdGVtOiBzdHJpbmcgfCBudW1iZXIsIGNvbHVtbk5hbWU6IHN0cmluZyk6IExvY2F0b3IgPT4gdGhpcy5nZXRSb3dCeU5hbWUoaXRlbSkubG9jYXRvcihgW3RpdGxlPVwiJHtjb2x1bW5OYW1lfVwiXWApO1xuXG4gIC8qKlxuICAgKiBNZXRob2QgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZSB3YW50IHRvIGdldCB0aGUgY2hlY2tib3ggZm9yIHJvdyBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm5zIHJlZmVyZW5jZSB0byBjaGVja2JveCBwbGFjZWQgaW4gcm93IGxvY2FsaXplZCBieSB0aGUgbmFtZVxuICAgKi9cbiAgZ2V0Q2hlY2tib3hGb3JFbGVtZW50ID0gKGl0ZW06IHN0cmluZyk6IExvY2F0b3IgPT4gdGhpcy5nZXRSb3dCeU5hbWUoaXRlbSkubG9jYXRvcignLm1hdC1tZGMtY2hlY2tib3gnKTtcblxuICBnZXRDb2x1bW5IZWFkZXJCeVRpdGxlTG9jYXRvciA9IChoZWFkZXJUaXRsZTogc3RyaW5nKTogTG9jYXRvciA9PiB0aGlzLmdldENoaWxkKCdbcm9sZT1cImNvbHVtbmhlYWRlclwiXScsIHsgaGFzVGV4dDogaGVhZGVyVGl0bGUgfSk7XG5cbiAgZ2V0U2VhcmNoUmVzdWx0TGlua0J5TmFtZSA9IChuYW1lOiBzdHJpbmcpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Q2hpbGQoJy5hY2Etc2VhcmNoLXJlc3VsdHMtcm93IHNwYW5bcm9sZT1cImxpbmtcIl0nLCB7IGhhc1RleHQ6IG5hbWUgfSk7XG5cbiAgZ2V0Q29sdW1uVmFsdWVzQnlOYW1lID0gKG5hbWU6IHN0cmluZyk6IExvY2F0b3IgPT4gdGhpcy5nZXRDaGlsZChgZGl2W3RpdGxlPVwiJHtuYW1lfVwiXSBzcGFuYCk7XG5cbiAgZ2V0Q29sdW1uSGVhZGVyQnlOYW1lID0gKGhlYWRlclRpdGxlOiBzdHJpbmcpOiBMb2NhdG9yID0+XG4gICAgdGhpcy5nZXRDaGlsZCgnLmFkZi1kYXRhdGFibGUtcm93IC5hZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyIC5hZGYtZGF0YXRhYmxlLWNlbGwtdmFsdWUnLCB7IGhhc1RleHQ6IGhlYWRlclRpdGxlIH0pO1xuXG4gIGFzeW5jIHNvcnRCeShsYWJlbDogc3RyaW5nLCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3J0Q29sdW1uID0gYXdhaXQgdGhpcy5nZXRTb3J0ZWRDb2x1bW5IZWFkZXJUZXh0KCk7XG4gICAgbGV0IHNvcnRPcmRlciA9IGF3YWl0IHRoaXMuZ2V0U29ydGluZ09yZGVyKCk7XG4gICAgaWYgKHNvcnRDb2x1bW4gIT09IGxhYmVsKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldENvbHVtbkhlYWRlckJ5TmFtZShsYWJlbCkuY2xpY2soeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIHNvcnRPcmRlciA9IGF3YWl0IHRoaXMuZ2V0U29ydGluZ09yZGVyKCk7XG4gICAgfVxuICAgIGlmIChzb3J0T3JkZXIgIT09IG9yZGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldENoaWxkKCdzcGFuW2NsYXNzKj1cImFkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkXCJdJykuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB3aGVuIHdlIHdhbnQgdG8gcGVyZm9ybSByaWdodCBtb3VzZSBjbGljayBvbiB0aGUgZGF0YVRhYmxlIHJvdyBhbmQgcGVyZm9ybSBzb21lIGFjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBvZiB0aGUgZGF0YSB0YWJsZSBlbGVtZW50IHdpdGggd2hpY2ggd2Ugd2FudCB0byBjbGlja1xuICAgKiBAcGFyYW0gYWN0aW9uIHByb3ZpZGUgd2hpY2ggYWN0aW9uIHlvdSB3YW50IHRvIHBlcmZvcm1cbiAgICovXG4gIGFzeW5jIHBlcmZvcm1BY3Rpb25Gcm9tRXhwYW5kYWJsZU1lbnUobmFtZTogc3RyaW5nIHwgbnVtYmVyLCBhY3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZ29UaHJvdWdoUGFnZXNMb29raW5nRm9yUm93V2l0aE5hbWUobmFtZSk7XG4gICAgY29uc3QgYWN0aW9uQnV0dG9uTG9jYXRvciA9IGF3YWl0IHRoaXMuZ2V0QWN0aW9uTG9jYXRvckZyb21FeHBhbmRhYmxlTWVudShuYW1lLCBhY3Rpb24pO1xuICAgIGF3YWl0IGFjdGlvbkJ1dHRvbkxvY2F0b3IuY2xpY2soKTtcbiAgICBhd2FpdCB0aGlzLnNwaW5uZXJXYWl0Rm9yUmVsb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2sgYWN0aW9uIGZyb20gdGhlIGV4cGFuZGFibGUga2ViYWIgbWVudSBmb3IgdGhlIGVsZW1lbnQgaW4gZGF0YXRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIHRpdGxlIG9mIHRoZSByZWNvcmQgeW91IHdvdWxkIGxpa2UgdG8gcHJvY2VlZFxuICAgKiBAcGFyYW0gYWN0aW9uIHByb3ZpZGUgYnV0dG9uIHRpdGxlIGZvciB0aGUgYWN0aW9uXG4gICAqIEBwYXJhbSBzdWJBY3Rpb24gaWYgdGhlIGFjdGlvbiBpcyBpbiBzdWIgbWVudSwgdGhlbiBwcm92aWRlIGl0IGhlcmVcbiAgICovXG4gIGFzeW5jIHBlcmZvcm1BY3Rpb25Gb3JFbGVtZW50KG5hbWU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIHN1YkFjdGlvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZ2V0QWN0aW9uc0J1dHRvbkJ5TmFtZShuYW1lKS5jbGljaygpO1xuICAgIGF3YWl0IHRoaXMuY29udGV4dE1lbnVBY3Rpb25zLmdldEJ1dHRvbkJ5VGV4dChhY3Rpb24pLmNsaWNrKCk7XG5cbiAgICBpZiAoc3ViQWN0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHRNZW51QWN0aW9ucy5nZXRCdXR0b25CeVRleHQoc3ViQWN0aW9uKS5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBwZXJmb3JtIGRvdWJsZSBjbGljayBvbiB0aGUgZGF0YVRhYmxlIHJvdyB0byBvcGVuIGEgZmlsZSBvciBmb2xkZXJcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgb2YgdGhlIGRhdGEgdGFibGUgZWxlbWVudCB3aXRoIHdoaWNoIHdlIHdhbnQgdG8gZG91YmxlIGNsaWNrXG4gICAqL1xuICBhc3luYyBwZXJmb3JtQ2xpY2tGb2xkZXJPckZpbGVUb09wZW4obmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5nZXRDZWxsTGlua0J5TmFtZShuYW1lKS5jbGljaygpO1xuICAgIGF3YWl0IHRoaXMuc3Bpbm5lcldhaXRGb3JSZWxvYWQoKTtcbiAgfVxuXG4gIGFzeW5jIGlzSXRlbVByZXNlbnQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5nb1Rocm91Z2hQYWdlc0xvb2tpbmdGb3JSb3dXaXRoTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5nZXRSb3dCeU5hbWUobmFtZSkuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyBnZXRBY3Rpb25Mb2NhdG9yRnJvbUV4cGFuZGFibGVNZW51KG5hbWU6IHN0cmluZyB8IG51bWJlciwgYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPExvY2F0b3I+IHtcbiAgICBhd2FpdCB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5jbGljayh7IGJ1dHRvbjogJ3JpZ2h0JyB9KTtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0TWVudUFjdGlvbnMuZ2V0QnV0dG9uQnlUZXh0KGFjdGlvbik7XG4gIH1cblxuICBhc3luYyBwZXJmb3JtQWN0aW9uSW5FeHBhbmRhYmxlTWVudShuYW1lOiBzdHJpbmcgfCBudW1iZXIsIGFjdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5nZXRSb3dCeU5hbWUobmFtZSkuY2xpY2soeyBidXR0b246ICdyaWdodCcgfSk7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0TWVudUFjdGlvbnMuZ2V0QnV0dG9uQnlUZXh0KGFjdGlvbikuY2xpY2soKTtcbiAgfVxuXG4gIGFzeW5jIGdvVGhyb3VnaFBhZ2VzTG9va2luZ0ZvclJvd1dpdGhOYW1lKG5hbWU6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3Bpbm5lcldhaXRGb3JSZWxvYWQoKTtcbiAgICBpZiAoYXdhaXQgdGhpcy5nZXRSb3dCeU5hbWUobmFtZSkuaXNWaXNpYmxlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCB0aGlzLnBhZ2luYXRpb24uY3VycmVudFBhZ2VMb2NhdG9yLmlzVmlzaWJsZSgpKSB7XG4gICAgICBpZiAoKGF3YWl0IHRoaXMucGFnaW5hdGlvbi5jdXJyZW50UGFnZUxvY2F0b3IudGV4dENvbnRlbnQoKSkgPT09ICcgb2YgMSAnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXdhaXQgdGhpcy5wYWdpbmF0aW9uLnRvdGFsUGFnZUxvY2F0b3IuaXNWaXNpYmxlKCkpIHtcbiAgICAgIGNvbnN0IG1heFBhZ2VzID0gKGF3YWl0IHRoaXMucGFnaW5hdGlvbi50b3RhbFBhZ2VMb2NhdG9yPy50ZXh0Q29udGVudCgpKT8ubWF0Y2goL1xcZC8pWzBdO1xuICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gTnVtYmVyKG1heFBhZ2VzKTsgcGFnZSsrKSB7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5pc1Zpc2libGUoKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLnBhZ2luYXRpb24uZ2V0QXJyb3dMb2NhdG9yRm9yKFBhZ2luYXRpb25BY3Rpb25zVHlwZS5OZXh0UGFnZVNlbGVjdG9yKS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucGFnaW5hdGlvbi5nZXRBcnJvd0xvY2F0b3JGb3IoUGFnaW5hdGlvbkFjdGlvbnNUeXBlLk5leHRQYWdlU2VsZWN0b3IpLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5zcGlubmVyV2FpdEZvclJlbG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEl0ZW1zKC4uLm5hbWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGF3YWl0IHRoaXMuaXNSb3dTZWxlY3RlZChuYW1lKTtcbiAgICAgIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvd0J5TmFtZShuYW1lKTtcbiAgICAgICAgYXdhaXQgcm93LmhvdmVyKCk7XG4gICAgICAgIGF3YWl0IHJvdy5sb2NhdG9yKHRoaXMudW5jaGVja2VkQ2hlY2tib3gpLmNsaWNrKCk7XG4gICAgICAgIGF3YWl0IHJvdy5sb2NhdG9yKHRoaXMuY2hlY2tlZENoZWNrYm94KS53YWl0Rm9yKHsgc3RhdGU6ICdhdHRhY2hlZCcgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNSb3dTZWxlY3RlZChpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dCeU5hbWUoaXRlbU5hbWUpO1xuICAgIHJldHVybiByb3cubG9jYXRvcih0aGlzLmNoZWNrZWRDaGVja2JveCkuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyBnZXRDb2x1bW5IZWFkZXJzKCk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGNvbnN0IGNvbHVtbk5hbWVMb2NhdG9yID0gdGhpcy5jb2x1bW5IZWFkZXJzO1xuICAgIGF3YWl0IHRoaXMuY29sdW1uSGVhZGVycy5udGgoMCkud2FpdEZvcih7IHN0YXRlOiAnYXR0YWNoZWQnIH0pO1xuICAgIHJldHVybiBjb2x1bW5OYW1lTG9jYXRvci5hbGxUZXh0Q29udGVudHMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFNvcnRlZENvbHVtbkhlYWRlclRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWRDb2x1bW5IZWFkZXIuaW5uZXJUZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldEl0ZW1Mb2NhdGlvbkVsKG5hbWU6IHN0cmluZyk6IExvY2F0b3Ige1xuICAgIHJldHVybiB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5sb2NhdG9yKCcuYWNhLWxvY2F0aW9uLWxpbmsnKTtcbiAgfVxuXG4gIGFzeW5jIGdldEl0ZW1Mb2NhdGlvblRleHQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmdldEl0ZW1Mb2NhdGlvbkVsKG5hbWUpLmxvY2F0b3IoJ2EnKS53YWl0Rm9yKHsgc3RhdGU6ICdhdHRhY2hlZCcgfSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxvY2F0aW9uRWwobmFtZSkuaW5uZXJUZXh0KCk7XG4gIH1cblxuICBhc3luYyBnZXRJdGVtTG9jYXRpb25Ub29sdGlwKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmdldEl0ZW1Mb2NhdGlvbkVsKG5hbWUpO1xuICAgIGF3YWl0IGxvY2F0aW9uLmhvdmVyKCk7XG4gICAgcmV0dXJuIGxvY2F0aW9uLmxvY2F0b3IoJ2EnKS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJywgeyB0aW1lb3V0OiB0aW1lb3V0cy5ub3JtYWwgfSk7XG4gIH1cblxuICBhc3luYyBjbGlja0l0ZW1Mb2NhdGlvbihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmdldEl0ZW1Mb2NhdGlvbkVsKG5hbWUpLmNsaWNrKCk7XG4gIH1cblxuICBhc3luYyBnZXRTb3J0aW5nT3JkZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzdHIgPSBhd2FpdCB0aGlzLnNvcnRlZENvbHVtbkhlYWRlci5sb2NhdG9yKCcuLi8uLicpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICBpZiAoc3RyLmluY2x1ZGVzKCdhc2MnKSkge1xuICAgICAgcmV0dXJuICdhc2MnO1xuICAgIH0gZWxzZSBpZiAoc3RyLmluY2x1ZGVzKCdkZXNjJykpIHtcbiAgICAgIHJldHVybiAnZGVzYyc7XG4gICAgfVxuICAgIHJldHVybiAnbm9uZSc7XG4gIH1cblxuICBhc3luYyBnZXRSb3dBbGxJbm5lclRleHRzKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5sb2NhdG9yKCdzcGFuJykuYWxsSW5uZXJUZXh0cygpKS50b1N0cmluZygpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Rmlyc3RFbGVtZW50RGV0YWlsKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZmlyc3ROb2RlID0gdGhpcy5nZXRDb2x1bW5WYWx1ZXNCeU5hbWUobmFtZSkuZmlyc3QoKTtcbiAgICByZXR1cm4gZmlyc3ROb2RlLmlubmVyVGV4dCgpO1xuICB9XG5cbiAgYXN5bmMgaXNFbXB0eSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5lbXB0eUxpc3QuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyBnZXRFbXB0eVN0YXRlVGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaXNFbXB0eSgpKSA/IHRoaXMuZW1wdHlMaXN0VGl0bGUuaW5uZXJUZXh0KCkgOiAnJztcbiAgfVxuXG4gIGFzeW5jIGdldEVtcHR5U3RhdGVTdWJ0aXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pc0VtcHR5KCkpID8gdGhpcy5lbXB0eUxpc3RTdWJ0aXRsZS5pbm5lclRleHQoKSA6ICcnO1xuICB9XG5cbiAgYXN5bmMgZ2V0RW1wdHlMaXN0VGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pc0VtcHR5KCkpID8gdGhpcy5lbXB0eUxpc3RUZXN0LmlubmVyVGV4dCgpIDogJyc7XG4gIH1cblxuICBhc3luYyBnZXRSb3dzQ291bnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb3dMb2NhdG9yLmNvdW50KCk7XG4gIH1cblxuICBhc3luYyByaWdodENsaWNrT25JdGVtKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmdldENlbGxCeUNvbHVtbk5hbWVBbmRSb3dJdGVtKGl0ZW1OYW1lLCAnTmFtZScpLmNsaWNrKHsgYnV0dG9uOiAncmlnaHQnIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0UGFnaW5hdGlvblRvNTAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wYWdpbmF0aW9uQnV0dG9uLmNsaWNrKCk7XG4gICAgYXdhaXQgdGhpcy5wYWdpbmF0aW9uT3B0aW9ucy5nZXRCeVRleHQoJzUwJykuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdXNlZCB0byBjcmVhdGUgb2JqZWN0cyBmcm9tIG5hbWVzIGFuZCB2aXNpYmlsaXR5IG9mIHNpdGVzIGZyb20gZGF0YXRhYmxlXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNpdGVzJyBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB2aXNpYmlsaXR5IHZhbHVlc1xuICAgKi9cbiAgYXN5bmMgZ2V0U2l0ZXNOYW1lQW5kVmlzaWJpbGl0eSgpOiBQcm9taXNlPHsgW3NpdGVOYW1lOiBzdHJpbmddOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHJvd3NDb3VudCA9IGF3YWl0IHRoaXMuc2l0ZXNOYW1lLmNvdW50KCk7XG4gICAgY29uc3Qgc2l0ZXNJbmZvOiB7IFtzaXRlTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3NDb3VudDsgaSsrKSB7XG4gICAgICBsZXQgc2l0ZVZpc2liaWxpdHlUZXh0ID0gYXdhaXQgdGhpcy5zaXRlc1Zpc2liaWxpdHkubnRoKGkpLnRleHRDb250ZW50KCk7XG4gICAgICBsZXQgc2l0ZU5hbWVUZXh0ID0gYXdhaXQgdGhpcy5zaXRlc05hbWUubnRoKGkpLnRleHRDb250ZW50KCk7XG4gICAgICBzaXRlVmlzaWJpbGl0eVRleHQgPSBzaXRlVmlzaWJpbGl0eVRleHQudHJpbSgpLnRvVXBwZXJDYXNlKCk7XG4gICAgICBzaXRlTmFtZVRleHQgPSBzaXRlTmFtZVRleHQudHJpbSgpO1xuICAgICAgc2l0ZXNJbmZvW3NpdGVOYW1lVGV4dF0gPSBzaXRlVmlzaWJpbGl0eVRleHQ7XG4gICAgfVxuICAgIHJldHVybiBzaXRlc0luZm87XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgdG8gY3JlYXRlIG9iamVjdHMgZnJvbSBuYW1lcyBhbmQgcm9sZXMgb2Ygc2l0ZXMgZnJvbSBkYXRhdGFibGVcbiAgICpcbiAgICogQHJldHVybnMgYW4gb2JqZWN0IHdpdGggc2l0ZXMnIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHJvbGUgdmFsdWVzXG4gICAqL1xuICBhc3luYyBnZXRTaXRlc05hbWVBbmRSb2xlKCk6IFByb21pc2U8eyBbc2l0ZU5hbWU6IHN0cmluZ106IHN0cmluZyB9PiB7XG4gICAgY29uc3Qgcm93c0NvdW50ID0gYXdhaXQgdGhpcy5zaXRlc05hbWUuY291bnQoKTtcbiAgICBjb25zdCBzaXRlc0luZm86IHsgW3NpdGVOYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93c0NvdW50OyBpKyspIHtcbiAgICAgIGxldCBzaXRlTmFtZVRleHQgPSBhd2FpdCB0aGlzLnNpdGVzTmFtZS5udGgoaSkudGV4dENvbnRlbnQoKTtcbiAgICAgIGxldCBzaXRlUm9sZVRleHQgPSBhd2FpdCB0aGlzLnNpdGVzUm9sZS5udGgoaSkudGV4dENvbnRlbnQoKTtcbiAgICAgIHNpdGVOYW1lVGV4dCA9IHNpdGVOYW1lVGV4dC50cmltKCk7XG4gICAgICBzaXRlUm9sZVRleHQgPSBzaXRlUm9sZVRleHQudHJpbSgpO1xuICAgICAgc2l0ZXNJbmZvW3NpdGVOYW1lVGV4dF0gPSBzaXRlUm9sZVRleHQ7XG4gICAgfVxuICAgIHJldHVybiBzaXRlc0luZm87XG4gIH1cblxuICBhc3luYyBoYXNMb2NrSWNvbihpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dCeU5hbWUoaXRlbU5hbWUpO1xuICAgIHJldHVybiByb3cubG9jYXRvcignaW1nW3NyYyo9XCJsb2NrXCJdJykuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyBnZXRMb2NrT3duZXIoaXRlbU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dCeU5hbWUoaXRlbU5hbWUpO1xuICAgIHJldHVybiByb3cubG9jYXRvcih0aGlzLmxvY2tPd25lcikuaW5uZXJUZXh0KCk7XG4gIH1cblxuICBhc3luYyBoYXNIaWdobGlnaHRlZFRleHQobG9jYXRpb246ICduYW1lJyB8ICdkZXNjcmlwdGlvbicgfCAnY29udGVudCcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBzd2l0Y2ggKGxvY2F0aW9uKSB7XG4gICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZS5sb2NhdG9yKHRoaXMuc2VhcmNoRmlsZU5hbWUpLmxvY2F0b3IodGhpcy5oaWdobGlnaHRlZFRleHQpLmlzVmlzaWJsZSgpO1xuICAgICAgY2FzZSAnZGVzY3JpcHRpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5wYWdlLmxvY2F0b3IodGhpcy5zZWFyY2hGaWxlRGVzY3JpcHRpb24pLmxvY2F0b3IodGhpcy5oaWdobGlnaHRlZFRleHQpLmlzVmlzaWJsZSgpO1xuICAgICAgY2FzZSAnY29udGVudCc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UubG9jYXRvcih0aGlzLnNlYXJjaEZpbGVDb250ZW50KS5sb2NhdG9yKHRoaXMuaGlnaGxpZ2h0ZWRUZXh0KS5pc1Zpc2libGUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|