coer-elements 0.0.22 → 0.0.23
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/coer-elements.mjs +2 -2
- package/esm2022/index.mjs +2 -0
- package/fesm2022/coer-elements.mjs +0 -4081
- package/fesm2022/coer-elements.mjs.map +1 -1
- package/index.d.ts +1 -5
- package/package.json +1 -1
- package/styles/angular-material.scss +8 -11
- package/styles/bootstrap.scss +3 -3
- package/components/index.d.ts +0 -16
- package/components/lib/coer-alert/coer-alert.component.d.ts +0 -23
- package/components/lib/coer-button/coer-button.component.d.ts +0 -44
- package/components/lib/coer-checkbox/coer-checkbox.component.d.ts +0 -28
- package/components/lib/coer-filebox/coer-filebox.component.d.ts +0 -33
- package/components/lib/coer-form/coer-form.component.d.ts +0 -33
- package/components/lib/coer-grid/coer-grid.component.d.ts +0 -53
- package/components/lib/coer-grid/coer-grid.extension.d.ts +0 -105
- package/components/lib/coer-grid/coer-grid.templates.d.ts +0 -9
- package/components/lib/coer-modal/coer-modal.component.d.ts +0 -38
- package/components/lib/coer-numberbox/coer-numberbox.component.d.ts +0 -56
- package/components/lib/coer-page-title/coer-page-title.component.d.ts +0 -12
- package/components/lib/coer-selectbox/coer-selectbox.component.d.ts +0 -75
- package/components/lib/coer-switch/coer-switch.component.d.ts +0 -31
- package/components/lib/coer-tab/coer-tab.component.d.ts +0 -35
- package/components/lib/coer-textarea/coer-textarea.component.d.ts +0 -51
- package/components/lib/coer-textbox/coer-textbox.component.d.ts +0 -57
- package/components/lib/components.module.d.ts +0 -31
- package/directives/index.d.ts +0 -3
- package/directives/lib/coer-ref.directive.d.ts +0 -14
- package/directives/lib/directives.module.d.ts +0 -8
- package/directives/lib/life-cycle.directive.d.ts +0 -16
- package/esm2022/components/index.mjs +0 -17
- package/esm2022/components/lib/coer-alert/coer-alert.component.mjs +0 -227
- package/esm2022/components/lib/coer-button/coer-button.component.mjs +0 -133
- package/esm2022/components/lib/coer-checkbox/coer-checkbox.component.mjs +0 -84
- package/esm2022/components/lib/coer-filebox/coer-filebox.component.mjs +0 -104
- package/esm2022/components/lib/coer-form/coer-form.component.mjs +0 -102
- package/esm2022/components/lib/coer-grid/coer-grid.component.mjs +0 -515
- package/esm2022/components/lib/coer-grid/coer-grid.extension.mjs +0 -412
- package/esm2022/components/lib/coer-grid/coer-grid.templates.mjs +0 -30
- package/esm2022/components/lib/coer-modal/coer-modal.component.mjs +0 -108
- package/esm2022/components/lib/coer-numberbox/coer-numberbox.component.mjs +0 -260
- package/esm2022/components/lib/coer-page-title/coer-page-title.component.mjs +0 -44
- package/esm2022/components/lib/coer-selectbox/coer-selectbox.component.mjs +0 -339
- package/esm2022/components/lib/coer-switch/coer-switch.component.mjs +0 -94
- package/esm2022/components/lib/coer-tab/coer-tab.component.mjs +0 -116
- package/esm2022/components/lib/coer-textarea/coer-textarea.component.mjs +0 -157
- package/esm2022/components/lib/coer-textbox/coer-textbox.component.mjs +0 -196
- package/esm2022/components/lib/components.module.mjs +0 -134
- package/esm2022/directives/index.mjs +0 -4
- package/esm2022/directives/lib/coer-ref.directive.mjs +0 -23
- package/esm2022/directives/lib/directives.module.mjs +0 -25
- package/esm2022/directives/lib/life-cycle.directive.mjs +0 -33
- package/esm2022/interfaces/index.mjs +0 -39
- package/esm2022/interfaces/lib/app-source.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-filebox/file-image.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-filebox/file.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-button-by-row.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-checkbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-coer-numberbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-coer-selectbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-coer-switch.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-coer-textbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-column.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-data-source.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-header-button.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-header-export-button.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-header.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-import.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-input-checkbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-input-switch-change.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-input-textbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-item.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-keyup-enter.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-length.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-search.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-sort.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-menu/menu-option-selected.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-menu/menu-selected.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-menu/menu.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-ref.interface.mjs +0 -2
- package/esm2022/interfaces/lib/page-title/breadcrumb.interface.mjs +0 -2
- package/esm2022/interfaces/lib/page-title/go-back.interface.mjs +0 -2
- package/esm2022/interfaces/lib/screen-size.interface.mjs +0 -2
- package/esm2022/interfaces/lib/service/http-request.interface.mjs +0 -2
- package/esm2022/interfaces/lib/service/http-response.interface.mjs +0 -2
- package/esm2022/interfaces/lib/service/patch.interface.mjs +0 -2
- package/esm2022/pipes/index.mjs +0 -5
- package/esm2022/pipes/lib/html.pipe.mjs +0 -18
- package/esm2022/pipes/lib/no-image.pipe.mjs +0 -23
- package/esm2022/pipes/lib/numeric-format.pipe.mjs +0 -15
- package/esm2022/pipes/lib/pipes.module.mjs +0 -31
- package/esm2022/public_api.mjs +0 -6
- package/esm2022/signals/index.mjs +0 -6
- package/esm2022/signals/lib/breakpoint.signal.mjs +0 -4
- package/esm2022/signals/lib/is-loading.signal.mjs +0 -3
- package/esm2022/signals/lib/is-menu-open.signal.mjs +0 -3
- package/esm2022/signals/lib/is-modal-open.signal.mjs +0 -3
- package/esm2022/signals/lib/menu.signal.mjs +0 -3
- package/esm2022/tools/index.mjs +0 -11
- package/esm2022/tools/lib/breadcrumbs.class.mjs +0 -63
- package/esm2022/tools/lib/control-value.class.mjs +0 -46
- package/esm2022/tools/lib/date-time.class.mjs +0 -29
- package/esm2022/tools/lib/files.class.mjs +0 -91
- package/esm2022/tools/lib/menu.class.mjs +0 -23
- package/esm2022/tools/lib/page.class.mjs +0 -156
- package/esm2022/tools/lib/screen.class.mjs +0 -51
- package/esm2022/tools/lib/service.class.mjs +0 -248
- package/esm2022/tools/lib/source.class.mjs +0 -80
- package/esm2022/tools/lib/tools.mjs +0 -220
- package/interfaces/index.d.ts +0 -33
- package/interfaces/lib/app-source.interface.d.ts +0 -4
- package/interfaces/lib/coer-filebox/file-image.interface.d.ts +0 -14
- package/interfaces/lib/coer-filebox/file.interface.d.ts +0 -5
- package/interfaces/lib/coer-grid/grid-button-by-row.interface.d.ts +0 -6
- package/interfaces/lib/coer-grid/grid-checkbox.interface.d.ts +0 -5
- package/interfaces/lib/coer-grid/grid-coer-numberbox.interface.d.ts +0 -12
- package/interfaces/lib/coer-grid/grid-coer-selectbox.interface.d.ts +0 -9
- package/interfaces/lib/coer-grid/grid-coer-switch.interface.d.ts +0 -6
- package/interfaces/lib/coer-grid/grid-coer-textbox.interface.d.ts +0 -11
- package/interfaces/lib/coer-grid/grid-column.interface.d.ts +0 -22
- package/interfaces/lib/coer-grid/grid-data-source.interface.d.ts +0 -6
- package/interfaces/lib/coer-grid/grid-header-button.interface.d.ts +0 -8
- package/interfaces/lib/coer-grid/grid-header-export-button.interface.d.ts +0 -10
- package/interfaces/lib/coer-grid/grid-header.interface.d.ts +0 -5
- package/interfaces/lib/coer-grid/grid-import.interface.d.ts +0 -4
- package/interfaces/lib/coer-grid/grid-input-checkbox.interface.d.ts +0 -5
- package/interfaces/lib/coer-grid/grid-input-switch-change.interface.d.ts +0 -5
- package/interfaces/lib/coer-grid/grid-input-textbox.interface.d.ts +0 -5
- package/interfaces/lib/coer-grid/grid-item.interface.d.ts +0 -5
- package/interfaces/lib/coer-grid/grid-keyup-enter.interface.d.ts +0 -6
- package/interfaces/lib/coer-grid/grid-length.interface.d.ts +0 -5
- package/interfaces/lib/coer-grid/grid-search.interface.d.ts +0 -4
- package/interfaces/lib/coer-grid/grid-sort.interface.d.ts +0 -5
- package/interfaces/lib/coer-menu/menu-option-selected.interface.d.ts +0 -9
- package/interfaces/lib/coer-menu/menu-selected.interface.d.ts +0 -10
- package/interfaces/lib/coer-menu/menu.interface.d.ts +0 -6
- package/interfaces/lib/coer-ref.interface.d.ts +0 -10
- package/interfaces/lib/page-title/breadcrumb.interface.d.ts +0 -6
- package/interfaces/lib/page-title/go-back.interface.d.ts +0 -6
- package/interfaces/lib/screen-size.interface.d.ts +0 -5
- package/interfaces/lib/service/http-request.interface.d.ts +0 -10
- package/interfaces/lib/service/http-response.interface.d.ts +0 -6
- package/interfaces/lib/service/patch.interface.d.ts +0 -5
- package/pipes/index.d.ts +0 -4
- package/pipes/lib/html.pipe.d.ts +0 -10
- package/pipes/lib/no-image.pipe.d.ts +0 -7
- package/pipes/lib/numeric-format.pipe.d.ts +0 -7
- package/pipes/lib/pipes.module.d.ts +0 -9
- package/public_api.d.ts +0 -5
- package/signals/index.d.ts +0 -5
- package/signals/lib/breakpoint.signal.d.ts +0 -1
- package/signals/lib/is-loading.signal.d.ts +0 -1
- package/signals/lib/is-menu-open.signal.d.ts +0 -1
- package/signals/lib/is-modal-open.signal.d.ts +0 -1
- package/signals/lib/menu.signal.d.ts +0 -2
- package/tools/index.d.ts +0 -10
- package/tools/lib/breadcrumbs.class.d.ts +0 -18
- package/tools/lib/control-value.class.d.ts +0 -25
- package/tools/lib/date-time.class.d.ts +0 -13
- package/tools/lib/files.class.d.ts +0 -16
- package/tools/lib/menu.class.d.ts +0 -8
- package/tools/lib/page.class.d.ts +0 -60
- package/tools/lib/screen.class.d.ts +0 -13
- package/tools/lib/service.class.d.ts +0 -39
- package/tools/lib/source.class.d.ts +0 -20
- package/tools/lib/tools.d.ts +0 -34
@@ -1,412 +0,0 @@
|
|
1
|
-
import { Component, Input, computed, inject, input, output, signal, viewChild, viewChildren } from "@angular/core";
|
2
|
-
import { CoerAlert } from "../../lib/coer-alert/coer-alert.component";
|
3
|
-
import { CoerCheckbox } from "../../lib/coer-checkbox/coer-checkbox.component";
|
4
|
-
import { CoerNumberBox } from "../../lib/coer-numberbox/coer-numberbox.component";
|
5
|
-
import { CoerSelectbox } from "../../lib/coer-selectbox/coer-selectbox.component";
|
6
|
-
import { CoerTextBox } from "../../lib/coer-textbox/coer-textbox.component";
|
7
|
-
import { ControlValue } from '../../../tools/lib/control-value.class';
|
8
|
-
import { DateTime } from '../../../tools/lib/date-time.class';
|
9
|
-
import { Screen } from '../../../tools/lib/screen.class';
|
10
|
-
import { Tools } from '../../../tools/lib/tools';
|
11
|
-
import * as i0 from "@angular/core";
|
12
|
-
export class CoerGridExtension extends ControlValue {
|
13
|
-
constructor() {
|
14
|
-
super(...arguments);
|
15
|
-
//Injections
|
16
|
-
this.alert = inject(CoerAlert);
|
17
|
-
//Elements
|
18
|
-
this.inputFile = viewChild.required('inputFileRef');
|
19
|
-
this.inputSearch = viewChild.required('inputSearch');
|
20
|
-
this.coerTextboxList = viewChildren(CoerTextBox);
|
21
|
-
this.coerNumberboxList = viewChildren(CoerNumberBox);
|
22
|
-
this.coerSelectboxList = viewChildren(CoerSelectbox);
|
23
|
-
this.coerCheckboxList = viewChildren(CoerCheckbox);
|
24
|
-
//Variables
|
25
|
-
this._value = [];
|
26
|
-
this.value_signal = signal([]);
|
27
|
-
this._gridSearch = signal('');
|
28
|
-
this._isLoading = true;
|
29
|
-
this._isLoadingMessage = true;
|
30
|
-
this._id = Tools.GetGuid('coer-grid');
|
31
|
-
this._expandedGroups = [];
|
32
|
-
this._enableAnimations = false;
|
33
|
-
this._indexFocus = signal(0);
|
34
|
-
this._sort = signal({ columnName: '', direction: 'none', icon: '' });
|
35
|
-
//Generic Tools
|
36
|
-
this.GetNumericFormat = Tools.GetNumericFormat;
|
37
|
-
this.GetDateFormat = DateTime.GetDateFormat;
|
38
|
-
//Inputs
|
39
|
-
this.columns = input([]);
|
40
|
-
this.cleanColumnName = input(true);
|
41
|
-
this.addButton = { show: false };
|
42
|
-
this.exportButton = { show: false };
|
43
|
-
this.importButton = { show: false };
|
44
|
-
this.search = { show: false, ignore: false };
|
45
|
-
this.buttonByRow = {};
|
46
|
-
this.checkbox = { show: false };
|
47
|
-
this.tooltipByRow = input('');
|
48
|
-
this.isLoading = input(false);
|
49
|
-
this.isDisabled = input(false);
|
50
|
-
this.rowsByPage = input(50);
|
51
|
-
this.groupBy = input('');
|
52
|
-
this.showColumnGrouped = input(false);
|
53
|
-
this.rowsByGroup = input(50);
|
54
|
-
this.isInvisible = input(false);
|
55
|
-
this.showFooter = input(true);
|
56
|
-
this.width = input('100%');
|
57
|
-
this.MinWidth = input('250px');
|
58
|
-
this.MaxWidth = input('100%');
|
59
|
-
this.height = input('350px');
|
60
|
-
this.minHeight = input('140px');
|
61
|
-
this.maxHeight = input('100vh');
|
62
|
-
this.margin = input('auto');
|
63
|
-
this.enableSort = input(true);
|
64
|
-
this.enableRowFocus = input(true);
|
65
|
-
//Outputs
|
66
|
-
this.onClickAdd = output();
|
67
|
-
this.onClickImport = output();
|
68
|
-
this.onClickExport = output();
|
69
|
-
this.onClickRow = output();
|
70
|
-
this.onDoubleClickRow = output();
|
71
|
-
this.onClickDeleteRow = output();
|
72
|
-
this.onClickEditRow = output();
|
73
|
-
this.onClickGoRow = output();
|
74
|
-
this.onKeyupEnter = output();
|
75
|
-
this.onKeyupEnterLast = output();
|
76
|
-
this.onSwitchChange = output();
|
77
|
-
this.onTextboxChange = output();
|
78
|
-
this.onSelectboxChange = output();
|
79
|
-
this.onCheckboxChange = output();
|
80
|
-
//computed
|
81
|
-
this._isDisabled = computed(() => {
|
82
|
-
return this.isDisabled() || this.isLoading() || this.isInvisible();
|
83
|
-
});
|
84
|
-
//computed
|
85
|
-
this._isGrouped = computed(() => {
|
86
|
-
return this.groupBy().length > 0;
|
87
|
-
});
|
88
|
-
//computed
|
89
|
-
this.gridColumns = computed(() => {
|
90
|
-
const SET_COLUMNS = new Set();
|
91
|
-
//Has filter columns?
|
92
|
-
if (this.columns().length > 0) {
|
93
|
-
for (const { property } of this.columns()) {
|
94
|
-
SET_COLUMNS.add(property);
|
95
|
-
}
|
96
|
-
}
|
97
|
-
//Get all columns
|
98
|
-
else
|
99
|
-
for (const row of this.value_signal()) {
|
100
|
-
for (const property in row) {
|
101
|
-
SET_COLUMNS.add(property);
|
102
|
-
}
|
103
|
-
}
|
104
|
-
//Remove indexRow column
|
105
|
-
if (SET_COLUMNS.has('indexRow')) {
|
106
|
-
SET_COLUMNS.delete('indexRow');
|
107
|
-
}
|
108
|
-
//Remove groupBy column
|
109
|
-
if (this._isGrouped() && !this.showColumnGrouped() && SET_COLUMNS.has(this.groupBy())) {
|
110
|
-
SET_COLUMNS.delete(this.groupBy());
|
111
|
-
}
|
112
|
-
//Set index column
|
113
|
-
let indexColumn = 0;
|
114
|
-
return Array.from(SET_COLUMNS).map(property => Tools.BreakReference({
|
115
|
-
columnName: property,
|
116
|
-
indexColumn: indexColumn++,
|
117
|
-
width: this._GetColumnConfig(property)?.width || 'auto'
|
118
|
-
}));
|
119
|
-
});
|
120
|
-
//computed
|
121
|
-
this.gridDataSource = computed(() => {
|
122
|
-
let list = this.gridDataSourceFiltered();
|
123
|
-
//It's Grouped?
|
124
|
-
if (this._isGrouped()) {
|
125
|
-
//let indexRow = 0;
|
126
|
-
let indexGroup = 0;
|
127
|
-
const SET_COLUMN = new Set();
|
128
|
-
for (const row of list) {
|
129
|
-
SET_COLUMN.add(row[this.groupBy()]);
|
130
|
-
}
|
131
|
-
const DATA_SOURCE_GROPUED = [];
|
132
|
-
for (const column of SET_COLUMN) {
|
133
|
-
DATA_SOURCE_GROPUED.push({
|
134
|
-
groupBy: column,
|
135
|
-
indexGroup: indexGroup++,
|
136
|
-
length: list.filter((item) => item[this.groupBy()] == column).length,
|
137
|
-
rows: [...list]
|
138
|
-
.filter((item) => item[this.groupBy()] == column)
|
139
|
-
.splice(0, this.rowsByGroup())
|
140
|
-
//.map((item: any) => Object.assign({ indexRow: indexRow++ }, item))
|
141
|
-
});
|
142
|
-
}
|
143
|
-
//Response by group
|
144
|
-
return [...DATA_SOURCE_GROPUED].splice(0, this.rowsByPage());
|
145
|
-
}
|
146
|
-
//Response
|
147
|
-
return [{
|
148
|
-
groupBy: 'Not Grouped',
|
149
|
-
indexGroup: -1,
|
150
|
-
length: -1,
|
151
|
-
rows: [...list].splice(0, this.rowsByPage())
|
152
|
-
}];
|
153
|
-
});
|
154
|
-
//computed
|
155
|
-
this.gridDataSourceFiltered = computed(() => {
|
156
|
-
let list = [];
|
157
|
-
const dataSource = Tools.BreakReference(this.value_signal());
|
158
|
-
//Ignore Filter
|
159
|
-
if (this._gridSearch() == '' || this.search?.ignore) {
|
160
|
-
list = dataSource;
|
161
|
-
}
|
162
|
-
//Filter by search
|
163
|
-
else {
|
164
|
-
const SET_ROW = new Set();
|
165
|
-
let listFiltered = [];
|
166
|
-
for (const { columnName } of this.gridColumns()) {
|
167
|
-
listFiltered = dataSource.filter((item) => !SET_ROW.has(item['indexRow'])
|
168
|
-
&& String(item[Tools.FirstCharToLower(columnName)]).trim().toUpperCase().includes(String(this._gridSearch()).trim().toUpperCase()));
|
169
|
-
for (const { indexRow } of listFiltered) {
|
170
|
-
SET_ROW.add(indexRow);
|
171
|
-
}
|
172
|
-
list = Tools.BreakReference(list.concat(listFiltered));
|
173
|
-
}
|
174
|
-
}
|
175
|
-
return Tools.BreakReference(list);
|
176
|
-
});
|
177
|
-
/** Get Column Configuration */
|
178
|
-
this._GetColumnConfig = (columnName) => {
|
179
|
-
return this.columns().find(x => x.property.replaceAll(' ', '').toUpperCase() == columnName.replaceAll(' ', '').toUpperCase());
|
180
|
-
};
|
181
|
-
/** Clean Name or get alias */
|
182
|
-
this._GetColumnName = (columnName) => {
|
183
|
-
const columnConfig = this._GetColumnConfig(columnName);
|
184
|
-
//Get Alias
|
185
|
-
if (columnConfig && columnConfig.alias && columnConfig.alias.length > 0) {
|
186
|
-
return columnConfig.alias;
|
187
|
-
}
|
188
|
-
//Clean headerName
|
189
|
-
if (this.cleanColumnName() && columnName.length > 0) {
|
190
|
-
columnName = Tools.FirstCharToLower(columnName);
|
191
|
-
const charArray = [];
|
192
|
-
for (const char of columnName) {
|
193
|
-
if (char === char.toUpperCase())
|
194
|
-
charArray.push(' ');
|
195
|
-
charArray.push(char);
|
196
|
-
}
|
197
|
-
charArray[0] = charArray[0].toUpperCase();
|
198
|
-
columnName = charArray.join('');
|
199
|
-
}
|
200
|
-
return columnName.trim();
|
201
|
-
};
|
202
|
-
/** */
|
203
|
-
this._GetShortIcon = (columnName) => {
|
204
|
-
return this._sort().columnName == columnName ? this._sort().icon : '';
|
205
|
-
};
|
206
|
-
/** */
|
207
|
-
this._GetId = (indexRow, indexColumn, suffix = '') => {
|
208
|
-
if (suffix.length > 0)
|
209
|
-
suffix = `-${suffix}`;
|
210
|
-
return `${this._id}-row${indexRow}column${indexColumn}${suffix}`;
|
211
|
-
};
|
212
|
-
/** */
|
213
|
-
this._GetCellValue = (row, columnName) => {
|
214
|
-
return row[Tools.FirstCharToLower(columnName).replaceAll(' ', '')];
|
215
|
-
};
|
216
|
-
/** */
|
217
|
-
this._GetTooltip = (prefix, row, suffix = '') => {
|
218
|
-
let column = Tools.FirstCharToLower(this.tooltipByRow()).replaceAll(' ', '');
|
219
|
-
if (suffix.length > 0) {
|
220
|
-
suffix = ` ${suffix}`;
|
221
|
-
}
|
222
|
-
return this.tooltipByRow().length > 0
|
223
|
-
? `${prefix} ${row[column]}${suffix}`
|
224
|
-
: `${prefix}${suffix}`;
|
225
|
-
};
|
226
|
-
/** */
|
227
|
-
this._HideRow = (group) => {
|
228
|
-
return (this._isGrouped() ? !(this._expandedGroups.some(x => x == group.groupBy)) : false);
|
229
|
-
};
|
230
|
-
}
|
231
|
-
//getter
|
232
|
-
get _height() {
|
233
|
-
let height = this.height();
|
234
|
-
if (height == 'full') {
|
235
|
-
const TOOLBAR = 45;
|
236
|
-
const PAGE_HEADER = 70;
|
237
|
-
const GRID_HEADER = document.getElementById(`${this._id}-header`);
|
238
|
-
const HEADER = (GRID_HEADER && GRID_HEADER.children.length > 0) ? 50 : 0;
|
239
|
-
const MARGIN = 30;
|
240
|
-
const PADDING = 20;
|
241
|
-
const FOOTER = this.showFooter() ? 24.5 : 0;
|
242
|
-
height = (Screen.WINDOW_HEIGHT - TOOLBAR - PAGE_HEADER - MARGIN - HEADER - PADDING - FOOTER) + 'px';
|
243
|
-
}
|
244
|
-
return height;
|
245
|
-
}
|
246
|
-
//getter
|
247
|
-
get _onlyOneCheck() {
|
248
|
-
return Tools.IsNotNull(this.checkbox.onlyOneCheck) && this.checkbox.onlyOneCheck;
|
249
|
-
}
|
250
|
-
ngAfterViewInit() {
|
251
|
-
Tools.Sleep().then(() => {
|
252
|
-
this._enableAnimations = true;
|
253
|
-
this._isLoading = false;
|
254
|
-
this._isLoadingMessage = false;
|
255
|
-
});
|
256
|
-
}
|
257
|
-
//ControlValueAccessor
|
258
|
-
SetValue(value) {
|
259
|
-
let indexRow = 0;
|
260
|
-
if (!Tools.IsNotNull(value))
|
261
|
-
value = [];
|
262
|
-
const dataSource = Tools.BreakReference(value).map((item) => Object.assign({ checked: false }, { ...item }, { indexRow: indexRow++ }));
|
263
|
-
this._UpdateValue(dataSource);
|
264
|
-
this._value = dataSource;
|
265
|
-
this.value_signal.set(dataSource);
|
266
|
-
}
|
267
|
-
//ControlValueAccessor
|
268
|
-
writeValue(value) {
|
269
|
-
let indexRow = 0;
|
270
|
-
if (!Tools.IsNotNull(value))
|
271
|
-
value = [];
|
272
|
-
const dataSource = Tools.BreakReference(value).map((item) => Object.assign({ checked: false }, { ...item }, { indexRow: indexRow++ }));
|
273
|
-
this._value = dataSource;
|
274
|
-
this.value_signal.set(dataSource);
|
275
|
-
}
|
276
|
-
/** */
|
277
|
-
_IsCellType(property, data, type) {
|
278
|
-
let response = false;
|
279
|
-
const columnConfig = this._GetColumnConfig(property);
|
280
|
-
const value = data[property];
|
281
|
-
const row = Tools.BreakReference(data);
|
282
|
-
if (columnConfig) {
|
283
|
-
if (['coerTextbox', 'coerNumberbox', 'coerSelectbox', 'coerSwitch'].includes(type)) {
|
284
|
-
const inputConfig = columnConfig;
|
285
|
-
response = inputConfig.hasOwnProperty(type)
|
286
|
-
&& typeof inputConfig[type] === 'function'
|
287
|
-
&& inputConfig[type]({ property, row, value }).isInput;
|
288
|
-
}
|
289
|
-
else
|
290
|
-
switch (type) {
|
291
|
-
case 'number': {
|
292
|
-
if (typeof columnConfig.typeNumber === 'boolean') {
|
293
|
-
response = columnConfig.typeNumber;
|
294
|
-
}
|
295
|
-
else if (typeof columnConfig.typeNumber === 'function') {
|
296
|
-
response = (data === null) ? false : columnConfig.typeNumber({ property, row, value });
|
297
|
-
}
|
298
|
-
break;
|
299
|
-
}
|
300
|
-
case 'date': {
|
301
|
-
if (data === null)
|
302
|
-
return false;
|
303
|
-
if (typeof columnConfig.typeDate === 'boolean') {
|
304
|
-
response = columnConfig.typeDate;
|
305
|
-
}
|
306
|
-
else if (typeof columnConfig.typeDate === 'function') {
|
307
|
-
response = (data === null) ? false : columnConfig.typeDate({ property, row, value });
|
308
|
-
}
|
309
|
-
break;
|
310
|
-
}
|
311
|
-
case 'template': {
|
312
|
-
if (data === null)
|
313
|
-
return false;
|
314
|
-
response = (typeof columnConfig.template === 'string') || (typeof columnConfig.template === 'function');
|
315
|
-
break;
|
316
|
-
}
|
317
|
-
}
|
318
|
-
}
|
319
|
-
return response;
|
320
|
-
}
|
321
|
-
/** */
|
322
|
-
_IsCellColor(property, data, color) {
|
323
|
-
let response = false;
|
324
|
-
const columnConfig = this._GetColumnConfig(property);
|
325
|
-
if (columnConfig) {
|
326
|
-
if (typeof columnConfig[color] === 'boolean') {
|
327
|
-
response = columnConfig[color];
|
328
|
-
}
|
329
|
-
else if (typeof columnConfig[color] === 'function') {
|
330
|
-
response = columnConfig[color]({
|
331
|
-
property,
|
332
|
-
row: Tools.BreakReference(data),
|
333
|
-
value: data[property]
|
334
|
-
});
|
335
|
-
}
|
336
|
-
}
|
337
|
-
return response;
|
338
|
-
}
|
339
|
-
/** */
|
340
|
-
GetAttribute(property, data, attribute, type) {
|
341
|
-
const columnConfig = this._GetColumnConfig(property);
|
342
|
-
const value = Tools.IsNotNull(data) ? data[property] : null;
|
343
|
-
const row = Tools.BreakReference(data);
|
344
|
-
if (columnConfig) {
|
345
|
-
if (type === 'defaul-cell') {
|
346
|
-
switch (attribute) {
|
347
|
-
case 'textAlign': {
|
348
|
-
return columnConfig?.textAlign || 'left';
|
349
|
-
}
|
350
|
-
case 'template': {
|
351
|
-
const inputConfig = columnConfig;
|
352
|
-
if (inputConfig.hasOwnProperty(attribute)) {
|
353
|
-
if (typeof inputConfig[attribute] === 'string') {
|
354
|
-
return inputConfig[attribute];
|
355
|
-
}
|
356
|
-
else if (typeof inputConfig[attribute] === 'function') {
|
357
|
-
return inputConfig[attribute]({ property, row, value }) || '';
|
358
|
-
}
|
359
|
-
}
|
360
|
-
}
|
361
|
-
}
|
362
|
-
}
|
363
|
-
else if (['coerTextbox', 'coerNumberbox', 'coerSelectbox', 'coerSwitch'].includes(type)) {
|
364
|
-
const inputConfig = columnConfig;
|
365
|
-
if (inputConfig.hasOwnProperty(type) && typeof inputConfig[type] === 'function') {
|
366
|
-
return inputConfig[type]({ property, row, value })[attribute] || null;
|
367
|
-
}
|
368
|
-
}
|
369
|
-
}
|
370
|
-
return null;
|
371
|
-
}
|
372
|
-
/** */
|
373
|
-
ButtonByRow(property, data = null) {
|
374
|
-
let response = false;
|
375
|
-
const buttonByRow = this.buttonByRow;
|
376
|
-
const row = Tools.IsNotNull(data) ? Tools.BreakReference(data) : null;
|
377
|
-
if (buttonByRow.hasOwnProperty(property)) {
|
378
|
-
if (row === null) {
|
379
|
-
response = (typeof buttonByRow[property] === 'boolean') ? buttonByRow[property] : true;
|
380
|
-
}
|
381
|
-
else if (typeof buttonByRow[property] === 'boolean') {
|
382
|
-
response = buttonByRow[property];
|
383
|
-
}
|
384
|
-
else if (typeof buttonByRow[property] === 'function') {
|
385
|
-
response = buttonByRow[property]({ property, row, value: null });
|
386
|
-
}
|
387
|
-
}
|
388
|
-
return response ? (this._value && this._value.length > 0) : false;
|
389
|
-
}
|
390
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerGridExtension, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
391
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "17.3.12", type: CoerGridExtension, selector: "coer-grid-extension", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, cleanColumnName: { classPropertyName: "cleanColumnName", publicName: "cleanColumnName", isSignal: true, isRequired: false, transformFunction: null }, addButton: { classPropertyName: "addButton", publicName: "addButton", isSignal: false, isRequired: false, transformFunction: null }, exportButton: { classPropertyName: "exportButton", publicName: "exportButton", isSignal: false, isRequired: false, transformFunction: null }, importButton: { classPropertyName: "importButton", publicName: "importButton", isSignal: false, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: false, isRequired: false, transformFunction: null }, buttonByRow: { classPropertyName: "buttonByRow", publicName: "buttonByRow", isSignal: false, isRequired: false, transformFunction: null }, checkbox: { classPropertyName: "checkbox", publicName: "checkbox", isSignal: false, isRequired: false, transformFunction: null }, tooltipByRow: { classPropertyName: "tooltipByRow", publicName: "tooltipByRow", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, rowsByPage: { classPropertyName: "rowsByPage", publicName: "rowsByPage", isSignal: true, isRequired: false, transformFunction: null }, groupBy: { classPropertyName: "groupBy", publicName: "groupBy", isSignal: true, isRequired: false, transformFunction: null }, showColumnGrouped: { classPropertyName: "showColumnGrouped", publicName: "showColumnGrouped", isSignal: true, isRequired: false, transformFunction: null }, rowsByGroup: { classPropertyName: "rowsByGroup", publicName: "rowsByGroup", isSignal: true, isRequired: false, transformFunction: null }, isInvisible: { classPropertyName: "isInvisible", publicName: "isInvisible", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, MinWidth: { classPropertyName: "MinWidth", publicName: "MinWidth", isSignal: true, isRequired: false, transformFunction: null }, MaxWidth: { classPropertyName: "MaxWidth", publicName: "MaxWidth", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, margin: { classPropertyName: "margin", publicName: "margin", isSignal: true, isRequired: false, transformFunction: null }, enableSort: { classPropertyName: "enableSort", publicName: "enableSort", isSignal: true, isRequired: false, transformFunction: null }, enableRowFocus: { classPropertyName: "enableRowFocus", publicName: "enableRowFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClickAdd: "onClickAdd", onClickImport: "onClickImport", onClickExport: "onClickExport", onClickRow: "onClickRow", onDoubleClickRow: "onDoubleClickRow", onClickDeleteRow: "onClickDeleteRow", onClickEditRow: "onClickEditRow", onClickGoRow: "onClickGoRow", onKeyupEnter: "onKeyupEnter", onKeyupEnterLast: "onKeyupEnterLast", onSwitchChange: "onSwitchChange", onTextboxChange: "onTextboxChange", onSelectboxChange: "onSelectboxChange", onCheckboxChange: "onCheckboxChange" }, viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFileRef"], descendants: true, isSignal: true }, { propertyName: "inputSearch", first: true, predicate: ["inputSearch"], descendants: true, isSignal: true }, { propertyName: "coerTextboxList", predicate: CoerTextBox, descendants: true, isSignal: true }, { propertyName: "coerNumberboxList", predicate: CoerNumberBox, descendants: true, isSignal: true }, { propertyName: "coerSelectboxList", predicate: CoerSelectbox, descendants: true, isSignal: true }, { propertyName: "coerCheckboxList", predicate: CoerCheckbox, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
|
392
|
-
}
|
393
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerGridExtension, decorators: [{
|
394
|
-
type: Component,
|
395
|
-
args: [{
|
396
|
-
selector: 'coer-grid-extension',
|
397
|
-
template: ''
|
398
|
-
}]
|
399
|
-
}], propDecorators: { addButton: [{
|
400
|
-
type: Input
|
401
|
-
}], exportButton: [{
|
402
|
-
type: Input
|
403
|
-
}], importButton: [{
|
404
|
-
type: Input
|
405
|
-
}], search: [{
|
406
|
-
type: Input
|
407
|
-
}], buttonByRow: [{
|
408
|
-
type: Input
|
409
|
-
}], checkbox: [{
|
410
|
-
type: Input
|
411
|
-
}] } });
|
412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1ncmlkLmV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvc3JjL2NvbXBvbmVudHMvbGliL2NvZXItZ3JpZC9jb2VyLWdyaWQuZXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBTWpELE1BQU0sT0FBTyxpQkFBcUIsU0FBUSxZQUFZO0lBSnREOztRQU1JLFlBQVk7UUFDTyxVQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdDLFVBQVU7UUFDQSxjQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxjQUFjLENBQUMsQ0FBQztRQUMzRCxnQkFBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWMsYUFBYSxDQUFDLENB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QUFDLEtBQUssQ0FBQztJQUN0RSxDQUFDOytHQXJkUSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw2c0lBUWUsV0FBVyx1RkFDVCxhQUFhLHVGQUNiLGFBQWEsc0ZBQ2QsWUFBWSx1RkFiNUMsRUFBRTs7NEZBRUgsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxFQUFFO2lCQUNmOzhCQWlDWSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUdyaWRCdXR0b25CeVJvdywgSUdyaWRDb2x1bW4sIElHcmlkRGF0YVNvdXJjZSwgSUdyaWRJbXBvcnQsIElHcmlkSGVhZGVyQnV0dG9uLCBJR3JpZEhlYWRlckV4cG9ydEJ1dHRvbiwgSUdyaWRLZXl1cEVudGVyLCBJR3JpZFNlYXJjaCwgSUdyaWRJbnB1dFN3aXRjaENoYW5nZSwgSUdyaWRJbnB1dFRleHRib3gsIElHcmlkU29ydCwgSUdyaWRDaGVja2JveCwgSUdyaWRJbnB1dENoZWNrYm94LCBJR3JpZEhlYWRlciB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkLCB2aWV3Q2hpbGRyZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb2VyQWxlcnQgfSBmcm9tIFwiLi4vLi4vbGliL2NvZXItYWxlcnQvY29lci1hbGVydC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29lckNoZWNrYm94IH0gZnJvbSBcIi4uLy4uL2xpYi9jb2VyLWNoZWNrYm94L2NvZXItY2hlY2tib3guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvZXJOdW1iZXJCb3ggfSBmcm9tIFwiLi4vLi4vbGliL2NvZXItbnVtYmVyYm94L2NvZXItbnVtYmVyYm94LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb2VyU2VsZWN0Ym94IH0gZnJvbSBcIi4uLy4uL2xpYi9jb2VyLXNlbGVjdGJveC9jb2VyLXNlbGVjdGJveC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29lclRleHRCb3ggfSBmcm9tIFwiLi4vLi4vbGliL2NvZXItdGV4dGJveC9jb2VyLXRleHRib3guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZSB9IGZyb20gJy4uLy4uLy4uL3Rvb2xzL2xpYi9jb250cm9sLXZhbHVlLmNsYXNzJztcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICcuLi8uLi8uLi90b29scy9saWIvZGF0ZS10aW1lLmNsYXNzJztcclxuaW1wb3J0IHsgU2NyZWVuIH0gZnJvbSAnLi4vLi4vLi4vdG9vbHMvbGliL3NjcmVlbi5jbGFzcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vLi4vLi4vdG9vbHMvbGliL3Rvb2xzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb2VyLWdyaWQtZXh0ZW5zaW9uJyxcclxuICAgIHRlbXBsYXRlOiAnJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29lckdyaWRFeHRlbnNpb248VD4gZXh0ZW5kcyBDb250cm9sVmFsdWUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgICAvL0luamVjdGlvbnNcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydCA9IGluamVjdChDb2VyQWxlcnQpO1xyXG5cclxuICAgIC8vRWxlbWVudHNcclxuICAgIHByb3RlY3RlZCBpbnB1dEZpbGUgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2lucHV0RmlsZVJlZicpO1xyXG4gICAgcHJvdGVjdGVkIGlucHV0U2VhcmNoID0gdmlld0NoaWxkLnJlcXVpcmVkPENvZXJUZXh0Qm94PignaW5wdXRTZWFyY2gnKTtcclxuICAgIHByb3RlY3RlZCBjb2VyVGV4dGJveExpc3QgPSB2aWV3Q2hpbGRyZW4oQ29lclRleHRCb3gpO1xyXG4gICAgcHJvdGVjdGVkIGNvZXJOdW1iZXJib3hMaXN0ID0gdmlld0NoaWxkcmVuKENvZXJOdW1iZXJCb3gpO1xyXG4gICAgcHJvdGVjdGVkIGNvZXJTZWxlY3Rib3hMaXN0ID0gdmlld0NoaWxkcmVuKENvZXJTZWxlY3Rib3gpO1xyXG4gICAgcHJvdGVjdGVkIGNvZXJDaGVja2JveExpc3QgPSB2aWV3Q2hpbGRyZW4oQ29lckNoZWNrYm94KTtcclxuXHJcbiAgICAvL1ZhcmlhYmxlc1xyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF92YWx1ZTogVFtdID0gW107XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVfc2lnbmFsID0gc2lnbmFsPFRbXT4oW10pO1xyXG4gICAgcHJvdGVjdGVkIF9ncmlkU2VhcmNoID0gc2lnbmFsPHN0cmluZyB8IG51bWJlcj4oJycpO1xyXG4gICAgcHJvdGVjdGVkIF9pc0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJvdGVjdGVkIF9pc0xvYWRpbmdNZXNzYWdlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByb3RlY3RlZCBfaWQ6IHN0cmluZyA9IFRvb2xzLkdldEd1aWQoJ2NvZXItZ3JpZCcpO1xyXG4gICAgcHJvdGVjdGVkIF9leHBhbmRlZEdyb3Vwczogc3RyaW5nW10gPSBbXTtcclxuICAgIHByb3RlY3RlZCBfZW5hYmxlQW5pbWF0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIF9pbmRleEZvY3VzID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcbiAgICBwcm90ZWN0ZWQgX3NvcnQgPSBzaWduYWw8SUdyaWRTb3J0Pih7IGNvbHVtbk5hbWU6ICcnLCBkaXJlY3Rpb246ICdub25lJywgaWNvbjogJycgfSk7XHJcblxyXG4gICAgLy9HZW5lcmljIFRvb2xzXHJcbiAgICBwcm90ZWN0ZWQgR2V0TnVtZXJpY0Zvcm1hdCA9IFRvb2xzLkdldE51bWVyaWNGb3JtYXQ7XHJcbiAgICBwcm90ZWN0ZWQgR2V0RGF0ZUZvcm1hdCA9IERhdGVUaW1lLkdldERhdGVGb3JtYXQ7XHJcblxyXG4gICAgLy9JbnB1dHNcclxuICAgIHB1YmxpYyBjb2x1bW5zID0gaW5wdXQ8SUdyaWRDb2x1bW48VD5bXT4oW10pO1xyXG4gICAgcHVibGljIGNsZWFuQ29sdW1uTmFtZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgQElucHV0KCkgYWRkQnV0dG9uOiBJR3JpZEhlYWRlckJ1dHRvbiA9IHsgc2hvdzogZmFsc2UgfTtcclxuICAgIEBJbnB1dCgpIGV4cG9ydEJ1dHRvbjogSUdyaWRIZWFkZXJFeHBvcnRCdXR0b24gPSB7IHNob3c6IGZhbHNlIH07XHJcbiAgICBASW5wdXQoKSBpbXBvcnRCdXR0b246IElHcmlkSGVhZGVyQnV0dG9uID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgQElucHV0KCkgc2VhcmNoOiBJR3JpZFNlYXJjaCA9IHsgc2hvdzogZmFsc2UsIGlnbm9yZTogZmFsc2UgfTtcclxuICAgIEBJbnB1dCgpIGJ1dHRvbkJ5Um93OiBJR3JpZEJ1dHRvbkJ5Um93PFQ+ID0ge307XHJcbiAgICBASW5wdXQoKSBjaGVja2JveDogSUdyaWRDaGVja2JveCA9IHsgc2hvdzogZmFsc2UgfTtcclxuICAgIHB1YmxpYyB0b29sdGlwQnlSb3cgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICAgIHB1YmxpYyBpc0xvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyByb3dzQnlQYWdlID0gaW5wdXQ8bnVtYmVyPig1MCk7XHJcbiAgICBwdWJsaWMgZ3JvdXBCeSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgcHVibGljIHNob3dDb2x1bW5Hcm91cGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHVibGljIHJvd3NCeUdyb3VwID0gaW5wdXQ8bnVtYmVyPig1MCk7XHJcbiAgICBwdWJsaWMgaXNJbnZpc2libGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgc2hvd0Zvb3RlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgcHVibGljIHdpZHRoID0gaW5wdXQ8c3RyaW5nPignMTAwJScpO1xyXG4gICAgcHVibGljIE1pbldpZHRoID0gaW5wdXQ8c3RyaW5nPignMjUwcHgnKTtcclxuICAgIHB1YmxpYyBNYXhXaWR0aCA9IGlucHV0PHN0cmluZz4oJzEwMCUnKTtcclxuICAgIHB1YmxpYyBoZWlnaHQgPSBpbnB1dDxzdHJpbmc+KCczNTBweCcpO1xyXG4gICAgcHVibGljIG1pbkhlaWdodCA9IGlucHV0PHN0cmluZz4oJzE0MHB4Jyk7XHJcbiAgICBwdWJsaWMgbWF4SGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMTAwdmgnKTtcclxuICAgIHB1YmxpYyBtYXJnaW4gPSBpbnB1dDxzdHJpbmc+KCdhdXRvJyk7XHJcbiAgICBwdWJsaWMgZW5hYmxlU29ydCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgcHVibGljIGVuYWJsZVJvd0ZvY3VzID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gICAgLy9PdXRwdXRzXHJcbiAgICBwdWJsaWMgb25DbGlja0FkZCA9IG91dHB1dDx2b2lkPigpO1xyXG4gICAgcHVibGljIG9uQ2xpY2tJbXBvcnQgPSBvdXRwdXQ8SUdyaWRJbXBvcnQ8VD4+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja0V4cG9ydCA9IG91dHB1dDxUW10+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja1JvdyA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uRG91YmxlQ2xpY2tSb3cgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrRGVsZXRlUm93ID0gb3V0cHV0PFQ+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja0VkaXRSb3cgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrR29Sb3cgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbktleXVwRW50ZXIgPSBvdXRwdXQ8SUdyaWRLZXl1cEVudGVyPigpO1xyXG4gICAgcHVibGljIG9uS2V5dXBFbnRlckxhc3QgPSBvdXRwdXQ8dm9pZD4oKTtcclxuICAgIHB1YmxpYyBvblN3aXRjaENoYW5nZSA9IG91dHB1dDxJR3JpZElucHV0U3dpdGNoQ2hhbmdlPFQ+PigpO1xyXG4gICAgcHVibGljIG9uVGV4dGJveENoYW5nZSA9IG91dHB1dDxJR3JpZElucHV0VGV4dGJveDxUPj4oKTtcclxuICAgIHB1YmxpYyBvblNlbGVjdGJveENoYW5nZSA9IG91dHB1dDxJR3JpZElucHV0VGV4dGJveDxUPj4oKTtcclxuICAgIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlID0gb3V0cHV0PElHcmlkSW5wdXRDaGVja2JveDxUPj4oKTtcclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgX2lzRGlzYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCgpIHx8IHRoaXMuaXNMb2FkaW5nKCkgfHwgdGhpcy5pc0ludmlzaWJsZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIF9pc0dyb3VwZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSgpLmxlbmd0aCA+IDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL2dldHRlclxyXG4gICAgcHJvdGVjdGVkIGdldCBfaGVpZ2h0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIGlmIChoZWlnaHQgPT0gJ2Z1bGwnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFRPT0xCQVIgPSA0NTtcclxuICAgICAgICAgICAgY29uc3QgUEFHRV9IRUFERVIgPSA3MDtcclxuICAgICAgICAgICAgY29uc3QgR1JJRF9IRUFERVIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLl9pZH0taGVhZGVyYCkhO1xyXG4gICAgICAgICAgICBjb25zdCBIRUFERVIgPSAoR1JJRF9IRUFERVIgJiYgR1JJRF9IRUFERVIuY2hpbGRyZW4ubGVuZ3RoID4gMCkgPyA1MCA6IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IE1BUkdJTiA9IDMwO1xyXG4gICAgICAgICAgICBjb25zdCBQQURESU5HID0gMjA7XHJcbiAgICAgICAgICAgIGNvbnN0IEZPT1RFUiA9IHRoaXMuc2hvd0Zvb3RlcigpID8gMjQuNSA6IDA7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IChTY3JlZW4uV0lORE9XX0hFSUdIVCAtIFRPT0xCQVIgLSBQQUdFX0hFQURFUiAtIE1BUkdJTiAtIEhFQURFUiAtIFBBRERJTkcgLSBGT09URVIpICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBoZWlnaHQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vZ2V0dGVyXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IF9vbmx5T25lQ2hlY2soKSB7XHJcbiAgICAgICAgcmV0dXJuIFRvb2xzLklzTm90TnVsbCh0aGlzLmNoZWNrYm94Lm9ubHlPbmVDaGVjaykgJiYgdGhpcy5jaGVja2JveC5vbmx5T25lQ2hlY2s7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBUb29scy5TbGVlcCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTG9hZGluZ01lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL0NvbnRyb2xWYWx1ZUFjY2Vzc29yXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgU2V0VmFsdWUodmFsdWU6IFRbXSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBpbmRleFJvdyA9IDA7XHJcbiAgICAgICAgaWYoIVRvb2xzLklzTm90TnVsbCh2YWx1ZSkpIHZhbHVlID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBUb29scy5CcmVha1JlZmVyZW5jZSh2YWx1ZSkubWFwKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBjaGVja2VkOiBmYWxzZSB9LCB7IC4uLml0ZW0gfSwgeyBpbmRleFJvdzogaW5kZXhSb3crKyB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX1VwZGF0ZVZhbHVlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZGF0YVNvdXJjZTtcclxuICAgICAgICB0aGlzLnZhbHVlX3NpZ25hbC5zZXQoZGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICAgIHB1YmxpYyBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBUW10pOiB2b2lkIHtcclxuICAgICAgICBsZXQgaW5kZXhSb3cgPSAwO1xyXG4gICAgICAgIGlmKCFUb29scy5Jc05vdE51bGwodmFsdWUpKSB2YWx1ZSA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UodmFsdWUpLm1hcCgoaXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHsgY2hlY2tlZDogZmFsc2UgfSwgeyAuLi5pdGVtIH0sIHsgaW5kZXhSb3c6IGluZGV4Um93KysgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLl92YWx1ZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgdGhpcy52YWx1ZV9zaWduYWwuc2V0KGRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAgLy9jb21wdXRlZFxyXG4gICAgIHByb3RlY3RlZCBncmlkQ29sdW1ucyA9IGNvbXB1dGVkPElHcmlkSGVhZGVyW10+KCgpID0+IHtcclxuICAgICAgICBjb25zdCBTRVRfQ09MVU1OUyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICAgICAgICAvL0hhcyBmaWx0ZXIgY29sdW1ucz9cclxuICAgICAgICBpZiAodGhpcy5jb2x1bW5zKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgcHJvcGVydHkgfSBvZiB0aGlzLmNvbHVtbnMoKSkge1xyXG4gICAgICAgICAgICAgICAgU0VUX0NPTFVNTlMuYWRkKHByb3BlcnR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9HZXQgYWxsIGNvbHVtbnNcclxuICAgICAgICBlbHNlIGZvciAoY29uc3Qgcm93IG9mIHRoaXMudmFsdWVfc2lnbmFsKCkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiByb3cpIHtcclxuICAgICAgICAgICAgICAgIFNFVF9DT0xVTU5TLmFkZChwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vUmVtb3ZlIGluZGV4Um93IGNvbHVtblxyXG4gICAgICAgIGlmIChTRVRfQ09MVU1OUy5oYXMoJ2luZGV4Um93JykpIHtcclxuICAgICAgICAgICAgU0VUX0NPTFVNTlMuZGVsZXRlKCdpbmRleFJvdycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9SZW1vdmUgZ3JvdXBCeSBjb2x1bW5cclxuICAgICAgICBpZiAodGhpcy5faXNHcm91cGVkKCkgJiYgIXRoaXMuc2hvd0NvbHVtbkdyb3VwZWQoKSAmJiBTRVRfQ09MVU1OUy5oYXModGhpcy5ncm91cEJ5KCkpKSB7XHJcbiAgICAgICAgICAgIFNFVF9DT0xVTU5TLmRlbGV0ZSh0aGlzLmdyb3VwQnkoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1NldCBpbmRleCBjb2x1bW5cclxuICAgICAgICBsZXQgaW5kZXhDb2x1bW4gPSAwO1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKFNFVF9DT0xVTU5TKS5tYXAocHJvcGVydHkgPT4gVG9vbHMuQnJlYWtSZWZlcmVuY2U8SUdyaWRIZWFkZXI+KHtcclxuICAgICAgICAgICAgY29sdW1uTmFtZTogcHJvcGVydHksXHJcbiAgICAgICAgICAgIGluZGV4Q29sdW1uOiBpbmRleENvbHVtbisrLFxyXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5fR2V0Q29sdW1uQ29uZmlnKHByb3BlcnR5KT8ud2lkdGggfHwgJ2F1dG8nXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8vY29tcHV0ZWRcclxuICAgIHByb3RlY3RlZCBncmlkRGF0YVNvdXJjZSA9IGNvbXB1dGVkPElHcmlkRGF0YVNvdXJjZVtdPigoKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpc3QgPSB0aGlzLmdyaWREYXRhU291cmNlRmlsdGVyZWQoKTtcclxuXHJcbiAgICAgICAgLy9JdCdzIEdyb3VwZWQ/XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzR3JvdXBlZCgpKSB7XHJcbiAgICAgICAgICAgIC8vbGV0IGluZGV4Um93ID0gMDtcclxuICAgICAgICAgICAgbGV0IGluZGV4R3JvdXAgPSAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgU0VUX0NPTFVNTiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBsaXN0IGFzIGFueSkge1xyXG4gICAgICAgICAgICAgICAgU0VUX0NPTFVNTi5hZGQocm93W3RoaXMuZ3JvdXBCeSgpXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IERBVEFfU09VUkNFX0dST1BVRUQgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgU0VUX0NPTFVNTikge1xyXG4gICAgICAgICAgICAgICAgREFUQV9TT1VSQ0VfR1JPUFVFRC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cEJ5OiBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhHcm91cDogaW5kZXhHcm91cCsrLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aDogbGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbVt0aGlzLmdyb3VwQnkoKV0gPT0gY29sdW1uKS5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcm93czogWy4uLmxpc3RdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbVt0aGlzLmdyb3VwQnkoKV0gPT0gY29sdW1uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaWNlKDAsIHRoaXMucm93c0J5R3JvdXAoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ubWFwKChpdGVtOiBhbnkpID0+IE9iamVjdC5hc3NpZ24oeyBpbmRleFJvdzogaW5kZXhSb3crKyB9LCBpdGVtKSlcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1Jlc3BvbnNlIGJ5IGdyb3VwXHJcbiAgICAgICAgICAgIHJldHVybiBbLi4uREFUQV9TT1VSQ0VfR1JPUFVFRF0uc3BsaWNlKDAsIHRoaXMucm93c0J5UGFnZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vUmVzcG9uc2VcclxuICAgICAgICByZXR1cm4gW3tcclxuICAgICAgICAgICAgZ3JvdXBCeTogJ05vdCBHcm91cGVkJyxcclxuICAgICAgICAgICAgaW5kZXhHcm91cDogLTEsXHJcbiAgICAgICAgICAgIGxlbmd0aDogLTEsXHJcbiAgICAgICAgICAgIHJvd3M6IFsuLi5saXN0XS5zcGxpY2UoMCwgdGhpcy5yb3dzQnlQYWdlKCkpXHJcbiAgICAgICAgfV07XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIGdyaWREYXRhU291cmNlRmlsdGVyZWQgPSBjb21wdXRlZDxUW10+KCgpID0+IHtcclxuICAgICAgICBsZXQgbGlzdDogVFtdID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBUb29scy5CcmVha1JlZmVyZW5jZSh0aGlzLnZhbHVlX3NpZ25hbCgpKTtcclxuXHJcbiAgICAgICAgLy9JZ25vcmUgRmlsdGVyXHJcbiAgICAgICAgaWYgKHRoaXMuX2dyaWRTZWFyY2goKSA9PSAnJyB8fCB0aGlzLnNlYXJjaD8uaWdub3JlKSB7XHJcbiAgICAgICAgICAgIGxpc3QgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9GaWx0ZXIgYnkgc2VhcmNoXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFNFVF9ST1cgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBsaXN0RmlsdGVyZWQ6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIGZvcihjb25zdCB7IGNvbHVtbk5hbWUgfSBvZiB0aGlzLmdyaWRDb2x1bW5zKCkpIHtcclxuICAgICAgICAgICAgICAgIGxpc3RGaWx0ZXJlZCA9IGRhdGFTb3VyY2UuZmlsdGVyKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgIVNFVF9ST1cuaGFzKGl0ZW1bJ2luZGV4Um93J10pXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgU3RyaW5nKGl0ZW1bVG9vbHMuRmlyc3RDaGFyVG9Mb3dlcihjb2x1bW5OYW1lKV0pLnRyaW0oKS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFN0cmluZyh0aGlzLl9ncmlkU2VhcmNoKCkpLnRyaW0oKS50b1VwcGVyQ2FzZSgpKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgeyBpbmRleFJvdyB9IG9mIGxpc3RGaWx0ZXJlZCBhcyBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBTRVRfUk9XLmFkZChpbmRleFJvdyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGlzdCA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGxpc3QuY29uY2F0KGxpc3RGaWx0ZXJlZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gVG9vbHMuQnJlYWtSZWZlcmVuY2UobGlzdCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLyoqIEdldCBDb2x1bW4gQ29uZmlndXJhdGlvbiAqL1xyXG4gICAgcHJvdGVjdGVkIF9HZXRDb2x1bW5Db25maWcgPSAoY29sdW1uTmFtZTogc3RyaW5nKTogSUdyaWRDb2x1bW48VD4gfCB1bmRlZmluZWQgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMoKS5maW5kKHggPT4geC5wcm9wZXJ0eS5yZXBsYWNlQWxsKCcgJywgJycpLnRvVXBwZXJDYXNlKCkgPT0gY29sdW1uTmFtZS5yZXBsYWNlQWxsKCcgJywgJycpLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogQ2xlYW4gTmFtZSBvciBnZXQgYWxpYXMgKi9cclxuICAgIHByb3RlY3RlZCBfR2V0Q29sdW1uTmFtZSA9IChjb2x1bW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkNvbmZpZyA9IHRoaXMuX0dldENvbHVtbkNvbmZpZyhjb2x1bW5OYW1lKTtcclxuXHJcbiAgICAgICAgLy9HZXQgQWxpYXNcclxuICAgICAgICBpZiAoY29sdW1uQ29uZmlnICYmIGNvbHVtbkNvbmZpZy5hbGlhcyAmJiBjb2x1bW5Db25maWcuYWxpYXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29sdW1uQ29uZmlnLmFsaWFzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9DbGVhbiBoZWFkZXJOYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYW5Db2x1bW5OYW1lKCkgJiYgY29sdW1uTmFtZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbk5hbWUgPSBUb29scy5GaXJzdENoYXJUb0xvd2VyKGNvbHVtbk5hbWUpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2hhckFycmF5ID0gW107XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBjaGFyIG9mIGNvbHVtbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmKGNoYXIgPT09IGNoYXIudG9VcHBlckNhc2UoKSkgY2hhckFycmF5LnB1c2goJyAnKTtcclxuICAgICAgICAgICAgICAgIGNoYXJBcnJheS5wdXNoKGNoYXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFyQXJyYXlbMF0gPSBjaGFyQXJyYXlbMF0udG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgY29sdW1uTmFtZSA9IGNoYXJBcnJheS5qb2luKCcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb2x1bW5OYW1lLnRyaW0oKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0dldFNob3J0SWNvbiA9IChjb2x1bW5OYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc29ydCgpLmNvbHVtbk5hbWUgPT0gY29sdW1uTmFtZSA/IHRoaXMuX3NvcnQoKS5pY29uIDogJyc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9HZXRJZCA9IChpbmRleFJvdzogbnVtYmVyLCBpbmRleENvbHVtbjogbnVtYmVyLCBzdWZmaXg6IHN0cmluZyA9ICcnKTogc3RyaW5nID0+IHtcclxuICAgICAgICBpZiAoc3VmZml4Lmxlbmd0aCA+IDApIHN1ZmZpeCA9IGAtJHtzdWZmaXh9YDtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5faWR9LXJvdyR7aW5kZXhSb3d9Y29sdW1uJHtpbmRleENvbHVtbn0ke3N1ZmZpeH1gO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfR2V0Q2VsbFZhbHVlID0gKHJvdzogYW55LCBjb2x1bW5OYW1lOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gICAgICAgIHJldHVybiByb3dbVG9vbHMuRmlyc3RDaGFyVG9Mb3dlcihjb2x1bW5OYW1lKS5yZXBsYWNlQWxsKCcgJywgJycpXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0dldFRvb2x0aXAgPSAocHJlZml4OiBzdHJpbmcsIHJvdzogYW55LCBzdWZmaXg6IHN0cmluZyA9ICcnKTogc3RyaW5nID0+IHtcclxuICAgICAgICBsZXQgY29sdW1uID0gVG9vbHMuRmlyc3RDaGFyVG9Mb3dlcih0aGlzLnRvb2x0aXBCeVJvdygpKS5yZXBsYWNlQWxsKCcgJywgJycpO1xyXG5cclxuICAgICAgICBpZiAoc3VmZml4Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc3VmZml4ID0gYCAke3N1ZmZpeH1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcEJ5Um93KCkubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/IGAke3ByZWZpeH0gJHtyb3dbY29sdW1uXX0ke3N1ZmZpeH1gXHJcbiAgICAgICAgICAgIDogYCR7cHJlZml4fSR7c3VmZml4fWA7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9IaWRlUm93ID0gKGdyb3VwOiBJR3JpZERhdGFTb3VyY2UpOiBib29sZWFuID0+IHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX2lzR3JvdXBlZCgpID8gISh0aGlzLl9leHBhbmRlZEdyb3Vwcy5zb21lKHggPT4geCA9PSBncm91cC5ncm91cEJ5KSkgOiBmYWxzZSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0lzQ2VsbFR5cGUocHJvcGVydHk6IHN0cmluZywgZGF0YTogYW55LCB0eXBlOiAnbnVtYmVyJyB8ICdkYXRlJyB8ICd0ZW1wbGF0ZScgfCAnY29lclRleHRib3gnIHwgJ2NvZXJOdW1iZXJib3gnIHwgJ2NvZXJTZWxlY3Rib3gnICB8ICdjb2VyU3dpdGNoJyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXNwb25zZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkNvbmZpZyA9IHRoaXMuX0dldENvbHVtbkNvbmZpZyhwcm9wZXJ0eSk7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW3Byb3BlcnR5XTtcclxuICAgICAgICBjb25zdCByb3cgPSBUb29scy5CcmVha1JlZmVyZW5jZShkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAoWydjb2VyVGV4dGJveCcsICdjb2VyTnVtYmVyYm94JywgJ2NvZXJTZWxlY3Rib3gnLCAnY29lclN3aXRjaCddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dENvbmZpZzogYW55ID0gY29sdW1uQ29uZmlnO1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpbnB1dENvbmZpZy5oYXNPd25Qcm9wZXJ0eSh0eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBpbnB1dENvbmZpZ1t0eXBlXSA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICAgICAgICAgICAgICYmIGlucHV0Q29uZmlnW3R5cGVdKHsgcHJvcGVydHksIHJvdywgdmFsdWUgfSkuaXNJbnB1dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBzd2l0Y2godHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnLnR5cGVOdW1iZXIgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbHVtbkNvbmZpZy50eXBlTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbHVtbkNvbmZpZy50eXBlTnVtYmVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gKGRhdGEgPT09IG51bGwpID8gZmFsc2UgOiBjb2x1bW5Db25maWcudHlwZU51bWJlcih7IHByb3BlcnR5LCByb3csIHZhbHVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbHVtbkNvbmZpZy50eXBlRGF0ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29sdW1uQ29uZmlnLnR5cGVEYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbHVtbkNvbmZpZy50eXBlRGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IChkYXRhID09PSBudWxsKSA/IGZhbHNlIDogY29sdW1uQ29uZmlnLnR5cGVEYXRlKHsgcHJvcGVydHksIHJvdywgdmFsdWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICd0ZW1wbGF0ZSc6IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gKHR5cGVvZiBjb2x1bW5Db25maWcudGVtcGxhdGUgPT09ICdzdHJpbmcnKSB8fCAodHlwZW9mIGNvbHVtbkNvbmZpZy50ZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0lzQ2VsbENvbG9yKHByb3BlcnR5OiBzdHJpbmcsIGRhdGE6IGFueSwgY29sb3I6ICdjb2xvckJsdWUnIHwgJ2NvbG9yR3JlZW4nIHwgJ2NvbG9yWWVsbG93JyB8ICdjb2xvclJlZCcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBjb2x1bW5Db25maWc6IGFueSA9IHRoaXMuX0dldENvbHVtbkNvbmZpZyhwcm9wZXJ0eSk7XHJcblxyXG4gICAgICAgIGlmIChjb2x1bW5Db25maWcpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW5Db25maWdbY29sb3JdID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29sdW1uQ29uZmlnW2NvbG9yXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbHVtbkNvbmZpZ1tjb2xvcl0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29sdW1uQ29uZmlnW2NvbG9yXSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXHJcbiAgICAgICAgICAgICAgICAgICAgcm93OiBUb29scy5CcmVha1JlZmVyZW5jZShkYXRhKSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YVtwcm9wZXJ0eV1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIEdldEF0dHJpYnV0ZShwcm9wZXJ0eTogc3RyaW5nLCBkYXRhOiBhbnksIGF0dHJpYnV0ZTogc3RyaW5nLCB0eXBlOiAnY29lclN3aXRjaCcgfCAnY29lclRleHRib3gnIHwgJ2NvZXJOdW1iZXJib3gnfCAnY29lclNlbGVjdGJveCcgfCAnZGVmYXVsLWNlbGwnICk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gdGhpcy5fR2V0Q29sdW1uQ29uZmlnKHByb3BlcnR5KTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IFRvb2xzLklzTm90TnVsbChkYXRhKSA/IGRhdGFbcHJvcGVydHldIDogbnVsbDtcclxuICAgICAgICBjb25zdCByb3cgPSBUb29scy5CcmVha1JlZmVyZW5jZShkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RlZmF1bC1jZWxsJykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoKGF0dHJpYnV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RleHRBbGlnbic6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbkNvbmZpZz8udGV4dEFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RlbXBsYXRlJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dENvbmZpZzogYW55ID0gY29sdW1uQ29uZmlnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Q29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBpbnB1dENvbmZpZ1thdHRyaWJ1dGVdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dENvbmZpZ1thdHRyaWJ1dGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodHlwZW9mIGlucHV0Q29uZmlnW2F0dHJpYnV0ZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRDb25maWdbYXR0cmlidXRlXSh7IHByb3BlcnR5LCByb3csIHZhbHVlIH0pIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmKFsnY29lclRleHRib3gnLCAnY29lck51bWJlcmJveCcsICdjb2VyU2VsZWN0Ym94JywgJ2NvZXJTd2l0Y2gnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRDb25maWc6IGFueSA9IGNvbHVtbkNvbmZpZztcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dENvbmZpZy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSAmJiB0eXBlb2YgaW5wdXRDb25maWdbdHlwZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRDb25maWdbdHlwZV0oeyBwcm9wZXJ0eSwgcm93LCB2YWx1ZSB9KVthdHRyaWJ1dGVdIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBCdXR0b25CeVJvdyhwcm9wZXJ0eTogJ3Nob3dEZWxldGVCdXR0b24nIHwgJ3Nob3dFZGl0QnV0dG9uJyB8ICdzaG93R29CdXR0b24nLCBkYXRhOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uQnlSb3c6IGFueSA9IHRoaXMuYnV0dG9uQnlSb3c7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gVG9vbHMuSXNOb3ROdWxsKGRhdGEpID8gVG9vbHMuQnJlYWtSZWZlcmVuY2UoZGF0YSkgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAoYnV0dG9uQnlSb3cuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgIGlmIChyb3cgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gKHR5cGVvZiBidXR0b25CeVJvd1twcm9wZXJ0eV0gPT09ICdib29sZWFuJykgPyBidXR0b25CeVJvd1twcm9wZXJ0eV0gOiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYnV0dG9uQnlSb3dbcHJvcGVydHldID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYnV0dG9uQnlSb3dbcHJvcGVydHldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYnV0dG9uQnlSb3dbcHJvcGVydHldID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGJ1dHRvbkJ5Um93W3Byb3BlcnR5XSh7IHByb3BlcnR5LCByb3csIHZhbHVlOiBudWxsIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2UgPyAodGhpcy5fdmFsdWUgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID4gMCkgOiBmYWxzZTtcclxuICAgIH1cclxufSJdfQ==
|
@@ -1,30 +0,0 @@
|
|
1
|
-
export const GridTemplates = {
|
2
|
-
/** Template for boolean property */
|
3
|
-
isActiveTemplate: (item) => {
|
4
|
-
if (item.value) {
|
5
|
-
return `
|
6
|
-
<span class='text-green-bold'>
|
7
|
-
<i class="fa-solid fa-circle-check"></i> Active
|
8
|
-
</span>
|
9
|
-
`;
|
10
|
-
}
|
11
|
-
else {
|
12
|
-
return `
|
13
|
-
<span class='text-gray-bold'>
|
14
|
-
<i class="fa-solid fa-circle-minus"></i> Disabled
|
15
|
-
</span>
|
16
|
-
`;
|
17
|
-
}
|
18
|
-
},
|
19
|
-
/** Template for boolean property */
|
20
|
-
coerSwitchTemplate: (item) => ({
|
21
|
-
isInput: true,
|
22
|
-
tooltip: `${item.value ? 'Active' : 'Disabled'}`
|
23
|
-
}),
|
24
|
-
/** Template for text property */
|
25
|
-
coerTextboxTemplate: (item) => ({
|
26
|
-
isInput: true,
|
27
|
-
isInvalid: item.value.length <= 0
|
28
|
-
})
|
29
|
-
};
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1ncmlkLnRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvc3JjL2NvbXBvbmVudHMvbGliL2NvZXItZ3JpZC9jb2VyLWdyaWQudGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUV6QixvQ0FBb0M7SUFDcEMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFvQixFQUFVLEVBQUU7UUFDL0MsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPOzs7O2FBSU4sQ0FBQztRQUNOLENBQUM7YUFFSSxDQUFDO1lBQ0YsT0FBTzs7OzthQUlOLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxrQkFBa0IsRUFBRSxDQUFDLElBQW9CLEVBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFXLEVBQUU7S0FDcEQsQ0FBQztJQUdGLGlDQUFpQztJQUNqQyxtQkFBbUIsRUFBRSxDQUFDLElBQW9CLEVBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sRUFBRSxJQUFJO1FBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7S0FDcEMsQ0FBQztDQUNMLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJR3JpZENvZXJTd2l0Y2gsIElHcmlkQ29lclRleHRCb3gsIElHcmlkSXRlbSB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgR3JpZFRlbXBsYXRlcyA9IHtcclxuXHJcbiAgICAvKiogVGVtcGxhdGUgZm9yIGJvb2xlYW4gcHJvcGVydHkgKi9cclxuICAgIGlzQWN0aXZlVGVtcGxhdGU6IChpdGVtOiBJR3JpZEl0ZW08YW55Pik6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0udmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGBcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSd0ZXh0LWdyZWVuLWJvbGQnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2lyY2xlLWNoZWNrXCI+PC9pPiBBY3RpdmVcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9J3RleHQtZ3JheS1ib2xkJz5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNpcmNsZS1taW51c1wiPjwvaT4gRGlzYWJsZWRcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgYDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBUZW1wbGF0ZSBmb3IgYm9vbGVhbiBwcm9wZXJ0eSAqL1xyXG4gICAgY29lclN3aXRjaFRlbXBsYXRlOiAoaXRlbTogSUdyaWRJdGVtPGFueT4pOiBJR3JpZENvZXJTd2l0Y2ggPT4gKHtcclxuICAgICAgICBpc0lucHV0OiB0cnVlLFxyXG4gICAgICAgIHRvb2x0aXA6IGAke2l0ZW0udmFsdWUgPyAnQWN0aXZlJyA6ICdEaXNhYmxlZCcgfWBcclxuICAgIH0pLFxyXG5cclxuXHJcbiAgICAvKiogVGVtcGxhdGUgZm9yIHRleHQgcHJvcGVydHkgKi9cclxuICAgIGNvZXJUZXh0Ym94VGVtcGxhdGU6IChpdGVtOiBJR3JpZEl0ZW08YW55Pik6IElHcmlkQ29lclRleHRCb3ggPT4gKHtcclxuICAgICAgICBpc0lucHV0OiB0cnVlLFxyXG4gICAgICAgIGlzSW52YWxpZDogaXRlbS52YWx1ZS5sZW5ndGggPD0gMFxyXG4gICAgfSlcclxufSJdfQ==
|