@onecx/angular-accelerator 4.11.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 -0
- package/assets/i18n/de.json +130 -0
- package/assets/i18n/en.json +130 -0
- package/assets/images/placeholder.png +0 -0
- package/assets/styles.scss +8 -0
- package/esm2020/index.mjs +49 -0
- package/esm2020/lib/angular-accelerator-primeng.module.mjs +83 -0
- package/esm2020/lib/angular-accelerator.module.mjs +209 -0
- package/esm2020/lib/components/column-group-selection/column-group-selection.component.mjs +72 -0
- package/esm2020/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +108 -0
- package/esm2020/lib/components/data-layout-selection/data-layout-selection.component.mjs +45 -0
- package/esm2020/lib/components/data-list-grid/data-list-grid.component.mjs +358 -0
- package/esm2020/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +92 -0
- package/esm2020/lib/components/data-sort-base/data-sort-base.mjs +110 -0
- package/esm2020/lib/components/data-table/data-table.component.mjs +350 -0
- package/esm2020/lib/components/data-view/data-view.component.mjs +355 -0
- package/esm2020/lib/components/diagram/diagram.component.mjs +136 -0
- package/esm2020/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +109 -0
- package/esm2020/lib/components/interactive-data-view/interactive-data-view.component.mjs +342 -0
- package/esm2020/lib/components/page-header/page-header.component.mjs +189 -0
- package/esm2020/lib/components/search-config/search-config.component.mjs +34 -0
- package/esm2020/lib/components/search-header/search-header.component.mjs +136 -0
- package/esm2020/lib/directives/if-breakpoint.directive.mjs +39 -0
- package/esm2020/lib/directives/if-permission.directive.mjs +53 -0
- package/esm2020/lib/functions/flatten-object.mjs +20 -0
- package/esm2020/lib/model/breadcrumb-menu-item.model.mjs +2 -0
- package/esm2020/lib/model/column-type.model.mjs +9 -0
- package/esm2020/lib/model/data-action.mjs +2 -0
- package/esm2020/lib/model/data-column-name-id.model.mjs +2 -0
- package/esm2020/lib/model/data-sort-direction.mjs +2 -0
- package/esm2020/lib/model/data-table-column.model.mjs +2 -0
- package/esm2020/lib/model/diagram-column.mjs +2 -0
- package/esm2020/lib/model/diagram-data.mjs +2 -0
- package/esm2020/lib/model/diagram-type.mjs +2 -0
- package/esm2020/lib/model/search-config-info.mjs +2 -0
- package/esm2020/lib/pipes/dynamic.pipe.mjs +58 -0
- package/esm2020/lib/pipes/ocxtimeago.pipe.mjs +15 -0
- package/esm2020/lib/services/breadcrumb.service.mjs +79 -0
- package/esm2020/lib/services/translation-cache.service.mjs +54 -0
- package/esm2020/lib/utils/async-translate-loader.utils.mjs +12 -0
- package/esm2020/lib/utils/caching-translate-loader.utils.mjs +15 -0
- package/esm2020/lib/utils/colorutils.mjs +19 -0
- package/esm2020/lib/utils/create-translate-loader.utils.mjs +23 -0
- package/esm2020/lib/utils/dateutils.mjs +32 -0
- package/esm2020/lib/utils/objectutils.mjs +30 -0
- package/esm2020/lib/utils/ocxtimeagointl.utils.mjs +34 -0
- package/esm2020/lib/utils/primeicon.utils.mjs +2 -0
- package/esm2020/lib/utils/translate.combined.loader.mjs +36 -0
- package/esm2020/onecx-angular-accelerator.mjs +5 -0
- package/esm2020/testing/column-group-selection.harness.mjs +10 -0
- package/esm2020/testing/custom-group-column-selector.harness.mjs +31 -0
- package/esm2020/testing/data-layout-selection.harness.mjs +33 -0
- package/esm2020/testing/data-list-grid.harness.mjs +47 -0
- package/esm2020/testing/data-table.harness.mjs +57 -0
- package/esm2020/testing/data-view.harness.mjs +12 -0
- package/esm2020/testing/default-grid-item.harness.mjs +24 -0
- package/esm2020/testing/default-list-item.harness.mjs +24 -0
- package/esm2020/testing/diagram.harness.mjs +22 -0
- package/esm2020/testing/index.mjs +17 -0
- package/esm2020/testing/interactive-data-view.harness.mjs +19 -0
- package/esm2020/testing/more-actions-menu-button.harness.mjs +35 -0
- package/esm2020/testing/onecx-angular-accelerator-testing.mjs +5 -0
- package/esm2020/testing/page-header.harness.mjs +36 -0
- package/esm2020/testing/search-config.harness.mjs +10 -0
- package/fesm2015/onecx-angular-accelerator-testing.mjs +430 -0
- package/fesm2015/onecx-angular-accelerator-testing.mjs.map +1 -0
- package/fesm2015/onecx-angular-accelerator.mjs +3118 -0
- package/fesm2015/onecx-angular-accelerator.mjs.map +1 -0
- package/fesm2020/onecx-angular-accelerator-testing.mjs +338 -0
- package/fesm2020/onecx-angular-accelerator-testing.mjs.map +1 -0
- package/fesm2020/onecx-angular-accelerator.mjs +3085 -0
- package/fesm2020/onecx-angular-accelerator.mjs.map +1 -0
- package/index.d.ts +38 -0
- package/lib/angular-accelerator-primeng.module.d.ts +16 -0
- package/lib/angular-accelerator.module.d.ts +32 -0
- package/lib/components/column-group-selection/column-group-selection.component.d.ts +28 -0
- package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +45 -0
- package/lib/components/data-layout-selection/data-layout-selection.component.d.ts +25 -0
- package/lib/components/data-list-grid/data-list-grid.component.d.ts +120 -0
- package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +30 -0
- package/lib/components/data-sort-base/data-sort-base.d.ts +32 -0
- package/lib/components/data-table/data-table.component.d.ts +124 -0
- package/lib/components/data-view/data-view.component.d.ts +112 -0
- package/lib/components/diagram/diagram.component.d.ts +43 -0
- package/lib/components/group-by-count-diagram/group-by-count-diagram.component.d.ts +39 -0
- package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +108 -0
- package/lib/components/page-header/page-header.component.d.ts +90 -0
- package/lib/components/search-config/search-config.component.d.ts +16 -0
- package/lib/components/search-header/search-header.component.d.ts +46 -0
- package/lib/directives/if-breakpoint.directive.d.ts +12 -0
- package/lib/directives/if-permission.directive.d.ts +18 -0
- package/lib/functions/flatten-object.d.ts +14 -0
- package/lib/model/breadcrumb-menu-item.model.d.ts +60 -0
- package/lib/model/column-type.model.d.ts +7 -0
- package/lib/model/data-action.d.ts +9 -0
- package/lib/model/data-column-name-id.model.d.ts +4 -0
- package/lib/model/data-sort-direction.d.ts +5 -0
- package/lib/model/data-table-column.model.d.ts +9 -0
- package/lib/model/diagram-column.d.ts +5 -0
- package/lib/model/diagram-data.d.ts +4 -0
- package/lib/model/diagram-type.d.ts +5 -0
- package/lib/model/search-config-info.d.ts +4 -0
- package/lib/pipes/dynamic.pipe.d.ts +13 -0
- package/lib/pipes/ocxtimeago.pipe.d.ts +6 -0
- package/lib/services/breadcrumb.service.d.ts +20 -0
- package/lib/services/translation-cache.service.d.ts +12 -0
- package/lib/utils/async-translate-loader.utils.d.ts +9 -0
- package/lib/utils/caching-translate-loader.utils.d.ts +13 -0
- package/lib/utils/colorutils.d.ts +12 -0
- package/lib/utils/create-translate-loader.utils.d.ts +5 -0
- package/lib/utils/dateutils.d.ts +9 -0
- package/lib/utils/objectutils.d.ts +4 -0
- package/lib/utils/ocxtimeagointl.utils.d.ts +9 -0
- package/lib/utils/primeicon.utils.d.ts +5 -0
- package/lib/utils/translate.combined.loader.d.ts +9 -0
- package/package.json +55 -0
- package/testing/column-group-selection.harness.d.ts +6 -0
- package/testing/custom-group-column-selector.harness.d.ts +14 -0
- package/testing/data-layout-selection.harness.d.ts +11 -0
- package/testing/data-list-grid.harness.d.ts +15 -0
- package/testing/data-table.harness.d.ts +17 -0
- package/testing/data-view.harness.d.ts +8 -0
- package/testing/default-grid-item.harness.d.ts +11 -0
- package/testing/default-list-item.harness.d.ts +12 -0
- package/testing/diagram.harness.d.ts +10 -0
- package/testing/index.d.ts +16 -0
- package/testing/interactive-data-view.harness.d.ts +15 -0
- package/testing/more-actions-menu-button.harness.d.ts +10 -0
- package/testing/page-header.harness.d.ts +13 -0
- package/testing/search-config.harness.d.ts +6 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { Component, ContentChild, EventEmitter, Injector, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { DataListGridComponent } from '../data-list-grid/data-list-grid.component';
|
|
3
|
+
import { DataTableComponent } from '../data-table/data-table.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "../data-list-grid/data-list-grid.component";
|
|
7
|
+
import * as i3 from "../data-table/data-table.component";
|
|
8
|
+
export class DataViewComponent {
|
|
9
|
+
set listGrid(ref) {
|
|
10
|
+
this._dataListGridComponent = ref;
|
|
11
|
+
this.registerEventListenerForListGrid();
|
|
12
|
+
}
|
|
13
|
+
get listGrid() {
|
|
14
|
+
return this._dataListGridComponent;
|
|
15
|
+
}
|
|
16
|
+
set dataTable(ref) {
|
|
17
|
+
this._dataTableComponent = ref;
|
|
18
|
+
this.registerEventListenerForDataTable();
|
|
19
|
+
}
|
|
20
|
+
get dataTable() {
|
|
21
|
+
return this._dataTableComponent;
|
|
22
|
+
}
|
|
23
|
+
get paginator() {
|
|
24
|
+
return this.listGridPaginator && this.tablePaginator;
|
|
25
|
+
}
|
|
26
|
+
set paginator(value) {
|
|
27
|
+
this.listGridPaginator = value;
|
|
28
|
+
this.tablePaginator = value;
|
|
29
|
+
}
|
|
30
|
+
get _stringTableCell() {
|
|
31
|
+
return this.stringTableCellTemplate || this.stringTableCellChildTemplate;
|
|
32
|
+
}
|
|
33
|
+
get _numberTableCell() {
|
|
34
|
+
return this.numberTableCellTemplate || this.numberTableCellChildTemplate;
|
|
35
|
+
}
|
|
36
|
+
get _tableDateCell() {
|
|
37
|
+
return this.tableDateCellTemplate || this.tableDateCellChildTemplate;
|
|
38
|
+
}
|
|
39
|
+
get _tableCell() {
|
|
40
|
+
return this.tableCellTemplate || this.tableCellChildTemplate;
|
|
41
|
+
}
|
|
42
|
+
get _tableTranslationKeyCell() {
|
|
43
|
+
return this.tableTranslationKeyCellTemplate || this.tableTranslationKeyCellChildTemplate;
|
|
44
|
+
}
|
|
45
|
+
get _gridItemSubtitleLines() {
|
|
46
|
+
return this.gridItemSubtitleLinesTemplate || this.gridItemSubtitleLinesChildTemplate;
|
|
47
|
+
}
|
|
48
|
+
get _listItemSubtitleLines() {
|
|
49
|
+
return this.listItemSubtitleLinesTemplate || this.listItemSubtitleLinesChildTemplate;
|
|
50
|
+
}
|
|
51
|
+
get _gridItem() {
|
|
52
|
+
return this.gridItemTemplate || this.gridItemChildTemplate;
|
|
53
|
+
}
|
|
54
|
+
get _listItem() {
|
|
55
|
+
return this.listItemTemplate || this.listItemChildTemplate;
|
|
56
|
+
}
|
|
57
|
+
get _tableRelativeDateCell() {
|
|
58
|
+
return this.tableRelativeDateCellTemplate || this.tableRelativeDateCellChildTemplate;
|
|
59
|
+
}
|
|
60
|
+
get viewItemObserved() {
|
|
61
|
+
return this.injector.get('InteractiveDataViewComponent', null)?.viewItem.observed || this.viewItem.observed;
|
|
62
|
+
}
|
|
63
|
+
get editItemObserved() {
|
|
64
|
+
return this.injector.get('InteractiveDataViewComponent', null)?.editItem.observed || this.editItem.observed;
|
|
65
|
+
}
|
|
66
|
+
get deleteItemObserved() {
|
|
67
|
+
return this.injector.get('InteractiveDataViewComponent', null)?.deleteItem.observed || this.deleteItem.observed;
|
|
68
|
+
}
|
|
69
|
+
get selectionChangedObserved() {
|
|
70
|
+
return (this.injector.get('InteractiveDataViewComponent', null)?.selectionChanged.observed ||
|
|
71
|
+
this.selectionChanged.observed);
|
|
72
|
+
}
|
|
73
|
+
constructor(injector) {
|
|
74
|
+
this.injector = injector;
|
|
75
|
+
this.data = [];
|
|
76
|
+
this.name = 'Data table';
|
|
77
|
+
this.subtitleLineIds = [];
|
|
78
|
+
this.layout = ['grid', 'list', 'table'];
|
|
79
|
+
this.columns = [];
|
|
80
|
+
this.clientSideFiltering = true;
|
|
81
|
+
this.fallbackImage = 'placeholder.png';
|
|
82
|
+
this.filters = [];
|
|
83
|
+
this.sortField = '';
|
|
84
|
+
this.sortDirection = "NONE" /* DataSortDirection.NONE */;
|
|
85
|
+
this.listGridPaginator = true;
|
|
86
|
+
this.tablePaginator = true;
|
|
87
|
+
this.page = 0;
|
|
88
|
+
this.currentPageShowingKey = 'OCX_DATA_TABLE.SHOWING';
|
|
89
|
+
this.currentPageShowingWithTotalOnServerKey = 'OCX_DATA_TABLE.SHOWING_WITH_TOTAL_ON_SERVER';
|
|
90
|
+
this.selectedRows = [];
|
|
91
|
+
this.frozenActionColumn = false;
|
|
92
|
+
this.actionColumnPosition = 'right';
|
|
93
|
+
this.sortStates = ["ASCENDING" /* DataSortDirection.ASCENDING */, "DESCENDING" /* DataSortDirection.DESCENDING */];
|
|
94
|
+
this.pageSizes = [10, 25, 50];
|
|
95
|
+
this.pageSize = this.pageSizes?.[0] || 50;
|
|
96
|
+
this.additionalActions = [];
|
|
97
|
+
this.filtered = new EventEmitter();
|
|
98
|
+
this.sorted = new EventEmitter();
|
|
99
|
+
this.deleteItem = new EventEmitter();
|
|
100
|
+
this.viewItem = new EventEmitter();
|
|
101
|
+
this.editItem = new EventEmitter();
|
|
102
|
+
this.selectionChanged = new EventEmitter();
|
|
103
|
+
this.pageChanged = new EventEmitter();
|
|
104
|
+
}
|
|
105
|
+
ngOnInit() {
|
|
106
|
+
this.firstColumnId = this.columns[0]?.id;
|
|
107
|
+
}
|
|
108
|
+
ngDoCheck() {
|
|
109
|
+
this.registerEventListenerForDataTable();
|
|
110
|
+
this.registerEventListenerForListGrid();
|
|
111
|
+
}
|
|
112
|
+
registerEventListenerForListGrid() {
|
|
113
|
+
if (this.layout !== 'table') {
|
|
114
|
+
if (this.deleteItem.observed) {
|
|
115
|
+
this.isDeleteItemObserved = true;
|
|
116
|
+
if (!this._dataListGridComponent?.deleteItem.observed) {
|
|
117
|
+
this._dataListGridComponent?.deleteItem.subscribe((event) => {
|
|
118
|
+
this.deletingElement(event);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (this.viewItem.observed) {
|
|
123
|
+
this.isViewItemObserved = true;
|
|
124
|
+
if (!this._dataListGridComponent?.viewItem.observed) {
|
|
125
|
+
this._dataListGridComponent?.viewItem.subscribe((event) => {
|
|
126
|
+
this.viewingElement(event);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (this.editItem.observed) {
|
|
131
|
+
this.IsEditItemObserved = true;
|
|
132
|
+
if (!this._dataListGridComponent?.editItem.observed) {
|
|
133
|
+
this._dataListGridComponent?.editItem.subscribe((event) => {
|
|
134
|
+
this.editingElement(event);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
registerEventListenerForDataTable() {
|
|
141
|
+
if (this.layout === 'table') {
|
|
142
|
+
if (this.deleteItem.observed) {
|
|
143
|
+
this.isDeleteItemObserved = true;
|
|
144
|
+
if (!this._dataTableComponent?.deleteTableRow.observed) {
|
|
145
|
+
this._dataTableComponent?.deleteTableRow.subscribe((event) => {
|
|
146
|
+
this.deletingElement(event);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (this.viewItem.observed) {
|
|
151
|
+
this.isViewItemObserved = true;
|
|
152
|
+
if (!this._dataTableComponent?.viewTableRow.observed) {
|
|
153
|
+
this._dataTableComponent?.viewTableRow.subscribe((event) => {
|
|
154
|
+
this.viewingElement(event);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (this.editItem.observed) {
|
|
159
|
+
this.IsEditItemObserved = true;
|
|
160
|
+
if (!this._dataTableComponent?.editTableRow.observed) {
|
|
161
|
+
this._dataTableComponent?.editTableRow.subscribe((event) => {
|
|
162
|
+
this.editingElement(event);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (this.selectionChangedObserved) {
|
|
167
|
+
if (!this._dataTableComponent?.selectionChanged.observed) {
|
|
168
|
+
this._dataTableComponent?.selectionChanged.subscribe((event) => {
|
|
169
|
+
this.onRowSelectionChange(event);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
filtering(event) {
|
|
176
|
+
this.filters = event;
|
|
177
|
+
this.filtered.emit(event);
|
|
178
|
+
}
|
|
179
|
+
sorting(event) {
|
|
180
|
+
this.sortDirection = event.sortDirection;
|
|
181
|
+
this.sortField = event.sortColumn;
|
|
182
|
+
this.sorted.emit(event);
|
|
183
|
+
}
|
|
184
|
+
deletingElement(event) {
|
|
185
|
+
if (this.isDeleteItemObserved) {
|
|
186
|
+
this.deleteItem.emit(event);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
viewingElement(event) {
|
|
190
|
+
if (this.isViewItemObserved) {
|
|
191
|
+
this.viewItem.emit(event);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
editingElement(event) {
|
|
195
|
+
if (this.IsEditItemObserved) {
|
|
196
|
+
this.editItem.emit(event);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
onRowSelectionChange(event) {
|
|
200
|
+
if (this.selectionChangedObserved) {
|
|
201
|
+
this.selectionChanged.emit(event);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
onPageChange(event) {
|
|
205
|
+
this.page = event;
|
|
206
|
+
this.pageChanged.emit(event);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
DataViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DataViewComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
210
|
+
DataViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DataViewComponent, selector: "ocx-data-view", inputs: { deletePermission: "deletePermission", editPermission: "editPermission", viewPermission: "viewPermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", data: "data", name: "name", titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", layout: "layout", columns: "columns", emptyResultsMessage: "emptyResultsMessage", clientSideFiltering: "clientSideFiltering", fallbackImage: "fallbackImage", filters: "filters", sortField: "sortField", sortDirection: "sortDirection", listGridPaginator: "listGridPaginator", tablePaginator: "tablePaginator", page: "page", totalRecordsOnServer: "totalRecordsOnServer", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", selectedRows: "selectedRows", frozenActionColumn: "frozenActionColumn", actionColumnPosition: "actionColumnPosition", paginator: "paginator", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", stringTableCellTemplate: "stringTableCellTemplate", numberTableCellTemplate: "numberTableCellTemplate", tableDateCellTemplate: "tableDateCellTemplate", tableCellTemplate: "tableCellTemplate", tableTranslationKeyCellTemplate: "tableTranslationKeyCellTemplate", gridItemSubtitleLinesTemplate: "gridItemSubtitleLinesTemplate", listItemSubtitleLinesTemplate: "listItemSubtitleLinesTemplate", gridItemTemplate: "gridItemTemplate", listItemTemplate: "listItemTemplate", tableRelativeDateCellTemplate: "tableRelativeDateCellTemplate", additionalActions: "additionalActions" }, outputs: { filtered: "filtered", sorted: "sorted", deleteItem: "deleteItem", viewItem: "viewItem", editItem: "editItem", selectionChanged: "selectionChanged", pageChanged: "pageChanged" }, providers: [{ provide: 'DataViewComponent', useExisting: DataViewComponent }], queries: [{ propertyName: "stringTableCellChildTemplate", first: true, predicate: ["stringTableCell"], descendants: true }, { propertyName: "numberTableCellChildTemplate", first: true, predicate: ["numberTableCell"], descendants: true }, { propertyName: "tableDateCellChildTemplate", first: true, predicate: ["tableDateCell"], descendants: true }, { propertyName: "tableCellChildTemplate", first: true, predicate: ["tableCell"], descendants: true }, { propertyName: "tableTranslationKeyCellChildTemplate", first: true, predicate: ["tableTranslationKeyCell"], descendants: true }, { propertyName: "gridItemSubtitleLinesChildTemplate", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLinesChildTemplate", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "gridItemChildTemplate", first: true, predicate: ["gridItem"], descendants: true }, { propertyName: "listItemChildTemplate", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "tableRelativeDateCellChildTemplate", first: true, predicate: ["tableRelativeDateCell"], descendants: true }], viewQueries: [{ propertyName: "listGrid", first: true, predicate: DataListGridComponent, descendants: true }, { propertyName: "dataTable", first: true, predicate: DataTableComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"layout !== 'table'\">\n <ocx-data-list-grid\n #ocxdatalistgrid\n [name]=\"name\"\n [data]=\"data\"\n [columns]=\"columns\"\n [filters]=\"filters\"\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [sortStates]=\"sortStates\"\n [titleLineId]=\"titleLineId || firstColumnId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"true\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [paginator]=\"listGridPaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n >\n </ocx-data-list-grid>\n <ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n ></ng-template>\n <ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n ></ng-template>\n</div>\n\n<div *ngIf=\"layout === 'table'\">\n <ocx-data-table\n #ocxdatatable\n [rows]=\"data\"\n [columns]=\"columns\"\n [filters]=\"filters\"\n [sortDirection]=\"sortDirection\"\n [sortColumn]=\"sortField\"\n [sortStates]=\"sortStates\"\n [clientSideFiltering]=\"true\"\n [clientSideSorting]=\"true\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [paginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [stringCellTemplate]=\"_stringTableCell ? stringCell : undefined\"\n [numberCellTemplate]=\"_numberTableCell ? numberCell : undefined\"\n [dateCellTemplate]=\"_tableDateCell ? dateCell : undefined\"\n [relativeDateCellTemplate]=\"_tableRelativeDateCell ? relativeDateCell : undefined\"\n [cellTemplate]=\"_tableCell ? cell : undefined\"\n [translationKeyCellTemplate]=\"_tableTranslationKeyCell ? translationKeyCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n >\n </ocx-data-table>\n <ng-template #stringCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #numberCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableCell\"\n [ngTemplateOutlet]=\"_numberTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #dateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #relativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #cell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #translationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DataListGridComponent, selector: "ocx-data-list-grid", inputs: ["titleLineId", "subtitleLineIds", "clientSideSorting", "clientSideFiltering", "sortStates", "pageSizes", "pageSize", "emptyResultsMessage", "fallbackImage", "layout", "viewPermission", "editPermission", "deletePermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "viewMenuItemKey", "editMenuItemKey", "deleteMenuItemKey", "paginator", "page", "columns", "name", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "data", "filters", "sortDirection", "sortField", "gridItemSubtitleLinesTemplate", "listItemSubtitleLinesTemplate", "listItemTemplate", "gridItemTemplate", "additionalActions"], outputs: ["viewItem", "editItem", "deleteItem", "pageChanged"] }, { kind: "component", type: i3.DataTableComponent, selector: "ocx-data-table", inputs: ["rows", "selectedRows", "filters", "sortDirection", "sortColumn", "columns", "clientSideFiltering", "clientSideSorting", "sortStates", "pageSizes", "pageSize", "emptyResultsMessage", "name", "deletePermission", "viewPermission", "editPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "paginator", "page", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "stringCellTemplate", "numberCellTemplate", "dateCellTemplate", "relativeDateCellTemplate", "cellTemplate", "translationKeyCellTemplate", "additionalActions", "frozenActionColumn", "actionColumnPosition"], outputs: ["filtered", "sorted", "viewTableRow", "editTableRow", "deleteTableRow", "selectionChanged", "pageChanged"] }] });
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DataViewComponent, decorators: [{
|
|
212
|
+
type: Component,
|
|
213
|
+
args: [{ selector: 'ocx-data-view', providers: [{ provide: 'DataViewComponent', useExisting: DataViewComponent }], template: "<div *ngIf=\"layout !== 'table'\">\n <ocx-data-list-grid\n #ocxdatalistgrid\n [name]=\"name\"\n [data]=\"data\"\n [columns]=\"columns\"\n [filters]=\"filters\"\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [sortStates]=\"sortStates\"\n [titleLineId]=\"titleLineId || firstColumnId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"true\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [paginator]=\"listGridPaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n >\n </ocx-data-list-grid>\n <ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n ></ng-template>\n <ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n ></ng-template>\n</div>\n\n<div *ngIf=\"layout === 'table'\">\n <ocx-data-table\n #ocxdatatable\n [rows]=\"data\"\n [columns]=\"columns\"\n [filters]=\"filters\"\n [sortDirection]=\"sortDirection\"\n [sortColumn]=\"sortField\"\n [sortStates]=\"sortStates\"\n [clientSideFiltering]=\"true\"\n [clientSideSorting]=\"true\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [paginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [stringCellTemplate]=\"_stringTableCell ? stringCell : undefined\"\n [numberCellTemplate]=\"_numberTableCell ? numberCell : undefined\"\n [dateCellTemplate]=\"_tableDateCell ? dateCell : undefined\"\n [relativeDateCellTemplate]=\"_tableRelativeDateCell ? relativeDateCell : undefined\"\n [cellTemplate]=\"_tableCell ? cell : undefined\"\n [translationKeyCellTemplate]=\"_tableTranslationKeyCell ? translationKeyCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n >\n </ocx-data-table>\n <ng-template #stringCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #numberCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableCell\"\n [ngTemplateOutlet]=\"_numberTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #dateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #relativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #cell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #translationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n</div>\n" }]
|
|
214
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { listGrid: [{
|
|
215
|
+
type: ViewChild,
|
|
216
|
+
args: [DataListGridComponent]
|
|
217
|
+
}], dataTable: [{
|
|
218
|
+
type: ViewChild,
|
|
219
|
+
args: [DataTableComponent]
|
|
220
|
+
}], deletePermission: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], editPermission: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], viewPermission: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], deleteActionVisibleField: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], deleteActionEnabledField: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], viewActionVisibleField: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], viewActionEnabledField: [{
|
|
233
|
+
type: Input
|
|
234
|
+
}], editActionVisibleField: [{
|
|
235
|
+
type: Input
|
|
236
|
+
}], editActionEnabledField: [{
|
|
237
|
+
type: Input
|
|
238
|
+
}], data: [{
|
|
239
|
+
type: Input
|
|
240
|
+
}], name: [{
|
|
241
|
+
type: Input
|
|
242
|
+
}], titleLineId: [{
|
|
243
|
+
type: Input
|
|
244
|
+
}], subtitleLineIds: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}], layout: [{
|
|
247
|
+
type: Input
|
|
248
|
+
}], columns: [{
|
|
249
|
+
type: Input
|
|
250
|
+
}], emptyResultsMessage: [{
|
|
251
|
+
type: Input
|
|
252
|
+
}], clientSideFiltering: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}], fallbackImage: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], filters: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], sortField: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], sortDirection: [{
|
|
261
|
+
type: Input
|
|
262
|
+
}], listGridPaginator: [{
|
|
263
|
+
type: Input
|
|
264
|
+
}], tablePaginator: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], page: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], totalRecordsOnServer: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], currentPageShowingKey: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], currentPageShowingWithTotalOnServerKey: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], selectedRows: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], frozenActionColumn: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], actionColumnPosition: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], paginator: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], sortStates: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], pageSizes: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}], pageSize: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}], stringTableCellTemplate: [{
|
|
289
|
+
type: Input
|
|
290
|
+
}], stringTableCellChildTemplate: [{
|
|
291
|
+
type: ContentChild,
|
|
292
|
+
args: ['stringTableCell']
|
|
293
|
+
}], numberTableCellTemplate: [{
|
|
294
|
+
type: Input
|
|
295
|
+
}], numberTableCellChildTemplate: [{
|
|
296
|
+
type: ContentChild,
|
|
297
|
+
args: ['numberTableCell']
|
|
298
|
+
}], tableDateCellTemplate: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], tableDateCellChildTemplate: [{
|
|
301
|
+
type: ContentChild,
|
|
302
|
+
args: ['tableDateCell']
|
|
303
|
+
}], tableCellTemplate: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], tableCellChildTemplate: [{
|
|
306
|
+
type: ContentChild,
|
|
307
|
+
args: ['tableCell']
|
|
308
|
+
}], tableTranslationKeyCellTemplate: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}], tableTranslationKeyCellChildTemplate: [{
|
|
311
|
+
type: ContentChild,
|
|
312
|
+
args: ['tableTranslationKeyCell']
|
|
313
|
+
}], gridItemSubtitleLinesTemplate: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], gridItemSubtitleLinesChildTemplate: [{
|
|
316
|
+
type: ContentChild,
|
|
317
|
+
args: ['gridItemSubtitleLines']
|
|
318
|
+
}], listItemSubtitleLinesTemplate: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], listItemSubtitleLinesChildTemplate: [{
|
|
321
|
+
type: ContentChild,
|
|
322
|
+
args: ['listItemSubtitleLines']
|
|
323
|
+
}], gridItemTemplate: [{
|
|
324
|
+
type: Input
|
|
325
|
+
}], gridItemChildTemplate: [{
|
|
326
|
+
type: ContentChild,
|
|
327
|
+
args: ['gridItem']
|
|
328
|
+
}], listItemTemplate: [{
|
|
329
|
+
type: Input
|
|
330
|
+
}], listItemChildTemplate: [{
|
|
331
|
+
type: ContentChild,
|
|
332
|
+
args: ['listItem']
|
|
333
|
+
}], tableRelativeDateCellTemplate: [{
|
|
334
|
+
type: Input
|
|
335
|
+
}], tableRelativeDateCellChildTemplate: [{
|
|
336
|
+
type: ContentChild,
|
|
337
|
+
args: ['tableRelativeDateCell']
|
|
338
|
+
}], additionalActions: [{
|
|
339
|
+
type: Input
|
|
340
|
+
}], filtered: [{
|
|
341
|
+
type: Output
|
|
342
|
+
}], sorted: [{
|
|
343
|
+
type: Output
|
|
344
|
+
}], deleteItem: [{
|
|
345
|
+
type: Output
|
|
346
|
+
}], viewItem: [{
|
|
347
|
+
type: Output
|
|
348
|
+
}], editItem: [{
|
|
349
|
+
type: Output
|
|
350
|
+
}], selectionChanged: [{
|
|
351
|
+
type: Output
|
|
352
|
+
}], pageChanged: [{
|
|
353
|
+
type: Output
|
|
354
|
+
}] } });
|
|
355
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS12aWV3L2RhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBRVosWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUscUJBQXFCLEVBQWdCLE1BQU0sNENBQTRDLENBQUE7QUFDaEcsT0FBTyxFQUFxQixrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFBOzs7OztBQVkxRixNQUFNLE9BQU8saUJBQWlCO0lBRTVCLElBQXNDLFFBQVEsQ0FBQyxHQUFzQztRQUNuRixJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFBO0lBQ3pDLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQTtJQUNwQyxDQUFDO0lBR0QsSUFBbUMsU0FBUyxDQUFDLEdBQW1DO1FBQzlFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUE7UUFDOUIsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUE7SUFDMUMsQ0FBQztJQUNELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFBO0lBQ2pDLENBQUM7SUFnQ0QsSUFDSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsaUJBQWlCLElBQUks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dUJBQUMsdUJBQXVCO2dCQUs1Qiw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ2lDLGtDQUFrQztzQkFBeEUsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSTVCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDb0IscUJBQXFCO3NCQUE5QyxZQUFZO3VCQUFDLFVBQVU7Z0JBS2YsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNvQixxQkFBcUI7c0JBQTlDLFlBQVk7dUJBQUMsVUFBVTtnQkFLZiw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ2lDLGtDQUFrQztzQkFBeEUsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSzVCLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEb0NoZWNrLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBEYXRhTGlzdEdyaWRDb21wb25lbnQsIExpc3RHcmlkRGF0YSB9IGZyb20gJy4uL2RhdGEtbGlzdC1ncmlkL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudCdcbmltcG9ydCB7IFJvdywgRmlsdGVyLCBTb3J0LCBEYXRhVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS10YWJsZS1jb2x1bW4ubW9kZWwnXG5pbXBvcnQgeyBEYXRhU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtc29ydC1kaXJlY3Rpb24nXG5pbXBvcnQgeyBEYXRhQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1hY3Rpb24nXG5cbmV4cG9ydCB0eXBlIFJvd0xpc3RHcmlkRGF0YSA9IExpc3RHcmlkRGF0YSAmIFJvd1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2N4LWRhdGEtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXZpZXcuY29tcG9uZW50LmNzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6ICdEYXRhVmlld0NvbXBvbmVudCcsIHVzZUV4aXN0aW5nOiBEYXRhVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBPbkluaXQge1xuICBfZGF0YUxpc3RHcmlkQ29tcG9uZW50OiBEYXRhTGlzdEdyaWRDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgQFZpZXdDaGlsZChEYXRhTGlzdEdyaWRDb21wb25lbnQpIHNldCBsaXN0R3JpZChyZWY6IERhdGFMaXN0R3JpZENvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RhdGFMaXN0R3JpZENvbXBvbmVudCA9IHJlZlxuICAgIHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVyRm9yTGlzdEdyaWQoKVxuICB9XG4gIGdldCBsaXN0R3JpZCgpOiBEYXRhTGlzdEdyaWRDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhTGlzdEdyaWRDb21wb25lbnRcbiAgfVxuXG4gIF9kYXRhVGFibGVDb21wb25lbnQ6IERhdGFUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBAVmlld0NoaWxkKERhdGFUYWJsZUNvbXBvbmVudCkgc2V0IGRhdGFUYWJsZShyZWY6IERhdGFUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RhdGFUYWJsZUNvbXBvbmVudCA9IHJlZlxuICAgIHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVyRm9yRGF0YVRhYmxlKClcbiAgfVxuICBnZXQgZGF0YVRhYmxlKCk6IERhdGFUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFUYWJsZUNvbXBvbmVudFxuICB9XG4gIEBJbnB1dCgpIGRlbGV0ZVBlcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0UGVybWlzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdQZXJtaXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvblZpc2libGVGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdEFjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGRhdGE6IFJvd0xpc3RHcmlkRGF0YVtdID0gW11cbiAgQElucHV0KCkgbmFtZSA9ICdEYXRhIHRhYmxlJ1xuICBASW5wdXQoKSB0aXRsZUxpbmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHN1YnRpdGxlTGluZUlkczogc3RyaW5nW10gPSBbXVxuICBASW5wdXQoKSBsYXlvdXQ6IGFueSA9IFsnZ3JpZCcsICdsaXN0JywgJ3RhYmxlJ11cbiAgQElucHV0KCkgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10gPSBbXVxuICBASW5wdXQoKSBlbXB0eVJlc3VsdHNNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgY2xpZW50U2lkZUZpbHRlcmluZyA9IHRydWVcbiAgQElucHV0KCkgZmFsbGJhY2tJbWFnZSA9ICdwbGFjZWhvbGRlci5wbmcnXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEZpbHRlcltdID0gW11cbiAgQElucHV0KCkgc29ydEZpZWxkOiBhbnkgPSAnJ1xuICBASW5wdXQoKSBzb3J0RGlyZWN0aW9uOiBEYXRhU29ydERpcmVjdGlvbiA9IERhdGFTb3J0RGlyZWN0aW9uLk5PTkVcbiAgQElucHV0KCkgbGlzdEdyaWRQYWdpbmF0b3IgPSB0cnVlXG4gIEBJbnB1dCgpIHRhYmxlUGFnaW5hdG9yID0gdHJ1ZVxuICBASW5wdXQoKSBwYWdlID0gMFxuICBASW5wdXQoKSB0b3RhbFJlY29yZHNPblNlcnZlcjogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2hvd2luZ0tleSA9ICdPQ1hfREFUQV9UQUJMRS5TSE9XSU5HJ1xuICBASW5wdXQoKSBjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleSA9ICdPQ1hfREFUQV9UQUJMRS5TSE9XSU5HX1dJVEhfVE9UQUxfT05fU0VSVkVSJ1xuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFJvd1tdID0gW11cbiAgQElucHV0KCkgZnJvemVuQWN0aW9uQ29sdW1uID0gZmFsc2VcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1uUG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnXG5cbiAgQElucHV0KClcbiAgZ2V0IHBhZ2luYXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0R3JpZFBhZ2luYXRvciAmJiB0aGlzLnRhYmxlUGFnaW5hdG9yXG4gIH1cbiAgc2V0IHBhZ2luYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGlzdEdyaWRQYWdpbmF0b3IgPSB2YWx1ZVxuICAgIHRoaXMudGFibGVQYWdpbmF0b3IgPSB2YWx1ZVxuICB9XG5cbiAgQElucHV0KCkgc29ydFN0YXRlczogRGF0YVNvcnREaXJlY3Rpb25bXSA9IFtEYXRhU29ydERpcmVjdGlvbi5BU0NFTkRJTkcsIERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkddXG4gIEBJbnB1dCgpIHBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDI1LCA1MF1cbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IHRoaXMucGFnZVNpemVzPy5bMF0gfHwgNTBcblxuICBASW5wdXQoKSBzdHJpbmdUYWJsZUNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdUYWJsZUNlbGwnKSBzdHJpbmdUYWJsZUNlbGxDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfc3RyaW5nVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1RhYmxlQ2VsbFRlbXBsYXRlIHx8IHRoaXMuc3RyaW5nVGFibGVDZWxsQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgbnVtYmVyVGFibGVDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbnVtYmVyVGFibGVDZWxsJykgbnVtYmVyVGFibGVDZWxsQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX251bWJlclRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXJUYWJsZUNlbGxUZW1wbGF0ZSB8fCB0aGlzLm51bWJlclRhYmxlQ2VsbENoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIHRhYmxlRGF0ZUNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0YWJsZURhdGVDZWxsJykgdGFibGVEYXRlQ2VsbENoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF90YWJsZURhdGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRGF0ZUNlbGxUZW1wbGF0ZSB8fCB0aGlzLnRhYmxlRGF0ZUNlbGxDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSB0YWJsZUNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0YWJsZUNlbGwnKSB0YWJsZUNlbGxDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfdGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlQ2VsbFRlbXBsYXRlIHx8IHRoaXMudGFibGVDZWxsQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgdGFibGVUcmFuc2xhdGlvbktleUNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCcpIHRhYmxlVHJhbnNsYXRpb25LZXlDZWxsQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlVHJhbnNsYXRpb25LZXlDZWxsVGVtcGxhdGUgfHwgdGhpcy50YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbENoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtU3VidGl0bGVMaW5lcycpIGdyaWRJdGVtU3VidGl0bGVMaW5lc0NoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGUgfHwgdGhpcy5ncmlkSXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbVN1YnRpdGxlTGluZXMnKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlIHx8IHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIEBJbnB1dCgpIGdyaWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZ3JpZEl0ZW0nKSBncmlkSXRlbUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVRlbXBsYXRlIHx8IHRoaXMuZ3JpZEl0ZW1DaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0SXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2xpc3RJdGVtJykgbGlzdEl0ZW1DaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdEl0ZW0oKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1UZW1wbGF0ZSB8fCB0aGlzLmxpc3RJdGVtQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgdGFibGVSZWxhdGl2ZURhdGVDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndGFibGVSZWxhdGl2ZURhdGVDZWxsJykgdGFibGVSZWxhdGl2ZURhdGVDZWxsQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX3RhYmxlUmVsYXRpdmVEYXRlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlbGF0aXZlRGF0ZUNlbGxUZW1wbGF0ZSB8fCB0aGlzLnRhYmxlUmVsYXRpdmVEYXRlQ2VsbENoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxBY3Rpb25zOiBEYXRhQWN0aW9uW10gPSBbXVxuXG4gIEBPdXRwdXQoKSBmaWx0ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyW10+KClcbiAgQE91dHB1dCgpIHNvcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKVxuICBAT3V0cHV0KCkgZGVsZXRlSXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8Um93TGlzdEdyaWREYXRhPigpXG4gIEBPdXRwdXQoKSB2aWV3SXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8Um93TGlzdEdyaWREYXRhPigpXG4gIEBPdXRwdXQoKSBlZGl0SXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8Um93TGlzdEdyaWREYXRhPigpXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dbXT4oKVxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKVxuICBpc0RlbGV0ZUl0ZW1PYnNlcnZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBpc1ZpZXdJdGVtT2JzZXJ2ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgSXNFZGl0SXRlbU9ic2VydmVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGZpcnN0Q29sdW1uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIGdldCB2aWV3SXRlbU9ic2VydmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldCgnSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCcsIG51bGwpPy52aWV3SXRlbS5vYnNlcnZlZCB8fCB0aGlzLnZpZXdJdGVtLm9ic2VydmVkXG4gIH1cbiAgZ2V0IGVkaXRJdGVtT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KCdJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50JywgbnVsbCk/LmVkaXRJdGVtLm9ic2VydmVkIHx8IHRoaXMuZWRpdEl0ZW0ub2JzZXJ2ZWRcbiAgfVxuICBnZXQgZGVsZXRlSXRlbU9ic2VydmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldCgnSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCcsIG51bGwpPy5kZWxldGVJdGVtLm9ic2VydmVkIHx8IHRoaXMuZGVsZXRlSXRlbS5vYnNlcnZlZFxuICB9XG4gIGdldCBzZWxlY3Rpb25DaGFuZ2VkT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCdJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50JywgbnVsbCk/LnNlbGVjdGlvbkNoYW5nZWQub2JzZXJ2ZWQgfHxcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZFxuICAgIClcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlyc3RDb2x1bW5JZCA9IHRoaXMuY29sdW1uc1swXT8uaWRcbiAgfVxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVGFibGUoKVxuICAgIHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVyRm9yTGlzdEdyaWQoKVxuICB9XG4gIHJlZ2lzdGVyRXZlbnRMaXN0ZW5lckZvckxpc3RHcmlkKCkge1xuICAgIGlmICh0aGlzLmxheW91dCAhPT0gJ3RhYmxlJykge1xuICAgICAgaWYgKHRoaXMuZGVsZXRlSXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLmlzRGVsZXRlSXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgICBpZiAoIXRoaXMuX2RhdGFMaXN0R3JpZENvbXBvbmVudD8uZGVsZXRlSXRlbS5vYnNlcnZlZCkge1xuICAgICAgICAgIHRoaXMuX2RhdGFMaXN0R3JpZENvbXBvbmVudD8uZGVsZXRlSXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0aW5nRWxlbWVudChldmVudClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52aWV3SXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCA9IHRydWVcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhTGlzdEdyaWRDb21wb25lbnQ/LnZpZXdJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgICAgdGhpcy5fZGF0YUxpc3RHcmlkQ29tcG9uZW50Py52aWV3SXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpZXdpbmdFbGVtZW50KGV2ZW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuSXNFZGl0SXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgICBpZiAoIXRoaXMuX2RhdGFMaXN0R3JpZENvbXBvbmVudD8uZWRpdEl0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgICAgICB0aGlzLl9kYXRhTGlzdEdyaWRDb21wb25lbnQ/LmVkaXRJdGVtLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWRpdGluZ0VsZW1lbnQoZXZlbnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVGFibGUoKSB7XG4gICAgaWYgKHRoaXMubGF5b3V0ID09PSAndGFibGUnKSB7XG4gICAgICBpZiAodGhpcy5kZWxldGVJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuaXNEZWxldGVJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICAgIGlmICghdGhpcy5fZGF0YVRhYmxlQ29tcG9uZW50Py5kZWxldGVUYWJsZVJvdy5vYnNlcnZlZCkge1xuICAgICAgICAgIHRoaXMuX2RhdGFUYWJsZUNvbXBvbmVudD8uZGVsZXRlVGFibGVSb3cuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWxldGluZ0VsZW1lbnQoZXZlbnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgICAgdGhpcy5pc1ZpZXdJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICAgIGlmICghdGhpcy5fZGF0YVRhYmxlQ29tcG9uZW50Py52aWV3VGFibGVSb3cub2JzZXJ2ZWQpIHtcbiAgICAgICAgICB0aGlzLl9kYXRhVGFibGVDb21wb25lbnQ/LnZpZXdUYWJsZVJvdy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpZXdpbmdFbGVtZW50KGV2ZW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuSXNFZGl0SXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgICBpZiAoIXRoaXMuX2RhdGFUYWJsZUNvbXBvbmVudD8uZWRpdFRhYmxlUm93Lm9ic2VydmVkKSB7XG4gICAgICAgICAgdGhpcy5fZGF0YVRhYmxlQ29tcG9uZW50Py5lZGl0VGFibGVSb3cuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lZGl0aW5nRWxlbWVudChldmVudClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkT2JzZXJ2ZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhVGFibGVDb21wb25lbnQ/LnNlbGVjdGlvbkNoYW5nZWQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICB0aGlzLl9kYXRhVGFibGVDb21wb25lbnQ/LnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblJvd1NlbGVjdGlvbkNoYW5nZShldmVudClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyaW5nKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBldmVudFxuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChldmVudClcbiAgfVxuXG4gIHNvcnRpbmcoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IGV2ZW50LnNvcnREaXJlY3Rpb25cbiAgICB0aGlzLnNvcnRGaWVsZCA9IGV2ZW50LnNvcnRDb2x1bW5cbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgZGVsZXRpbmdFbGVtZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0RlbGV0ZUl0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy5kZWxldGVJdGVtLmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgdmlld2luZ0VsZW1lbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy52aWV3SXRlbS5lbWl0KGV2ZW50KVxuICAgIH1cbiAgfVxuICBlZGl0aW5nRWxlbWVudChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuSXNFZGl0SXRlbU9ic2VydmVkKSB7XG4gICAgICB0aGlzLmVkaXRJdGVtLmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgb25Sb3dTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFJvd1tdKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZE9ic2VydmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChldmVudClcbiAgICB9XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZSA9IGV2ZW50XG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KGV2ZW50KVxuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwibGF5b3V0ICE9PSAndGFibGUnXCI+XG4gIDxvY3gtZGF0YS1saXN0LWdyaWRcbiAgICAjb2N4ZGF0YWxpc3RncmlkXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgW3NvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiXG4gICAgW3NvcnRGaWVsZF09XCJzb3J0RmllbGRcIlxuICAgIFtzb3J0U3RhdGVzXT1cInNvcnRTdGF0ZXNcIlxuICAgIFt0aXRsZUxpbmVJZF09XCJ0aXRsZUxpbmVJZCB8fCBmaXJzdENvbHVtbklkXCJcbiAgICBbc3VidGl0bGVMaW5lSWRzXT1cInN1YnRpdGxlTGluZUlkc1wiXG4gICAgW2NsaWVudFNpZGVTb3J0aW5nXT1cInRydWVcIlxuICAgIFtwYWdlU2l6ZXNdPVwicGFnZVNpemVzXCJcbiAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgIFtwYWdpbmF0b3JdPVwibGlzdEdyaWRQYWdpbmF0b3JcIlxuICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW2VtcHR5UmVzdWx0c01lc3NhZ2VdPVwiZW1wdHlSZXN1bHRzTWVzc2FnZVwiXG4gICAgW2xheW91dF09XCJsYXlvdXRcIlxuICAgIFtkZWxldGVQZXJtaXNzaW9uXT1cImRlbGV0ZVBlcm1pc3Npb25cIlxuICAgIFtlZGl0UGVybWlzc2lvbl09XCJlZGl0UGVybWlzc2lvblwiXG4gICAgW3ZpZXdQZXJtaXNzaW9uXT1cInZpZXdQZXJtaXNzaW9uXCJcbiAgICBbZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkXT1cImRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW2RlbGV0ZUFjdGlvblZpc2libGVGaWVsZF09XCJkZWxldGVBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uRW5hYmxlZEZpZWxkXT1cImVkaXRBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uVmlzaWJsZUZpZWxkXT1cImVkaXRBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uRW5hYmxlZEZpZWxkXT1cInZpZXdBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uVmlzaWJsZUZpZWxkXT1cInZpZXdBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFthZGRpdGlvbmFsQWN0aW9uc109XCJhZGRpdGlvbmFsQWN0aW9uc1wiXG4gICAgW2dyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlXT1cIl9ncmlkSXRlbVN1YnRpdGxlTGluZXMgPyBncmlkSXRlbVN1YnRpdGxlTGluZXMgOiB1bmRlZmluZWRcIlxuICAgIFtsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZV09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzID8gbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIDogdW5kZWZpbmVkXCJcbiAgICBbbGlzdEl0ZW1UZW1wbGF0ZV09XCJfbGlzdEl0ZW0gPyBsaXN0SXRlbSA6IHVuZGVmaW5lZFwiXG4gICAgW2dyaWRJdGVtVGVtcGxhdGVdPVwiX2dyaWRJdGVtID8gZ3JpZEl0ZW0gIDogdW5kZWZpbmVkXCJcbiAgICBbdG90YWxSZWNvcmRzT25TZXJ2ZXJdPVwidG90YWxSZWNvcmRzT25TZXJ2ZXJcIlxuICA+XG4gIDwvb2N4LWRhdGEtbGlzdC1ncmlkPlxuICA8bmctdGVtcGxhdGUgI2xpc3RJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9saXN0SXRlbVN1YnRpdGxlTGluZXNcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2xpc3RJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2dyaWRJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9ncmlkSXRlbVN1YnRpdGxlTGluZXNcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2dyaWRJdGVtIGxldC1pdGVtPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfZ3JpZEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJfZ3JpZEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2xpc3RJdGVtIGxldC1pdGVtPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJsYXlvdXQgPT09ICd0YWJsZSdcIj5cbiAgPG9jeC1kYXRhLXRhYmxlXG4gICAgI29jeGRhdGF0YWJsZVxuICAgIFtyb3dzXT1cImRhdGFcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgIFtzb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgIFtzb3J0Q29sdW1uXT1cInNvcnRGaWVsZFwiXG4gICAgW3NvcnRTdGF0ZXNdPVwic29ydFN0YXRlc1wiXG4gICAgW2NsaWVudFNpZGVGaWx0ZXJpbmddPVwidHJ1ZVwiXG4gICAgW2NsaWVudFNpZGVTb3J0aW5nXT1cInRydWVcIlxuICAgIFtwYWdlU2l6ZXNdPVwicGFnZVNpemVzXCJcbiAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgIFtwYWdpbmF0b3JdPVwidGFibGVQYWdpbmF0b3JcIlxuICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW3NlbGVjdGVkUm93c109XCJzZWxlY3RlZFJvd3NcIlxuICAgIFtmcm96ZW5BY3Rpb25Db2x1bW5dPVwiZnJvemVuQWN0aW9uQ29sdW1uXCJcbiAgICBbYWN0aW9uQ29sdW1uUG9zaXRpb25dPVwiYWN0aW9uQ29sdW1uUG9zaXRpb25cIlxuICAgIFtlbXB0eVJlc3VsdHNNZXNzYWdlXT1cImVtcHR5UmVzdWx0c01lc3NhZ2VcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtkZWxldGVQZXJtaXNzaW9uXT1cImRlbGV0ZVBlcm1pc3Npb25cIlxuICAgIFtlZGl0UGVybWlzc2lvbl09XCJlZGl0UGVybWlzc2lvblwiXG4gICAgW3ZpZXdQZXJtaXNzaW9uXT1cInZpZXdQZXJtaXNzaW9uXCJcbiAgICBbZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkXT1cImRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW2RlbGV0ZUFjdGlvblZpc2libGVGaWVsZF09XCJkZWxldGVBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uRW5hYmxlZEZpZWxkXT1cImVkaXRBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uVmlzaWJsZUZpZWxkXT1cImVkaXRBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uRW5hYmxlZEZpZWxkXT1cInZpZXdBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uVmlzaWJsZUZpZWxkXT1cInZpZXdBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFthZGRpdGlvbmFsQWN0aW9uc109XCJhZGRpdGlvbmFsQWN0aW9uc1wiXG4gICAgW3N0cmluZ0NlbGxUZW1wbGF0ZV09XCJfc3RyaW5nVGFibGVDZWxsID8gc3RyaW5nQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW251bWJlckNlbGxUZW1wbGF0ZV09XCJfbnVtYmVyVGFibGVDZWxsID8gbnVtYmVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2RhdGVDZWxsVGVtcGxhdGVdPVwiX3RhYmxlRGF0ZUNlbGwgPyBkYXRlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3JlbGF0aXZlRGF0ZUNlbGxUZW1wbGF0ZV09XCJfdGFibGVSZWxhdGl2ZURhdGVDZWxsID8gcmVsYXRpdmVEYXRlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2NlbGxUZW1wbGF0ZV09XCJfdGFibGVDZWxsID8gY2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5Q2VsbFRlbXBsYXRlXT1cIl90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCA/IHRyYW5zbGF0aW9uS2V5Q2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgKHNvcnRlZCk9XCJzb3J0aW5nKCRldmVudClcIlxuICAgIChmaWx0ZXJlZCk9XCJmaWx0ZXJpbmcoJGV2ZW50KVwiXG4gICAgW3RvdGFsUmVjb3Jkc09uU2VydmVyXT1cInRvdGFsUmVjb3Jkc09uU2VydmVyXCJcbiAgICBbY3VycmVudFBhZ2VTaG93aW5nS2V5XT1cImN1cnJlbnRQYWdlU2hvd2luZ0tleVwiXG4gICAgW2N1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5XT1cImN1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5XCJcbiAgPlxuICA8L29jeC1kYXRhLXRhYmxlPlxuICA8bmctdGVtcGxhdGUgI3N0cmluZ0NlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9zdHJpbmdUYWJsZUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI251bWJlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9udW1iZXJUYWJsZUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX251bWJlclRhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2RhdGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJfdGFibGVEYXRlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdGFibGVEYXRlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjcmVsYXRpdmVEYXRlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX3RhYmxlUmVsYXRpdmVEYXRlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdGFibGVSZWxhdGl2ZURhdGVDZWxsXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lclxuICA+PC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJfdGFibGVDZWxsXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lclxuICA+PC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvbktleUNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdGFibGVUcmFuc2xhdGlvbktleUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6cm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
3
|
+
import * as d3 from 'd3-scale-chromatic';
|
|
4
|
+
import { PrimeIcons } from 'primeng/api';
|
|
5
|
+
import { ColorUtils } from '../../utils/colorutils';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngx-translate/core";
|
|
8
|
+
import * as i2 from "@angular/common";
|
|
9
|
+
import * as i3 from "primeng/api";
|
|
10
|
+
import * as i4 from "primeng/selectbutton";
|
|
11
|
+
import * as i5 from "primeng/chart";
|
|
12
|
+
import * as i6 from "@angular/forms";
|
|
13
|
+
const allDiagramTypes = [
|
|
14
|
+
{ icon: PrimeIcons.CHART_PIE, layout: "PIE" /* DiagramType.PIE */, titleKey: 'OCX_DIAGRAM.SWITCH_DIAGRAM_TYPE.PIE' },
|
|
15
|
+
{
|
|
16
|
+
icon: PrimeIcons.BARS,
|
|
17
|
+
layout: "HORIZONTAL_BAR" /* DiagramType.HORIZONTAL_BAR */,
|
|
18
|
+
titleKey: 'OCX_DIAGRAM.SWITCH_DIAGRAM_TYPE.HORIZONTAL_BAR',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
icon: PrimeIcons.CHART_BAR,
|
|
22
|
+
layout: "VERTICAL_BAR" /* DiagramType.VERTICAL_BAR */,
|
|
23
|
+
titleKey: 'OCX_DIAGRAM.SWITCH_DIAGRAM_TYPE.VERTICAL_BAR',
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
export class DiagramComponent {
|
|
27
|
+
get diagramType() {
|
|
28
|
+
return this._diagramType;
|
|
29
|
+
}
|
|
30
|
+
set diagramType(value) {
|
|
31
|
+
this._diagramType = value;
|
|
32
|
+
this.selectedDiagramType = allDiagramTypes.find((v) => v.layout === value);
|
|
33
|
+
this.chartType = this.diagramTypeToChartType(value);
|
|
34
|
+
}
|
|
35
|
+
get supportedDiagramTypes() {
|
|
36
|
+
return this._supportedDiagramTypes;
|
|
37
|
+
}
|
|
38
|
+
set supportedDiagramTypes(value) {
|
|
39
|
+
this._supportedDiagramTypes = value;
|
|
40
|
+
this.shownDiagramTypes = allDiagramTypes.filter((vl) => this.supportedDiagramTypes.includes(vl.layout));
|
|
41
|
+
}
|
|
42
|
+
constructor(translateService) {
|
|
43
|
+
this.translateService = translateService;
|
|
44
|
+
this.sumKey = 'OCX_DIAGRAM.SUM';
|
|
45
|
+
this._diagramType = "PIE" /* DiagramType.PIE */;
|
|
46
|
+
this.chartType = 'pie';
|
|
47
|
+
this._supportedDiagramTypes = [];
|
|
48
|
+
this.dataSelected = new EventEmitter();
|
|
49
|
+
this.diagramTypeChanged = new EventEmitter();
|
|
50
|
+
this.shownDiagramTypes = [];
|
|
51
|
+
// Changing the colorRangeInfo, will change the range of the color palette of the diagram.
|
|
52
|
+
this.colorRangeInfo = {
|
|
53
|
+
colorStart: 0,
|
|
54
|
+
colorEnd: 1,
|
|
55
|
+
useEndAsStart: false,
|
|
56
|
+
};
|
|
57
|
+
// Changing the colorScale, will change the thematic color appearance of the diagram.
|
|
58
|
+
this.colorScale = d3.interpolateCool;
|
|
59
|
+
}
|
|
60
|
+
ngOnChanges() {
|
|
61
|
+
this.generateChart(this.colorScale, this.colorRangeInfo);
|
|
62
|
+
}
|
|
63
|
+
ngOnInit() {
|
|
64
|
+
this.generateChart(this.colorScale, this.colorRangeInfo);
|
|
65
|
+
}
|
|
66
|
+
generateChart(colorScale, colorRangeInfo) {
|
|
67
|
+
if (this.data) {
|
|
68
|
+
const inputData = this.data.map((diagramData) => diagramData.value);
|
|
69
|
+
this.amountOfData = this.data.reduce((acc, current) => acc + current.value, 0);
|
|
70
|
+
const COLORS = interpolateColors(this.data.length, colorScale, colorRangeInfo);
|
|
71
|
+
this.chartData = {
|
|
72
|
+
labels: this.data.map((data) => data.label),
|
|
73
|
+
datasets: [
|
|
74
|
+
{
|
|
75
|
+
data: inputData,
|
|
76
|
+
backgroundColor: COLORS,
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
this.chartOptions = {
|
|
82
|
+
plugins: {
|
|
83
|
+
legend: {
|
|
84
|
+
position: 'bottom',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
maintainAspectRatio: false,
|
|
88
|
+
...(this._diagramType === "VERTICAL_BAR" /* DiagramType.VERTICAL_BAR */ && {
|
|
89
|
+
plugins: { legend: { display: false } },
|
|
90
|
+
scales: { y: { ticks: { precision: 0 } } },
|
|
91
|
+
}),
|
|
92
|
+
...(this._diagramType === "HORIZONTAL_BAR" /* DiagramType.HORIZONTAL_BAR */ && {
|
|
93
|
+
indexAxis: 'y',
|
|
94
|
+
plugins: { legend: { display: false } },
|
|
95
|
+
scales: { x: { ticks: { precision: 0 } } },
|
|
96
|
+
}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
diagramTypeToChartType(value) {
|
|
100
|
+
if (value === "PIE" /* DiagramType.PIE */)
|
|
101
|
+
return 'pie';
|
|
102
|
+
else if (value === "HORIZONTAL_BAR" /* DiagramType.HORIZONTAL_BAR */ || value === "VERTICAL_BAR" /* DiagramType.VERTICAL_BAR */)
|
|
103
|
+
return 'bar';
|
|
104
|
+
return 'pie';
|
|
105
|
+
}
|
|
106
|
+
dataClicked(event) {
|
|
107
|
+
this.dataSelected.emit(event.length);
|
|
108
|
+
}
|
|
109
|
+
onDiagramTypeChanged(event) {
|
|
110
|
+
this.diagramType = event.value.layout;
|
|
111
|
+
this.generateChart(this.colorScale, this.colorRangeInfo);
|
|
112
|
+
this.diagramTypeChanged.emit(event.value.layout);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
DiagramComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DiagramComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
+
DiagramComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DiagramComponent, selector: "ocx-diagram", inputs: { data: "data", sumKey: "sumKey", diagramType: "diagramType", supportedDiagramTypes: "supportedDiagramTypes" }, outputs: { dataSelected: "dataSelected", diagramTypeChanged: "diagramTypeChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"this.data\">\n <div class=\"flex justify-content-center pb-2\" *ngIf=\"shownDiagramTypes.length > 1\">\n <p-selectButton\n [options]=\"shownDiagramTypes\"\n [(ngModel)]=\"selectedDiagramType\"\n optionLabel=\"icon\"\n (onChange)=\"onDiagramTypeChanged($event)\"\n name=\"diagram-type-select-button\"\n >\n <ng-template let-item pTemplate>\n <i [class]=\"item.icon\" [title]=\"item.title || (item.titleKey | translate)\"></i>\n </ng-template>\n </p-selectButton>\n </div>\n <div class=\"w-full flex justify-content-center\">\n <p-chart\n id=\"diagram\"\n [type]=\"chartType\"\n [data]=\"chartData\"\n [responsive]=\"false\"\n [options]=\"chartOptions\"\n (onDataSelect)=\"dataClicked($event)\"\n ></p-chart>\n </div>\n <div class=\"w-full flex justify-content-center mt-2 sumKey\">\n <p class=\"text-md font-medium text-700\">\n <span name=\"sumLabel\"> {{ sumKey | translate }}</span> : <span name=\"amountOfData\">{{ amountOfData}}</span>\n </p>\n </div>\n</ng-container>\n\n<div *ngIf=\"!this.data\" class=\"w-full flex justify-content-center\">\n <p-message severity=\"info\" text=\"{{ 'OCX_DIAGRAM.NO_DATA' | translate }}\"></p-message>\n</div>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "component", type: i5.UIChart, selector: "p-chart", inputs: ["type", "plugins", "width", "height", "responsive", "data", "options"], outputs: ["onDataSelect"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DiagramComponent, decorators: [{
|
|
118
|
+
type: Component,
|
|
119
|
+
args: [{ selector: 'ocx-diagram', template: "<ng-container *ngIf=\"this.data\">\n <div class=\"flex justify-content-center pb-2\" *ngIf=\"shownDiagramTypes.length > 1\">\n <p-selectButton\n [options]=\"shownDiagramTypes\"\n [(ngModel)]=\"selectedDiagramType\"\n optionLabel=\"icon\"\n (onChange)=\"onDiagramTypeChanged($event)\"\n name=\"diagram-type-select-button\"\n >\n <ng-template let-item pTemplate>\n <i [class]=\"item.icon\" [title]=\"item.title || (item.titleKey | translate)\"></i>\n </ng-template>\n </p-selectButton>\n </div>\n <div class=\"w-full flex justify-content-center\">\n <p-chart\n id=\"diagram\"\n [type]=\"chartType\"\n [data]=\"chartData\"\n [responsive]=\"false\"\n [options]=\"chartOptions\"\n (onDataSelect)=\"dataClicked($event)\"\n ></p-chart>\n </div>\n <div class=\"w-full flex justify-content-center mt-2 sumKey\">\n <p class=\"text-md font-medium text-700\">\n <span name=\"sumLabel\"> {{ sumKey | translate }}</span> : <span name=\"amountOfData\">{{ amountOfData}}</span>\n </p>\n </div>\n</ng-container>\n\n<div *ngIf=\"!this.data\" class=\"w-full flex justify-content-center\">\n <p-message severity=\"info\" text=\"{{ 'OCX_DIAGRAM.NO_DATA' | translate }}\"></p-message>\n</div>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}\n"] }]
|
|
120
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { data: [{
|
|
121
|
+
type: Input
|
|
122
|
+
}], sumKey: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], diagramType: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], supportedDiagramTypes: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], dataSelected: [{
|
|
129
|
+
type: Output
|
|
130
|
+
}], diagramTypeChanged: [{
|
|
131
|
+
type: Output
|
|
132
|
+
}] } });
|
|
133
|
+
function interpolateColors(amountOfData, colorScale, colorRangeInfo) {
|
|
134
|
+
return ColorUtils.interpolateColors(amountOfData, colorScale, colorRangeInfo);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RpYWdyYW0vZGlhZ3JhbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RpYWdyYW0vZGlhZ3JhbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUV0RCxPQUFPLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFHeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFBOzs7Ozs7OztBQVVuRCxNQUFNLGVBQWUsR0FBcUI7SUFDeEMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLDZCQUFpQixFQUFFLFFBQVEsRUFBRSxxQ0FBcUMsRUFBRTtJQUN4RztRQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixNQUFNLG1EQUE0QjtRQUNsQyxRQUFRLEVBQUUsZ0RBQWdEO0tBQzNEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLFNBQVM7UUFDMUIsTUFBTSwrQ0FBMEI7UUFDaEMsUUFBUSxFQUFFLDhDQUE4QztLQUN6RDtDQUNGLENBQUE7QUFPRCxNQUFNLE9BQU8sZ0JBQWdCO0lBTTNCLElBQ0ksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQTtJQUMxQixDQUFDO0lBQ0QsSUFBSSxX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S0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xELENBQUM7OzhHQWxHVSxnQkFBZ0I7a0dBQWhCLGdCQUFnQixxUkNwQzdCLHF4Q0FrQ0E7NEZERWEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWE7dUdBS2QsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFLRixXQUFXO3NCQURkLEtBQUs7Z0JBV0YscUJBQXFCO3NCQUR4QixLQUFLO2dCQVFJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNOztBQTJFVCxTQUFTLGlCQUFpQixDQUFDLFlBQW9CLEVBQUUsVUFBZSxFQUFFLGNBQW1CO0lBQ25GLE9BQU8sVUFBVSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUE7QUFDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IENoYXJ0RGF0YSwgQ2hhcnRPcHRpb25zIH0gZnJvbSAnY2hhcnQuanMnXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMy1zY2FsZS1jaHJvbWF0aWMnXG5pbXBvcnQgeyBQcmltZUljb25zIH0gZnJvbSAncHJpbWVuZy9hcGknXG5pbXBvcnQgeyBEaWFncmFtRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsL2RpYWdyYW0tZGF0YSdcbmltcG9ydCB7IERpYWdyYW1UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGlhZ3JhbS10eXBlJ1xuaW1wb3J0IHsgQ29sb3JVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbG9ydXRpbHMnXG5pbXBvcnQgeyBQcmltZUljb24gfSBmcm9tICcuLi8uLi91dGlscy9wcmltZWljb24udXRpbHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ3JhbUxheW91dHMge1xuICBpY29uOiBQcmltZUljb25cbiAgbGF5b3V0OiBEaWFncmFtVHlwZVxuICB0aXRsZT86IHN0cmluZ1xuICB0aXRsZUtleTogc3RyaW5nXG59XG5cbmNvbnN0IGFsbERpYWdyYW1UeXBlczogRGlhZ3JhbUxheW91dHNbXSA9IFtcbiAgeyBpY29uOiBQcmltZUljb25zLkNIQVJUX1BJRSwgbGF5b3V0OiBEaWFncmFtVHlwZS5QSUUsIHRpdGxlS2V5OiAnT0NYX0RJQUdSQU0uU1dJVENIX0RJQUdSQU1fVFlQRS5QSUUnIH0sXG4gIHtcbiAgICBpY29uOiBQcmltZUljb25zLkJBUlMsXG4gICAgbGF5b3V0OiBEaWFncmFtVHlwZS5IT1JJWk9OVEFMX0JBUixcbiAgICB0aXRsZUtleTogJ09DWF9ESUFHUkFNLlNXSVRDSF9ESUFHUkFNX1RZUEUuSE9SSVpPTlRBTF9CQVInLFxuICB9LFxuICB7XG4gICAgaWNvbjogUHJpbWVJY29ucy5DSEFSVF9CQVIsXG4gICAgbGF5b3V0OiBEaWFncmFtVHlwZS5WRVJUSUNBTF9CQVIsXG4gICAgdGl0bGVLZXk6ICdPQ1hfRElBR1JBTS5TV0lUQ0hfRElBR1JBTV9UWVBFLlZFUlRJQ0FMX0JBUicsXG4gIH0sXG5dXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29jeC1kaWFncmFtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWdyYW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kaWFncmFtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERpYWdyYW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGRhdGE6IERpYWdyYW1EYXRhW10gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgc3VtS2V5ID0gJ09DWF9ESUFHUkFNLlNVTSdcbiAgcHJpdmF0ZSBfZGlhZ3JhbVR5cGU6IERpYWdyYW1UeXBlID0gRGlhZ3JhbVR5cGUuUElFXG4gIHNlbGVjdGVkRGlhZ3JhbVR5cGU6IERpYWdyYW1MYXlvdXRzIHwgdW5kZWZpbmVkXG4gIHB1YmxpYyBjaGFydFR5cGUgPSAncGllJ1xuICBASW5wdXQoKVxuICBnZXQgZGlhZ3JhbVR5cGUoKTogRGlhZ3JhbVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9kaWFncmFtVHlwZVxuICB9XG4gIHNldCBkaWFncmFtVHlwZSh2YWx1ZTogRGlhZ3JhbVR5cGUpIHtcbiAgICB0aGlzLl9kaWFncmFtVHlwZSA9IHZhbHVlXG4gICAgdGhpcy5zZWxlY3RlZERpYWdyYW1UeXBlID0gYWxsRGlhZ3JhbVR5cGVzLmZpbmQoKHYpID0+IHYubGF5b3V0ID09PSB2YWx1ZSlcbiAgICB0aGlzLmNoYXJ0VHlwZSA9IHRoaXMuZGlhZ3JhbVR5cGVUb0NoYXJ0VHlwZSh2YWx1ZSlcbiAgfVxuICBwcml2YXRlIF9zdXBwb3J0ZWREaWFncmFtVHlwZXM6IERpYWdyYW1UeXBlW10gPSBbXVxuICBASW5wdXQoKVxuICBnZXQgc3VwcG9ydGVkRGlhZ3JhbVR5cGVzKCk6IERpYWdyYW1UeXBlW10ge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0ZWREaWFncmFtVHlwZXNcbiAgfVxuICBzZXQgc3VwcG9ydGVkRGlhZ3JhbVR5cGVzKHZhbHVlOiBEaWFncmFtVHlwZVtdKSB7XG4gICAgdGhpcy5fc3VwcG9ydGVkRGlhZ3JhbVR5cGVzID0gdmFsdWVcbiAgICB0aGlzLnNob3duRGlhZ3JhbVR5cGVzID0gYWxsRGlhZ3JhbVR5cGVzLmZpbHRlcigodmwpID0+IHRoaXMuc3VwcG9ydGVkRGlhZ3JhbVR5cGVzLmluY2x1ZGVzKHZsLmxheW91dCkpXG4gIH1cbiAgQE91dHB1dCgpIGRhdGFTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIGRpYWdyYW1UeXBlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPERpYWdyYW1UeXBlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBjaGFydE9wdGlvbnM6IENoYXJ0T3B0aW9ucyB8IHVuZGVmaW5lZFxuICBjaGFydERhdGE6IENoYXJ0RGF0YSB8IHVuZGVmaW5lZFxuICBhbW91bnRPZkRhdGE6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGxcbiAgc2hvd25EaWFncmFtVHlwZXM6IERpYWdyYW1MYXlvdXRzW10gPSBbXVxuICAvLyBDaGFuZ2luZyB0aGUgY29sb3JSYW5nZUluZm8sIHdpbGwgY2hhbmdlIHRoZSByYW5nZSBvZiB0aGUgY29sb3IgcGFsZXR0ZSBvZiB0aGUgZGlhZ3JhbS5cbiAgcHJpdmF0ZSBjb2xvclJhbmdlSW5mbyA9IHtcbiAgICBjb2xvclN0YXJ0OiAwLFxuICAgIGNvbG9yRW5kOiAxLFxuICAgIHVzZUVuZEFzU3RhcnQ6IGZhbHNlLFxuICB9XG4gIC8vIENoYW5naW5nIHRoZSBjb2xvclNjYWxlLCB3aWxsIGNoYW5nZSB0aGUgdGhlbWF0aWMgY29sb3IgYXBwZWFyYW5jZSBvZiB0aGUgZGlhZ3JhbS5cbiAgcHJpdmF0ZSBjb2xvclNjYWxlID0gZDMuaW50ZXJwb2xhdGVDb29sXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZ2VuZXJhdGVDaGFydCh0aGlzLmNvbG9yU2NhbGUsIHRoaXMuY29sb3JSYW5nZUluZm8pXG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZW5lcmF0ZUNoYXJ0KHRoaXMuY29sb3JTY2FsZSwgdGhpcy5jb2xvclJhbmdlSW5mbylcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZUNoYXJ0KGNvbG9yU2NhbGU6IGFueSwgY29sb3JSYW5nZUluZm86IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIGNvbnN0IGlucHV0RGF0YSA9IHRoaXMuZGF0YS5tYXAoKGRpYWdyYW1EYXRhKSA9PiBkaWFncmFtRGF0YS52YWx1ZSlcblxuICAgICAgdGhpcy5hbW91bnRPZkRhdGEgPSB0aGlzLmRhdGEucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IGFjYyArIGN1cnJlbnQudmFsdWUsIDApXG4gICAgICBjb25zdCBDT0xPUlMgPSBpbnRlcnBvbGF0ZUNvbG9ycyh0aGlzLmRhdGEubGVuZ3RoLCBjb2xvclNjYWxlLCBjb2xvclJhbmdlSW5mbylcbiAgICAgIHRoaXMuY2hhcnREYXRhID0ge1xuICAgICAgICBsYWJlbHM6IHRoaXMuZGF0YS5tYXAoKGRhdGEpID0+IGRhdGEubGFiZWwpLFxuICAgICAgICBkYXRhc2V0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGE6IGlucHV0RGF0YSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQ09MT1JTLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jaGFydE9wdGlvbnMgPSB7XG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICAgIC4uLih0aGlzLl9kaWFncmFtVHlwZSA9PT0gRGlhZ3JhbVR5cGUuVkVSVElDQUxfQkFSICYmIHtcbiAgICAgICAgcGx1Z2luczogeyBsZWdlbmQ6IHsgZGlzcGxheTogZmFsc2UgfSB9LFxuICAgICAgICBzY2FsZXM6IHsgeTogeyB0aWNrczogeyBwcmVjaXNpb246IDAgfSB9IH0sXG4gICAgICB9KSxcbiAgICAgIC4uLih0aGlzLl9kaWFncmFtVHlwZSA9PT0gRGlhZ3JhbVR5cGUuSE9SSVpPTlRBTF9CQVIgJiYge1xuICAgICAgICBpbmRleEF4aXM6ICd5JyxcbiAgICAgICAgcGx1Z2luczogeyBsZWdlbmQ6IHsgZGlzcGxheTogZmFsc2UgfSB9LFxuICAgICAgICBzY2FsZXM6IHsgeDogeyB0aWNrczogeyBwcmVjaXNpb246IDAgfSB9IH0sXG4gICAgICB9KSxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpYWdyYW1UeXBlVG9DaGFydFR5cGUodmFsdWU6IERpYWdyYW1UeXBlKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IERpYWdyYW1UeXBlLlBJRSkgcmV0dXJuICdwaWUnXG4gICAgZWxzZSBpZiAodmFsdWUgPT09IERpYWdyYW1UeXBlLkhPUklaT05UQUxfQkFSIHx8IHZhbHVlID09PSBEaWFncmFtVHlwZS5WRVJUSUNBTF9CQVIpIHJldHVybiAnYmFyJ1xuICAgIHJldHVybiAncGllJ1xuICB9XG5cbiAgZGF0YUNsaWNrZWQoZXZlbnQ6IFtdKSB7XG4gICAgdGhpcy5kYXRhU2VsZWN0ZWQuZW1pdChldmVudC5sZW5ndGgpXG4gIH1cblxuICBvbkRpYWdyYW1UeXBlQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5kaWFncmFtVHlwZSA9IGV2ZW50LnZhbHVlLmxheW91dFxuICAgIHRoaXMuZ2VuZXJhdGVDaGFydCh0aGlzLmNvbG9yU2NhbGUsIHRoaXMuY29sb3JSYW5nZUluZm8pXG4gICAgdGhpcy5kaWFncmFtVHlwZUNoYW5nZWQuZW1pdChldmVudC52YWx1ZS5sYXlvdXQpXG4gIH1cbn1cbmZ1bmN0aW9uIGludGVycG9sYXRlQ29sb3JzKGFtb3VudE9mRGF0YTogbnVtYmVyLCBjb2xvclNjYWxlOiBhbnksIGNvbG9yUmFuZ2VJbmZvOiBhbnkpIHtcbiAgcmV0dXJuIENvbG9yVXRpbHMuaW50ZXJwb2xhdGVDb2xvcnMoYW1vdW50T2ZEYXRhLCBjb2xvclNjYWxlLCBjb2xvclJhbmdlSW5mbylcbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGlzLmRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBwYi0yXCIgKm5nSWY9XCJzaG93bkRpYWdyYW1UeXBlcy5sZW5ndGggPiAxXCI+XG4gICAgICA8cC1zZWxlY3RCdXR0b25cbiAgICAgICAgW29wdGlvbnNdPVwic2hvd25EaWFncmFtVHlwZXNcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGlhZ3JhbVR5cGVcIlxuICAgICAgICBvcHRpb25MYWJlbD1cImljb25cIlxuICAgICAgICAob25DaGFuZ2UpPVwib25EaWFncmFtVHlwZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIG5hbWU9XCJkaWFncmFtLXR5cGUtc2VsZWN0LWJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU+XG4gICAgICAgICAgPGkgW2NsYXNzXT1cIml0ZW0uaWNvblwiIFt0aXRsZV09XCJpdGVtLnRpdGxlIHx8IChpdGVtLnRpdGxlS2V5IHwgdHJhbnNsYXRlKVwiPjwvaT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvcC1zZWxlY3RCdXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgIDxwLWNoYXJ0XG4gICAgICBpZD1cImRpYWdyYW1cIlxuICAgICAgW3R5cGVdPVwiY2hhcnRUeXBlXCJcbiAgICAgIFtkYXRhXT1cImNoYXJ0RGF0YVwiXG4gICAgICBbcmVzcG9uc2l2ZV09XCJmYWxzZVwiXG4gICAgICBbb3B0aW9uc109XCJjaGFydE9wdGlvbnNcIlxuICAgICAgKG9uRGF0YVNlbGVjdCk9XCJkYXRhQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICA+PC9wLWNoYXJ0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMiBzdW1LZXlcIj5cbiAgICA8cCBjbGFzcz1cInRleHQtbWQgZm9udC1tZWRpdW0gdGV4dC03MDBcIj5cbiAgICAgIDxzcGFuIG5hbWU9XCJzdW1MYWJlbFwiPiB7eyBzdW1LZXkgfCB0cmFuc2xhdGUgfX08L3NwYW4+IDogPHNwYW4gbmFtZT1cImFtb3VudE9mRGF0YVwiPnt7IGFtb3VudE9mRGF0YX19PC9zcGFuPlxuICAgIDwvcD5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdiAqbmdJZj1cIiF0aGlzLmRhdGFcIiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgPHAtbWVzc2FnZSBzZXZlcml0eT1cImluZm9cIiB0ZXh0PVwie3sgJ09DWF9ESUFHUkFNLk5PX0RBVEEnIHwgdHJhbnNsYXRlIH19XCI+PC9wLW1lc3NhZ2U+XG48L2Rpdj5cbiJdfQ==
|