@cqa-lib/cqa-ui 1.1.175 → 1.1.177
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/esm2020/lib/compare-runs/compare-runs.component.mjs +1 -1
- package/esm2020/lib/dynamic-select/dynamic-select-field.component.mjs +3 -3
- package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs +70 -5
- package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +15 -3
- package/esm2020/lib/iterations-loop/iterations-loop.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +29 -9
- package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +330 -0
- package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +205 -0
- package/esm2020/lib/table/dynamic-table/dynamic-table.component.mjs +35 -3
- package/esm2020/lib/templates/table-template.component.mjs +7 -4
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step-data.mjs +5 -0
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step-ref.mjs +32 -0
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.component.mjs +71 -0
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.service.mjs +97 -0
- package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +59 -9
- package/esm2020/lib/ui-kit.module.mjs +18 -3
- package/esm2020/lib/utils/tw-overlay-container.mjs +6 -3
- package/esm2020/public-api.mjs +7 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +939 -34
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +926 -34
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/dynamic-select/dynamic-select-field.component.d.ts +1 -0
- package/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.d.ts +18 -3
- package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +7 -1
- package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +2 -1
- package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +61 -0
- package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +61 -0
- package/lib/table/dynamic-table/dynamic-table.component.d.ts +7 -1
- package/lib/templates/table-template.component.d.ts +6 -1
- package/lib/test-case-details/custom-edit-step/custom-edit-step-data.d.ts +8 -0
- package/lib/test-case-details/custom-edit-step/custom-edit-step-ref.d.ts +13 -0
- package/lib/test-case-details/custom-edit-step/custom-edit-step.component.d.ts +25 -0
- package/lib/test-case-details/custom-edit-step/custom-edit-step.service.d.ts +23 -0
- package/lib/test-case-details/normal-step/normal-step.component.d.ts +9 -0
- package/lib/ui-kit.module.d.ts +26 -23
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
- package/styles.css +1 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Injectable, Injector } from '@angular/core';
|
|
2
|
+
import { OverlayConfig } from '@angular/cdk/overlay';
|
|
3
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
4
|
+
import { filter } from 'rxjs/operators';
|
|
5
|
+
import { CustomEditStepComponent } from './custom-edit-step.component';
|
|
6
|
+
import { CustomEditStepRef } from './custom-edit-step-ref';
|
|
7
|
+
import { CUSTOM_EDIT_STEP_DATA, } from './custom-edit-step-data';
|
|
8
|
+
import { CUSTOM_EDIT_STEP_REF } from './custom-edit-step-ref';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
11
|
+
export class CustomEditStepService {
|
|
12
|
+
constructor(overlay, injector) {
|
|
13
|
+
this.overlay = overlay;
|
|
14
|
+
this.injector = injector;
|
|
15
|
+
/** Currently open Step Description overlay ref; only one panel is allowed at a time. */
|
|
16
|
+
this.currentRef = null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Opens the Step Description modal positioned just below the given origin element.
|
|
20
|
+
* If a panel is already open, returns the existing ref and does not open a duplicate.
|
|
21
|
+
* @param origin Element (e.g. description span or edit icon) to position below
|
|
22
|
+
* @param data Initial description and optional help URL
|
|
23
|
+
* @returns Ref with afterClosed() and close(); afterClosed emits the new description on Apply, undefined on Cancel, or EDIT_IN_DEPTH symbol when user clicks "Edit in depth"
|
|
24
|
+
*/
|
|
25
|
+
open(origin, data) {
|
|
26
|
+
if (this.currentRef) {
|
|
27
|
+
return this.currentRef;
|
|
28
|
+
}
|
|
29
|
+
const originEl = origin.nativeElement;
|
|
30
|
+
const gap = 8;
|
|
31
|
+
const modalWidth = 500;
|
|
32
|
+
const margin = 8;
|
|
33
|
+
originEl.scrollIntoView({ block: 'nearest', behavior: 'auto' });
|
|
34
|
+
const positionStrategy = this.overlay.position().global();
|
|
35
|
+
const overlayRef = this.overlay.create(new OverlayConfig({
|
|
36
|
+
hasBackdrop: true,
|
|
37
|
+
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
38
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
39
|
+
positionStrategy,
|
|
40
|
+
panelClass: ['cqa-custom-edit-step-panel', 'cqa-ui-root'],
|
|
41
|
+
width: 'min(560px, 90vw)',
|
|
42
|
+
}));
|
|
43
|
+
const updatePosition = () => {
|
|
44
|
+
const rect = originEl.getBoundingClientRect();
|
|
45
|
+
const viewportWidth = window.innerWidth;
|
|
46
|
+
let top = rect.bottom + gap;
|
|
47
|
+
let left = rect.left;
|
|
48
|
+
if (left + modalWidth > viewportWidth - margin) {
|
|
49
|
+
left = viewportWidth - modalWidth - margin;
|
|
50
|
+
}
|
|
51
|
+
if (left < margin) {
|
|
52
|
+
left = margin;
|
|
53
|
+
}
|
|
54
|
+
if (top < margin) {
|
|
55
|
+
top = margin;
|
|
56
|
+
}
|
|
57
|
+
positionStrategy.top(`${top}px`).left(`${left}px`);
|
|
58
|
+
overlayRef.updatePosition();
|
|
59
|
+
};
|
|
60
|
+
const editStepRef = new CustomEditStepRef(overlayRef);
|
|
61
|
+
const injector = Injector.create({
|
|
62
|
+
parent: this.injector,
|
|
63
|
+
providers: [
|
|
64
|
+
{ provide: CUSTOM_EDIT_STEP_REF, useValue: editStepRef },
|
|
65
|
+
{ provide: CUSTOM_EDIT_STEP_DATA, useValue: data },
|
|
66
|
+
],
|
|
67
|
+
});
|
|
68
|
+
updatePosition();
|
|
69
|
+
const portal = new ComponentPortal(CustomEditStepComponent, undefined, injector);
|
|
70
|
+
overlayRef.attach(portal);
|
|
71
|
+
requestAnimationFrame(() => updatePosition());
|
|
72
|
+
const scrollListener = () => updatePosition();
|
|
73
|
+
window.addEventListener('scroll', scrollListener, true);
|
|
74
|
+
window.addEventListener('resize', scrollListener);
|
|
75
|
+
this.currentRef = editStepRef;
|
|
76
|
+
editStepRef.afterClosed().subscribe(() => {
|
|
77
|
+
this.currentRef = null;
|
|
78
|
+
window.removeEventListener('scroll', scrollListener, true);
|
|
79
|
+
window.removeEventListener('resize', scrollListener);
|
|
80
|
+
});
|
|
81
|
+
overlayRef.backdropClick().subscribe(() => editStepRef.close(undefined));
|
|
82
|
+
overlayRef
|
|
83
|
+
.keydownEvents()
|
|
84
|
+
.pipe(filter((e) => e.key === 'Escape' || e.key === 'Esc'))
|
|
85
|
+
.subscribe(() => editStepRef.close(undefined));
|
|
86
|
+
return editStepRef;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
CustomEditStepService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, deps: [{ token: i1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
90
|
+
CustomEditStepService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, providedIn: 'root' });
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, decorators: [{
|
|
92
|
+
type: Injectable,
|
|
93
|
+
args: [{
|
|
94
|
+
providedIn: 'root',
|
|
95
|
+
}]
|
|
96
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Injector }]; } });
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWVkaXQtc3RlcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9jdXN0b20tZWRpdC1zdGVwL2N1c3RvbS1lZGl0LXN0ZXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQVcsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQ0wscUJBQXFCLEdBR3RCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQVU5RCxNQUFNLE9BQU8scUJBQXFCO0lBSWhDLFlBQTZCLE9BQWdCLEVBQW1CLFFBQWtCO1FBQXJELFlBQU8sR0FBUCxPQUFPLENBQVM7UUFBbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUhsRix3RkFBd0Y7UUFDaEYsZUFBVSxHQUFtRCxJQUFJLENBQUM7SUFFVyxDQUFDO0lBRXRGOzs7Ozs7T0FNRztJQUNILElBQUksQ0FDRixNQUErQixFQUMvQixJQUF3QjtRQUV4QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDZCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWpCLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUUxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDcEMsSUFBSSxhQUFhLENBQUM7WUFDaEIsV0FBVyxFQUFFLElBQUk7WUFDakIsYUFBYSxFQUFFLGtDQUFrQztZQUNqRCxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDMUQsZ0JBQWdCO1lBQ2hCLFVBQVUsRUFBRSxDQUFDLDRCQUE0QixFQUFFLGFBQWEsQ0FBQztZQUN6RCxLQUFLLEVBQUUsa0JBQWtCO1NBQzFCLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsR0FBUyxFQUFFO1lBQ2hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzlDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDeEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDNUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNyQixJQUFJLElBQUksR0FBRyxVQUFVLEdBQUcsYUFBYSxHQUFHLE1BQU0sRUFBRTtnQkFDOUMsSUFBSSxHQUFHLGFBQWEsR0FBRyxVQUFVLEdBQUcsTUFBTSxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxJQUFJLEdBQUcsTUFBTSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsTUFBTSxDQUFDO2FBQ2Y7WUFDRCxJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUU7Z0JBQ2hCLEdBQUcsR0FBRyxNQUFNLENBQUM7YUFDZDtZQUNELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNuRCxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBaUIsQ0FBdUIsVUFBVSxDQUFDLENBQUM7UUFFNUUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDckIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7Z0JBQ3hELEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7YUFDbkQ7U0FDRixDQUFDLENBQUM7UUFFSCxjQUFjLEVBQUUsQ0FBQztRQUVqQixNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakYsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQixxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sY0FBYyxHQUFHLEdBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDOUIsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLFVBQVU7YUFDUCxhQUFhLEVBQUU7YUFDZixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FDcEU7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRWpELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O2tIQTlGVSxxQkFBcUI7c0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3VzdG9tRWRpdFN0ZXBDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1lZGl0LXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbUVkaXRTdGVwUmVmIH0gZnJvbSAnLi9jdXN0b20tZWRpdC1zdGVwLXJlZic7XG5pbXBvcnQge1xuICBDVVNUT01fRURJVF9TVEVQX0RBVEEsXG4gIENVU1RPTV9FRElUX1NURVBfRURJVF9JTl9ERVBUSCxcbiAgQ3VzdG9tRWRpdFN0ZXBEYXRhLFxufSBmcm9tICcuL2N1c3RvbS1lZGl0LXN0ZXAtZGF0YSc7XG5pbXBvcnQgeyBDVVNUT01fRURJVF9TVEVQX1JFRiB9IGZyb20gJy4vY3VzdG9tLWVkaXQtc3RlcC1yZWYnO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FZGl0U3RlcFJlc3VsdCA9XG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkXG4gIHwgdHlwZW9mIENVU1RPTV9FRElUX1NURVBfRURJVF9JTl9ERVBUSDtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUVkaXRTdGVwU2VydmljZSB7XG4gIC8qKiBDdXJyZW50bHkgb3BlbiBTdGVwIERlc2NyaXB0aW9uIG92ZXJsYXkgcmVmOyBvbmx5IG9uZSBwYW5lbCBpcyBhbGxvd2VkIGF0IGEgdGltZS4gKi9cbiAgcHJpdmF0ZSBjdXJyZW50UmVmOiBDdXN0b21FZGl0U3RlcFJlZjxDdXN0b21FZGl0U3RlcFJlc3VsdD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXk6IE92ZXJsYXksIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgU3RlcCBEZXNjcmlwdGlvbiBtb2RhbCBwb3NpdGlvbmVkIGp1c3QgYmVsb3cgdGhlIGdpdmVuIG9yaWdpbiBlbGVtZW50LlxuICAgKiBJZiBhIHBhbmVsIGlzIGFscmVhZHkgb3BlbiwgcmV0dXJucyB0aGUgZXhpc3RpbmcgcmVmIGFuZCBkb2VzIG5vdCBvcGVuIGEgZHVwbGljYXRlLlxuICAgKiBAcGFyYW0gb3JpZ2luIEVsZW1lbnQgKGUuZy4gZGVzY3JpcHRpb24gc3BhbiBvciBlZGl0IGljb24pIHRvIHBvc2l0aW9uIGJlbG93XG4gICAqIEBwYXJhbSBkYXRhIEluaXRpYWwgZGVzY3JpcHRpb24gYW5kIG9wdGlvbmFsIGhlbHAgVVJMXG4gICAqIEByZXR1cm5zIFJlZiB3aXRoIGFmdGVyQ2xvc2VkKCkgYW5kIGNsb3NlKCk7IGFmdGVyQ2xvc2VkIGVtaXRzIHRoZSBuZXcgZGVzY3JpcHRpb24gb24gQXBwbHksIHVuZGVmaW5lZCBvbiBDYW5jZWwsIG9yIEVESVRfSU5fREVQVEggc3ltYm9sIHdoZW4gdXNlciBjbGlja3MgXCJFZGl0IGluIGRlcHRoXCJcbiAgICovXG4gIG9wZW4oXG4gICAgb3JpZ2luOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBkYXRhOiBDdXN0b21FZGl0U3RlcERhdGFcbiAgKTogQ3VzdG9tRWRpdFN0ZXBSZWY8Q3VzdG9tRWRpdFN0ZXBSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50UmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVmO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5FbCA9IG9yaWdpbi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGdhcCA9IDg7XG4gICAgY29uc3QgbW9kYWxXaWR0aCA9IDUwMDtcbiAgICBjb25zdCBtYXJnaW4gPSA4O1xuXG4gICAgb3JpZ2luRWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpO1xuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICBwYW5lbENsYXNzOiBbJ2NxYS1jdXN0b20tZWRpdC1zdGVwLXBhbmVsJywgJ2NxYS11aS1yb290J10sXG4gICAgICAgIHdpZHRoOiAnbWluKDU2MHB4LCA5MHZ3KScsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCB1cGRhdGVQb3NpdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBvcmlnaW5FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIGxldCB0b3AgPSByZWN0LmJvdHRvbSArIGdhcDtcbiAgICAgIGxldCBsZWZ0ID0gcmVjdC5sZWZ0O1xuICAgICAgaWYgKGxlZnQgKyBtb2RhbFdpZHRoID4gdmlld3BvcnRXaWR0aCAtIG1hcmdpbikge1xuICAgICAgICBsZWZ0ID0gdmlld3BvcnRXaWR0aCAtIG1vZGFsV2lkdGggLSBtYXJnaW47XG4gICAgICB9XG4gICAgICBpZiAobGVmdCA8IG1hcmdpbikge1xuICAgICAgICBsZWZ0ID0gbWFyZ2luO1xuICAgICAgfVxuICAgICAgaWYgKHRvcCA8IG1hcmdpbikge1xuICAgICAgICB0b3AgPSBtYXJnaW47XG4gICAgICB9XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LnRvcChgJHt0b3B9cHhgKS5sZWZ0KGAke2xlZnR9cHhgKTtcbiAgICAgIG92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZWRpdFN0ZXBSZWYgPSBuZXcgQ3VzdG9tRWRpdFN0ZXBSZWY8Q3VzdG9tRWRpdFN0ZXBSZXN1bHQ+KG92ZXJsYXlSZWYpO1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ1VTVE9NX0VESVRfU1RFUF9SRUYsIHVzZVZhbHVlOiBlZGl0U3RlcFJlZiB9LFxuICAgICAgICB7IHByb3ZpZGU6IENVU1RPTV9FRElUX1NURVBfREFUQSwgdXNlVmFsdWU6IGRhdGEgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB1cGRhdGVQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChDdXN0b21FZGl0U3RlcENvbXBvbmVudCwgdW5kZWZpbmVkLCBpbmplY3Rvcik7XG4gICAgb3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB1cGRhdGVQb3NpdGlvbigpKTtcblxuICAgIGNvbnN0IHNjcm9sbExpc3RlbmVyID0gKCk6IHZvaWQgPT4gdXBkYXRlUG9zaXRpb24oKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzY3JvbGxMaXN0ZW5lcik7XG4gICAgdGhpcy5jdXJyZW50UmVmID0gZWRpdFN0ZXBSZWY7XG4gICAgZWRpdFN0ZXBSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UmVmID0gbnVsbDtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxMaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc2Nyb2xsTGlzdGVuZXIpO1xuICAgIH0pO1xuXG4gICAgb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IGVkaXRTdGVwUmVmLmNsb3NlKHVuZGVmaW5lZCkpO1xuICAgIG92ZXJsYXlSZWZcbiAgICAgIC5rZXlkb3duRXZlbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGU6IEtleWJvYXJkRXZlbnQpID0+IGUua2V5ID09PSAnRXNjYXBlJyB8fCBlLmtleSA9PT0gJ0VzYycpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IGVkaXRTdGVwUmVmLmNsb3NlKHVuZGVmaW5lZCkpO1xuXG4gICAgcmV0dXJuIGVkaXRTdGVwUmVmO1xuICB9XG59XG4iXX0=
|