@den4ik92/ng2-smart-table 1.0.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/esm2020/den4ik92-ng2-smart-table.mjs +5 -0
- package/esm2020/lib/components/cell/cell-edit-mode/custom-edit.component.mjs +50 -0
- package/esm2020/lib/components/cell/cell-edit-mode/default-edit.component.mjs +84 -0
- package/esm2020/lib/components/cell/cell-edit-mode/edit-cell-default.mjs +35 -0
- package/esm2020/lib/components/cell/cell-edit-mode/edit-cell.component.mjs +75 -0
- package/esm2020/lib/components/cell/cell-editors/checkbox-editor.component.mjs +37 -0
- package/esm2020/lib/components/cell/cell-editors/completer-editor.component.mjs +38 -0
- package/esm2020/lib/components/cell/cell-editors/default-editor.mjs +29 -0
- package/esm2020/lib/components/cell/cell-editors/input-editor.component.mjs +33 -0
- package/esm2020/lib/components/cell/cell-editors/select-editor.component.mjs +55 -0
- package/esm2020/lib/components/cell/cell-editors/textarea-editor.component.mjs +35 -0
- package/esm2020/lib/components/cell/cell-view-mode/custom-view.component.mjs +63 -0
- package/esm2020/lib/components/cell/cell-view-mode/view-cell.component.mjs +59 -0
- package/esm2020/lib/components/cell/cell-view-mode/view-cell.mjs +2 -0
- package/esm2020/lib/components/cell/cell.component.mjs +82 -0
- package/esm2020/lib/components/cell/cell.module.mjs +80 -0
- package/esm2020/lib/components/filter/custom-filter.component.mjs +53 -0
- package/esm2020/lib/components/filter/default-filter.component.mjs +100 -0
- package/esm2020/lib/components/filter/filter-default.mjs +35 -0
- package/esm2020/lib/components/filter/filter-types/checkbox-filter.component.mjs +65 -0
- package/esm2020/lib/components/filter/filter-types/completer-filter.component.mjs +52 -0
- package/esm2020/lib/components/filter/filter-types/default-filter.mjs +34 -0
- package/esm2020/lib/components/filter/filter-types/input-filter.component.mjs +51 -0
- package/esm2020/lib/components/filter/filter-types/select-filter.component.mjs +71 -0
- package/esm2020/lib/components/filter/filter.component.mjs +91 -0
- package/esm2020/lib/components/filter/filter.module.mjs +67 -0
- package/esm2020/lib/components/pager/pager.component.mjs +284 -0
- package/esm2020/lib/components/pager/pager.module.mjs +29 -0
- package/esm2020/lib/components/tbody/cells/create-cancel.component.mjs +52 -0
- package/esm2020/lib/components/tbody/cells/custom.component.mjs +56 -0
- package/esm2020/lib/components/tbody/cells/edit-delete.component.mjs +103 -0
- package/esm2020/lib/components/tbody/tbody.component.mjs +206 -0
- package/esm2020/lib/components/tbody/tbody.module.mjs +48 -0
- package/esm2020/lib/components/thead/cells/actions-title.component.mjs +36 -0
- package/esm2020/lib/components/thead/cells/actions.component.mjs +44 -0
- package/esm2020/lib/components/thead/cells/add-button.component.mjs +63 -0
- package/esm2020/lib/components/thead/cells/checkbox-select-all.component.mjs +28 -0
- package/esm2020/lib/components/thead/cells/column-title.component.mjs +37 -0
- package/esm2020/lib/components/thead/cells/title/title.component.mjs +100 -0
- package/esm2020/lib/components/thead/rows/thead-filters-row.component.mjs +105 -0
- package/esm2020/lib/components/thead/rows/thead-form-row.component.mjs +108 -0
- package/esm2020/lib/components/thead/rows/thead-titles-row.component.mjs +103 -0
- package/esm2020/lib/components/thead/thead.component.mjs +76 -0
- package/esm2020/lib/components/thead/thead.module.mjs +76 -0
- package/esm2020/lib/lib/data-set/cell.mjs +41 -0
- package/esm2020/lib/lib/data-set/column.mjs +75 -0
- package/esm2020/lib/lib/data-set/data-set.mjs +98 -0
- package/esm2020/lib/lib/data-set/row.mjs +46 -0
- package/esm2020/lib/lib/data-source/data-source.mjs +101 -0
- package/esm2020/lib/lib/data-source/local/local.data-source.mjs +228 -0
- package/esm2020/lib/lib/data-source/local/local.filter.mjs +13 -0
- package/esm2020/lib/lib/data-source/local/local.pager.mjs +6 -0
- package/esm2020/lib/lib/data-source/local/local.sorter.mjs +19 -0
- package/esm2020/lib/lib/data-source/server/server-source.conf.mjs +20 -0
- package/esm2020/lib/lib/data-source/server/server.data-source.mjs +93 -0
- package/esm2020/lib/lib/grid.mjs +220 -0
- package/esm2020/lib/lib/helpers.mjs +84 -0
- package/esm2020/lib/lib/interfaces/smart-table.models.mjs +2 -0
- package/esm2020/lib/ng2-smart-table.component.mjs +203 -0
- package/esm2020/lib/ng2-smart-table.module.mjs +52 -0
- package/esm2020/public-api.mjs +8 -0
- package/fesm2015/den4ik92-ng2-smart-table.mjs +4329 -0
- package/fesm2015/den4ik92-ng2-smart-table.mjs.map +1 -0
- package/fesm2020/den4ik92-ng2-smart-table.mjs +3949 -0
- package/fesm2020/den4ik92-ng2-smart-table.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/cell/cell-edit-mode/custom-edit.component.d.ts +13 -0
- package/lib/components/cell/cell-edit-mode/default-edit.component.d.ts +8 -0
- package/lib/components/cell/cell-edit-mode/edit-cell-default.d.ts +13 -0
- package/lib/components/cell/cell-edit-mode/edit-cell.component.d.ts +12 -0
- package/lib/components/cell/cell-editors/checkbox-editor.component.d.ts +8 -0
- package/lib/components/cell/cell-editors/completer-editor.component.d.ts +13 -0
- package/lib/components/cell/cell-editors/default-editor.d.ts +19 -0
- package/lib/components/cell/cell-editors/input-editor.component.d.ts +7 -0
- package/lib/components/cell/cell-editors/select-editor.component.d.ts +7 -0
- package/lib/components/cell/cell-editors/textarea-editor.component.d.ts +7 -0
- package/lib/components/cell/cell-view-mode/custom-view.component.d.ts +19 -0
- package/lib/components/cell/cell-view-mode/view-cell.component.d.ts +7 -0
- package/lib/components/cell/cell-view-mode/view-cell.d.ts +4 -0
- package/lib/components/cell/cell.component.d.ts +20 -0
- package/lib/components/cell/cell.module.d.ts +21 -0
- package/lib/components/filter/custom-filter.component.d.ts +14 -0
- package/lib/components/filter/default-filter.component.d.ts +7 -0
- package/lib/components/filter/filter-default.d.ts +14 -0
- package/lib/components/filter/filter-types/checkbox-filter.component.d.ts +13 -0
- package/lib/components/filter/filter-types/completer-filter.component.d.ts +12 -0
- package/lib/components/filter/filter-types/default-filter.d.ts +24 -0
- package/lib/components/filter/filter-types/input-filter.component.d.ts +12 -0
- package/lib/components/filter/filter-types/select-filter.component.d.ts +11 -0
- package/lib/components/filter/filter.component.d.ts +11 -0
- package/lib/components/filter/filter.module.d.ts +17 -0
- package/lib/components/pager/pager.component.d.ts +35 -0
- package/lib/components/pager/pager.module.d.ts +9 -0
- package/lib/components/tbody/cells/create-cancel.component.d.ts +16 -0
- package/lib/components/tbody/cells/custom.component.d.ts +13 -0
- package/lib/components/tbody/cells/edit-delete.component.d.ts +24 -0
- package/lib/components/tbody/tbody.component.d.ts +37 -0
- package/lib/components/tbody/tbody.module.d.ts +13 -0
- package/lib/components/thead/cells/actions-title.component.d.ts +13 -0
- package/lib/components/thead/cells/actions.component.d.ts +12 -0
- package/lib/components/thead/cells/add-button.component.d.ts +18 -0
- package/lib/components/thead/cells/checkbox-select-all.component.d.ts +9 -0
- package/lib/components/thead/cells/column-title.component.d.ts +11 -0
- package/lib/components/thead/cells/title/title.component.d.ts +17 -0
- package/lib/components/thead/rows/thead-filters-row.component.d.ts +19 -0
- package/lib/components/thead/rows/thead-form-row.component.d.ts +20 -0
- package/lib/components/thead/rows/thead-titles-row.component.d.ts +18 -0
- package/lib/components/thead/thead.component.d.ts +18 -0
- package/lib/components/thead/thead.module.d.ts +20 -0
- package/lib/lib/data-set/cell.d.ts +20 -0
- package/lib/lib/data-set/column.d.ts +44 -0
- package/lib/lib/data-set/data-set.d.ts +37 -0
- package/lib/lib/data-set/row.d.ts +20 -0
- package/lib/lib/data-source/data-source.d.ts +35 -0
- package/lib/lib/data-source/local/local.data-source.d.ts +55 -0
- package/lib/lib/data-source/local/local.filter.d.ts +4 -0
- package/lib/lib/data-source/local/local.pager.d.ts +3 -0
- package/lib/lib/data-source/local/local.sorter.d.ts +4 -0
- package/lib/lib/data-source/server/server-source.conf.d.ts +27 -0
- package/lib/lib/data-source/server/server.data-source.d.ts +30 -0
- package/lib/lib/grid.d.ts +49 -0
- package/lib/lib/helpers.d.ts +18 -0
- package/lib/lib/interfaces/smart-table.models.d.ts +148 -0
- package/lib/ng2-smart-table.component.d.ts +43 -0
- package/lib/ng2-smart-table.module.d.ts +14 -0
- package/package.json +35 -0
- package/public-api.d.ts +8 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { Deferred, getDeepFromObject, getPageForRowIndex } from './helpers';
|
|
3
|
+
import { DataSet } from './data-set/data-set';
|
|
4
|
+
export class Grid {
|
|
5
|
+
constructor(source, settings) {
|
|
6
|
+
this.createFormShown = false;
|
|
7
|
+
this.onSelectRowSource = new Subject();
|
|
8
|
+
this.onDeselectRowSource = new Subject();
|
|
9
|
+
this.setSettings(settings);
|
|
10
|
+
this.setSource(source);
|
|
11
|
+
}
|
|
12
|
+
detach() {
|
|
13
|
+
if (this.sourceOnChangedSubscription) {
|
|
14
|
+
this.sourceOnChangedSubscription.unsubscribe();
|
|
15
|
+
}
|
|
16
|
+
if (this.sourceOnUpdatedSubscription) {
|
|
17
|
+
this.sourceOnUpdatedSubscription.unsubscribe();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
showActionColumn(position) {
|
|
21
|
+
return this.isCurrentActionsPosition(position) && this.isActionsVisible();
|
|
22
|
+
}
|
|
23
|
+
isCurrentActionsPosition(position) {
|
|
24
|
+
return position == this.getSetting('actions.position');
|
|
25
|
+
}
|
|
26
|
+
isActionsVisible() {
|
|
27
|
+
return this.getSetting('actions.add') || this.getSetting('actions.edit') || this.getSetting('actions.delete') || this.getSetting('actions.custom').length;
|
|
28
|
+
}
|
|
29
|
+
isMultiSelectVisible() {
|
|
30
|
+
return this.getSetting('selectMode') === 'multi';
|
|
31
|
+
}
|
|
32
|
+
getNewRow() {
|
|
33
|
+
return this.dataSet.newRow;
|
|
34
|
+
}
|
|
35
|
+
setSettings(settings) {
|
|
36
|
+
this.settings = settings;
|
|
37
|
+
this.dataSet = new DataSet([], this.getSetting('columns'));
|
|
38
|
+
if (this.source) {
|
|
39
|
+
this.source.refresh();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
getDataSet() {
|
|
43
|
+
return this.dataSet;
|
|
44
|
+
}
|
|
45
|
+
setSource(source) {
|
|
46
|
+
this.source = this.prepareSource(source);
|
|
47
|
+
this.detach();
|
|
48
|
+
this.sourceOnChangedSubscription = this.source.onChanged().subscribe((changes) => this.processDataChange(changes));
|
|
49
|
+
this.sourceOnUpdatedSubscription = this.source.onUpdated().subscribe((data) => {
|
|
50
|
+
const changedRow = this.dataSet.findRowByData(data);
|
|
51
|
+
changedRow.setData(data);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
getSetting(name, defaultValue) {
|
|
55
|
+
return getDeepFromObject(this.settings, name, defaultValue);
|
|
56
|
+
}
|
|
57
|
+
getColumns() {
|
|
58
|
+
return this.dataSet.getColumns();
|
|
59
|
+
}
|
|
60
|
+
getRows() {
|
|
61
|
+
return this.dataSet.getRows();
|
|
62
|
+
}
|
|
63
|
+
selectRow(row, state) {
|
|
64
|
+
this.dataSet.selectRow(row, state);
|
|
65
|
+
}
|
|
66
|
+
multipleSelectRow(row) {
|
|
67
|
+
this.dataSet.multipleSelectRow(row);
|
|
68
|
+
}
|
|
69
|
+
onSelectRow() {
|
|
70
|
+
return this.onSelectRowSource.asObservable();
|
|
71
|
+
}
|
|
72
|
+
onDeselectRow() {
|
|
73
|
+
return this.onDeselectRowSource.asObservable();
|
|
74
|
+
}
|
|
75
|
+
edit(row) {
|
|
76
|
+
row.isInEditing = true;
|
|
77
|
+
}
|
|
78
|
+
create(row, confirmEmitter) {
|
|
79
|
+
const deferred = new Deferred();
|
|
80
|
+
deferred.promise.then((newData) => {
|
|
81
|
+
newData = newData ? newData : row.getNewData();
|
|
82
|
+
if (deferred.resolve.skipAdd) {
|
|
83
|
+
this.createFormShown = false;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.source.prepend(newData).then(() => {
|
|
87
|
+
this.createFormShown = false;
|
|
88
|
+
this.dataSet.createNewRow();
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}).catch((err) => {
|
|
92
|
+
// doing nothing
|
|
93
|
+
});
|
|
94
|
+
if (this.getSetting('add.confirmCreate')) {
|
|
95
|
+
confirmEmitter.emit({
|
|
96
|
+
newData: row.getNewData(),
|
|
97
|
+
source: this.source,
|
|
98
|
+
confirm: deferred,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
deferred.resolve();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
save(row, confirmEmitter) {
|
|
106
|
+
const deferred = new Deferred();
|
|
107
|
+
deferred.promise.then((newData) => {
|
|
108
|
+
newData = newData ? newData : row.getNewData();
|
|
109
|
+
if (deferred.resolve.skipEdit) {
|
|
110
|
+
row.isInEditing = false;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.source.update(row.getData(), newData).then(() => {
|
|
114
|
+
row.isInEditing = false;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}).catch((err) => {
|
|
118
|
+
// doing nothing
|
|
119
|
+
});
|
|
120
|
+
if (this.getSetting('edit.confirmSave')) {
|
|
121
|
+
confirmEmitter.emit({
|
|
122
|
+
data: row.getData(),
|
|
123
|
+
newData: row.getNewData(),
|
|
124
|
+
source: this.source,
|
|
125
|
+
confirm: deferred,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
deferred.resolve();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
delete(row, confirmEmitter) {
|
|
133
|
+
const deferred = new Deferred();
|
|
134
|
+
deferred.promise.then(() => {
|
|
135
|
+
this.source.remove(row.getData());
|
|
136
|
+
}).catch((err) => {
|
|
137
|
+
// doing nothing
|
|
138
|
+
});
|
|
139
|
+
if (this.getSetting('delete.confirmDelete')) {
|
|
140
|
+
confirmEmitter.emit({
|
|
141
|
+
data: row.getData(),
|
|
142
|
+
source: this.source,
|
|
143
|
+
confirm: deferred,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
deferred.resolve();
|
|
148
|
+
}
|
|
149
|
+
if (row.isSelected) {
|
|
150
|
+
this.dataSet.selectRow(row, false);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
processDataChange(changes) {
|
|
154
|
+
if (this.shouldProcessChange(changes)) {
|
|
155
|
+
if (changes['action'] === 'load') {
|
|
156
|
+
this.dataSet.deselectAll();
|
|
157
|
+
}
|
|
158
|
+
this.dataSet.setData(changes['elements']);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
shouldProcessChange(changes) {
|
|
162
|
+
if (['filter', 'sort', 'page', 'remove', 'refresh', 'load', 'paging'].indexOf(changes['action']) !== -1) {
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
else if (['prepend', 'append'].indexOf(changes['action']) !== -1 && !this.getSetting('pager.display')) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
prepareSource(source) {
|
|
171
|
+
const initialSource = this.getInitialSort();
|
|
172
|
+
if (initialSource && initialSource['field'] && initialSource['direction']) {
|
|
173
|
+
source.setSort([initialSource], false);
|
|
174
|
+
}
|
|
175
|
+
if (this.getSetting('pager.display') === true) {
|
|
176
|
+
source.setPaging(this.getPageToSelect(source), this.getSetting('pager.perPage'), false);
|
|
177
|
+
}
|
|
178
|
+
source.refresh();
|
|
179
|
+
return source;
|
|
180
|
+
}
|
|
181
|
+
getInitialSort() {
|
|
182
|
+
const sortConf = {};
|
|
183
|
+
this.getColumns().forEach((column) => {
|
|
184
|
+
if (column.isSortable && column.defaultSortDirection) {
|
|
185
|
+
sortConf['field'] = column.id;
|
|
186
|
+
sortConf['direction'] = column.defaultSortDirection;
|
|
187
|
+
sortConf['compare'] = column.getCompareFunction();
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
return sortConf;
|
|
191
|
+
}
|
|
192
|
+
getSelectedRowsData() {
|
|
193
|
+
return this.dataSet.getRows();
|
|
194
|
+
}
|
|
195
|
+
selectAllRows(status) {
|
|
196
|
+
this.dataSet.setSelectAll(status);
|
|
197
|
+
}
|
|
198
|
+
getFirstRow() {
|
|
199
|
+
return this.dataSet.getFirstRow();
|
|
200
|
+
}
|
|
201
|
+
getLastRow() {
|
|
202
|
+
return this.dataSet.getLastRow();
|
|
203
|
+
}
|
|
204
|
+
getSelectionInfo() {
|
|
205
|
+
const switchPageToSelectedRowPage = this.getSetting('switchPageToSelectedRowPage');
|
|
206
|
+
const selectedRowIndex = Number(this.getSetting('selectedRowIndex', 0)) || 0;
|
|
207
|
+
const { perPage, page } = this.getSetting('pager');
|
|
208
|
+
return { perPage, page, selectedRowIndex, switchPageToSelectedRowPage };
|
|
209
|
+
}
|
|
210
|
+
getPageToSelect(source) {
|
|
211
|
+
const { switchPageToSelectedRowPage, selectedRowIndex, perPage, page } = this.getSelectionInfo();
|
|
212
|
+
let pageToSelect = Math.max(1, page);
|
|
213
|
+
if (switchPageToSelectedRowPage && selectedRowIndex >= 0) {
|
|
214
|
+
pageToSelect = getPageForRowIndex(selectedRowIndex, perPage);
|
|
215
|
+
}
|
|
216
|
+
const maxPageAmount = Math.ceil(source.count() / perPage);
|
|
217
|
+
return maxPageAmount ? Math.min(pageToSelect, maxPageAmount) : pageToSelect;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nMi1zbWFydC10YWJsZS9zcmMvbGliL2xpYi9ncmlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBSTdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHNUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSTlDLE1BQU0sT0FBTyxJQUFJO0lBY2YsWUFBWSxNQUFrQixFQUFFLFFBQTRCO1FBWjVELG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBTWpDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDdkMsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQU12QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEQ7UUFDRCxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsUUFBZ0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELHdCQUF3QixDQUFDLFFBQWdCO1FBQ3ZDLE9BQU8sUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENB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YUFBYSxHQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQzlFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERlZmVycmVkLCBnZXREZWVwRnJvbU9iamVjdCwgZ2V0UGFnZUZvclJvd0luZGV4IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gJy4vZGF0YS1zZXQvY29sdW1uJztcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4vZGF0YS1zZXQvcm93JztcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tICcuL2RhdGEtc2V0L2RhdGEtc2V0JztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuL2RhdGEtc291cmNlL2RhdGEtc291cmNlJztcbmltcG9ydCB7IFNtYXJ0VGFibGVTZXR0aW5ncyB9IGZyb20gJy4vaW50ZXJmYWNlcy9zbWFydC10YWJsZS5tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgR3JpZCB7XG5cbiAgY3JlYXRlRm9ybVNob3duOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc291cmNlOiBEYXRhU291cmNlO1xuICBzZXR0aW5nczogU21hcnRUYWJsZVNldHRpbmdzO1xuICBkYXRhU2V0OiBEYXRhU2V0O1xuXG4gIG9uU2VsZWN0Um93U291cmNlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBvbkRlc2VsZWN0Um93U291cmNlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIHByaXZhdGUgc291cmNlT25DaGFuZ2VkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc291cmNlT25VcGRhdGVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3Ioc291cmNlOiBEYXRhU291cmNlLCBzZXR0aW5nczogU21hcnRUYWJsZVNldHRpbmdzKSB7XG4gICAgdGhpcy5zZXRTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgdGhpcy5zZXRTb3VyY2Uoc291cmNlKTtcbiAgfVxuXG4gIGRldGFjaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3VyY2VPbkNoYW5nZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc291cmNlT25DaGFuZ2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvdXJjZU9uVXBkYXRlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zb3VyY2VPblVwZGF0ZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBzaG93QWN0aW9uQ29sdW1uKHBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0N1cnJlbnRBY3Rpb25zUG9zaXRpb24ocG9zaXRpb24pICYmIHRoaXMuaXNBY3Rpb25zVmlzaWJsZSgpO1xuICB9XG5cbiAgaXNDdXJyZW50QWN0aW9uc1Bvc2l0aW9uKHBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcG9zaXRpb24gPT0gdGhpcy5nZXRTZXR0aW5nKCdhY3Rpb25zLnBvc2l0aW9uJyk7XG4gIH1cblxuICBpc0FjdGlvbnNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNldHRpbmcoJ2FjdGlvbnMuYWRkJykgfHwgdGhpcy5nZXRTZXR0aW5nKCdhY3Rpb25zLmVkaXQnKSB8fCB0aGlzLmdldFNldHRpbmcoJ2FjdGlvbnMuZGVsZXRlJykgfHwgdGhpcy5nZXRTZXR0aW5nKCdhY3Rpb25zLmN1c3RvbScpLmxlbmd0aDtcbiAgfVxuXG4gIGlzTXVsdGlTZWxlY3RWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNldHRpbmcoJ3NlbGVjdE1vZGUnKSA9PT0gJ211bHRpJztcbiAgfVxuXG4gIGdldE5ld1JvdygpOiBSb3cge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXQubmV3Um93O1xuICB9XG5cbiAgc2V0U2V0dGluZ3Moc2V0dGluZ3M6IFNtYXJ0VGFibGVTZXR0aW5ncykge1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLmRhdGFTZXQgPSBuZXcgRGF0YVNldChbXSwgdGhpcy5nZXRTZXR0aW5nKCdjb2x1bW5zJykpO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKSB7XG4gICAgICB0aGlzLnNvdXJjZS5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YVNldCgpOiBEYXRhU2V0IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2V0O1xuICB9XG5cbiAgc2V0U291cmNlKHNvdXJjZTogRGF0YVNvdXJjZSkge1xuICAgIHRoaXMuc291cmNlID0gdGhpcy5wcmVwYXJlU291cmNlKHNvdXJjZSk7XG4gICAgdGhpcy5kZXRhY2goKTtcblxuICAgIHRoaXMuc291cmNlT25DaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy5zb3VyY2Uub25DaGFuZ2VkKCkuc3Vic2NyaWJlKChjaGFuZ2VzOiBhbnkpID0+IHRoaXMucHJvY2Vzc0RhdGFDaGFuZ2UoY2hhbmdlcykpO1xuXG4gICAgdGhpcy5zb3VyY2VPblVwZGF0ZWRTdWJzY3JpcHRpb24gPSB0aGlzLnNvdXJjZS5vblVwZGF0ZWQoKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZFJvdyA9IHRoaXMuZGF0YVNldC5maW5kUm93QnlEYXRhKGRhdGEpO1xuICAgICAgY2hhbmdlZFJvdy5zZXREYXRhKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U2V0dGluZyhuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGdldERlZXBGcm9tT2JqZWN0KHRoaXMuc2V0dGluZ3MsIG5hbWUsIGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICBnZXRDb2x1bW5zKCk6IEFycmF5PENvbHVtbj4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXQuZ2V0Q29sdW1ucygpO1xuICB9XG5cbiAgZ2V0Um93cygpOiBBcnJheTxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2V0LmdldFJvd3MoKTtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFJvdywgc3RhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRhdGFTZXQuc2VsZWN0Um93KHJvdywgc3RhdGUpO1xuICB9XG5cbiAgbXVsdGlwbGVTZWxlY3RSb3cocm93OiBSb3cpIHtcbiAgICB0aGlzLmRhdGFTZXQubXVsdGlwbGVTZWxlY3RSb3cocm93KTtcbiAgfVxuXG4gIG9uU2VsZWN0Um93KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub25TZWxlY3RSb3dTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBvbkRlc2VsZWN0Um93KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub25EZXNlbGVjdFJvd1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGVkaXQocm93OiBSb3cpIHtcbiAgICByb3cuaXNJbkVkaXRpbmcgPSB0cnVlO1xuICB9XG5cbiAgY3JlYXRlKHJvdzogUm93LCBjb25maXJtRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4pIHtcblxuICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgZGVmZXJyZWQucHJvbWlzZS50aGVuKChuZXdEYXRhKSA9PiB7XG4gICAgICBuZXdEYXRhID0gbmV3RGF0YSA/IG5ld0RhdGEgOiByb3cuZ2V0TmV3RGF0YSgpO1xuICAgICAgaWYgKGRlZmVycmVkLnJlc29sdmUuc2tpcEFkZCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1TaG93biA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucHJlcGVuZChuZXdEYXRhKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1TaG93biA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGF0YVNldC5jcmVhdGVOZXdSb3coKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gZG9pbmcgbm90aGluZ1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZ2V0U2V0dGluZygnYWRkLmNvbmZpcm1DcmVhdGUnKSkge1xuICAgICAgY29uZmlybUVtaXR0ZXIuZW1pdCh7XG4gICAgICAgIG5ld0RhdGE6IHJvdy5nZXROZXdEYXRhKCksXG4gICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgIGNvbmZpcm06IGRlZmVycmVkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICBzYXZlKHJvdzogUm93LCBjb25maXJtRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4pIHtcblxuICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgZGVmZXJyZWQucHJvbWlzZS50aGVuKChuZXdEYXRhKSA9PiB7XG4gICAgICBuZXdEYXRhID0gbmV3RGF0YSA/IG5ld0RhdGEgOiByb3cuZ2V0TmV3RGF0YSgpO1xuICAgICAgaWYgKGRlZmVycmVkLnJlc29sdmUuc2tpcEVkaXQpIHtcbiAgICAgICAgcm93LmlzSW5FZGl0aW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvdXJjZS51cGRhdGUocm93LmdldERhdGEoKSwgbmV3RGF0YSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcm93LmlzSW5FZGl0aW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIC8vIGRvaW5nIG5vdGhpbmdcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmdldFNldHRpbmcoJ2VkaXQuY29uZmlybVNhdmUnKSkge1xuICAgICAgY29uZmlybUVtaXR0ZXIuZW1pdCh7XG4gICAgICAgIGRhdGE6IHJvdy5nZXREYXRhKCksXG4gICAgICAgIG5ld0RhdGE6IHJvdy5nZXROZXdEYXRhKCksXG4gICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgIGNvbmZpcm06IGRlZmVycmVkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGUocm93OiBSb3csIGNvbmZpcm1FbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55Pikge1xuICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgZGVmZXJyZWQucHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuc291cmNlLnJlbW92ZShyb3cuZ2V0RGF0YSgpKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAvLyBkb2luZyBub3RoaW5nXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5nZXRTZXR0aW5nKCdkZWxldGUuY29uZmlybURlbGV0ZScpKSB7XG4gICAgICBjb25maXJtRW1pdHRlci5lbWl0KHtcbiAgICAgICAgZGF0YTogcm93LmdldERhdGEoKSxcbiAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICAgICAgY29uZmlybTogZGVmZXJyZWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBpZihyb3cuaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5kYXRhU2V0LnNlbGVjdFJvdyhyb3csIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzRGF0YUNoYW5nZShjaGFuZ2VzOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zaG91bGRQcm9jZXNzQ2hhbmdlKGNoYW5nZXMpKSB7XG4gICAgICBpZihjaGFuZ2VzWydhY3Rpb24nXSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YVNldC5kZXNlbGVjdEFsbCgpXG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFTZXQuc2V0RGF0YShjaGFuZ2VzWydlbGVtZW50cyddKTtcbiAgICB9XG4gIH1cblxuICBzaG91bGRQcm9jZXNzQ2hhbmdlKGNoYW5nZXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChbJ2ZpbHRlcicsICdzb3J0JywgJ3BhZ2UnLCAncmVtb3ZlJywgJ3JlZnJlc2gnLCAnbG9hZCcsICdwYWdpbmcnXS5pbmRleE9mKGNoYW5nZXNbJ2FjdGlvbiddKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoWydwcmVwZW5kJywgJ2FwcGVuZCddLmluZGV4T2YoY2hhbmdlc1snYWN0aW9uJ10pICE9PSAtMSAmJiAhdGhpcy5nZXRTZXR0aW5nKCdwYWdlci5kaXNwbGF5JykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlU291cmNlKHNvdXJjZTogYW55KTogRGF0YVNvdXJjZSB7XG4gICAgY29uc3QgaW5pdGlhbFNvdXJjZTogYW55ID0gdGhpcy5nZXRJbml0aWFsU29ydCgpO1xuICAgIGlmIChpbml0aWFsU291cmNlICYmIGluaXRpYWxTb3VyY2VbJ2ZpZWxkJ10gJiYgaW5pdGlhbFNvdXJjZVsnZGlyZWN0aW9uJ10pIHtcbiAgICAgIHNvdXJjZS5zZXRTb3J0KFtpbml0aWFsU291cmNlXSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRTZXR0aW5nKCdwYWdlci5kaXNwbGF5JykgPT09IHRydWUpIHtcbiAgICAgIHNvdXJjZS5zZXRQYWdpbmcodGhpcy5nZXRQYWdlVG9TZWxlY3Qoc291cmNlKSwgdGhpcy5nZXRTZXR0aW5nKCdwYWdlci5wZXJQYWdlJyksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBzb3VyY2UucmVmcmVzaCgpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBnZXRJbml0aWFsU29ydCgpIHtcbiAgICBjb25zdCBzb3J0Q29uZjogYW55ID0ge307XG4gICAgdGhpcy5nZXRDb2x1bW5zKCkuZm9yRWFjaCgoY29sdW1uOiBDb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4uaXNTb3J0YWJsZSAmJiBjb2x1bW4uZGVmYXVsdFNvcnREaXJlY3Rpb24pIHtcbiAgICAgICAgc29ydENvbmZbJ2ZpZWxkJ10gPSBjb2x1bW4uaWQ7XG4gICAgICAgIHNvcnRDb25mWydkaXJlY3Rpb24nXSA9IGNvbHVtbi5kZWZhdWx0U29ydERpcmVjdGlvbjtcbiAgICAgICAgc29ydENvbmZbJ2NvbXBhcmUnXSA9IGNvbHVtbi5nZXRDb21wYXJlRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc29ydENvbmY7XG4gIH1cblxuICBnZXRTZWxlY3RlZFJvd3NEYXRhKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXQuZ2V0Um93cygpXG4gIH1cblxuICBzZWxlY3RBbGxSb3dzKHN0YXR1czogYm9vbGVhbikge1xuICAgIHRoaXMuZGF0YVNldC5zZXRTZWxlY3RBbGwoc3RhdHVzKTtcbiAgfVxuXG4gIGdldEZpcnN0Um93KCk6IFJvdyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNldC5nZXRGaXJzdFJvdygpO1xuICB9XG5cbiAgZ2V0TGFzdFJvdygpOiBSb3cge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXQuZ2V0TGFzdFJvdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25JbmZvKCk6IHsgcGVyUGFnZTogbnVtYmVyLCBwYWdlOiBudW1iZXIsIHNlbGVjdGVkUm93SW5kZXg6IG51bWJlciwgc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlOiBib29sZWFuIH0ge1xuICAgIGNvbnN0IHN3aXRjaFBhZ2VUb1NlbGVjdGVkUm93UGFnZTogYm9vbGVhbiA9IHRoaXMuZ2V0U2V0dGluZygnc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlJyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dJbmRleDogbnVtYmVyID0gTnVtYmVyKHRoaXMuZ2V0U2V0dGluZygnc2VsZWN0ZWRSb3dJbmRleCcsIDApKSB8fCAwO1xuICAgIGNvbnN0IHsgcGVyUGFnZSwgcGFnZSB9OiB7IHBlclBhZ2U6IG51bWJlciwgcGFnZTogbnVtYmVyIH0gPSB0aGlzLmdldFNldHRpbmcoJ3BhZ2VyJyk7XG4gICAgcmV0dXJuIHsgcGVyUGFnZSwgcGFnZSwgc2VsZWN0ZWRSb3dJbmRleCwgc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlIH07XG4gIH1cblxuICBwcml2YXRlIGdldFBhZ2VUb1NlbGVjdChzb3VyY2U6IERhdGFTb3VyY2UpOiBudW1iZXIge1xuICAgIGNvbnN0IHsgc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlLCBzZWxlY3RlZFJvd0luZGV4LCBwZXJQYWdlLCBwYWdlIH0gPSB0aGlzLmdldFNlbGVjdGlvbkluZm8oKTtcbiAgICBsZXQgcGFnZVRvU2VsZWN0OiBudW1iZXIgPSBNYXRoLm1heCgxLCBwYWdlKTtcbiAgICBpZiAoc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlICYmIHNlbGVjdGVkUm93SW5kZXggPj0gMCkge1xuICAgICAgcGFnZVRvU2VsZWN0ID0gZ2V0UGFnZUZvclJvd0luZGV4KHNlbGVjdGVkUm93SW5kZXgsIHBlclBhZ2UpO1xuICAgIH1cbiAgICBjb25zdCBtYXhQYWdlQW1vdW50OiBudW1iZXIgPSBNYXRoLmNlaWwoc291cmNlLmNvdW50KCkgLyBwZXJQYWdlKTtcbiAgICByZXR1cm4gbWF4UGFnZUFtb3VudCA/IE1hdGgubWluKHBhZ2VUb1NlbGVjdCwgbWF4UGFnZUFtb3VudCkgOiBwYWdlVG9TZWxlY3Q7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extending object that entered in first argument.
|
|
3
|
+
*
|
|
4
|
+
* Returns extended object or false if have no target object or incorrect type.
|
|
5
|
+
*
|
|
6
|
+
* If you wish to clone source object (without modify it), just use empty new
|
|
7
|
+
* object as first argument, like this:
|
|
8
|
+
* deepExtend({}, yourObj_1, [yourObj_N]);
|
|
9
|
+
*/
|
|
10
|
+
export const deepExtend = function (...objects) {
|
|
11
|
+
if (arguments.length < 1 || typeof arguments[0] !== 'object') {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (arguments.length < 2) {
|
|
15
|
+
return arguments[0];
|
|
16
|
+
}
|
|
17
|
+
const target = arguments[0];
|
|
18
|
+
// convert arguments to array and cut off target object
|
|
19
|
+
const args = Array.prototype.slice.call(arguments, 1);
|
|
20
|
+
let val, src;
|
|
21
|
+
args.forEach((obj) => {
|
|
22
|
+
// skip argument if it is array or isn't object
|
|
23
|
+
if (typeof obj !== 'object' || Array.isArray(obj)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
Object.keys(obj).forEach(function (key) {
|
|
27
|
+
src = target[key]; // source value
|
|
28
|
+
val = obj[key]; // new value
|
|
29
|
+
// recursion prevention
|
|
30
|
+
if (val === target) {
|
|
31
|
+
return;
|
|
32
|
+
/**
|
|
33
|
+
* if new value isn't object then just overwrite by new value
|
|
34
|
+
* instead of extending.
|
|
35
|
+
*/
|
|
36
|
+
}
|
|
37
|
+
else if (typeof val !== 'object' || val === null) {
|
|
38
|
+
target[key] = val;
|
|
39
|
+
return;
|
|
40
|
+
// just clone arrays (and recursive clone objects inside)
|
|
41
|
+
}
|
|
42
|
+
else if (Array.isArray(val)) {
|
|
43
|
+
target[key] = [...val];
|
|
44
|
+
return;
|
|
45
|
+
// overwrite by new value if source isn't object or array
|
|
46
|
+
}
|
|
47
|
+
else if (typeof src !== 'object' || src === null || Array.isArray(src)) {
|
|
48
|
+
target[key] = deepExtend({}, val);
|
|
49
|
+
return;
|
|
50
|
+
// source value and new value is objects both, extending...
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
target[key] = deepExtend(src, val);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
return target;
|
|
59
|
+
};
|
|
60
|
+
export class Deferred {
|
|
61
|
+
constructor() {
|
|
62
|
+
this.promise = new Promise((resolve, reject) => {
|
|
63
|
+
this.resolve = resolve;
|
|
64
|
+
this.reject = reject;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// getDeepFromObject({result: {data: 1}}, 'result.data', 2); // returns 1
|
|
69
|
+
export function getDeepFromObject(object = {}, name, defaultValue) {
|
|
70
|
+
const keys = name.split('.');
|
|
71
|
+
// clone the object
|
|
72
|
+
let level = deepExtend({}, object);
|
|
73
|
+
keys.forEach((k) => {
|
|
74
|
+
if (level && typeof level[k] !== 'undefined') {
|
|
75
|
+
level = level[k];
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return typeof level === 'undefined' ? defaultValue : level;
|
|
79
|
+
}
|
|
80
|
+
export function getPageForRowIndex(index, perPage) {
|
|
81
|
+
// we need to add 1 to convert 0-based index to 1-based page number.
|
|
82
|
+
return Math.floor(index / perPage) + 1;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nMi1zbWFydC10YWJsZS9zcmMvbGliL2xpYi9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFVBQVMsR0FBRyxPQUFtQjtJQUN2RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUM1RCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUVELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1Qix1REFBdUQ7SUFDdkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV0RCxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFFYixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7UUFDeEIsK0NBQStDO1FBQy9DLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsT0FBTztTQUNSO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHO1lBQ3BDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlO1lBQ2xDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBRTVCLHVCQUF1QjtZQUN2QixJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7Z0JBQ2xCLE9BQU87Z0JBRVA7OzttQkFHRzthQUNKO2lCQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ2xCLE9BQU87Z0JBRVAseURBQXlEO2FBQzFEO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsT0FBTztnQkFFUCx5REFBeUQ7YUFDMUQ7aUJBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4RSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEMsT0FBTztnQkFFUCwyREFBMkQ7YUFDNUQ7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLE9BQU87YUFDUjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sUUFBUTtJQU9uQjtRQUNFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBWSxFQUFFLFlBQWtCO0lBQzdFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsbUJBQW1CO0lBQ25CLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2pCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUM1QyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsT0FBZTtJQUMvRCxvRUFBb0U7SUFDcEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXh0ZW5kaW5nIG9iamVjdCB0aGF0IGVudGVyZWQgaW4gZmlyc3QgYXJndW1lbnQuXG4gKlxuICogUmV0dXJucyBleHRlbmRlZCBvYmplY3Qgb3IgZmFsc2UgaWYgaGF2ZSBubyB0YXJnZXQgb2JqZWN0IG9yIGluY29ycmVjdCB0eXBlLlxuICpcbiAqIElmIHlvdSB3aXNoIHRvIGNsb25lIHNvdXJjZSBvYmplY3QgKHdpdGhvdXQgbW9kaWZ5IGl0KSwganVzdCB1c2UgZW1wdHkgbmV3XG4gKiBvYmplY3QgYXMgZmlyc3QgYXJndW1lbnQsIGxpa2UgdGhpczpcbiAqICAgZGVlcEV4dGVuZCh7fSwgeW91ck9ial8xLCBbeW91ck9ial9OXSk7XG4gKi9cbmV4cG9ydCBjb25zdCBkZWVwRXh0ZW5kID0gZnVuY3Rpb24oLi4ub2JqZWN0czogQXJyYXk8YW55Pik6IGFueSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSB8fCB0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gIH1cblxuICBjb25zdCB0YXJnZXQgPSBhcmd1bWVudHNbMF07XG5cbiAgLy8gY29udmVydCBhcmd1bWVudHMgdG8gYXJyYXkgYW5kIGN1dCBvZmYgdGFyZ2V0IG9iamVjdFxuICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICBsZXQgdmFsLCBzcmM7XG5cbiAgYXJncy5mb3JFYWNoKChvYmo6IGFueSkgPT4ge1xuICAgIC8vIHNraXAgYXJndW1lbnQgaWYgaXQgaXMgYXJyYXkgb3IgaXNuJ3Qgb2JqZWN0XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzcmMgPSB0YXJnZXRba2V5XTsgLy8gc291cmNlIHZhbHVlXG4gICAgICB2YWwgPSBvYmpba2V5XTsgLy8gbmV3IHZhbHVlXG5cbiAgICAgIC8vIHJlY3Vyc2lvbiBwcmV2ZW50aW9uXG4gICAgICBpZiAodmFsID09PSB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiBuZXcgdmFsdWUgaXNuJ3Qgb2JqZWN0IHRoZW4ganVzdCBvdmVyd3JpdGUgYnkgbmV3IHZhbHVlXG4gICAgICAgICAqIGluc3RlYWQgb2YgZXh0ZW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8ganVzdCBjbG9uZSBhcnJheXMgKGFuZCByZWN1cnNpdmUgY2xvbmUgb2JqZWN0cyBpbnNpZGUpXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IFsuLi52YWxdO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8gb3ZlcndyaXRlIGJ5IG5ldyB2YWx1ZSBpZiBzb3VyY2UgaXNuJ3Qgb2JqZWN0IG9yIGFycmF5XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IHNyYyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHNyYykpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBkZWVwRXh0ZW5kKHt9LCB2YWwpO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8gc291cmNlIHZhbHVlIGFuZCBuZXcgdmFsdWUgaXMgb2JqZWN0cyBib3RoLCBleHRlbmRpbmcuLi5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gZGVlcEV4dGVuZChzcmMsIHZhbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZCB7XG5cbiAgcHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuXG4gIHJlc29sdmU6IGFueTtcbiAgcmVqZWN0OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICB9XG59XG5cbi8vIGdldERlZXBGcm9tT2JqZWN0KHtyZXN1bHQ6IHtkYXRhOiAxfX0sICdyZXN1bHQuZGF0YScsIDIpOyAvLyByZXR1cm5zIDFcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWVwRnJvbU9iamVjdChvYmplY3QgPSB7fSwgbmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpIHtcbiAgY29uc3Qga2V5cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgLy8gY2xvbmUgdGhlIG9iamVjdFxuICBsZXQgbGV2ZWwgPSBkZWVwRXh0ZW5kKHt9LCBvYmplY3QpO1xuICBrZXlzLmZvckVhY2goKGspID0+IHtcbiAgICBpZiAobGV2ZWwgJiYgdHlwZW9mIGxldmVsW2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV2ZWwgPSBsZXZlbFtrXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlb2YgbGV2ZWwgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdFZhbHVlIDogbGV2ZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlRm9yUm93SW5kZXgoaW5kZXg6IG51bWJlciwgcGVyUGFnZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gd2UgbmVlZCB0byBhZGQgMSB0byBjb252ZXJ0IDAtYmFzZWQgaW5kZXggdG8gMS1iYXNlZCBwYWdlIG51bWJlci5cbiAgcmV0dXJuIE1hdGguZmxvb3IoaW5kZXggLyBwZXJQYWdlKSArIDE7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyLXNtYXJ0LXRhYmxlL3NyYy9saWIvbGliL2ludGVyZmFjZXMvc21hcnQtdGFibGUubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4uL2RhdGEtc291cmNlL2RhdGEtc291cmNlXCI7XG5pbXBvcnQgeyBMb2NhbERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vZGF0YS1zb3VyY2UvbG9jYWwvbG9jYWwuZGF0YS1zb3VyY2VcIjtcbmltcG9ydCB7IERlZmVycmVkIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb24ge1xuICB0aXRsZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VGFibGVTZXR0aW5nczxUID0gYW55PiB7XG5cdG1vZGU/OiAnaW5saW5lJyB8ICdleHRlcm5hbCcgfCAnY2xpY2stdG8tZWRpdCc7XG5cdHNlbGVjdE1vZGU/OiAnc2luZ2xlJyB8ICdtdWx0aSc7XG5cdHNlbGVjdGVkUm93SW5kZXg/OiBudW1iZXI7IC8vaWYgbmVlZCBkZXNlbGVjdCBmaXJzdCBpdGVtIHNldCB2YWx1ZSA8IDA7XG5cdHN3aXRjaFBhZ2VUb1NlbGVjdGVkUm93UGFnZT86IGJvb2xlYW47XG5cdGhpZGVIZWFkZXI/OiBib29sZWFuO1xuXHRoaWRlU3ViSGVhZGVyPzogYm9vbGVhbjtcblx0YWN0aW9ucz86IFNtYXJ0VGFibGVBY3Rpb24gfCBmYWxzZTtcblx0ZmlsdGVyPzoge1xuXHRcdGlucHV0Q2xhc3M6IHN0cmluZztcblx0fTtcblx0ZWRpdD86XG5cdFx0fCB7XG5cdFx0XHRcdGlucHV0Q2xhc3M/OiBzdHJpbmc7XG5cdFx0XHRcdGVkaXRCdXR0b25Db250ZW50Pzogc3RyaW5nO1xuXHRcdFx0XHRzYXZlQnV0dG9uQ29udGVudD86IHN0cmluZztcblx0XHRcdFx0Y2FuY2VsQnV0dG9uQ29udGVudD86IHN0cmluZztcblx0XHRcdFx0Y29uZmlybVNhdmU/OiBib29sZWFuO1xuXHRcdCAgfVxuXHRcdHwgZmFsc2U7XG5cdGFkZD86XG5cdFx0fCB7XG5cdFx0XHRcdGlucHV0Q2xhc3M/OiBzdHJpbmc7XG5cdFx0XHRcdGFkZEJ1dHRvbkNvbnRlbnQ/OiBzdHJpbmc7XG5cdFx0XHRcdGNyZWF0ZUJ1dHRvbkNvbnRlbnQ/OiBzdHJpbmc7XG5cdFx0XHRcdGNhbmNlbEJ1dHRvbkNvbnRlbnQ/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbmZpcm1DcmVhdGU/OiBib29sZWFuO1xuXHRcdCAgfVxuXHRcdHwgZmFsc2U7XG5cdGRlbGV0ZT86XG5cdFx0fCB7XG5cdFx0XHRcdGRlbGV0ZUJ1dHRvbkNvbnRlbnQ/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbmZpcm1EZWxldGU/OiBib29sZWFuO1xuXHRcdCAgfVxuXHRcdHwgZmFsc2U7XG5cdGF0dHI/OiB7XG5cdFx0aWQ/OiBzdHJpbmc7XG5cdFx0Y2xhc3M/OiBzdHJpbmc7XG5cdH07XG5cdG5vRGF0YU1lc3NhZ2U/OiBzdHJpbmc7XG5cdGNvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogU21hcnRUYWJsZUNvbHVtbjxUPiB9O1xuXHRwYWdlcj86IHtcblx0XHRkaXNwbGF5OiBib29sZWFuO1xuXHRcdHBhZ2U/OiBudW1iZXI7XG5cdFx0cGVyUGFnZTogbnVtYmVyO1xuXHR9IHwgZmFsc2U7XG5cdHJvd0NsYXNzRnVuY3Rpb24/OiAocm93OiB7IGRhdGE6IFQgfSkgPT4gc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VGFibGVBY3Rpb24ge1xuXHRjb2x1bW5UaXRsZT86IHN0cmluZztcblx0YWRkPzogYm9vbGVhbjtcblx0ZWRpdD86IGJvb2xlYW47XG5cdGRlbGV0ZT86IGJvb2xlYW47XG5cdGN1c3RvbT86IFNtYXJ0VGFibGVDdXN0b21BY3Rpb25bXTtcblx0cG9zaXRpb24/OiAnbGVmdCcgfCAncmlnaHQnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VGFibGVDdXN0b21BY3Rpb24ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHRpdGxlOiBzdHJpbmc7IC8vIGluc2VydCBodG1sIGNvbnRlbnQgdG8gYWN0aW9uIGJ1dHRvblxufVxuXG5leHBvcnQgdHlwZSBTbWFydFRhYmxlQ29sdW1uPFQ+ID0gU21hcnRUYWJsZVRleHRIdG1sQ29sdW1uPFQ+IHwgU21hcnRUYWJsZUN1c3RvbUNvbHVtbjxUPjtcblxuaW50ZXJmYWNlIFNtYXJ0VGFibGVEZWZhdWx0Q29sdW1uPFQ+IHtcblx0dGl0bGU6IHN0cmluZztcblx0d2lkdGg/OiBzdHJpbmc7IC8vZXhhbXBsZTogJzIwcHgnLCAnMjAlJ1xuXHRjbGFzcz86IHN0cmluZztcblx0ZWRpdGFibGU/OiBib29sZWFuO1xuXHRoaWRlPzogYm9vbGVhbjtcblx0c29ydD86IGJvb2xlYW47XG5cdHNvcnREaXJlY3Rpb24/OiAnZGVzYycgfCAnYXNjJyB8IGZhbHNlO1xuXHRlZGl0b3I/OiBTbWFydFRhYmxlRWRpdG9yQW5kRmlsdGVyO1xuXHRmaWx0ZXI/OiBTbWFydFRhYmxlRWRpdG9yQW5kRmlsdGVyIHwgZmFsc2U7XG5cdGNvbXBhcmVGdW5jdGlvbj86IChpdGVtQTogVCwgaXRlbUI6IFQpID0+IG51bWJlcjtcblx0dmFsdWVQcmVwYXJlRnVuY3Rpb24/OiAoY29sdW1uRGF0YTogYW55LCByb3dEYXRhOiBUKSA9PiBhbnk7XG5cdGZpbHRlckZ1bmN0aW9uPzogKGNvbHVtbkRhdGE6IGFueSwgc2VhcmNoOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTbWFydFRhYmxlVGV4dEh0bWxDb2x1bW48VD4gZXh0ZW5kcyBTbWFydFRhYmxlRGVmYXVsdENvbHVtbjxUPiB7XG5cdHR5cGU6ICd0ZXh0JyB8ICdodG1sJztcbn1cblxuaW50ZXJmYWNlIFNtYXJ0VGFibGVDdXN0b21Db2x1bW48VD4gZXh0ZW5kcyBTbWFydFRhYmxlRGVmYXVsdENvbHVtbjxUPiB7XG5cdHR5cGU6ICdjdXN0b20nO1xuXHRyZW5kZXJDb21wb25lbnQ6IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgU21hcnRUYWJsZUVkaXRvckFuZEZpbHRlciA9XG5cdHwgeyB0eXBlOiAndGV4dCcgfCAndGV4dGFyZWEnIH1cblx0fCBTbWFydFRhYmxlRWRpdG9yTGlzdFxuXHR8IFNtYXJ0VGFibGVFZGl0b3JDb21wbGV0ZXJcblx0fCBTbWFydFRhYmxlRWRpdG9yQ2hlY2tib3hcblx0fCBTbWFydFRhYmxlRWRpdG9yQ3VzdG9tO1xuXG5pbnRlcmZhY2UgU21hcnRUYWJsZUVkaXRvckxpc3Qge1xuXHR0eXBlOiAnbGlzdCc7XG5cdGNvbmZpZzoge1xuXHRcdHNlbGVjdFRleHQ/OiBzdHJpbmc7XG5cdFx0bGlzdDogU2VsZWN0T3B0aW9uW107XG5cdH07XG59XG5cbmludGVyZmFjZSBTbWFydFRhYmxlRWRpdG9yQ29tcGxldGVyIHtcblx0dHlwZTogJ2NvbXBsZXRlcic7XG5cdGNvbmZpZzoge1xuXHRcdGNvbXBsZXRlcjoge1xuXHRcdFx0ZGF0YTogYW55W107XG5cdFx0XHRzZWFyY2hGaWVsZHM6IHN0cmluZztcblx0XHRcdHRpdGxlRmllbGQ6IHN0cmluZztcblx0XHRcdGRlc2NyaXB0aW9uRmllbGQ/OiBzdHJpbmc7XG5cdFx0fTtcblx0fTtcbn1cblxuaW50ZXJmYWNlIFNtYXJ0VGFibGVFZGl0b3JDdXN0b20ge1xuXHR0eXBlOiAnY3VzdG9tJztcblx0Y29tcG9uZW50OiBhbnk7XG5cdGNvbmZpZz86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbWFydFRhYmxlRWRpdG9yQ2hlY2tib3gge1xuXHR0eXBlOiAnY2hlY2tib3gnO1xuXHRjb25maWc/OiB7XG5cdFx0dHJ1ZTogc3RyaW5nO1xuXHRcdGZhbHNlOiBzdHJpbmc7XG5cdFx0cmVzZXRUZXh0Pzogc3RyaW5nO1xuXHR9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VGFibGVGaWx0ZXJJdGVtIHtcblx0ZmllbGQ6IHN0cmluZztcblx0c2VhcmNoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTbWFydFRhYmxlRGVmYXVsdEV2ZW50PFQ+IHtcblx0Y29uZmlybTogRGVmZXJyZWQ7XG5cdGRhdGE6IFQ7XG5cdHNvdXJjZTogRGF0YVNvdXJjZTtcbn1cblxuZXhwb3J0IHR5cGUgU21hcnRUYWJsZUNvbmZpcm1EZWxldGVFdmVudDxUPWFueT4gPSBTbWFydFRhYmxlRGVmYXVsdEV2ZW50PFQ+O1xuXG5leHBvcnQgdHlwZSBTbWFydFRhYmxlUm93Q2xpY2tlZEV2ZW50PFQ9YW55PiA9IE9taXQ8U21hcnRUYWJsZURlZmF1bHRFdmVudDxUPiwgXCJjb25maXJtXCI+XG5cbmV4cG9ydCBpbnRlcmZhY2UgU21hcnRUYWJsZUN1c3RvbUV2ZW50PFQ9YW55PiBleHRlbmRzIE9taXQ8U21hcnRUYWJsZURlZmF1bHRFdmVudDxUPiwgXCJjb25maXJtXCI+IHtcblx0YWN0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU21hcnRUYWJsZVJvd1NlbGVjdEV2ZW50PFQ9YW55PiBleHRlbmRzIE9taXQ8U21hcnRUYWJsZURlZmF1bHRFdmVudDxUPiwgXCJjb25maXJtXCI+IHtcblx0aXNTZWxlY3RlZDogYm9vbGVhbjtcblx0c2VsZWN0ZWQ6IFRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbWFydFRhYmxlQ29uZmlybUVkaXRFdmVudDxUPWFueT4gZXh0ZW5kcyBTbWFydFRhYmxlRGVmYXVsdEV2ZW50PFQ+IHtcblx0bmV3RGF0YTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbWFydFRhYmxlQ3JlYXRlQ29uZmlybTxUPWFueT4gZXh0ZW5kcyBPbWl0PFNtYXJ0VGFibGVEZWZhdWx0RXZlbnQ8VD4sIFwiZGF0YVwiPiB7XG5cdG5ld0RhdGE6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0U3RyaW5nU3RyaW5nIHtcblx0W2tleTogc3RyaW5nXTogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { Grid } from './lib/grid';
|
|
3
|
+
import { DataSource } from './lib/data-source/data-source';
|
|
4
|
+
import { deepExtend } from './lib/helpers';
|
|
5
|
+
import { LocalDataSource } from './lib/data-source/local/local.data-source';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "./components/pager/pager.component";
|
|
9
|
+
import * as i3 from "./components/tbody/tbody.component";
|
|
10
|
+
import * as i4 from "./components/thead/thead.component";
|
|
11
|
+
function Ng2SmartTableComponent_thead_1_Template(rf, ctx) { if (rf & 1) {
|
|
12
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
13
|
+
i0.ɵɵelementStart(0, "thead", 4);
|
|
14
|
+
i0.ɵɵlistener("create", function Ng2SmartTableComponent_thead_1_Template_thead_create_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.create.emit($event)); })("selectAllRows", function Ng2SmartTableComponent_thead_1_Template_thead_selectAllRows_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onSelectAllRows()); });
|
|
15
|
+
i0.ɵɵelementEnd();
|
|
16
|
+
} if (rf & 2) {
|
|
17
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
18
|
+
i0.ɵɵproperty("grid", ctx_r0.grid)("source", ctx_r0.source)("createConfirm", ctx_r0.createConfirm);
|
|
19
|
+
} }
|
|
20
|
+
function Ng2SmartTableComponent_ng2_smart_table_pager_3_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
+
i0.ɵɵelement(0, "ng2-smart-table-pager", 5);
|
|
22
|
+
} if (rf & 2) {
|
|
23
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
24
|
+
i0.ɵɵproperty("source", ctx_r1.source)("perPageSelect", ctx_r1.perPageSelect);
|
|
25
|
+
} }
|
|
26
|
+
export class Ng2SmartTableComponent {
|
|
27
|
+
constructor() {
|
|
28
|
+
this.multiRowSelect = new EventEmitter();
|
|
29
|
+
this.rowClicked = new EventEmitter();
|
|
30
|
+
this.delete = new EventEmitter();
|
|
31
|
+
this.edit = new EventEmitter();
|
|
32
|
+
this.create = new EventEmitter();
|
|
33
|
+
this.custom = new EventEmitter();
|
|
34
|
+
this.deleteConfirm = new EventEmitter();
|
|
35
|
+
this.editConfirm = new EventEmitter();
|
|
36
|
+
this.createConfirm = new EventEmitter();
|
|
37
|
+
this.rowHover = new EventEmitter();
|
|
38
|
+
this.defaultSettings = {
|
|
39
|
+
mode: 'inline',
|
|
40
|
+
selectMode: 'single',
|
|
41
|
+
/**
|
|
42
|
+
* Points to an element in all data
|
|
43
|
+
*
|
|
44
|
+
* when < 0 all lines must be deselected
|
|
45
|
+
*/
|
|
46
|
+
selectedRowIndex: 0,
|
|
47
|
+
switchPageToSelectedRowPage: false,
|
|
48
|
+
hideHeader: false,
|
|
49
|
+
hideSubHeader: false,
|
|
50
|
+
actions: {
|
|
51
|
+
columnTitle: 'Actions',
|
|
52
|
+
add: true,
|
|
53
|
+
edit: true,
|
|
54
|
+
delete: true,
|
|
55
|
+
custom: [],
|
|
56
|
+
position: 'left', // left|right
|
|
57
|
+
},
|
|
58
|
+
filter: {
|
|
59
|
+
inputClass: '',
|
|
60
|
+
},
|
|
61
|
+
edit: {
|
|
62
|
+
inputClass: '',
|
|
63
|
+
editButtonContent: 'Edit',
|
|
64
|
+
saveButtonContent: 'Update',
|
|
65
|
+
cancelButtonContent: 'Cancel',
|
|
66
|
+
confirmSave: false,
|
|
67
|
+
},
|
|
68
|
+
add: {
|
|
69
|
+
inputClass: '',
|
|
70
|
+
addButtonContent: 'Add New',
|
|
71
|
+
createButtonContent: 'Create',
|
|
72
|
+
cancelButtonContent: 'Cancel',
|
|
73
|
+
confirmCreate: false,
|
|
74
|
+
},
|
|
75
|
+
delete: {
|
|
76
|
+
deleteButtonContent: 'Delete',
|
|
77
|
+
confirmDelete: false,
|
|
78
|
+
},
|
|
79
|
+
attr: {
|
|
80
|
+
id: '',
|
|
81
|
+
class: '',
|
|
82
|
+
},
|
|
83
|
+
noDataMessage: 'No data found',
|
|
84
|
+
columns: {},
|
|
85
|
+
pager: {
|
|
86
|
+
display: true,
|
|
87
|
+
page: 1,
|
|
88
|
+
perPage: 10,
|
|
89
|
+
},
|
|
90
|
+
rowClassFunction: () => '',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
ngOnChanges(changes) {
|
|
94
|
+
if (this.grid) {
|
|
95
|
+
if (changes['settings']) {
|
|
96
|
+
this.grid.setSettings(this.prepareSettings());
|
|
97
|
+
}
|
|
98
|
+
if (changes['source']) {
|
|
99
|
+
this.source = this.prepareSource();
|
|
100
|
+
this.grid.setSource(this.source);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.initGrid();
|
|
105
|
+
}
|
|
106
|
+
this.tableId = this.grid.getSetting('attr.id');
|
|
107
|
+
this.tableClass = this.grid.getSetting('attr.class');
|
|
108
|
+
this.isHideHeader = this.grid.getSetting('hideHeader');
|
|
109
|
+
this.isHideSubHeader = this.grid.getSetting('hideSubHeader');
|
|
110
|
+
this.isPagerDisplay = this.grid.getSetting('pager.display');
|
|
111
|
+
this.isPagerDisplay = this.grid.getSetting('pager.display');
|
|
112
|
+
this.perPageSelect = this.grid.getSetting('pager.perPageSelect');
|
|
113
|
+
this.rowClassFunction = this.grid.getSetting('rowClassFunction');
|
|
114
|
+
}
|
|
115
|
+
onRowHover(row) {
|
|
116
|
+
this.rowHover.emit(row);
|
|
117
|
+
}
|
|
118
|
+
multipleSelectRow(row) {
|
|
119
|
+
this.grid.multipleSelectRow(row);
|
|
120
|
+
this.emitUserSelectRow(row);
|
|
121
|
+
}
|
|
122
|
+
onSelectAllRows() {
|
|
123
|
+
this.grid.dataSet.isAllSelected;
|
|
124
|
+
this.grid.selectAllRows(!this.grid.dataSet.isAllSelected);
|
|
125
|
+
this.emitUserSelectRow(null);
|
|
126
|
+
}
|
|
127
|
+
onSelectRow(row, state) {
|
|
128
|
+
this.grid.selectRow(row, state);
|
|
129
|
+
}
|
|
130
|
+
initGrid() {
|
|
131
|
+
this.source = this.prepareSource();
|
|
132
|
+
this.grid = new Grid(this.source, this.prepareSettings());
|
|
133
|
+
}
|
|
134
|
+
prepareSource() {
|
|
135
|
+
if (this.source instanceof DataSource) {
|
|
136
|
+
return this.source;
|
|
137
|
+
}
|
|
138
|
+
return new LocalDataSource();
|
|
139
|
+
}
|
|
140
|
+
prepareSettings() {
|
|
141
|
+
return deepExtend({}, this.defaultSettings, this.settings);
|
|
142
|
+
}
|
|
143
|
+
emitUserSelectRow(row) {
|
|
144
|
+
this.multiRowSelect.emit({
|
|
145
|
+
data: row ? row.getData() : null,
|
|
146
|
+
isSelected: row ? row.getIsSelected() : null,
|
|
147
|
+
source: this.source,
|
|
148
|
+
selected: this.grid.dataSet.getSelectedRowsData(),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
emitUserRowClicked(row) {
|
|
152
|
+
this.rowClicked.emit({
|
|
153
|
+
data: row ? row.getData() : null,
|
|
154
|
+
source: this.source,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
Ng2SmartTableComponent.ɵfac = function Ng2SmartTableComponent_Factory(t) { return new (t || Ng2SmartTableComponent)(); };
|
|
159
|
+
Ng2SmartTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Ng2SmartTableComponent, selectors: [["ng2-smart-table"]], inputs: { source: "source", settings: "settings" }, outputs: { multiRowSelect: "multiRowSelect", rowClicked: "rowClicked", delete: "delete", edit: "edit", create: "create", custom: "custom", deleteConfirm: "deleteConfirm", editConfirm: "editConfirm", createConfirm: "createConfirm", rowHover: "rowHover" }, features: [i0.ɵɵNgOnChangesFeature], decls: 4, vars: 9, consts: [[3, "id", "ngClass"], ["ng2-st-thead", "", 3, "grid", "source", "createConfirm", "create", "selectAllRows", 4, "ngIf"], ["ng2-st-tbody", "", 3, "grid", "source", "deleteConfirm", "editConfirm", "rowClassFunction", "edit", "delete", "custom", "userClickedRow", "multipleSelectRow", "rowHover"], [3, "source", "perPageSelect", 4, "ngIf"], ["ng2-st-thead", "", 3, "grid", "source", "createConfirm", "create", "selectAllRows"], [3, "source", "perPageSelect"]], template: function Ng2SmartTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
160
|
+
i0.ɵɵelementStart(0, "table", 0);
|
|
161
|
+
i0.ɵɵtemplate(1, Ng2SmartTableComponent_thead_1_Template, 1, 3, "thead", 1);
|
|
162
|
+
i0.ɵɵelementStart(2, "tbody", 2);
|
|
163
|
+
i0.ɵɵlistener("edit", function Ng2SmartTableComponent_Template_tbody_edit_2_listener($event) { return ctx.edit.emit($event); })("delete", function Ng2SmartTableComponent_Template_tbody_delete_2_listener($event) { return ctx.delete.emit($event); })("custom", function Ng2SmartTableComponent_Template_tbody_custom_2_listener($event) { return ctx.custom.emit($event); })("userClickedRow", function Ng2SmartTableComponent_Template_tbody_userClickedRow_2_listener($event) { return ctx.emitUserRowClicked($event); })("multipleSelectRow", function Ng2SmartTableComponent_Template_tbody_multipleSelectRow_2_listener($event) { return ctx.multipleSelectRow($event); })("rowHover", function Ng2SmartTableComponent_Template_tbody_rowHover_2_listener($event) { return ctx.onRowHover($event); });
|
|
164
|
+
i0.ɵɵelementEnd()();
|
|
165
|
+
i0.ɵɵtemplate(3, Ng2SmartTableComponent_ng2_smart_table_pager_3_Template, 1, 2, "ng2-smart-table-pager", 3);
|
|
166
|
+
} if (rf & 2) {
|
|
167
|
+
i0.ɵɵproperty("id", ctx.tableId)("ngClass", ctx.tableClass);
|
|
168
|
+
i0.ɵɵadvance(1);
|
|
169
|
+
i0.ɵɵproperty("ngIf", !ctx.isHideHeader || !ctx.isHideSubHeader);
|
|
170
|
+
i0.ɵɵadvance(1);
|
|
171
|
+
i0.ɵɵproperty("grid", ctx.grid)("source", ctx.source)("deleteConfirm", ctx.deleteConfirm)("editConfirm", ctx.editConfirm)("rowClassFunction", ctx.rowClassFunction);
|
|
172
|
+
i0.ɵɵadvance(1);
|
|
173
|
+
i0.ɵɵproperty("ngIf", ctx.isPagerDisplay);
|
|
174
|
+
} }, dependencies: [i1.NgClass, i1.NgIf, i2.PagerComponent, i3.Ng2SmartTableTbodyComponent, i4.Ng2SmartTableTheadComponent], styles: ["[_nghost-%COMP%]{font-size:1rem}[_nghost-%COMP%] *{box-sizing:border-box}[_nghost-%COMP%] button, [_nghost-%COMP%] input, [_nghost-%COMP%] optgroup, [_nghost-%COMP%] select, [_nghost-%COMP%] textarea{color:inherit;font:inherit;margin:0}[_nghost-%COMP%] table{line-height:1.5em;border-collapse:collapse;border-spacing:0;display:table;width:100%;max-width:100%;overflow:auto;word-break:normal;word-break:keep-all}[_nghost-%COMP%] table tr th{font-weight:700}[_nghost-%COMP%] table tr section{font-size:.75em;font-weight:700}[_nghost-%COMP%] table tr td, [_nghost-%COMP%] table tr th{font-size:.875em;margin:0;padding:.5em 1em}[_nghost-%COMP%] a{color:#1e6bb8;text-decoration:none}[_nghost-%COMP%] a:hover{text-decoration:underline}"] });
|
|
175
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(Ng2SmartTableComponent, [{
|
|
176
|
+
type: Component,
|
|
177
|
+
args: [{ selector: 'ng2-smart-table', template: "<table [id]=\"tableId\" [ngClass]=\"tableClass\">\n\n <thead ng2-st-thead *ngIf=\"!isHideHeader || !isHideSubHeader\"\n [grid]=\"grid\"\n [source]=\"source\"\n [createConfirm]=\"createConfirm\"\n (create)=\"create.emit($event)\"\n (selectAllRows)=\"onSelectAllRows()\">\n </thead>\n\n <tbody ng2-st-tbody [grid]=\"grid\"\n [source]=\"source\"\n [deleteConfirm]=\"deleteConfirm\"\n [editConfirm]=\"editConfirm\"\n [rowClassFunction]=\"rowClassFunction\"\n (edit)=\"edit.emit($event)\"\n (delete)=\"delete.emit($event)\"\n (custom)=\"custom.emit($event)\"\n (userClickedRow)=\"emitUserRowClicked($event)\"\n (multipleSelectRow)=\"multipleSelectRow($event)\"\n (rowHover)=\"onRowHover($event)\">\n </tbody>\n\n</table>\n\n<ng2-smart-table-pager *ngIf=\"isPagerDisplay\"\n [source]=\"source\"\n [perPageSelect]=\"perPageSelect\">\n</ng2-smart-table-pager>\n", styles: [":host{font-size:1rem}:host ::ng-deep *{box-sizing:border-box}:host ::ng-deep button,:host ::ng-deep input,:host ::ng-deep optgroup,:host ::ng-deep select,:host ::ng-deep textarea{color:inherit;font:inherit;margin:0}:host ::ng-deep table{line-height:1.5em;border-collapse:collapse;border-spacing:0;display:table;width:100%;max-width:100%;overflow:auto;word-break:normal;word-break:keep-all}:host ::ng-deep table tr th{font-weight:700}:host ::ng-deep table tr section{font-size:.75em;font-weight:700}:host ::ng-deep table tr td,:host ::ng-deep table tr th{font-size:.875em;margin:0;padding:.5em 1em}:host ::ng-deep a{color:#1e6bb8;text-decoration:none}:host ::ng-deep a:hover{text-decoration:underline}\n"] }]
|
|
178
|
+
}], null, { source: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], settings: [{
|
|
181
|
+
type: Input
|
|
182
|
+
}], multiRowSelect: [{
|
|
183
|
+
type: Output
|
|
184
|
+
}], rowClicked: [{
|
|
185
|
+
type: Output
|
|
186
|
+
}], delete: [{
|
|
187
|
+
type: Output
|
|
188
|
+
}], edit: [{
|
|
189
|
+
type: Output
|
|
190
|
+
}], create: [{
|
|
191
|
+
type: Output
|
|
192
|
+
}], custom: [{
|
|
193
|
+
type: Output
|
|
194
|
+
}], deleteConfirm: [{
|
|
195
|
+
type: Output
|
|
196
|
+
}], editConfirm: [{
|
|
197
|
+
type: Output
|
|
198
|
+
}], createConfirm: [{
|
|
199
|
+
type: Output
|
|
200
|
+
}], rowHover: [{
|
|
201
|
+
type: Output
|
|
202
|
+
}] }); })();
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLXNtYXJ0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nMi1zbWFydC10YWJsZS9zcmMvbGliL25nMi1zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItc21hcnQtdGFibGUvc3JjL2xpYi9uZzItc21hcnQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFnQixZQUFZLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBRzNHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7OztJQ0wxRSxnQ0FLd0Q7SUFEcEMsNEtBQVUsZUFBQSwwQkFBbUIsQ0FBQSxJQUFDLHVLQUNiLGVBQUEsd0JBQWlCLENBQUEsSUFESjtJQUVsRCxpQkFBUTs7O0lBTFksa0NBQWEseUJBQUEsdUNBQUE7OztJQXNCbkMsMkNBR3dCOzs7SUFGQSxzQ0FBaUIsdUNBQUE7O0FEWHpDLE1BQU0sT0FBTyxzQkFBc0I7SUFMbkM7UUFVWSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBQzlELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQUMzRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7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eUIsSUFKcEIsaUdBS2Qsc0JBQWtCLElBTEo7UUFNOUMsaUJBQVEsRUFBQTtRQUlWLDJHQUd3Qjs7UUE1QmpCLGdDQUFjLDJCQUFBO1FBRUUsZUFBdUM7UUFBdkMsZ0VBQXVDO1FBUXhDLGVBQWE7UUFBYiwrQkFBYSxzQkFBQSxvQ0FBQSxnQ0FBQSwwQ0FBQTtRQWVYLGVBQW9CO1FBQXBCLHlDQUFvQjs7dUZEVi9CLHNCQUFzQjtjQUxsQyxTQUFTOzJCQUNFLGlCQUFpQjtnQkFNbEIsTUFBTTtrQkFBZCxLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUVJLGNBQWM7a0JBQXZCLE1BQU07WUFDRyxVQUFVO2tCQUFuQixNQUFNO1lBQ0csTUFBTTtrQkFBZixNQUFNO1lBQ0csSUFBSTtrQkFBYixNQUFNO1lBQ0csTUFBTTtrQkFBZixNQUFNO1lBQ0csTUFBTTtrQkFBZixNQUFNO1lBQ0csYUFBYTtrQkFBdEIsTUFBTTtZQUNHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxhQUFhO2tCQUF0QixNQUFNO1lBQ0csUUFBUTtrQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlLCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4vbGliL2dyaWQnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4vbGliL2RhdGEtc291cmNlL2RhdGEtc291cmNlJztcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4vbGliL2RhdGEtc2V0L3Jvdyc7XG5pbXBvcnQgeyBkZWVwRXh0ZW5kIH0gZnJvbSAnLi9saWIvaGVscGVycyc7XG5pbXBvcnQgeyBMb2NhbERhdGFTb3VyY2UgfSBmcm9tICcuL2xpYi9kYXRhLXNvdXJjZS9sb2NhbC9sb2NhbC5kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBTbWFydFRhYmxlQ29uZmlybURlbGV0ZUV2ZW50LCBTbWFydFRhYmxlQ29uZmlybUVkaXRFdmVudCwgU21hcnRUYWJsZUNyZWF0ZUNvbmZpcm0sIFNtYXJ0VGFibGVDdXN0b21FdmVudCwgU21hcnRUYWJsZVJvd0NsaWNrZWRFdmVudCwgU21hcnRUYWJsZVJvd1NlbGVjdEV2ZW50LCBTbWFydFRhYmxlU2V0dGluZ3MgfSBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL3NtYXJ0LXRhYmxlLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nMi1zbWFydC10YWJsZScsXG4gIHN0eWxlVXJsczogWycuL25nMi1zbWFydC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbmcyLXNtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTmcyU21hcnRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgc291cmNlOiBEYXRhU291cmNlO1xuICBASW5wdXQoKSBzZXR0aW5nczogU21hcnRUYWJsZVNldHRpbmdzO1xuXG4gIEBPdXRwdXQoKSBtdWx0aVJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8U21hcnRUYWJsZVJvd1NlbGVjdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U21hcnRUYWJsZVJvd0NsaWNrZWRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY3JlYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjdXN0b20gPSBuZXcgRXZlbnRFbWl0dGVyPFNtYXJ0VGFibGVDdXN0b21FdmVudD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZUNvbmZpcm0gPSBuZXcgRXZlbnRFbWl0dGVyPFNtYXJ0VGFibGVDb25maXJtRGVsZXRlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBlZGl0Q29uZmlybSA9IG5ldyBFdmVudEVtaXR0ZXI8U21hcnRUYWJsZUNvbmZpcm1FZGl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjcmVhdGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTbWFydFRhYmxlQ3JlYXRlQ29uZmlybT4oKTtcbiAgQE91dHB1dCgpIHJvd0hvdmVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHRhYmxlQ2xhc3M6IHN0cmluZztcbiAgdGFibGVJZDogc3RyaW5nO1xuICBwZXJQYWdlU2VsZWN0OiBhbnk7XG4gIGlzSGlkZUhlYWRlcjogYm9vbGVhbjtcbiAgaXNIaWRlU3ViSGVhZGVyOiBib29sZWFuO1xuICBpc1BhZ2VyRGlzcGxheTogYm9vbGVhbjtcbiAgcm93Q2xhc3NGdW5jdGlvbjogRnVuY3Rpb247XG5cbiAgZ3JpZDogR3JpZDtcbiAgZGVmYXVsdFNldHRpbmdzOiBTbWFydFRhYmxlU2V0dGluZ3MgPSB7XG4gICAgbW9kZTogJ2lubGluZScsIC8vIGlubGluZXxleHRlcm5hbHxjbGljay10by1lZGl0XG4gICAgc2VsZWN0TW9kZTogJ3NpbmdsZScsIC8vIHNpbmdsZXxtdWx0aVxuICAgIC8qKlxuICAgICAqIFBvaW50cyB0byBhbiBlbGVtZW50IGluIGFsbCBkYXRhXG4gICAgICpcbiAgICAgKiB3aGVuIDwgMCBhbGwgbGluZXMgbXVzdCBiZSBkZXNlbGVjdGVkXG4gICAgICovXG4gICAgc2VsZWN0ZWRSb3dJbmRleDogMCxcbiAgICBzd2l0Y2hQYWdlVG9TZWxlY3RlZFJvd1BhZ2U6IGZhbHNlLFxuICAgIGhpZGVIZWFkZXI6IGZhbHNlLFxuICAgIGhpZGVTdWJIZWFkZXI6IGZhbHNlLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIGNvbHVtblRpdGxlOiAnQWN0aW9ucycsXG4gICAgICBhZGQ6IHRydWUsXG4gICAgICBlZGl0OiB0cnVlLFxuICAgICAgZGVsZXRlOiB0cnVlLFxuICAgICAgY3VzdG9tOiBbXSxcbiAgICAgIHBvc2l0aW9uOiAnbGVmdCcsIC8vIGxlZnR8cmlnaHRcbiAgICB9LFxuICAgIGZpbHRlcjoge1xuICAgICAgaW5wdXRDbGFzczogJycsXG4gICAgfSxcbiAgICBlZGl0OiB7XG4gICAgICBpbnB1dENsYXNzOiAnJyxcbiAgICAgIGVkaXRCdXR0b25Db250ZW50OiAnRWRpdCcsXG4gICAgICBzYXZlQnV0dG9uQ29udGVudDogJ1VwZGF0ZScsXG4gICAgICBjYW5jZWxCdXR0b25Db250ZW50OiAnQ2FuY2VsJyxcbiAgICAgIGNvbmZpcm1TYXZlOiBmYWxzZSxcbiAgICB9LFxuICAgIGFkZDoge1xuICAgICAgaW5wdXRDbGFzczogJycsXG4gICAgICBhZGRCdXR0b25Db250ZW50OiAnQWRkIE5ldycsXG4gICAgICBjcmVhdGVCdXR0b25Db250ZW50OiAnQ3JlYXRlJyxcbiAgICAgIGNhbmNlbEJ1dHRvbkNvbnRlbnQ6ICdDYW5jZWwnLFxuICAgICAgY29uZmlybUNyZWF0ZTogZmFsc2UsXG4gICAgfSxcbiAgICBkZWxldGU6IHtcbiAgICAgIGRlbGV0ZUJ1dHRvbkNvbnRlbnQ6ICdEZWxldGUnLFxuICAgICAgY29uZmlybURlbGV0ZTogZmFsc2UsXG4gICAgfSxcbiAgICBhdHRyOiB7XG4gICAgICBpZDogJycsXG4gICAgICBjbGFzczogJycsXG4gICAgfSxcbiAgICBub0RhdGFNZXNzYWdlOiAnTm8gZGF0YSBmb3VuZCcsXG4gICAgY29sdW1uczoge30sXG4gICAgcGFnZXI6IHtcbiAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICBwYWdlOiAxLFxuICAgICAgcGVyUGFnZTogMTAsXG4gICAgfSxcbiAgICByb3dDbGFzc0Z1bmN0aW9uOiAoKSA9PiAnJyxcbiAgfTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KSB7XG4gICAgaWYgKHRoaXMuZ3JpZCkge1xuICAgICAgaWYgKGNoYW5nZXNbJ3NldHRpbmdzJ10pIHtcbiAgICAgICAgdGhpcy5ncmlkLnNldFNldHRpbmdzKHRoaXMucHJlcGFyZVNldHRpbmdzKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXNbJ3NvdXJjZSddKSB7XG4gICAgICAgIHRoaXMuc291cmNlID0gdGhpcy5wcmVwYXJlU291cmNlKCk7XG4gICAgICAgIHRoaXMuZ3JpZC5zZXRTb3VyY2UodGhpcy5zb3VyY2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRHcmlkKCk7XG4gICAgfVxuICAgIHRoaXMudGFibGVJZCA9IHRoaXMuZ3JpZC5nZXRTZXR0aW5nKCdhdHRyLmlkJyk7XG4gICAgdGhpcy50YWJsZUNsYXNzID0gdGhpcy5ncmlkLmdldFNldHRpbmcoJ2F0dHIuY2xhc3MnKTtcbiAgICB0aGlzLmlzSGlkZUhlYWRlciA9IHRoaXMuZ3JpZC5nZXRTZXR0aW5nKCdoaWRlSGVhZGVyJyk7XG4gICAgdGhpcy5pc0hpZGVTdWJIZWFkZXIgPSB0aGlzLmdyaWQuZ2V0U2V0dGluZygnaGlkZVN1YkhlYWRlcicpO1xuICAgIHRoaXMuaXNQYWdlckRpc3BsYXkgPSB0aGlzLmdyaWQuZ2V0U2V0dGluZygncGFnZXIuZGlzcGxheScpO1xuICAgIHRoaXMuaXNQYWdlckRpc3BsYXkgPSB0aGlzLmdyaWQuZ2V0U2V0dGluZygncGFnZXIuZGlzcGxheScpO1xuICAgIHRoaXMucGVyUGFnZVNlbGVjdCA9IHRoaXMuZ3JpZC5nZXRTZXR0aW5nKCdwYWdlci5wZXJQYWdlU2VsZWN0Jyk7XG4gICAgdGhpcy5yb3dDbGFzc0Z1bmN0aW9uID0gdGhpcy5ncmlkLmdldFNldHRpbmcoJ3Jvd0NsYXNzRnVuY3Rpb24nKTtcbiAgfVxuXG4gIG9uUm93SG92ZXIocm93OiBSb3cpIHtcbiAgICB0aGlzLnJvd0hvdmVyLmVtaXQocm93KTtcbiAgfVxuXG4gIG11bHRpcGxlU2VsZWN0Um93KHJvdzogUm93KSB7XG4gICAgdGhpcy5ncmlkLm11bHRpcGxlU2VsZWN0Um93KHJvdyk7XG4gICAgdGhpcy5lbWl0VXNlclNlbGVjdFJvdyhyb3cpO1xuICB9XG5cbiAgb25TZWxlY3RBbGxSb3dzKCkge1xuICAgIHRoaXMuZ3JpZC5kYXRhU2V0LmlzQWxsU2VsZWN0ZWQ7XG4gICAgdGhpcy5ncmlkLnNlbGVjdEFsbFJvd3MoIXRoaXMuZ3JpZC5kYXRhU2V0LmlzQWxsU2VsZWN0ZWQpO1xuXG4gICAgdGhpcy5lbWl0VXNlclNlbGVjdFJvdyhudWxsKTtcbiAgfVxuXG4gIG9uU2VsZWN0Um93KHJvdzogUm93LCBzdGF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3cocm93LCBzdGF0ZSk7XG4gIH1cblxuICBpbml0R3JpZCgpIHtcbiAgICB0aGlzLnNvdXJjZSA9IHRoaXMucHJlcGFyZVNvdXJjZSgpO1xuICAgIHRoaXMuZ3JpZCA9IG5ldyBHcmlkKHRoaXMuc291cmNlLCB0aGlzLnByZXBhcmVTZXR0aW5ncygpKTtcbiAgfVxuXG4gIHByZXBhcmVTb3VyY2UoKTogRGF0YVNvdXJjZSB7XG4gICAgaWYgKHRoaXMuc291cmNlIGluc3RhbmNlb2YgRGF0YVNvdXJjZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IExvY2FsRGF0YVNvdXJjZSgpO1xuICB9XG5cbiAgcHJlcGFyZVNldHRpbmdzKCk6IFNtYXJ0VGFibGVTZXR0aW5ncyB7XG4gICAgcmV0dXJuIGRlZXBFeHRlbmQoe30sIHRoaXMuZGVmYXVsdFNldHRpbmdzLCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFVzZXJTZWxlY3RSb3cocm93OiBSb3cpIHtcbiAgICB0aGlzLm11bHRpUm93U2VsZWN0LmVtaXQoe1xuICAgICAgZGF0YTogcm93ID8gcm93LmdldERhdGEoKSA6IG51bGwsXG4gICAgICBpc1NlbGVjdGVkOiByb3cgPyByb3cuZ2V0SXNTZWxlY3RlZCgpIDogbnVsbCxcbiAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICBzZWxlY3RlZDogdGhpcy5ncmlkLmRhdGFTZXQuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpLFxuICAgIH0pO1xuICB9ICBcbiAgXG4gIGVtaXRVc2VyUm93Q2xpY2tlZChyb3c6IFJvdykge1xuICAgIHRoaXMucm93Q2xpY2tlZC5lbWl0KHtcbiAgICAgIGRhdGE6IHJvdyA/IHJvdy5nZXREYXRhKCkgOiBudWxsLFxuICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPHRhYmxlIFtpZF09XCJ0YWJsZUlkXCIgW25nQ2xhc3NdPVwidGFibGVDbGFzc1wiPlxuXG4gIDx0aGVhZCBuZzItc3QtdGhlYWQgKm5nSWY9XCIhaXNIaWRlSGVhZGVyIHx8ICFpc0hpZGVTdWJIZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtncmlkXT1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzb3VyY2VdPVwic291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY3JlYXRlQ29uZmlybV09XCJjcmVhdGVDb25maXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlKT1cImNyZWF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RBbGxSb3dzKT1cIm9uU2VsZWN0QWxsUm93cygpXCI+XG4gIDwvdGhlYWQ+XG5cbiAgPHRib2R5IG5nMi1zdC10Ym9keSBbZ3JpZF09XCJncmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc291cmNlXT1cInNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RlbGV0ZUNvbmZpcm1dPVwiZGVsZXRlQ29uZmlybVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2VkaXRDb25maXJtXT1cImVkaXRDb25maXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm93Q2xhc3NGdW5jdGlvbl09XCJyb3dDbGFzc0Z1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZWRpdCk9XCJlZGl0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZSk9XCJkZWxldGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9tKT1cImN1c3RvbS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICh1c2VyQ2xpY2tlZFJvdyk9XCJlbWl0VXNlclJvd0NsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG11bHRpcGxlU2VsZWN0Um93KT1cIm11bHRpcGxlU2VsZWN0Um93KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChyb3dIb3Zlcik9XCJvblJvd0hvdmVyKCRldmVudClcIj5cbiAgPC90Ym9keT5cblxuPC90YWJsZT5cblxuPG5nMi1zbWFydC10YWJsZS1wYWdlciAqbmdJZj1cImlzUGFnZXJEaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzb3VyY2VdPVwic291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwZXJQYWdlU2VsZWN0XT1cInBlclBhZ2VTZWxlY3RcIj5cbjwvbmcyLXNtYXJ0LXRhYmxlLXBhZ2VyPlxuIl19
|