@magic-xpa/angular-material-core 4.1000.0 → 4.1100.0-dev000.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/README.md +7 -7
- package/esm2022/index.mjs +9 -0
- package/{esm2020 → esm2022}/magic-xpa-angular-material-core.mjs +1 -1
- package/{esm2020 → esm2022}/src/angular-material.module.mjs +83 -83
- package/esm2022/src/components/base-mat-table-magic.component.mjs +62 -0
- package/esm2022/src/directives/magic/form-controls/mat-magic-autocomplete.directive.mjs +28 -0
- package/esm2022/src/directives/magic/form-controls/mat-magic-checkbox.directive.mjs +101 -0
- package/esm2022/src/directives/magic/form-controls/mat-magic-combobox.directive.mjs +30 -0
- package/esm2022/src/directives/magic/form-controls/mat-magic-listbox.directive.mjs +27 -0
- package/{esm2020 → esm2022}/src/services/mat.magic.providers.mjs +6 -6
- package/esm2022/src/services/mattable.magic.service.mjs +138 -0
- package/{fesm2020 → fesm2022}/magic-xpa-angular-material-core.mjs +409 -307
- package/fesm2022/magic-xpa-angular-material-core.mjs.map +1 -0
- package/index.d.ts +8 -8
- package/package.json +10 -16
- package/src/angular-material.module.d.ts +26 -26
- package/src/components/base-mat-table-magic.component.d.ts +19 -19
- package/src/directives/magic/form-controls/mat-magic-autocomplete.directive.d.ts +7 -7
- package/src/directives/magic/form-controls/mat-magic-checkbox.directive.d.ts +23 -6
- package/src/directives/magic/form-controls/mat-magic-combobox.directive.d.ts +9 -9
- package/src/directives/magic/form-controls/mat-magic-listbox.directive.d.ts +9 -9
- package/src/services/mat.magic.providers.d.ts +38 -38
- package/src/services/mattable.magic.service.d.ts +36 -36
- package/esm2020/index.mjs +0 -9
- package/esm2020/src/components/base-mat-table-magic.component.mjs +0 -54
- package/esm2020/src/directives/magic/form-controls/mat-magic-autocomplete.directive.mjs +0 -28
- package/esm2020/src/directives/magic/form-controls/mat-magic-checkbox.directive.mjs +0 -16
- package/esm2020/src/directives/magic/form-controls/mat-magic-combobox.directive.mjs +0 -30
- package/esm2020/src/directives/magic/form-controls/mat-magic-listbox.directive.mjs +0 -26
- package/esm2020/src/services/mattable.magic.service.mjs +0 -127
- package/fesm2015/magic-xpa-angular-material-core.mjs +0 -367
- package/fesm2015/magic-xpa-angular-material-core.mjs.map +0 -1
- package/fesm2020/magic-xpa-angular-material-core.mjs.map +0 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { TaskMagicService, ComponentListMagicService } from "@magic-xpa/angular";
|
|
3
|
+
import { getGuiEventObj } from "@magic-xpa/engine";
|
|
4
|
+
import { TableMagicService } from "@magic-xpa/angular";
|
|
5
|
+
import { isNullOrUndefined } from "@magic-xpa/mscorelib";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@magic-xpa/angular";
|
|
8
|
+
export class MgMatTableService extends TableMagicService {
|
|
9
|
+
componentList;
|
|
10
|
+
task;
|
|
11
|
+
dataSource;
|
|
12
|
+
get DataSource() {
|
|
13
|
+
return this.dataSource;
|
|
14
|
+
}
|
|
15
|
+
set DataSource(dataSource) {
|
|
16
|
+
this.dataSource = dataSource;
|
|
17
|
+
}
|
|
18
|
+
selection;
|
|
19
|
+
get Selection() {
|
|
20
|
+
return this.selection;
|
|
21
|
+
}
|
|
22
|
+
set Selection(selection) {
|
|
23
|
+
this.selection = selection;
|
|
24
|
+
}
|
|
25
|
+
paginator;
|
|
26
|
+
get Paginator() {
|
|
27
|
+
return this.paginator;
|
|
28
|
+
}
|
|
29
|
+
set Paginator(paginator) {
|
|
30
|
+
this.paginator = paginator;
|
|
31
|
+
}
|
|
32
|
+
constructor(componentList, task) {
|
|
33
|
+
super(componentList, task);
|
|
34
|
+
this.componentList = componentList;
|
|
35
|
+
this.task = task;
|
|
36
|
+
}
|
|
37
|
+
connect(dataSource, paginator, selection) {
|
|
38
|
+
this.dataSource = dataSource;
|
|
39
|
+
this.paginator = paginator;
|
|
40
|
+
this.selection = selection;
|
|
41
|
+
}
|
|
42
|
+
refreshDataSource() {
|
|
43
|
+
if (!isNullOrUndefined(this.paginator))
|
|
44
|
+
this.dataSource.paginator = this.paginator;
|
|
45
|
+
this.dataSource.data = (this.task.mgAccessorService.isDataviewEmpty() ? [] : this.task.Records.list);
|
|
46
|
+
}
|
|
47
|
+
getPageSize() {
|
|
48
|
+
if (isNullOrUndefined(this.paginator))
|
|
49
|
+
return 10;
|
|
50
|
+
return this.paginator.pageSize;
|
|
51
|
+
}
|
|
52
|
+
selectRow(guiRowid) {
|
|
53
|
+
super.selectRow(guiRowid);
|
|
54
|
+
this.selection.select(this.task.Records.list[guiRowid]);
|
|
55
|
+
this.refreshDataSource();
|
|
56
|
+
}
|
|
57
|
+
selectPage(pageId) {
|
|
58
|
+
if (!isNullOrUndefined(this.paginator))
|
|
59
|
+
this.paginator.pageIndex = pageId;
|
|
60
|
+
this.refreshDataSource();
|
|
61
|
+
}
|
|
62
|
+
selectedRow() {
|
|
63
|
+
return this.selection.selected[0];
|
|
64
|
+
}
|
|
65
|
+
mgOnPaginateChange(e, changeSelectedRow) {
|
|
66
|
+
if (this.task.oldPageSize != e.pageSize) {
|
|
67
|
+
this.handleResize(e.pageIndex, e.previousPageIndex, e.pageSize);
|
|
68
|
+
this.task.oldPageSize = e.pageSize;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
if (changeSelectedRow) {
|
|
72
|
+
let evt;
|
|
73
|
+
if (e.pageIndex > e.previousPageIndex) {
|
|
74
|
+
evt = (e.pageIndex - e.previousPageIndex === 1) ? "next-page" : "end-table";
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
evt = (e.previousPageIndex - e.pageIndex === 1) ? "previous-page" : "begin-table";
|
|
78
|
+
}
|
|
79
|
+
let guiEvent = getGuiEventObj("navigateInTable", "magicRow", 0);
|
|
80
|
+
guiEvent.Value = evt;
|
|
81
|
+
this.task.insertEvent(guiEvent);
|
|
82
|
+
}
|
|
83
|
+
else
|
|
84
|
+
this.getRowsIfNeeded(e.pageIndex, e.previousPageIndex, e.pageSize);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
handleResize(pageIndex, prevPageIndex, pageSize) {
|
|
88
|
+
let requiredGuiRowId = pageIndex * pageSize;
|
|
89
|
+
this.task.resize(pageSize, requiredGuiRowId);
|
|
90
|
+
}
|
|
91
|
+
getRowsIfNeeded(pageIndex, prevPageIndex, pageSize) {
|
|
92
|
+
let guiEvent = getGuiEventObj("getRows", "", 0);
|
|
93
|
+
guiEvent.Line = pageIndex * pageSize;
|
|
94
|
+
this.task.insertEvent(guiEvent);
|
|
95
|
+
this.setTableTopIndex(this.task.getDvRowId(pageSize * pageIndex));
|
|
96
|
+
}
|
|
97
|
+
sortData(e) {
|
|
98
|
+
let direction = 0;
|
|
99
|
+
if (e.direction === 'asc')
|
|
100
|
+
direction = 0;
|
|
101
|
+
else if (e.direction === 'desc')
|
|
102
|
+
direction = 1;
|
|
103
|
+
let guiEvent = getGuiEventObj("columnSort", e.active, direction);
|
|
104
|
+
this.task.insertEvent(guiEvent);
|
|
105
|
+
}
|
|
106
|
+
updateTableSize(size) {
|
|
107
|
+
if (size === 0) {
|
|
108
|
+
size = 1;
|
|
109
|
+
this.task.Records.clearFirstTableRecord(this.task.template);
|
|
110
|
+
}
|
|
111
|
+
else if (isNullOrUndefined(this.paginator))
|
|
112
|
+
size = this.getPageSize();
|
|
113
|
+
this.task.formGroups.length = size;
|
|
114
|
+
this.task.Records.updateSize(size);
|
|
115
|
+
this.task.setIncludesFirst(false);
|
|
116
|
+
}
|
|
117
|
+
selectPageForGuiRowId(guiRowId) {
|
|
118
|
+
let pageToBeSelected = 0;
|
|
119
|
+
let prevSelectedRow = this.selectedRow();
|
|
120
|
+
pageToBeSelected = Math.floor(guiRowId / this.getPageSize());
|
|
121
|
+
if ((isNullOrUndefined(prevSelectedRow) || (!isNullOrUndefined(this.paginator) && pageToBeSelected != this.paginator.pageIndex)))
|
|
122
|
+
this.selectPage(pageToBeSelected);
|
|
123
|
+
}
|
|
124
|
+
setTableTopIndex(value) {
|
|
125
|
+
this.task.Records.setGuiTopIndex(value);
|
|
126
|
+
if (value >= 0)
|
|
127
|
+
this.selectPageForGuiRowId(this.task.getGuiRowId(value, true));
|
|
128
|
+
}
|
|
129
|
+
getTableTopIndex() {
|
|
130
|
+
return this.task.Records.getGuiTopIndex();
|
|
131
|
+
}
|
|
132
|
+
static ɵfac = function MgMatTableService_Factory(t) { return new (t || MgMatTableService)(i0.ɵɵinject(i1.ComponentListMagicService), i0.ɵɵinject(i1.TaskMagicService)); };
|
|
133
|
+
static ɵprov = i0.ɵɵdefineInjectable({ token: MgMatTableService, factory: MgMatTableService.ɵfac });
|
|
134
|
+
}
|
|
135
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MgMatTableService, [{
|
|
136
|
+
type: Injectable
|
|
137
|
+
}], () => [{ type: i1.ComponentListMagicService }, { type: i1.TaskMagicService }], null); })();
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGFibGUubWFnaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItbWF0ZXJpYWwtY29yZS9zcmMvc2VydmljZXMvbWF0dGFibGUubWFnaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRyxPQUFPLEVBQVksY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7OztBQVN2RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsaUJBQWlCO0lBNkRoQztJQUFvRDtJQXpEMUUsVUFBVSxDQUE4QjtJQUt4QyxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUtELElBQUksVUFBVSxDQUFDLFVBQXVDO1FBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFLRCxTQUFTLENBQTBCO0lBS25DLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBS0QsSUFBSSxTQUFTLENBQUMsU0FBa0M7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUtELFNBQVMsQ0FBZTtJQUt4QixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUtELElBQUksU0FBUyxDQUFDLFNBQXVCO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lB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O0lBQ3RDLENBQUM7SUFLRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQ1osSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFLRCxnQkFBZ0I7UUFFZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzVDLENBQUM7MkVBclBVLGlCQUFpQjtrREFBakIsaUJBQWlCLFdBQWpCLGlCQUFpQjs7aUZBQWpCLGlCQUFpQjtjQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zXCI7XHJcblxyXG5pbXBvcnQgeyBUYXNrTWFnaWNTZXJ2aWNlLCBDb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLCBDb250cm9sc01ldGFkYXRhIH0gZnJvbSBcIkBtYWdpYy14cGEvYW5ndWxhclwiO1xyXG5pbXBvcnQge0lHdWlFdmVudCwgZ2V0R3VpRXZlbnRPYmp9IGZyb20gXCJAbWFnaWMteHBhL2VuZ2luZVwiO1xyXG5pbXBvcnQgeyBUYWJsZU1hZ2ljU2VydmljZSB9IGZyb20gXCJAbWFnaWMteHBhL2FuZ3VsYXJcIjtcclxuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuXHJcblxyXG4vKipcclxuICogRXh0ZW5kcyB0aGUgTWFnaWMgdGFibGUgc2VydmljZSB0byBzdXBwbHkgZnVuY3Rpb25hbGl0eSBmb3IgTWF0ZXJpYWwgRGVzaWduIHRhYmxlc1xyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTWdNYXRUYWJsZVNlcnZpY2UgZXh0ZW5kcyBUYWJsZU1hZ2ljU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogVGFibGUgZGF0YSBzb3VyY2VcclxuICAgKi9cclxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8RWxlbWVudD47XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBnZXQgRGF0YVNvdXJjZSgpOiBNYXRUYWJsZURhdGFTb3VyY2U8RWxlbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzZXQgRGF0YVNvdXJjZShkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8RWxlbWVudD4pIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm92aWRlcyBzZWxlY3Rpb24gb3B0aW9ucyBmb3IgdGhlIHRhYmxlXHJcbiAgICovXHJcbiAgc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxFbGVtZW50PjtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldCBTZWxlY3Rpb24oKTogU2VsZWN0aW9uTW9kZWw8RWxlbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldCBTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxFbGVtZW50Pikge1xyXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYWdpbmF0b3IgdG8gZW5hYmxlIGNoYW5naW5nIHBhZ2VzIGluIHRoZSB0YWJsZVxyXG4gICAqL1xyXG4gIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0IFBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xyXG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldCBQYWdpbmF0b3IocGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIHRoaXMucGFnaW5hdG9yID0gcGFnaW5hdG9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjb21wb25lbnRMaXN0OiBDb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLCBwcm90ZWN0ZWQgdGFzazogVGFza01hZ2ljU2VydmljZSApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudExpc3QsIHRhc2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29ubmVjdHMgdGhlIHNlcnZpY2UgdG8gdGhlIGVsZW1lbnRzIG9mIHRoZSB0YWJsZSBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBUYWJsZSBkYXRhIHNvdXJjZVxyXG4gICAqIEBwYXJhbSBwYWdpbmF0b3IgVGFibGUgcGFnaW5hdG9yXHJcbiAgICogQHBhcmFtIHNlbGVjdGlvbiB0YWJsZSBTZWxlY3Rpb25Nb2RlbFxyXG4gICAqL1xyXG4gIGNvbm5lY3QoZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPEVsZW1lbnQ+ICwgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IsIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8RWxlbWVudD4pIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICB0aGlzLnBhZ2luYXRvciA9IHBhZ2luYXRvcjtcclxuICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHJlZnJlc2hEYXRhU291cmNlKCkge1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLnBhZ2luYXRvcikpXHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuXHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9ICh0aGlzLnRhc2subWdBY2Nlc3NvclNlcnZpY2UuaXNEYXRhdmlld0VtcHR5KCkgPyBbXSA6IHRoaXMudGFzay5SZWNvcmRzLmxpc3QpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0dXJucyB0aGUgcGFnZSBzaXplIG9mIHRoZSB0YWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0UGFnZVNpemUoKTogbnVtYmVyIHtcclxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLnBhZ2luYXRvcikpXHJcbiAgICAgIHJldHVybiAxMDtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdHMgYSB0YWJsZSByb3dcclxuICAgKiBAcGFyYW0gZ3VpUm93aWQgSWQgb2Ygcm93IHRvIGJlIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgc2VsZWN0Um93KGd1aVJvd2lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHN1cGVyLnNlbGVjdFJvdyhndWlSb3dpZCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy50YXNrLlJlY29yZHMubGlzdFtndWlSb3dpZF0pO1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheXMgdGhlIHJlcXVlc3RlZCB0YWJsZSBwYWdlXHJcbiAgICogQHBhcmFtIHBhZ2VJZCBJZCBvZiBwYWdlIHRvIGJlIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgc2VsZWN0UGFnZShwYWdlSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLnBhZ2luYXRvcikpXHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VJZDtcclxuXHJcbiAgICB0aGlzLnJlZnJlc2hEYXRhU291cmNlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgc2VsZXRlZCByb3dcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHNlbGVjdGVkUm93KCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRbMF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIHBhZ2luYXRvcidzIFwicGFnZVwiIGV2ZW50XHJcbiAgICogQHBhcmFtIGUgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGNoYW5nZVNlbGVjdGVkUm93IFRoZSBmbGFnIHRydWUgb3IgZmFsc2UgdG8gaW5kaWNhdGUgY2hhbmdlIHRoZSByb3dcclxuICAgKi9cclxuICBtZ09uUGFnaW5hdGVDaGFuZ2UoZSwgY2hhbmdlU2VsZWN0ZWRSb3c/OiBib29sZWFuKVxyXG4gIHtcclxuICAgIGlmICh0aGlzLnRhc2sub2xkUGFnZVNpemUgIT0gZS5wYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZVJlc2l6ZShlLnBhZ2VJbmRleCwgZS5wcmV2aW91c1BhZ2VJbmRleCwgZS5wYWdlU2l6ZSk7XHJcbiAgICAgIHRoaXMudGFzay5vbGRQYWdlU2l6ZSA9IGUucGFnZVNpemU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGNoYW5nZVNlbGVjdGVkUm93KVxyXG4gICAgICB7XHJcbiAgICAgICAgbGV0IGV2dDogc3RyaW5nO1xyXG4gICAgICAgIGlmIChlLnBhZ2VJbmRleCA+IGUucHJldmlvdXNQYWdlSW5kZXgpIHtcclxuICAgICAgICAgIGV2dCA9IChlLnBhZ2VJbmRleCAtIGUucHJldmlvdXNQYWdlSW5kZXggPT09IDEpID8gXCJuZXh0LXBhZ2VcIiA6IFwiZW5kLXRhYmxlXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV2dCA9IChlLnByZXZpb3VzUGFnZUluZGV4IC0gZS5wYWdlSW5kZXggPT09IDEpID8gXCJwcmV2aW91cy1wYWdlXCIgOiBcImJlZ2luLXRhYmxlXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKFwibmF2aWdhdGVJblRhYmxlXCIsIFwibWFnaWNSb3dcIiwwKTtcclxuICAgICAgICBndWlFdmVudC5WYWx1ZSA9IGV2dDtcclxuICAgICAgICB0aGlzLnRhc2suaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmdldFJvd3NJZk5lZWRlZChlLnBhZ2VJbmRleCwgZS5wcmV2aW91c1BhZ2VJbmRleCwgZS5wYWdlU2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgcmVzaXplIGFuZCBzZXQgdGFibGUgdG9wIGluZGV4LlxyXG4gICAqIEBwYXJhbSBwYWdlSW5kZXggOiBOZXcgcGFnZSBpbmRleC5cclxuICAgKiBAcGFyYW0gcHJldlBhZ2VJbmRleCA6IFByZXYgcGFnZSBpbmRleFxyXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSA6IFBhZ2VTaXplXHJcbiAgICovXHJcbiAgaGFuZGxlUmVzaXplKHBhZ2VJbmRleDogbnVtYmVyLCBwcmV2UGFnZUluZGV4OiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCByZXF1aXJlZEd1aVJvd0lkID0gcGFnZUluZGV4ICogcGFnZVNpemU7XHJcbiAgICB0aGlzLnRhc2sucmVzaXplKHBhZ2VTaXplLCByZXF1aXJlZEd1aVJvd0lkKTtcclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSBnZXRSb3dzIHRvIGZldGNoIHJlcXVpcmVkIGNodW5rIG9mIHJlY29yZHMuXHJcbiAgICogQHBhcmFtIHBhZ2VJbmRleCA6IE5ldyBwYWdlIGluZGV4LlxyXG4gICAqIEBwYXJhbSBwcmV2UGFnZUluZGV4IDogUHJldiBwYWdlIGluZGV4XHJcbiAgICogQHBhcmFtIHBhZ2VTaXplIDogUGFnZVNpemVcclxuICAgKi9cclxuICBnZXRSb3dzSWZOZWVkZWQocGFnZUluZGV4OiBudW1iZXIsIHByZXZQYWdlSW5kZXg6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaihcImdldFJvd3NcIiwgXCJcIiwwKTtcclxuICAgIGd1aUV2ZW50LkxpbmUgPSBwYWdlSW5kZXggKiBwYWdlU2l6ZTtcclxuICAgIHRoaXMudGFzay5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgICB0aGlzLnNldFRhYmxlVG9wSW5kZXgodGhpcy50YXNrLmdldER2Um93SWQocGFnZVNpemUgKiBwYWdlSW5kZXgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIFwibWF0U29ydENoYW5nZVwiIGV2ZW50XHJcbiAgICogQHBhcmFtIGUgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICovXHJcbiAgc29ydERhdGEoZSkge1xyXG4gICAgbGV0IGRpcmVjdGlvbjogbnVtYmVyID0gMDtcclxuICAgIGlmIChlLmRpcmVjdGlvbiA9PT0gJ2FzYycpXHJcbiAgICAgIGRpcmVjdGlvbiA9IDA7XHJcbiAgICBlbHNlIGlmIChlLmRpcmVjdGlvbiA9PT0gJ2Rlc2MnKVxyXG4gICAgICBkaXJlY3Rpb24gPSAxO1xyXG5cclxuICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJjb2x1bW5Tb3J0XCIsIGUuYWN0aXZlLCBkaXJlY3Rpb24pO1xyXG4gICAgdGhpcy50YXNrLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYW5nZSB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIGEgdGFibGVcclxuICAgKiBAcGFyYW0gIHNpemUgTmV3IG51bWJlciBvZiBsaW5lcyBpbiB0YWJsZVxyXG4gICAqL1xyXG4gIHVwZGF0ZVRhYmxlU2l6ZShzaXplOiBudW1iZXIpIHtcclxuICAgIGlmIChzaXplID09PSAwKSAvLyBuZXZlciByZW1vdmUgcm93IDAgZm9yIG5vd1xyXG4gICAge1xyXG4gICAgICAgc2l6ZSA9IDE7XHJcbiAgICAgICB0aGlzLnRhc2suUmVjb3Jkcy5jbGVhckZpcnN0VGFibGVSZWNvcmQodGhpcy50YXNrLnRlbXBsYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLnBhZ2luYXRvcikpXHJcbiAgICAgICBzaXplID0gdGhpcy5nZXRQYWdlU2l6ZSgpO1xyXG5cclxuICAgIHRoaXMudGFzay5mb3JtR3JvdXBzLmxlbmd0aCA9IHNpemU7XHJcbiAgICB0aGlzLnRhc2suUmVjb3Jkcy51cGRhdGVTaXplKHNpemUpO1xyXG4gICAgdGhpcy50YXNrLnNldEluY2x1ZGVzRmlyc3QoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHRoZSBzZWxlY3Rpb24gb2Ygcm93IGFuZCBpZiBuZWVkZWQgbW92ZSB0byByZXNwZWN0aXZlIHBhZ2UuXHJcbiAgICogQHBhcmFtICBndWlSb3dJZCBOZXcgbnVtYmVyIG9mIGxpbmVzIGluIHRhYmxlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNlbGVjdFBhZ2VGb3JHdWlSb3dJZChndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgcGFnZVRvQmVTZWxlY3RlZDogbnVtYmVyID0gMDtcclxuICAgIGxldCBwcmV2U2VsZWN0ZWRSb3c6IENvbnRyb2xzTWV0YWRhdGEgPSA8Q29udHJvbHNNZXRhZGF0YT50aGlzLnNlbGVjdGVkUm93KCk7XHJcblxyXG4gICAgcGFnZVRvQmVTZWxlY3RlZCA9IE1hdGguZmxvb3IoZ3VpUm93SWQgLyB0aGlzLmdldFBhZ2VTaXplKCkpO1xyXG5cclxuICAgIC8vIEV4cGxpY2l0bHkgaGFuZGxlIHNlbGVjdGlvbiBvZiBwYWdlIHdoZW4gaXQncyBub3QgcmFpc2VkIGJ5IHVzaW5nIHBhZ2luYXRpb25cclxuICAgIGlmICgoaXNOdWxsT3JVbmRlZmluZWQocHJldlNlbGVjdGVkUm93KSB8fCAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMucGFnaW5hdG9yKSAmJiBwYWdlVG9CZVNlbGVjdGVkICE9IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCkpKVxyXG4gICAgICB0aGlzLnNlbGVjdFBhZ2UocGFnZVRvQmVTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0VGFibGVUb3BJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRhc2suUmVjb3Jkcy5zZXRHdWlUb3BJbmRleCh2YWx1ZSk7XHJcblxyXG4gICAgaWYgKHZhbHVlID49IDApXHJcbiAgICAgIHRoaXMuc2VsZWN0UGFnZUZvckd1aVJvd0lkKHRoaXMudGFzay5nZXRHdWlSb3dJZCh2YWx1ZSwgdHJ1ZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldFRhYmxlVG9wSW5kZXgoKTpudW1iZXJcclxuICB7XHJcbiAgICByZXR1cm4gdGhpcy50YXNrLlJlY29yZHMuZ2V0R3VpVG9wSW5kZXgoKTtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
|