@unifylib/ui-lib 1.2.6 → 1.2.8
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/cli/client-app-component-guide.md +166 -0
- package/esm2022/lib/base-model/column-def.model.mjs +2 -2
- package/esm2022/lib/base-model/table-column.interface.mjs +1 -1
- package/esm2022/lib/components/action-comment/action-comment.component.mjs +3 -3
- package/esm2022/lib/components/activity-report-form/activity-report-form.component.mjs +2 -2
- package/esm2022/lib/components/base-form-canvas/base-form-canvas.component.mjs +3 -3
- package/esm2022/lib/components/base-table/base-table.component.mjs +22 -6
- package/esm2022/lib/components/multi-auto-complete/multi-auto-complete.component.mjs +3 -3
- package/esm2022/lib/components/report-details-dialog/report-details-dialog.component.mjs +2 -2
- package/esm2022/lib/components/report-form/report-form.component.mjs +2 -2
- package/esm2022/lib/components/shared/attachment-uploader/attachment-uploader.component.mjs +3 -3
- package/esm2022/lib/components/shared-list/shared-list.component.mjs +2 -2
- package/fesm2022/unifylib-ui-lib.mjs +37 -21
- package/fesm2022/unifylib-ui-lib.mjs.map +1 -1
- package/lib/base-model/table-column.interface.d.ts +1 -1
- package/lib/components/base-table/base-table.component.d.ts +3 -1
- package/package.json +1 -4
- package/esm2022/iq-ui-lib.mjs +0 -5
- package/esm2022/lib/components/base-form-canvas/PhoneNumberOnlyDirective.mjs +0 -123
- package/fesm2022/iq-ui-lib.mjs +0 -6957
- package/fesm2022/iq-ui-lib.mjs.map +0 -1
- package/lib/components/base-form-canvas/PhoneNumberOnlyDirective.d.ts +0 -16
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export interface TableColumn<T> {
|
|
2
2
|
property: string;
|
|
3
|
-
type: 'text' | 'croppedText' | 'image' | 'netAmount' | 'workflowStatus' | 'onOff' | 'progress' | 'checkbox' | 'button' | 'date' | 'number' | 'icon' | 'bigdecimal' | 'builder' | 'localDateTime' | 'report-sequence' | 'listAction' | 'info' | 'stateType' | 'hyper-text' | 'year' | 'reportType' | 'status';
|
|
3
|
+
type: 'text' | 'croppedText' | 'image' | 'netAmount' | 'workflowStatus' | 'onOff' | 'progress' | 'checkbox' | 'button' | 'date' | 'number' | 'icon' | 'bigdecimal' | 'builder' | 'localDateTime' | 'report-sequence' | 'listAction' | 'info' | 'stateType' | 'hyper-text' | 'year' | 'reportType' | 'status' | 'list';
|
|
4
4
|
viewType?: string;
|
|
5
5
|
enableSorting: boolean;
|
|
6
6
|
visible?: boolean;
|
|
@@ -87,6 +87,7 @@ export declare class BaseTableComponent extends BaseUtils implements OnInit, OnC
|
|
|
87
87
|
row: any;
|
|
88
88
|
isPending: boolean;
|
|
89
89
|
}>;
|
|
90
|
+
pendingViewModeChanged: EventEmitter<boolean>;
|
|
90
91
|
showDialog: EventEmitter<any>;
|
|
91
92
|
usedWorkflow: Workflow;
|
|
92
93
|
mode: any;
|
|
@@ -101,6 +102,7 @@ export declare class BaseTableComponent extends BaseUtils implements OnInit, OnC
|
|
|
101
102
|
ngOnInit(): void;
|
|
102
103
|
onPageChange(event: number): void;
|
|
103
104
|
extractFieldName(element: any, property: string): any;
|
|
105
|
+
getListItems(element: any, property: string): string[];
|
|
104
106
|
get visibleColumns(): string[];
|
|
105
107
|
get visibleColumnsArray(): string[];
|
|
106
108
|
getColumn(property: string): TableColumn<any> | undefined;
|
|
@@ -167,5 +169,5 @@ export declare class BaseTableComponent extends BaseUtils implements OnInit, OnC
|
|
|
167
169
|
getMobileCardColumns(): TableColumn<any>[];
|
|
168
170
|
labelKeyByValue(column: TableColumn<any> | undefined, row: any): string;
|
|
169
171
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseTableComponent, never>;
|
|
170
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BaseTableComponent, "app-base-table", never, { "filterFields": { "alias": "filterFields"; "required": false; }; "noDataFoundSvgPath": { "alias": "noDataFoundSvgPath"; "required": false; }; "noDataFoundTitle": { "alias": "noDataFoundTitle"; "required": false; }; "noDataFoundSubtitle": { "alias": "noDataFoundSubtitle"; "required": false; }; "noResultSvgPath": { "alias": "noResultSvgPath"; "required": false; }; "noResultTitle": { "alias": "noResultTitle"; "required": false; }; "noResultSubtitle": { "alias": "noResultSubtitle"; "required": false; }; "pageInfo": { "alias": "pageInfo"; "required": false; }; "enablePagination": { "alias": "enablePagination"; "required": false; }; "mobilePageSize": { "alias": "mobilePageSize"; "required": false; }; "mobileLoadMoreIncrement": { "alias": "mobileLoadMoreIncrement"; "required": false; }; "data": { "alias": "data"; "required": false; }; "listAction": { "alias": "listAction"; "required": false; }; "extraActions": { "alias": "extraActions"; "required": false; }; "buttonsDisplayMode": { "alias": "buttonsDisplayMode"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; "pathParam": { "alias": "pathParam"; "required": false; }; "extraButton": { "alias": "extraButton"; "required": false; }; "enforceRefresh": { "alias": "enforceRefresh"; "required": false; }; "isPending": { "alias": "isPending"; "required": false; }; "trigger": { "alias": "trigger"; "required": false; }; "reportRequest": { "alias": "reportRequest"; "required": false; }; "separateEndpointData": { "alias": "separateEndpointData"; "required": false; }; "manageablePages": { "alias": "manageablePages"; "required": false; }; "totalPagesCount": { "alias": "totalPagesCount"; "required": false; }; "currentPageIndex": { "alias": "currentPageIndex"; "required": false; }; "customizedData": { "alias": "customizedData"; "required": false; }; }, { "buttonClicked": "buttonClicked"; "pageChange": "pageChange"; "userAction": "userAction"; "hyperLinkAction": "hyperLinkAction"; "extraAction": "extraAction"; "selectedColumn": "selectedColumn"; "listActionClicked": "listActionClicked"; "showDialog": "showDialog"; "clickRoutePage": "clickRoutePage"; }, never, never, true, never>;
|
|
172
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BaseTableComponent, "app-base-table", never, { "filterFields": { "alias": "filterFields"; "required": false; }; "noDataFoundSvgPath": { "alias": "noDataFoundSvgPath"; "required": false; }; "noDataFoundTitle": { "alias": "noDataFoundTitle"; "required": false; }; "noDataFoundSubtitle": { "alias": "noDataFoundSubtitle"; "required": false; }; "noResultSvgPath": { "alias": "noResultSvgPath"; "required": false; }; "noResultTitle": { "alias": "noResultTitle"; "required": false; }; "noResultSubtitle": { "alias": "noResultSubtitle"; "required": false; }; "pageInfo": { "alias": "pageInfo"; "required": false; }; "enablePagination": { "alias": "enablePagination"; "required": false; }; "mobilePageSize": { "alias": "mobilePageSize"; "required": false; }; "mobileLoadMoreIncrement": { "alias": "mobileLoadMoreIncrement"; "required": false; }; "data": { "alias": "data"; "required": false; }; "listAction": { "alias": "listAction"; "required": false; }; "extraActions": { "alias": "extraActions"; "required": false; }; "buttonsDisplayMode": { "alias": "buttonsDisplayMode"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; "pathParam": { "alias": "pathParam"; "required": false; }; "extraButton": { "alias": "extraButton"; "required": false; }; "enforceRefresh": { "alias": "enforceRefresh"; "required": false; }; "isPending": { "alias": "isPending"; "required": false; }; "trigger": { "alias": "trigger"; "required": false; }; "reportRequest": { "alias": "reportRequest"; "required": false; }; "separateEndpointData": { "alias": "separateEndpointData"; "required": false; }; "manageablePages": { "alias": "manageablePages"; "required": false; }; "totalPagesCount": { "alias": "totalPagesCount"; "required": false; }; "currentPageIndex": { "alias": "currentPageIndex"; "required": false; }; "customizedData": { "alias": "customizedData"; "required": false; }; }, { "buttonClicked": "buttonClicked"; "pageChange": "pageChange"; "userAction": "userAction"; "hyperLinkAction": "hyperLinkAction"; "extraAction": "extraAction"; "selectedColumn": "selectedColumn"; "listActionClicked": "listActionClicked"; "pendingViewModeChanged": "pendingViewModeChanged"; "showDialog": "showDialog"; "clickRoutePage": "clickRoutePage"; }, never, never, true, never>;
|
|
171
173
|
}
|
package/package.json
CHANGED
package/esm2022/iq-ui-lib.mjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtdWktbGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9pcS11aS1saWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class PhoneNumberOnlyDirective {
|
|
4
|
-
constructor(el) {
|
|
5
|
-
this.el = el;
|
|
6
|
-
this.phoneNumberOnly = false;
|
|
7
|
-
this.maxPhoneDigits = 15;
|
|
8
|
-
}
|
|
9
|
-
get enabled() {
|
|
10
|
-
return !!this.phoneNumberOnly;
|
|
11
|
-
}
|
|
12
|
-
countDigits(value) {
|
|
13
|
-
let count = 0;
|
|
14
|
-
for (const char of value) {
|
|
15
|
-
if (char >= '0' && char <= '9') {
|
|
16
|
-
count++;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return count;
|
|
20
|
-
}
|
|
21
|
-
sanitize(value) {
|
|
22
|
-
let result = '';
|
|
23
|
-
let digitCount = 0;
|
|
24
|
-
for (const char of value) {
|
|
25
|
-
if (char >= '0' && char <= '9') {
|
|
26
|
-
if (digitCount >= this.maxPhoneDigits) {
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
result += char;
|
|
30
|
-
digitCount++;
|
|
31
|
-
}
|
|
32
|
-
else if (char === '+' && result.length === 0) {
|
|
33
|
-
result += char;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return result;
|
|
37
|
-
}
|
|
38
|
-
onKeyDown(event) {
|
|
39
|
-
if (!this.enabled) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const input = this.el.nativeElement;
|
|
43
|
-
const cursor = input.selectionStart ?? 0;
|
|
44
|
-
const value = input.value;
|
|
45
|
-
if (event.ctrlKey ||
|
|
46
|
-
event.metaKey ||
|
|
47
|
-
event.altKey ||
|
|
48
|
-
['Backspace', 'Tab', 'ArrowLeft', 'ArrowRight', 'Delete', 'Home', 'End'].includes(event.key)) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
if (event.key === '+') {
|
|
52
|
-
if (cursor !== 0 || value.includes('+')) {
|
|
53
|
-
event.preventDefault();
|
|
54
|
-
}
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
if (event.key >= '0' && event.key <= '9') {
|
|
58
|
-
const selectionStart = input.selectionStart ?? 0;
|
|
59
|
-
const selectionEnd = input.selectionEnd ?? 0;
|
|
60
|
-
const selectedText = value.slice(selectionStart, selectionEnd);
|
|
61
|
-
const selectedDigits = this.countDigits(selectedText);
|
|
62
|
-
const currentDigits = this.countDigits(value);
|
|
63
|
-
if (currentDigits - selectedDigits + 1 > this.maxPhoneDigits) {
|
|
64
|
-
event.preventDefault();
|
|
65
|
-
}
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
event.preventDefault();
|
|
69
|
-
}
|
|
70
|
-
onPaste(event) {
|
|
71
|
-
if (!this.enabled) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const pasted = event.clipboardData?.getData('text') ?? '';
|
|
75
|
-
if (!/^\+?\d*$/.test(pasted)) {
|
|
76
|
-
event.preventDefault();
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const input = this.el.nativeElement;
|
|
80
|
-
const selectionStart = input.selectionStart ?? 0;
|
|
81
|
-
const selectionEnd = input.selectionEnd ?? 0;
|
|
82
|
-
const before = input.value.slice(0, selectionStart);
|
|
83
|
-
const after = input.value.slice(selectionEnd);
|
|
84
|
-
const merged = before + pasted + after;
|
|
85
|
-
if (this.countDigits(this.sanitize(merged)) > this.maxPhoneDigits) {
|
|
86
|
-
event.preventDefault();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
onInput() {
|
|
90
|
-
if (!this.enabled) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const input = this.el.nativeElement;
|
|
94
|
-
const sanitized = this.sanitize(input.value);
|
|
95
|
-
if (sanitized !== input.value) {
|
|
96
|
-
input.value = sanitized;
|
|
97
|
-
input.dispatchEvent(new Event('input', { bubbles: true }));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PhoneNumberOnlyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
101
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PhoneNumberOnlyDirective, isStandalone: true, selector: "[phoneNumberOnly]", inputs: { phoneNumberOnly: "phoneNumberOnly", maxPhoneDigits: "maxPhoneDigits" }, host: { listeners: { "keydown": "onKeyDown($event)", "paste": "onPaste($event)", "input": "onInput()" } }, ngImport: i0 }); }
|
|
102
|
-
}
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PhoneNumberOnlyDirective, decorators: [{
|
|
104
|
-
type: Directive,
|
|
105
|
-
args: [{
|
|
106
|
-
selector: '[phoneNumberOnly]',
|
|
107
|
-
standalone: true,
|
|
108
|
-
}]
|
|
109
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { phoneNumberOnly: [{
|
|
110
|
-
type: Input
|
|
111
|
-
}], maxPhoneDigits: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], onKeyDown: [{
|
|
114
|
-
type: HostListener,
|
|
115
|
-
args: ['keydown', ['$event']]
|
|
116
|
-
}], onPaste: [{
|
|
117
|
-
type: HostListener,
|
|
118
|
-
args: ['paste', ['$event']]
|
|
119
|
-
}], onInput: [{
|
|
120
|
-
type: HostListener,
|
|
121
|
-
args: ['input']
|
|
122
|
-
}] } });
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGhvbmVOdW1iZXJPbmx5RGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvY29tcG9uZW50cy9iYXNlLWZvcm0tY2FudmFzL1Bob25lTnVtYmVyT25seURpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTTNFLE1BQU0sT0FBTyx3QkFBd0I7SUFLbkMsWUFBb0IsRUFBZ0M7UUFBaEMsT0FBRSxHQUFGLEVBQUUsQ0FBOEI7UUFIM0Msb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsbUJBQWMsR0FBRyxFQUFFLENBQUM7SUFFMEIsQ0FBQztJQUV4RCxJQUFZLE9BQU87UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWE7UUFDL0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUMvQixLQUFLLEVBQUUsQ0FBQztZQUNWLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQy9CLElBQUksVUFBVSxJQUFJLElBQUks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RFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMENuQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVCakMsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3Bob25lTnVtYmVyT25seV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQaG9uZU51bWJlck9ubHlEaXJlY3RpdmUge1xyXG5cclxuICBASW5wdXQoKSBwaG9uZU51bWJlck9ubHkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtYXhQaG9uZURpZ2l0cyA9IDE1O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KSB7fVxyXG5cclxuICBwcml2YXRlIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5waG9uZU51bWJlck9ubHk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdW50RGlnaXRzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIGZvciAoY29uc3QgY2hhciBvZiB2YWx1ZSkge1xyXG4gICAgICBpZiAoY2hhciA+PSAnMCcgJiYgY2hhciA8PSAnOScpIHtcclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY291bnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhbml0aXplKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgbGV0IGRpZ2l0Q291bnQgPSAwO1xyXG4gICAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XHJcbiAgICAgIGlmIChjaGFyID49ICcwJyAmJiBjaGFyIDw9ICc5Jykge1xyXG4gICAgICAgIGlmIChkaWdpdENvdW50ID49IHRoaXMubWF4UGhvbmVEaWdpdHMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgKz0gY2hhcjtcclxuICAgICAgICBkaWdpdENvdW50Kys7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJysnICYmIHJlc3VsdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXN1bHQgKz0gY2hhcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgY3Vyc29yID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgPz8gMDtcclxuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBldmVudC5jdHJsS2V5IHx8XHJcbiAgICAgIGV2ZW50Lm1ldGFLZXkgfHxcclxuICAgICAgZXZlbnQuYWx0S2V5IHx8XHJcbiAgICAgIFsnQmFja3NwYWNlJywgJ1RhYicsICdBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsICdEZWxldGUnLCAnSG9tZScsICdFbmQnXS5pbmNsdWRlcyhldmVudC5rZXkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5rZXkgPT09ICcrJykge1xyXG4gICAgICBpZiAoY3Vyc29yICE9PSAwIHx8IHZhbHVlLmluY2x1ZGVzKCcrJykpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQua2V5ID49ICcwJyAmJiBldmVudC5rZXkgPD0gJzknKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgPz8gMDtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kID8/IDA7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHZhbHVlLnNsaWNlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZERpZ2l0cyA9IHRoaXMuY291bnREaWdpdHMoc2VsZWN0ZWRUZXh0KTtcclxuICAgICAgY29uc3QgY3VycmVudERpZ2l0cyA9IHRoaXMuY291bnREaWdpdHModmFsdWUpO1xyXG4gICAgICBpZiAoY3VycmVudERpZ2l0cyAtIHNlbGVjdGVkRGlnaXRzICsgMSA+IHRoaXMubWF4UGhvbmVEaWdpdHMpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFzdGVkID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpID8/ICcnO1xyXG4gICAgaWYgKCEvXlxcKz9cXGQqJC8udGVzdChwYXN0ZWQpKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25TdGFydCA/PyAwO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kID8/IDA7XHJcbiAgICBjb25zdCBiZWZvcmUgPSBpbnB1dC52YWx1ZS5zbGljZSgwLCBzZWxlY3Rpb25TdGFydCk7XHJcbiAgICBjb25zdCBhZnRlciA9IGlucHV0LnZhbHVlLnNsaWNlKHNlbGVjdGlvbkVuZCk7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBiZWZvcmUgKyBwYXN0ZWQgKyBhZnRlcjtcclxuICAgIGlmICh0aGlzLmNvdW50RGlnaXRzKHRoaXMuc2FuaXRpemUobWVyZ2VkKSkgPiB0aGlzLm1heFBob25lRGlnaXRzKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcpXHJcbiAgb25JbnB1dCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IHNhbml0aXplZCA9IHRoaXMuc2FuaXRpemUoaW5wdXQudmFsdWUpO1xyXG4gICAgaWYgKHNhbml0aXplZCAhPT0gaW5wdXQudmFsdWUpIHtcclxuICAgICAgaW5wdXQudmFsdWUgPSBzYW5pdGl6ZWQ7XHJcbiAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|