@swimlane/ngx-datatable 16.1.1 → 19.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/README.md +1 -1
- package/assets/icons-reference.html +2 -2
- package/assets/icons.css +39 -19
- package/bundles/swimlane-ngx-datatable.umd.js +1663 -5743
- package/bundles/swimlane-ngx-datatable.umd.js.map +1 -1
- package/bundles/swimlane-ngx-datatable.umd.min.js +1 -1
- package/bundles/swimlane-ngx-datatable.umd.min.js.map +1 -1
- package/esm2015/lib/components/body/body-cell.component.js +5 -235
- package/esm2015/lib/components/body/body-group-header-template.directive.js +1 -13
- package/esm2015/lib/components/body/body-group-header.directive.js +1 -28
- package/esm2015/lib/components/body/body-row-wrapper.component.js +4 -86
- package/esm2015/lib/components/body/body-row.component.js +2 -153
- package/esm2015/lib/components/body/body.component.js +71 -303
- package/esm2015/lib/components/body/progress-bar.component.js +2 -6
- package/esm2015/lib/components/body/scroller.component.js +6 -82
- package/esm2015/lib/components/body/selection.component.js +7 -112
- package/esm2015/lib/components/body/summary/summary-row.component.js +10 -100
- package/esm2015/lib/components/columns/column-cell.directive.js +1 -13
- package/esm2015/lib/components/columns/column-header.directive.js +1 -13
- package/esm2015/lib/components/columns/column.directive.js +1 -89
- package/esm2015/lib/components/columns/tree.directive.js +1 -13
- package/esm2015/lib/components/datatable.component.js +49 -570
- package/esm2015/lib/components/footer/footer-template.directive.js +1 -13
- package/esm2015/lib/components/footer/footer.component.js +2 -41
- package/esm2015/lib/components/footer/footer.directive.js +2 -29
- package/esm2015/lib/components/footer/pager.component.js +3 -77
- package/esm2015/lib/components/header/header-cell.component.js +11 -130
- package/esm2015/lib/components/header/header.component.js +20 -193
- package/esm2015/lib/components/row-detail/row-detail-template.directive.js +1 -13
- package/esm2015/lib/components/row-detail/row-detail.directive.js +1 -29
- package/esm2015/lib/directives/draggable.directive.js +4 -72
- package/esm2015/lib/directives/long-press.directive.js +8 -88
- package/esm2015/lib/directives/orderable.directive.js +11 -104
- package/esm2015/lib/directives/resizeable.directive.js +14 -81
- package/esm2015/lib/directives/visibility.directive.js +9 -64
- package/esm2015/lib/events.js +6 -13
- package/esm2015/lib/ngx-datatable.module.js +2 -16
- package/esm2015/lib/services/column-changes.service.js +1 -18
- package/esm2015/lib/services/dimensions-helper.service.js +1 -9
- package/esm2015/lib/services/scrollbar-helper.service.js +1 -25
- package/esm2015/lib/types/click.type.js +6 -11
- package/esm2015/lib/types/column-mode.type.js +7 -12
- package/esm2015/lib/types/contextmenu.type.js +6 -11
- package/esm2015/lib/types/selection.type.js +9 -14
- package/esm2015/lib/types/sort-direction.type.js +6 -11
- package/esm2015/lib/types/sort-prop-dir.type.js +2 -15
- package/esm2015/lib/types/sort.type.js +6 -11
- package/esm2015/lib/types/table-column.type.js +2 -217
- package/esm2015/lib/utils/camel-case.js +4 -26
- package/esm2015/lib/utils/column-helper.js +1 -18
- package/esm2015/lib/utils/column-prop-getters.js +6 -21
- package/esm2015/lib/utils/column.js +1 -28
- package/esm2015/lib/utils/elm-from-point.js +3 -15
- package/esm2015/lib/utils/id.js +1 -6
- package/esm2015/lib/utils/keys.js +10 -21
- package/esm2015/lib/utils/math.js +4 -51
- package/esm2015/lib/utils/prefixes.js +5 -24
- package/esm2015/lib/utils/row-height-cache.js +6 -46
- package/esm2015/lib/utils/selection.js +1 -25
- package/esm2015/lib/utils/sort.js +9 -50
- package/esm2015/lib/utils/throttle.js +7 -41
- package/esm2015/lib/utils/translate.js +1 -17
- package/esm2015/lib/utils/tree.js +7 -56
- package/esm2015/public-api.js +56 -60
- package/esm2015/swimlane-ngx-datatable.js +2 -6
- package/fesm2015/swimlane-ngx-datatable.js +308 -3513
- package/fesm2015/swimlane-ngx-datatable.js.map +1 -1
- package/index.css +1 -1
- package/index.scss +1 -1
- package/lib/components/body/body-cell.component.d.ts +23 -14
- package/lib/components/body/body-group-header.directive.d.ts +1 -1
- package/lib/components/body/body-row-wrapper.component.d.ts +4 -2
- package/lib/components/body/body-row.component.d.ts +8 -5
- package/lib/components/body/body.component.d.ts +17 -10
- package/lib/components/columns/column.directive.d.ts +3 -3
- package/lib/components/datatable.component.d.ts +45 -38
- package/lib/components/footer/footer.component.d.ts +2 -2
- package/lib/components/footer/footer.directive.d.ts +1 -1
- package/lib/components/footer/pager.component.d.ts +7 -4
- package/lib/components/header/header-cell.component.d.ts +14 -9
- package/lib/components/header/header.component.d.ts +14 -7
- package/lib/components/row-detail/row-detail.directive.d.ts +1 -1
- package/lib/directives/long-press.directive.d.ts +2 -2
- package/lib/directives/resizeable.directive.d.ts +1 -0
- package/lib/ngx-datatable.module.d.ts +1 -1
- package/lib/services/column-changes.service.d.ts +1 -1
- package/lib/utils/throttle.d.ts +1 -1
- package/package.json +10 -13
- package/swimlane-ngx-datatable.metadata.json +1 -1
- package/themes/material.css +53 -51
- package/themes/material.scss +4 -2
- package/esm5/lib/components/body/body-cell.component.js +0 -667
- package/esm5/lib/components/body/body-group-header-template.directive.js +0 -26
- package/esm5/lib/components/body/body-group-header.directive.js +0 -109
- package/esm5/lib/components/body/body-row-wrapper.component.js +0 -181
- package/esm5/lib/components/body/body-row.component.js +0 -409
- package/esm5/lib/components/body/body.component.js +0 -1148
- package/esm5/lib/components/body/progress-bar.component.js +0 -19
- package/esm5/lib/components/body/scroller.component.js +0 -172
- package/esm5/lib/components/body/selection.component.js +0 -289
- package/esm5/lib/components/body/summary/summary-row.component.js +0 -179
- package/esm5/lib/components/columns/column-cell.directive.js +0 -24
- package/esm5/lib/components/columns/column-header.directive.js +0 -24
- package/esm5/lib/components/columns/column.directive.js +0 -167
- package/esm5/lib/components/columns/tree.directive.js +0 -24
- package/esm5/lib/components/datatable.component.js +0 -1848
- package/esm5/lib/components/footer/footer-template.directive.js +0 -24
- package/esm5/lib/components/footer/footer.component.js +0 -88
- package/esm5/lib/components/footer/footer.directive.js +0 -57
- package/esm5/lib/components/footer/pager.component.js +0 -214
- package/esm5/lib/components/header/header-cell.component.js +0 -351
- package/esm5/lib/components/header/header.component.js +0 -502
- package/esm5/lib/components/row-detail/row-detail-template.directive.js +0 -26
- package/esm5/lib/components/row-detail/row-detail.directive.js +0 -111
- package/esm5/lib/directives/draggable.directive.js +0 -194
- package/esm5/lib/directives/long-press.directive.js +0 -220
- package/esm5/lib/directives/orderable.directive.js +0 -274
- package/esm5/lib/directives/resizeable.directive.js +0 -178
- package/esm5/lib/directives/visibility.directive.js +0 -129
- package/esm5/lib/events.js +0 -14
- package/esm5/lib/ngx-datatable.module.js +0 -123
- package/esm5/lib/services/column-changes.service.js +0 -47
- package/esm5/lib/services/dimensions-helper.service.js +0 -30
- package/esm5/lib/services/scrollbar-helper.service.js +0 -60
- package/esm5/lib/types/click.type.js +0 -11
- package/esm5/lib/types/column-mode.type.js +0 -12
- package/esm5/lib/types/contextmenu.type.js +0 -11
- package/esm5/lib/types/selection.type.js +0 -14
- package/esm5/lib/types/sort-direction.type.js +0 -11
- package/esm5/lib/types/sort-prop-dir.type.js +0 -15
- package/esm5/lib/types/sort.type.js +0 -11
- package/esm5/lib/types/table-column.type.js +0 -217
- package/esm5/lib/utils/camel-case.js +0 -50
- package/esm5/lib/utils/column-helper.js +0 -145
- package/esm5/lib/utils/column-prop-getters.js +0 -111
- package/esm5/lib/utils/column.js +0 -130
- package/esm5/lib/utils/elm-from-point.js +0 -50
- package/esm5/lib/utils/id.js +0 -13
- package/esm5/lib/utils/keys.js +0 -21
- package/esm5/lib/utils/math.js +0 -271
- package/esm5/lib/utils/prefixes.js +0 -59
- package/esm5/lib/utils/row-height-cache.js +0 -264
- package/esm5/lib/utils/selection.js +0 -64
- package/esm5/lib/utils/sort.js +0 -180
- package/esm5/lib/utils/throttle.js +0 -94
- package/esm5/lib/utils/translate.js +0 -41
- package/esm5/lib/utils/tree.js +0 -157
- package/esm5/public-api.js +0 -68
- package/esm5/swimlane-ngx-datatable.js +0 -9
- package/fesm5/swimlane-ngx-datatable.js +0 -9695
- package/fesm5/swimlane-ngx-datatable.js.map +0 -1
- package/lib/test/jasmine-matchers.d.ts +0 -12
|
@@ -1,1848 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import * as tslib_1 from "tslib";
|
|
6
|
-
import { Component, Input, Output, ElementRef, EventEmitter, ViewChild, HostListener, ContentChildren, QueryList, HostBinding, ContentChild, KeyValueDiffers, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef, SkipSelf, Optional, Inject } from '@angular/core';
|
|
7
|
-
import { DatatableGroupHeaderDirective } from './body/body-group-header.directive';
|
|
8
|
-
import { BehaviorSubject } from 'rxjs';
|
|
9
|
-
import { groupRowsByParents, optionalGetterForProp } from '../utils/tree';
|
|
10
|
-
import { setColumnDefaults, translateTemplates } from '../utils/column-helper';
|
|
11
|
-
import { ColumnMode } from '../types/column-mode.type';
|
|
12
|
-
import { SelectionType } from '../types/selection.type';
|
|
13
|
-
import { SortType } from '../types/sort.type';
|
|
14
|
-
import { ContextmenuType } from '../types/contextmenu.type';
|
|
15
|
-
import { DataTableColumnDirective } from './columns/column.directive';
|
|
16
|
-
import { DatatableRowDetailDirective } from './row-detail/row-detail.directive';
|
|
17
|
-
import { DatatableFooterDirective } from './footer/footer.directive';
|
|
18
|
-
import { DataTableBodyComponent } from './body/body.component';
|
|
19
|
-
import { DataTableHeaderComponent } from './header/header.component';
|
|
20
|
-
import { ScrollbarHelper } from '../services/scrollbar-helper.service';
|
|
21
|
-
import { ColumnChangesService } from '../services/column-changes.service';
|
|
22
|
-
import { DimensionsHelper } from '../services/dimensions-helper.service';
|
|
23
|
-
import { throttleable } from '../utils/throttle';
|
|
24
|
-
import { forceFillColumnWidths, adjustColumnWidths } from '../utils/math';
|
|
25
|
-
import { sortRows } from '../utils/sort';
|
|
26
|
-
var DatatableComponent = /** @class */ (function () {
|
|
27
|
-
function DatatableComponent(scrollbarHelper, dimensionsHelper, cd, element, differs, columnChangesService, configuration) {
|
|
28
|
-
this.scrollbarHelper = scrollbarHelper;
|
|
29
|
-
this.dimensionsHelper = dimensionsHelper;
|
|
30
|
-
this.cd = cd;
|
|
31
|
-
this.columnChangesService = columnChangesService;
|
|
32
|
-
this.configuration = configuration;
|
|
33
|
-
/**
|
|
34
|
-
* List of row objects that should be
|
|
35
|
-
* represented as selected in the grid.
|
|
36
|
-
* Default value: `[]`
|
|
37
|
-
*/
|
|
38
|
-
this.selected = [];
|
|
39
|
-
/**
|
|
40
|
-
* Enable vertical scrollbars
|
|
41
|
-
*/
|
|
42
|
-
this.scrollbarV = false;
|
|
43
|
-
/**
|
|
44
|
-
* Enable horz scrollbars
|
|
45
|
-
*/
|
|
46
|
-
this.scrollbarH = false;
|
|
47
|
-
/**
|
|
48
|
-
* The row height; which is necessary
|
|
49
|
-
* to calculate the height for the lazy rendering.
|
|
50
|
-
*/
|
|
51
|
-
this.rowHeight = 30;
|
|
52
|
-
/**
|
|
53
|
-
* Type of column width distribution formula.
|
|
54
|
-
* Example: flex, force, standard
|
|
55
|
-
*/
|
|
56
|
-
this.columnMode = ColumnMode.standard;
|
|
57
|
-
/**
|
|
58
|
-
* The minimum header height in pixels.
|
|
59
|
-
* Pass a falsey for no header
|
|
60
|
-
*/
|
|
61
|
-
this.headerHeight = 30;
|
|
62
|
-
/**
|
|
63
|
-
* The minimum footer height in pixels.
|
|
64
|
-
* Pass falsey for no footer
|
|
65
|
-
*/
|
|
66
|
-
this.footerHeight = 0;
|
|
67
|
-
/**
|
|
68
|
-
* If the table should use external paging
|
|
69
|
-
* otherwise its assumed that all data is preloaded.
|
|
70
|
-
*/
|
|
71
|
-
this.externalPaging = false;
|
|
72
|
-
/**
|
|
73
|
-
* If the table should use external sorting or
|
|
74
|
-
* the built-in basic sorting.
|
|
75
|
-
*/
|
|
76
|
-
this.externalSorting = false;
|
|
77
|
-
/**
|
|
78
|
-
* Show the linear loading bar.
|
|
79
|
-
* Default value: `false`
|
|
80
|
-
*/
|
|
81
|
-
this.loadingIndicator = false;
|
|
82
|
-
/**
|
|
83
|
-
* Enable/Disable ability to re-order columns
|
|
84
|
-
* by dragging them.
|
|
85
|
-
*/
|
|
86
|
-
this.reorderable = true;
|
|
87
|
-
/**
|
|
88
|
-
* Swap columns on re-order columns or
|
|
89
|
-
* move them.
|
|
90
|
-
*/
|
|
91
|
-
this.swapColumns = true;
|
|
92
|
-
/**
|
|
93
|
-
* The type of sorting
|
|
94
|
-
*/
|
|
95
|
-
this.sortType = SortType.single;
|
|
96
|
-
/**
|
|
97
|
-
* Array of sorted columns by property and type.
|
|
98
|
-
* Default value: `[]`
|
|
99
|
-
*/
|
|
100
|
-
this.sorts = [];
|
|
101
|
-
/**
|
|
102
|
-
* Css class overrides
|
|
103
|
-
*/
|
|
104
|
-
this.cssClasses = {
|
|
105
|
-
sortAscending: 'datatable-icon-up',
|
|
106
|
-
sortDescending: 'datatable-icon-down',
|
|
107
|
-
pagerLeftArrow: 'datatable-icon-left',
|
|
108
|
-
pagerRightArrow: 'datatable-icon-right',
|
|
109
|
-
pagerPrevious: 'datatable-icon-prev',
|
|
110
|
-
pagerNext: 'datatable-icon-skip'
|
|
111
|
-
};
|
|
112
|
-
/**
|
|
113
|
-
* Message overrides for localization
|
|
114
|
-
*
|
|
115
|
-
* emptyMessage [default] = 'No data to display'
|
|
116
|
-
* totalMessage [default] = 'total'
|
|
117
|
-
* selectedMessage [default] = 'selected'
|
|
118
|
-
*/
|
|
119
|
-
this.messages = {
|
|
120
|
-
// Message to show when array is presented
|
|
121
|
-
// but contains no values
|
|
122
|
-
emptyMessage: 'No data to display',
|
|
123
|
-
// Footer total message
|
|
124
|
-
totalMessage: 'total',
|
|
125
|
-
// Footer selected message
|
|
126
|
-
selectedMessage: 'selected'
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
129
|
-
* A boolean you can use to set the detault behaviour of rows and groups
|
|
130
|
-
* whether they will start expanded or not. If ommited the default is NOT expanded.
|
|
131
|
-
*
|
|
132
|
-
*/
|
|
133
|
-
this.groupExpansionDefault = false;
|
|
134
|
-
/**
|
|
135
|
-
* Property to which you can use for determining select all
|
|
136
|
-
* rows on current page or not.
|
|
137
|
-
*
|
|
138
|
-
* \@memberOf DatatableComponent
|
|
139
|
-
*/
|
|
140
|
-
this.selectAllRowsOnPage = false;
|
|
141
|
-
/**
|
|
142
|
-
* A flag for row virtualization on / off
|
|
143
|
-
*/
|
|
144
|
-
this.virtualization = true;
|
|
145
|
-
/**
|
|
146
|
-
* A flag for switching summary row on / off
|
|
147
|
-
*/
|
|
148
|
-
this.summaryRow = false;
|
|
149
|
-
/**
|
|
150
|
-
* A height of summary row
|
|
151
|
-
*/
|
|
152
|
-
this.summaryHeight = 30;
|
|
153
|
-
/**
|
|
154
|
-
* A property holds a summary row position: top/bottom
|
|
155
|
-
*/
|
|
156
|
-
this.summaryPosition = 'top';
|
|
157
|
-
/**
|
|
158
|
-
* Body was scrolled typically in a `scrollbarV:true` scenario.
|
|
159
|
-
*/
|
|
160
|
-
this.scroll = new EventEmitter();
|
|
161
|
-
/**
|
|
162
|
-
* A cell or row was focused via keyboard or mouse click.
|
|
163
|
-
*/
|
|
164
|
-
this.activate = new EventEmitter();
|
|
165
|
-
/**
|
|
166
|
-
* A cell or row was selected.
|
|
167
|
-
*/
|
|
168
|
-
this.select = new EventEmitter();
|
|
169
|
-
/**
|
|
170
|
-
* Column sort was invoked.
|
|
171
|
-
*/
|
|
172
|
-
this.sort = new EventEmitter();
|
|
173
|
-
/**
|
|
174
|
-
* The table was paged either triggered by the pager or the body scroll.
|
|
175
|
-
*/
|
|
176
|
-
this.page = new EventEmitter();
|
|
177
|
-
/**
|
|
178
|
-
* Columns were re-ordered.
|
|
179
|
-
*/
|
|
180
|
-
this.reorder = new EventEmitter();
|
|
181
|
-
/**
|
|
182
|
-
* Column was resized.
|
|
183
|
-
*/
|
|
184
|
-
this.resize = new EventEmitter();
|
|
185
|
-
/**
|
|
186
|
-
* The context menu was invoked on the table.
|
|
187
|
-
* type indicates whether the header or the body was clicked.
|
|
188
|
-
* content contains either the column or the row that was clicked.
|
|
189
|
-
*/
|
|
190
|
-
this.tableContextmenu = new EventEmitter(false);
|
|
191
|
-
/**
|
|
192
|
-
* A row was expanded ot collapsed for tree
|
|
193
|
-
*/
|
|
194
|
-
this.treeAction = new EventEmitter();
|
|
195
|
-
this.rowCount = 0;
|
|
196
|
-
this._offsetX = new BehaviorSubject(0);
|
|
197
|
-
this._count = 0;
|
|
198
|
-
this._offset = 0;
|
|
199
|
-
this._subscriptions = [];
|
|
200
|
-
/**
|
|
201
|
-
* This will be used when displaying or selecting rows.
|
|
202
|
-
* when tracking/comparing them, we'll use the value of this fn,
|
|
203
|
-
*
|
|
204
|
-
* (`fn(x) === fn(y)` instead of `x === y`)
|
|
205
|
-
*/
|
|
206
|
-
this.rowIdentity = (/**
|
|
207
|
-
* @param {?} x
|
|
208
|
-
* @return {?}
|
|
209
|
-
*/
|
|
210
|
-
function (x) { return x; });
|
|
211
|
-
// get ref to elm for measuring
|
|
212
|
-
this.element = element.nativeElement;
|
|
213
|
-
this.rowDiffer = differs.find({}).create();
|
|
214
|
-
// apply global settings from Module.forRoot
|
|
215
|
-
if (this.configuration && this.configuration.messages) {
|
|
216
|
-
this.messages = tslib_1.__assign({}, this.configuration.messages);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
Object.defineProperty(DatatableComponent.prototype, "rows", {
|
|
220
|
-
/**
|
|
221
|
-
* Gets the rows.
|
|
222
|
-
*/
|
|
223
|
-
get: /**
|
|
224
|
-
* Gets the rows.
|
|
225
|
-
* @return {?}
|
|
226
|
-
*/
|
|
227
|
-
function () {
|
|
228
|
-
return this._rows;
|
|
229
|
-
},
|
|
230
|
-
/**
|
|
231
|
-
* Rows that are displayed in the table.
|
|
232
|
-
*/
|
|
233
|
-
set: /**
|
|
234
|
-
* Rows that are displayed in the table.
|
|
235
|
-
* @param {?} val
|
|
236
|
-
* @return {?}
|
|
237
|
-
*/
|
|
238
|
-
function (val) {
|
|
239
|
-
this._rows = val;
|
|
240
|
-
if (val) {
|
|
241
|
-
this._internalRows = tslib_1.__spread(val);
|
|
242
|
-
}
|
|
243
|
-
// auto sort on new updates
|
|
244
|
-
if (!this.externalSorting) {
|
|
245
|
-
this.sortInternalRows();
|
|
246
|
-
}
|
|
247
|
-
// auto group by parent on new update
|
|
248
|
-
this._internalRows = groupRowsByParents(this._internalRows, optionalGetterForProp(this.treeFromRelation), optionalGetterForProp(this.treeToRelation));
|
|
249
|
-
// recalculate sizes/etc
|
|
250
|
-
this.recalculate();
|
|
251
|
-
if (this._rows && this._groupRowsBy) {
|
|
252
|
-
// If a column has been specified in _groupRowsBy created a new array with the data grouped by that row
|
|
253
|
-
this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy);
|
|
254
|
-
}
|
|
255
|
-
this.cd.markForCheck();
|
|
256
|
-
},
|
|
257
|
-
enumerable: true,
|
|
258
|
-
configurable: true
|
|
259
|
-
});
|
|
260
|
-
Object.defineProperty(DatatableComponent.prototype, "groupRowsBy", {
|
|
261
|
-
get: /**
|
|
262
|
-
* @return {?}
|
|
263
|
-
*/
|
|
264
|
-
function () {
|
|
265
|
-
return this._groupRowsBy;
|
|
266
|
-
},
|
|
267
|
-
/**
|
|
268
|
-
* This attribute allows the user to set the name of the column to group the data with
|
|
269
|
-
*/
|
|
270
|
-
set: /**
|
|
271
|
-
* This attribute allows the user to set the name of the column to group the data with
|
|
272
|
-
* @param {?} val
|
|
273
|
-
* @return {?}
|
|
274
|
-
*/
|
|
275
|
-
function (val) {
|
|
276
|
-
if (val) {
|
|
277
|
-
this._groupRowsBy = val;
|
|
278
|
-
if (this._rows && this._groupRowsBy) {
|
|
279
|
-
// cretes a new array with the data grouped
|
|
280
|
-
this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
},
|
|
284
|
-
enumerable: true,
|
|
285
|
-
configurable: true
|
|
286
|
-
});
|
|
287
|
-
Object.defineProperty(DatatableComponent.prototype, "columns", {
|
|
288
|
-
/**
|
|
289
|
-
* Get the columns.
|
|
290
|
-
*/
|
|
291
|
-
get: /**
|
|
292
|
-
* Get the columns.
|
|
293
|
-
* @return {?}
|
|
294
|
-
*/
|
|
295
|
-
function () {
|
|
296
|
-
return this._columns;
|
|
297
|
-
},
|
|
298
|
-
/**
|
|
299
|
-
* Columns to be displayed.
|
|
300
|
-
*/
|
|
301
|
-
set: /**
|
|
302
|
-
* Columns to be displayed.
|
|
303
|
-
* @param {?} val
|
|
304
|
-
* @return {?}
|
|
305
|
-
*/
|
|
306
|
-
function (val) {
|
|
307
|
-
if (val) {
|
|
308
|
-
this._internalColumns = tslib_1.__spread(val);
|
|
309
|
-
setColumnDefaults(this._internalColumns);
|
|
310
|
-
this.recalculateColumns();
|
|
311
|
-
}
|
|
312
|
-
this._columns = val;
|
|
313
|
-
},
|
|
314
|
-
enumerable: true,
|
|
315
|
-
configurable: true
|
|
316
|
-
});
|
|
317
|
-
Object.defineProperty(DatatableComponent.prototype, "limit", {
|
|
318
|
-
/**
|
|
319
|
-
* Gets the limit.
|
|
320
|
-
*/
|
|
321
|
-
get: /**
|
|
322
|
-
* Gets the limit.
|
|
323
|
-
* @return {?}
|
|
324
|
-
*/
|
|
325
|
-
function () {
|
|
326
|
-
return this._limit;
|
|
327
|
-
},
|
|
328
|
-
/**
|
|
329
|
-
* The page size to be shown.
|
|
330
|
-
* Default value: `undefined`
|
|
331
|
-
*/
|
|
332
|
-
set: /**
|
|
333
|
-
* The page size to be shown.
|
|
334
|
-
* Default value: `undefined`
|
|
335
|
-
* @param {?} val
|
|
336
|
-
* @return {?}
|
|
337
|
-
*/
|
|
338
|
-
function (val) {
|
|
339
|
-
this._limit = val;
|
|
340
|
-
// recalculate sizes/etc
|
|
341
|
-
this.recalculate();
|
|
342
|
-
},
|
|
343
|
-
enumerable: true,
|
|
344
|
-
configurable: true
|
|
345
|
-
});
|
|
346
|
-
Object.defineProperty(DatatableComponent.prototype, "count", {
|
|
347
|
-
/**
|
|
348
|
-
* Gets the count.
|
|
349
|
-
*/
|
|
350
|
-
get: /**
|
|
351
|
-
* Gets the count.
|
|
352
|
-
* @return {?}
|
|
353
|
-
*/
|
|
354
|
-
function () {
|
|
355
|
-
return this._count;
|
|
356
|
-
},
|
|
357
|
-
/**
|
|
358
|
-
* The total count of all rows.
|
|
359
|
-
* Default value: `0`
|
|
360
|
-
*/
|
|
361
|
-
set: /**
|
|
362
|
-
* The total count of all rows.
|
|
363
|
-
* Default value: `0`
|
|
364
|
-
* @param {?} val
|
|
365
|
-
* @return {?}
|
|
366
|
-
*/
|
|
367
|
-
function (val) {
|
|
368
|
-
this._count = val;
|
|
369
|
-
// recalculate sizes/etc
|
|
370
|
-
this.recalculate();
|
|
371
|
-
},
|
|
372
|
-
enumerable: true,
|
|
373
|
-
configurable: true
|
|
374
|
-
});
|
|
375
|
-
Object.defineProperty(DatatableComponent.prototype, "offset", {
|
|
376
|
-
get: /**
|
|
377
|
-
* @return {?}
|
|
378
|
-
*/
|
|
379
|
-
function () {
|
|
380
|
-
return Math.max(Math.min(this._offset, Math.ceil(this.rowCount / this.pageSize) - 1), 0);
|
|
381
|
-
},
|
|
382
|
-
/**
|
|
383
|
-
* The current offset ( page - 1 ) shown.
|
|
384
|
-
* Default value: `0`
|
|
385
|
-
*/
|
|
386
|
-
set: /**
|
|
387
|
-
* The current offset ( page - 1 ) shown.
|
|
388
|
-
* Default value: `0`
|
|
389
|
-
* @param {?} val
|
|
390
|
-
* @return {?}
|
|
391
|
-
*/
|
|
392
|
-
function (val) {
|
|
393
|
-
this._offset = val;
|
|
394
|
-
},
|
|
395
|
-
enumerable: true,
|
|
396
|
-
configurable: true
|
|
397
|
-
});
|
|
398
|
-
Object.defineProperty(DatatableComponent.prototype, "isFixedHeader", {
|
|
399
|
-
/**
|
|
400
|
-
* CSS class applied if the header height if fixed height.
|
|
401
|
-
*/
|
|
402
|
-
get: /**
|
|
403
|
-
* CSS class applied if the header height if fixed height.
|
|
404
|
-
* @return {?}
|
|
405
|
-
*/
|
|
406
|
-
function () {
|
|
407
|
-
/** @type {?} */
|
|
408
|
-
var headerHeight = this.headerHeight;
|
|
409
|
-
return typeof headerHeight === 'string' ? (/** @type {?} */ (headerHeight)) !== 'auto' : true;
|
|
410
|
-
},
|
|
411
|
-
enumerable: true,
|
|
412
|
-
configurable: true
|
|
413
|
-
});
|
|
414
|
-
Object.defineProperty(DatatableComponent.prototype, "isFixedRow", {
|
|
415
|
-
/**
|
|
416
|
-
* CSS class applied to the root element if
|
|
417
|
-
* the row heights are fixed heights.
|
|
418
|
-
*/
|
|
419
|
-
get: /**
|
|
420
|
-
* CSS class applied to the root element if
|
|
421
|
-
* the row heights are fixed heights.
|
|
422
|
-
* @return {?}
|
|
423
|
-
*/
|
|
424
|
-
function () {
|
|
425
|
-
return this.rowHeight !== 'auto';
|
|
426
|
-
},
|
|
427
|
-
enumerable: true,
|
|
428
|
-
configurable: true
|
|
429
|
-
});
|
|
430
|
-
Object.defineProperty(DatatableComponent.prototype, "isVertScroll", {
|
|
431
|
-
/**
|
|
432
|
-
* CSS class applied to root element if
|
|
433
|
-
* vertical scrolling is enabled.
|
|
434
|
-
*/
|
|
435
|
-
get: /**
|
|
436
|
-
* CSS class applied to root element if
|
|
437
|
-
* vertical scrolling is enabled.
|
|
438
|
-
* @return {?}
|
|
439
|
-
*/
|
|
440
|
-
function () {
|
|
441
|
-
return this.scrollbarV;
|
|
442
|
-
},
|
|
443
|
-
enumerable: true,
|
|
444
|
-
configurable: true
|
|
445
|
-
});
|
|
446
|
-
Object.defineProperty(DatatableComponent.prototype, "isVirtualized", {
|
|
447
|
-
/**
|
|
448
|
-
* CSS class applied to root element if
|
|
449
|
-
* virtualization is enabled.
|
|
450
|
-
*/
|
|
451
|
-
get: /**
|
|
452
|
-
* CSS class applied to root element if
|
|
453
|
-
* virtualization is enabled.
|
|
454
|
-
* @return {?}
|
|
455
|
-
*/
|
|
456
|
-
function () {
|
|
457
|
-
return this.virtualization;
|
|
458
|
-
},
|
|
459
|
-
enumerable: true,
|
|
460
|
-
configurable: true
|
|
461
|
-
});
|
|
462
|
-
Object.defineProperty(DatatableComponent.prototype, "isHorScroll", {
|
|
463
|
-
/**
|
|
464
|
-
* CSS class applied to the root element
|
|
465
|
-
* if the horziontal scrolling is enabled.
|
|
466
|
-
*/
|
|
467
|
-
get: /**
|
|
468
|
-
* CSS class applied to the root element
|
|
469
|
-
* if the horziontal scrolling is enabled.
|
|
470
|
-
* @return {?}
|
|
471
|
-
*/
|
|
472
|
-
function () {
|
|
473
|
-
return this.scrollbarH;
|
|
474
|
-
},
|
|
475
|
-
enumerable: true,
|
|
476
|
-
configurable: true
|
|
477
|
-
});
|
|
478
|
-
Object.defineProperty(DatatableComponent.prototype, "isSelectable", {
|
|
479
|
-
/**
|
|
480
|
-
* CSS class applied to root element is selectable.
|
|
481
|
-
*/
|
|
482
|
-
get: /**
|
|
483
|
-
* CSS class applied to root element is selectable.
|
|
484
|
-
* @return {?}
|
|
485
|
-
*/
|
|
486
|
-
function () {
|
|
487
|
-
return this.selectionType !== undefined;
|
|
488
|
-
},
|
|
489
|
-
enumerable: true,
|
|
490
|
-
configurable: true
|
|
491
|
-
});
|
|
492
|
-
Object.defineProperty(DatatableComponent.prototype, "isCheckboxSelection", {
|
|
493
|
-
/**
|
|
494
|
-
* CSS class applied to root is checkbox selection.
|
|
495
|
-
*/
|
|
496
|
-
get: /**
|
|
497
|
-
* CSS class applied to root is checkbox selection.
|
|
498
|
-
* @return {?}
|
|
499
|
-
*/
|
|
500
|
-
function () {
|
|
501
|
-
return this.selectionType === SelectionType.checkbox;
|
|
502
|
-
},
|
|
503
|
-
enumerable: true,
|
|
504
|
-
configurable: true
|
|
505
|
-
});
|
|
506
|
-
Object.defineProperty(DatatableComponent.prototype, "isCellSelection", {
|
|
507
|
-
/**
|
|
508
|
-
* CSS class applied to root if cell selection.
|
|
509
|
-
*/
|
|
510
|
-
get: /**
|
|
511
|
-
* CSS class applied to root if cell selection.
|
|
512
|
-
* @return {?}
|
|
513
|
-
*/
|
|
514
|
-
function () {
|
|
515
|
-
return this.selectionType === SelectionType.cell;
|
|
516
|
-
},
|
|
517
|
-
enumerable: true,
|
|
518
|
-
configurable: true
|
|
519
|
-
});
|
|
520
|
-
Object.defineProperty(DatatableComponent.prototype, "isSingleSelection", {
|
|
521
|
-
/**
|
|
522
|
-
* CSS class applied to root if single select.
|
|
523
|
-
*/
|
|
524
|
-
get: /**
|
|
525
|
-
* CSS class applied to root if single select.
|
|
526
|
-
* @return {?}
|
|
527
|
-
*/
|
|
528
|
-
function () {
|
|
529
|
-
return this.selectionType === SelectionType.single;
|
|
530
|
-
},
|
|
531
|
-
enumerable: true,
|
|
532
|
-
configurable: true
|
|
533
|
-
});
|
|
534
|
-
Object.defineProperty(DatatableComponent.prototype, "isMultiSelection", {
|
|
535
|
-
/**
|
|
536
|
-
* CSS class added to root element if mulit select
|
|
537
|
-
*/
|
|
538
|
-
get: /**
|
|
539
|
-
* CSS class added to root element if mulit select
|
|
540
|
-
* @return {?}
|
|
541
|
-
*/
|
|
542
|
-
function () {
|
|
543
|
-
return this.selectionType === SelectionType.multi;
|
|
544
|
-
},
|
|
545
|
-
enumerable: true,
|
|
546
|
-
configurable: true
|
|
547
|
-
});
|
|
548
|
-
Object.defineProperty(DatatableComponent.prototype, "isMultiClickSelection", {
|
|
549
|
-
/**
|
|
550
|
-
* CSS class added to root element if mulit click select
|
|
551
|
-
*/
|
|
552
|
-
get: /**
|
|
553
|
-
* CSS class added to root element if mulit click select
|
|
554
|
-
* @return {?}
|
|
555
|
-
*/
|
|
556
|
-
function () {
|
|
557
|
-
return this.selectionType === SelectionType.multiClick;
|
|
558
|
-
},
|
|
559
|
-
enumerable: true,
|
|
560
|
-
configurable: true
|
|
561
|
-
});
|
|
562
|
-
Object.defineProperty(DatatableComponent.prototype, "columnTemplates", {
|
|
563
|
-
/**
|
|
564
|
-
* Returns the column templates.
|
|
565
|
-
*/
|
|
566
|
-
get: /**
|
|
567
|
-
* Returns the column templates.
|
|
568
|
-
* @return {?}
|
|
569
|
-
*/
|
|
570
|
-
function () {
|
|
571
|
-
return this._columnTemplates;
|
|
572
|
-
},
|
|
573
|
-
/**
|
|
574
|
-
* Column templates gathered from `ContentChildren`
|
|
575
|
-
* if described in your markup.
|
|
576
|
-
*/
|
|
577
|
-
set: /**
|
|
578
|
-
* Column templates gathered from `ContentChildren`
|
|
579
|
-
* if described in your markup.
|
|
580
|
-
* @param {?} val
|
|
581
|
-
* @return {?}
|
|
582
|
-
*/
|
|
583
|
-
function (val) {
|
|
584
|
-
this._columnTemplates = val;
|
|
585
|
-
this.translateColumns(val);
|
|
586
|
-
},
|
|
587
|
-
enumerable: true,
|
|
588
|
-
configurable: true
|
|
589
|
-
});
|
|
590
|
-
Object.defineProperty(DatatableComponent.prototype, "allRowsSelected", {
|
|
591
|
-
/**
|
|
592
|
-
* Returns if all rows are selected.
|
|
593
|
-
*/
|
|
594
|
-
get: /**
|
|
595
|
-
* Returns if all rows are selected.
|
|
596
|
-
* @return {?}
|
|
597
|
-
*/
|
|
598
|
-
function () {
|
|
599
|
-
/** @type {?} */
|
|
600
|
-
var allRowsSelected = this.rows && this.selected && this.selected.length === this.rows.length;
|
|
601
|
-
if (this.selectAllRowsOnPage) {
|
|
602
|
-
/** @type {?} */
|
|
603
|
-
var indexes = this.bodyComponent.indexes;
|
|
604
|
-
/** @type {?} */
|
|
605
|
-
var rowsOnPage = indexes.last - indexes.first;
|
|
606
|
-
allRowsSelected = this.selected.length === rowsOnPage;
|
|
607
|
-
}
|
|
608
|
-
return this.selected && this.rows && this.rows.length !== 0 && allRowsSelected;
|
|
609
|
-
},
|
|
610
|
-
enumerable: true,
|
|
611
|
-
configurable: true
|
|
612
|
-
});
|
|
613
|
-
/**
|
|
614
|
-
* Lifecycle hook that is called after data-bound
|
|
615
|
-
* properties of a directive are initialized.
|
|
616
|
-
*/
|
|
617
|
-
/**
|
|
618
|
-
* Lifecycle hook that is called after data-bound
|
|
619
|
-
* properties of a directive are initialized.
|
|
620
|
-
* @return {?}
|
|
621
|
-
*/
|
|
622
|
-
DatatableComponent.prototype.ngOnInit = /**
|
|
623
|
-
* Lifecycle hook that is called after data-bound
|
|
624
|
-
* properties of a directive are initialized.
|
|
625
|
-
* @return {?}
|
|
626
|
-
*/
|
|
627
|
-
function () {
|
|
628
|
-
// need to call this immediatly to size
|
|
629
|
-
// if the table is hidden the visibility
|
|
630
|
-
// listener will invoke this itself upon show
|
|
631
|
-
this.recalculate();
|
|
632
|
-
};
|
|
633
|
-
/**
|
|
634
|
-
* Lifecycle hook that is called after a component's
|
|
635
|
-
* view has been fully initialized.
|
|
636
|
-
*/
|
|
637
|
-
/**
|
|
638
|
-
* Lifecycle hook that is called after a component's
|
|
639
|
-
* view has been fully initialized.
|
|
640
|
-
* @return {?}
|
|
641
|
-
*/
|
|
642
|
-
DatatableComponent.prototype.ngAfterViewInit = /**
|
|
643
|
-
* Lifecycle hook that is called after a component's
|
|
644
|
-
* view has been fully initialized.
|
|
645
|
-
* @return {?}
|
|
646
|
-
*/
|
|
647
|
-
function () {
|
|
648
|
-
var _this = this;
|
|
649
|
-
if (!this.externalSorting) {
|
|
650
|
-
this.sortInternalRows();
|
|
651
|
-
}
|
|
652
|
-
// this has to be done to prevent the change detection
|
|
653
|
-
// tree from freaking out because we are readjusting
|
|
654
|
-
if (typeof requestAnimationFrame === 'undefined') {
|
|
655
|
-
return;
|
|
656
|
-
}
|
|
657
|
-
requestAnimationFrame((/**
|
|
658
|
-
* @return {?}
|
|
659
|
-
*/
|
|
660
|
-
function () {
|
|
661
|
-
_this.recalculate();
|
|
662
|
-
// emit page for virtual server-side kickoff
|
|
663
|
-
if (_this.externalPaging && _this.scrollbarV) {
|
|
664
|
-
_this.page.emit({
|
|
665
|
-
count: _this.count,
|
|
666
|
-
pageSize: _this.pageSize,
|
|
667
|
-
limit: _this.limit,
|
|
668
|
-
offset: 0
|
|
669
|
-
});
|
|
670
|
-
}
|
|
671
|
-
}));
|
|
672
|
-
};
|
|
673
|
-
/**
|
|
674
|
-
* Lifecycle hook that is called after a component's
|
|
675
|
-
* content has been fully initialized.
|
|
676
|
-
*/
|
|
677
|
-
/**
|
|
678
|
-
* Lifecycle hook that is called after a component's
|
|
679
|
-
* content has been fully initialized.
|
|
680
|
-
* @return {?}
|
|
681
|
-
*/
|
|
682
|
-
DatatableComponent.prototype.ngAfterContentInit = /**
|
|
683
|
-
* Lifecycle hook that is called after a component's
|
|
684
|
-
* content has been fully initialized.
|
|
685
|
-
* @return {?}
|
|
686
|
-
*/
|
|
687
|
-
function () {
|
|
688
|
-
var _this = this;
|
|
689
|
-
this.columnTemplates.changes.subscribe((/**
|
|
690
|
-
* @param {?} v
|
|
691
|
-
* @return {?}
|
|
692
|
-
*/
|
|
693
|
-
function (v) { return _this.translateColumns(v); }));
|
|
694
|
-
this.listenForColumnInputChanges();
|
|
695
|
-
};
|
|
696
|
-
/**
|
|
697
|
-
* Translates the templates to the column objects
|
|
698
|
-
*/
|
|
699
|
-
/**
|
|
700
|
-
* Translates the templates to the column objects
|
|
701
|
-
* @param {?} val
|
|
702
|
-
* @return {?}
|
|
703
|
-
*/
|
|
704
|
-
DatatableComponent.prototype.translateColumns = /**
|
|
705
|
-
* Translates the templates to the column objects
|
|
706
|
-
* @param {?} val
|
|
707
|
-
* @return {?}
|
|
708
|
-
*/
|
|
709
|
-
function (val) {
|
|
710
|
-
if (val) {
|
|
711
|
-
/** @type {?} */
|
|
712
|
-
var arr = val.toArray();
|
|
713
|
-
if (arr.length) {
|
|
714
|
-
this._internalColumns = translateTemplates(arr);
|
|
715
|
-
setColumnDefaults(this._internalColumns);
|
|
716
|
-
this.recalculateColumns();
|
|
717
|
-
this.sortInternalRows();
|
|
718
|
-
this.cd.markForCheck();
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
};
|
|
722
|
-
/**
|
|
723
|
-
* Creates a map with the data grouped by the user choice of grouping index
|
|
724
|
-
*
|
|
725
|
-
* @param originalArray the original array passed via parameter
|
|
726
|
-
* @param groupByIndex the index of the column to group the data by
|
|
727
|
-
*/
|
|
728
|
-
/**
|
|
729
|
-
* Creates a map with the data grouped by the user choice of grouping index
|
|
730
|
-
*
|
|
731
|
-
* @param {?} originalArray the original array passed via parameter
|
|
732
|
-
* @param {?} groupBy
|
|
733
|
-
* @return {?}
|
|
734
|
-
*/
|
|
735
|
-
DatatableComponent.prototype.groupArrayBy = /**
|
|
736
|
-
* Creates a map with the data grouped by the user choice of grouping index
|
|
737
|
-
*
|
|
738
|
-
* @param {?} originalArray the original array passed via parameter
|
|
739
|
-
* @param {?} groupBy
|
|
740
|
-
* @return {?}
|
|
741
|
-
*/
|
|
742
|
-
function (originalArray, groupBy) {
|
|
743
|
-
// create a map to hold groups with their corresponding results
|
|
744
|
-
/** @type {?} */
|
|
745
|
-
var map = new Map();
|
|
746
|
-
/** @type {?} */
|
|
747
|
-
var i = 0;
|
|
748
|
-
originalArray.forEach((/**
|
|
749
|
-
* @param {?} item
|
|
750
|
-
* @return {?}
|
|
751
|
-
*/
|
|
752
|
-
function (item) {
|
|
753
|
-
/** @type {?} */
|
|
754
|
-
var key = item[groupBy];
|
|
755
|
-
if (!map.has(key)) {
|
|
756
|
-
map.set(key, [item]);
|
|
757
|
-
}
|
|
758
|
-
else {
|
|
759
|
-
map.get(key).push(item);
|
|
760
|
-
}
|
|
761
|
-
i++;
|
|
762
|
-
}));
|
|
763
|
-
/** @type {?} */
|
|
764
|
-
var addGroup = (/**
|
|
765
|
-
* @param {?} key
|
|
766
|
-
* @param {?} value
|
|
767
|
-
* @return {?}
|
|
768
|
-
*/
|
|
769
|
-
function (key, value) {
|
|
770
|
-
return { key: key, value: value };
|
|
771
|
-
});
|
|
772
|
-
// convert map back to a simple array of objects
|
|
773
|
-
return Array.from(map, (/**
|
|
774
|
-
* @param {?} x
|
|
775
|
-
* @return {?}
|
|
776
|
-
*/
|
|
777
|
-
function (x) { return addGroup(x[0], x[1]); }));
|
|
778
|
-
};
|
|
779
|
-
/*
|
|
780
|
-
* Lifecycle hook that is called when Angular dirty checks a directive.
|
|
781
|
-
*/
|
|
782
|
-
/*
|
|
783
|
-
* Lifecycle hook that is called when Angular dirty checks a directive.
|
|
784
|
-
*/
|
|
785
|
-
/**
|
|
786
|
-
* @return {?}
|
|
787
|
-
*/
|
|
788
|
-
DatatableComponent.prototype.ngDoCheck = /*
|
|
789
|
-
* Lifecycle hook that is called when Angular dirty checks a directive.
|
|
790
|
-
*/
|
|
791
|
-
/**
|
|
792
|
-
* @return {?}
|
|
793
|
-
*/
|
|
794
|
-
function () {
|
|
795
|
-
if (this.rowDiffer.diff(this.rows)) {
|
|
796
|
-
if (!this.externalSorting) {
|
|
797
|
-
this.sortInternalRows();
|
|
798
|
-
}
|
|
799
|
-
else {
|
|
800
|
-
this._internalRows = tslib_1.__spread(this.rows);
|
|
801
|
-
}
|
|
802
|
-
// auto group by parent on new update
|
|
803
|
-
this._internalRows = groupRowsByParents(this._internalRows, optionalGetterForProp(this.treeFromRelation), optionalGetterForProp(this.treeToRelation));
|
|
804
|
-
this.recalculatePages();
|
|
805
|
-
this.cd.markForCheck();
|
|
806
|
-
}
|
|
807
|
-
};
|
|
808
|
-
/**
|
|
809
|
-
* Recalc's the sizes of the grid.
|
|
810
|
-
*
|
|
811
|
-
* Updated automatically on changes to:
|
|
812
|
-
*
|
|
813
|
-
* - Columns
|
|
814
|
-
* - Rows
|
|
815
|
-
* - Paging related
|
|
816
|
-
*
|
|
817
|
-
* Also can be manually invoked or upon window resize.
|
|
818
|
-
*/
|
|
819
|
-
/**
|
|
820
|
-
* Recalc's the sizes of the grid.
|
|
821
|
-
*
|
|
822
|
-
* Updated automatically on changes to:
|
|
823
|
-
*
|
|
824
|
-
* - Columns
|
|
825
|
-
* - Rows
|
|
826
|
-
* - Paging related
|
|
827
|
-
*
|
|
828
|
-
* Also can be manually invoked or upon window resize.
|
|
829
|
-
* @return {?}
|
|
830
|
-
*/
|
|
831
|
-
DatatableComponent.prototype.recalculate = /**
|
|
832
|
-
* Recalc's the sizes of the grid.
|
|
833
|
-
*
|
|
834
|
-
* Updated automatically on changes to:
|
|
835
|
-
*
|
|
836
|
-
* - Columns
|
|
837
|
-
* - Rows
|
|
838
|
-
* - Paging related
|
|
839
|
-
*
|
|
840
|
-
* Also can be manually invoked or upon window resize.
|
|
841
|
-
* @return {?}
|
|
842
|
-
*/
|
|
843
|
-
function () {
|
|
844
|
-
this.recalculateDims();
|
|
845
|
-
this.recalculateColumns();
|
|
846
|
-
};
|
|
847
|
-
/**
|
|
848
|
-
* Window resize handler to update sizes.
|
|
849
|
-
*/
|
|
850
|
-
/**
|
|
851
|
-
* Window resize handler to update sizes.
|
|
852
|
-
* @return {?}
|
|
853
|
-
*/
|
|
854
|
-
DatatableComponent.prototype.onWindowResize = /**
|
|
855
|
-
* Window resize handler to update sizes.
|
|
856
|
-
* @return {?}
|
|
857
|
-
*/
|
|
858
|
-
function () {
|
|
859
|
-
this.recalculate();
|
|
860
|
-
};
|
|
861
|
-
/**
|
|
862
|
-
* Recalulcates the column widths based on column width
|
|
863
|
-
* distribution mode and scrollbar offsets.
|
|
864
|
-
*/
|
|
865
|
-
/**
|
|
866
|
-
* Recalulcates the column widths based on column width
|
|
867
|
-
* distribution mode and scrollbar offsets.
|
|
868
|
-
* @param {?=} columns
|
|
869
|
-
* @param {?=} forceIdx
|
|
870
|
-
* @param {?=} allowBleed
|
|
871
|
-
* @return {?}
|
|
872
|
-
*/
|
|
873
|
-
DatatableComponent.prototype.recalculateColumns = /**
|
|
874
|
-
* Recalulcates the column widths based on column width
|
|
875
|
-
* distribution mode and scrollbar offsets.
|
|
876
|
-
* @param {?=} columns
|
|
877
|
-
* @param {?=} forceIdx
|
|
878
|
-
* @param {?=} allowBleed
|
|
879
|
-
* @return {?}
|
|
880
|
-
*/
|
|
881
|
-
function (columns, forceIdx, allowBleed) {
|
|
882
|
-
if (columns === void 0) { columns = this._internalColumns; }
|
|
883
|
-
if (forceIdx === void 0) { forceIdx = -1; }
|
|
884
|
-
if (allowBleed === void 0) { allowBleed = this.scrollbarH; }
|
|
885
|
-
if (!columns)
|
|
886
|
-
return undefined;
|
|
887
|
-
/** @type {?} */
|
|
888
|
-
var width = this._innerWidth;
|
|
889
|
-
if (this.scrollbarV) {
|
|
890
|
-
width = width - this.scrollbarHelper.width;
|
|
891
|
-
}
|
|
892
|
-
if (this.columnMode === ColumnMode.force) {
|
|
893
|
-
forceFillColumnWidths(columns, width, forceIdx, allowBleed);
|
|
894
|
-
}
|
|
895
|
-
else if (this.columnMode === ColumnMode.flex) {
|
|
896
|
-
adjustColumnWidths(columns, width);
|
|
897
|
-
}
|
|
898
|
-
return columns;
|
|
899
|
-
};
|
|
900
|
-
/**
|
|
901
|
-
* Recalculates the dimensions of the table size.
|
|
902
|
-
* Internally calls the page size and row count calcs too.
|
|
903
|
-
*
|
|
904
|
-
*/
|
|
905
|
-
/**
|
|
906
|
-
* Recalculates the dimensions of the table size.
|
|
907
|
-
* Internally calls the page size and row count calcs too.
|
|
908
|
-
*
|
|
909
|
-
* @return {?}
|
|
910
|
-
*/
|
|
911
|
-
DatatableComponent.prototype.recalculateDims = /**
|
|
912
|
-
* Recalculates the dimensions of the table size.
|
|
913
|
-
* Internally calls the page size and row count calcs too.
|
|
914
|
-
*
|
|
915
|
-
* @return {?}
|
|
916
|
-
*/
|
|
917
|
-
function () {
|
|
918
|
-
/** @type {?} */
|
|
919
|
-
var dims = this.dimensionsHelper.getDimensions(this.element);
|
|
920
|
-
this._innerWidth = Math.floor(dims.width);
|
|
921
|
-
if (this.scrollbarV) {
|
|
922
|
-
/** @type {?} */
|
|
923
|
-
var height = dims.height;
|
|
924
|
-
if (this.headerHeight)
|
|
925
|
-
height = height - this.headerHeight;
|
|
926
|
-
if (this.footerHeight)
|
|
927
|
-
height = height - this.footerHeight;
|
|
928
|
-
this.bodyHeight = height;
|
|
929
|
-
}
|
|
930
|
-
this.recalculatePages();
|
|
931
|
-
};
|
|
932
|
-
/**
|
|
933
|
-
* Recalculates the pages after a update.
|
|
934
|
-
*/
|
|
935
|
-
/**
|
|
936
|
-
* Recalculates the pages after a update.
|
|
937
|
-
* @return {?}
|
|
938
|
-
*/
|
|
939
|
-
DatatableComponent.prototype.recalculatePages = /**
|
|
940
|
-
* Recalculates the pages after a update.
|
|
941
|
-
* @return {?}
|
|
942
|
-
*/
|
|
943
|
-
function () {
|
|
944
|
-
this.pageSize = this.calcPageSize();
|
|
945
|
-
this.rowCount = this.calcRowCount();
|
|
946
|
-
};
|
|
947
|
-
/**
|
|
948
|
-
* Body triggered a page event.
|
|
949
|
-
*/
|
|
950
|
-
/**
|
|
951
|
-
* Body triggered a page event.
|
|
952
|
-
* @param {?} __0
|
|
953
|
-
* @return {?}
|
|
954
|
-
*/
|
|
955
|
-
DatatableComponent.prototype.onBodyPage = /**
|
|
956
|
-
* Body triggered a page event.
|
|
957
|
-
* @param {?} __0
|
|
958
|
-
* @return {?}
|
|
959
|
-
*/
|
|
960
|
-
function (_a) {
|
|
961
|
-
var offset = _a.offset;
|
|
962
|
-
// Avoid pagination caming from body events like scroll when the table
|
|
963
|
-
// has no virtualization and the external paging is enable.
|
|
964
|
-
// This means, let's the developer handle pagination by my him(her) self
|
|
965
|
-
if (this.externalPaging && !this.virtualization) {
|
|
966
|
-
return;
|
|
967
|
-
}
|
|
968
|
-
this.offset = offset;
|
|
969
|
-
this.page.emit({
|
|
970
|
-
count: this.count,
|
|
971
|
-
pageSize: this.pageSize,
|
|
972
|
-
limit: this.limit,
|
|
973
|
-
offset: this.offset
|
|
974
|
-
});
|
|
975
|
-
};
|
|
976
|
-
/**
|
|
977
|
-
* The body triggered a scroll event.
|
|
978
|
-
*/
|
|
979
|
-
/**
|
|
980
|
-
* The body triggered a scroll event.
|
|
981
|
-
* @param {?} event
|
|
982
|
-
* @return {?}
|
|
983
|
-
*/
|
|
984
|
-
DatatableComponent.prototype.onBodyScroll = /**
|
|
985
|
-
* The body triggered a scroll event.
|
|
986
|
-
* @param {?} event
|
|
987
|
-
* @return {?}
|
|
988
|
-
*/
|
|
989
|
-
function (event) {
|
|
990
|
-
this._offsetX.next(event.offsetX);
|
|
991
|
-
this.scroll.emit(event);
|
|
992
|
-
this.cd.detectChanges();
|
|
993
|
-
};
|
|
994
|
-
/**
|
|
995
|
-
* The footer triggered a page event.
|
|
996
|
-
*/
|
|
997
|
-
/**
|
|
998
|
-
* The footer triggered a page event.
|
|
999
|
-
* @param {?} event
|
|
1000
|
-
* @return {?}
|
|
1001
|
-
*/
|
|
1002
|
-
DatatableComponent.prototype.onFooterPage = /**
|
|
1003
|
-
* The footer triggered a page event.
|
|
1004
|
-
* @param {?} event
|
|
1005
|
-
* @return {?}
|
|
1006
|
-
*/
|
|
1007
|
-
function (event) {
|
|
1008
|
-
this.offset = event.page - 1;
|
|
1009
|
-
this.bodyComponent.updateOffsetY(this.offset);
|
|
1010
|
-
this.page.emit({
|
|
1011
|
-
count: this.count,
|
|
1012
|
-
pageSize: this.pageSize,
|
|
1013
|
-
limit: this.limit,
|
|
1014
|
-
offset: this.offset
|
|
1015
|
-
});
|
|
1016
|
-
if (this.selectAllRowsOnPage) {
|
|
1017
|
-
this.selected = [];
|
|
1018
|
-
this.select.emit({
|
|
1019
|
-
selected: this.selected
|
|
1020
|
-
});
|
|
1021
|
-
}
|
|
1022
|
-
};
|
|
1023
|
-
/**
|
|
1024
|
-
* Recalculates the sizes of the page
|
|
1025
|
-
*/
|
|
1026
|
-
/**
|
|
1027
|
-
* Recalculates the sizes of the page
|
|
1028
|
-
* @param {?=} val
|
|
1029
|
-
* @return {?}
|
|
1030
|
-
*/
|
|
1031
|
-
DatatableComponent.prototype.calcPageSize = /**
|
|
1032
|
-
* Recalculates the sizes of the page
|
|
1033
|
-
* @param {?=} val
|
|
1034
|
-
* @return {?}
|
|
1035
|
-
*/
|
|
1036
|
-
function (val) {
|
|
1037
|
-
if (val === void 0) { val = this.rows; }
|
|
1038
|
-
// Keep the page size constant even if the row has been expanded.
|
|
1039
|
-
// This is because an expanded row is still considered to be a child of
|
|
1040
|
-
// the original row. Hence calculation would use rowHeight only.
|
|
1041
|
-
if (this.scrollbarV && this.virtualization) {
|
|
1042
|
-
/** @type {?} */
|
|
1043
|
-
var size = Math.ceil(this.bodyHeight / ((/** @type {?} */ (this.rowHeight))));
|
|
1044
|
-
return Math.max(size, 0);
|
|
1045
|
-
}
|
|
1046
|
-
// if limit is passed, we are paging
|
|
1047
|
-
if (this.limit !== undefined) {
|
|
1048
|
-
return this.limit;
|
|
1049
|
-
}
|
|
1050
|
-
// otherwise use row length
|
|
1051
|
-
if (val) {
|
|
1052
|
-
return val.length;
|
|
1053
|
-
}
|
|
1054
|
-
// other empty :(
|
|
1055
|
-
return 0;
|
|
1056
|
-
};
|
|
1057
|
-
/**
|
|
1058
|
-
* Calculates the row count.
|
|
1059
|
-
*/
|
|
1060
|
-
/**
|
|
1061
|
-
* Calculates the row count.
|
|
1062
|
-
* @param {?=} val
|
|
1063
|
-
* @return {?}
|
|
1064
|
-
*/
|
|
1065
|
-
DatatableComponent.prototype.calcRowCount = /**
|
|
1066
|
-
* Calculates the row count.
|
|
1067
|
-
* @param {?=} val
|
|
1068
|
-
* @return {?}
|
|
1069
|
-
*/
|
|
1070
|
-
function (val) {
|
|
1071
|
-
if (val === void 0) { val = this.rows; }
|
|
1072
|
-
if (!this.externalPaging) {
|
|
1073
|
-
if (!val)
|
|
1074
|
-
return 0;
|
|
1075
|
-
if (this.groupedRows) {
|
|
1076
|
-
return this.groupedRows.length;
|
|
1077
|
-
}
|
|
1078
|
-
else if (this.treeFromRelation != null && this.treeToRelation != null) {
|
|
1079
|
-
return this._internalRows.length;
|
|
1080
|
-
}
|
|
1081
|
-
else {
|
|
1082
|
-
return val.length;
|
|
1083
|
-
}
|
|
1084
|
-
}
|
|
1085
|
-
return this.count;
|
|
1086
|
-
};
|
|
1087
|
-
/**
|
|
1088
|
-
* The header triggered a contextmenu event.
|
|
1089
|
-
*/
|
|
1090
|
-
/**
|
|
1091
|
-
* The header triggered a contextmenu event.
|
|
1092
|
-
* @param {?} __0
|
|
1093
|
-
* @return {?}
|
|
1094
|
-
*/
|
|
1095
|
-
DatatableComponent.prototype.onColumnContextmenu = /**
|
|
1096
|
-
* The header triggered a contextmenu event.
|
|
1097
|
-
* @param {?} __0
|
|
1098
|
-
* @return {?}
|
|
1099
|
-
*/
|
|
1100
|
-
function (_a) {
|
|
1101
|
-
var event = _a.event, column = _a.column;
|
|
1102
|
-
this.tableContextmenu.emit({ event: event, type: ContextmenuType.header, content: column });
|
|
1103
|
-
};
|
|
1104
|
-
/**
|
|
1105
|
-
* The body triggered a contextmenu event.
|
|
1106
|
-
*/
|
|
1107
|
-
/**
|
|
1108
|
-
* The body triggered a contextmenu event.
|
|
1109
|
-
* @param {?} __0
|
|
1110
|
-
* @return {?}
|
|
1111
|
-
*/
|
|
1112
|
-
DatatableComponent.prototype.onRowContextmenu = /**
|
|
1113
|
-
* The body triggered a contextmenu event.
|
|
1114
|
-
* @param {?} __0
|
|
1115
|
-
* @return {?}
|
|
1116
|
-
*/
|
|
1117
|
-
function (_a) {
|
|
1118
|
-
var event = _a.event, row = _a.row;
|
|
1119
|
-
this.tableContextmenu.emit({ event: event, type: ContextmenuType.body, content: row });
|
|
1120
|
-
};
|
|
1121
|
-
/**
|
|
1122
|
-
* The header triggered a column resize event.
|
|
1123
|
-
*/
|
|
1124
|
-
/**
|
|
1125
|
-
* The header triggered a column resize event.
|
|
1126
|
-
* @param {?} __0
|
|
1127
|
-
* @return {?}
|
|
1128
|
-
*/
|
|
1129
|
-
DatatableComponent.prototype.onColumnResize = /**
|
|
1130
|
-
* The header triggered a column resize event.
|
|
1131
|
-
* @param {?} __0
|
|
1132
|
-
* @return {?}
|
|
1133
|
-
*/
|
|
1134
|
-
function (_a) {
|
|
1135
|
-
var column = _a.column, newValue = _a.newValue;
|
|
1136
|
-
/* Safari/iOS 10.2 workaround */
|
|
1137
|
-
if (column === undefined) {
|
|
1138
|
-
return;
|
|
1139
|
-
}
|
|
1140
|
-
/** @type {?} */
|
|
1141
|
-
var idx;
|
|
1142
|
-
/** @type {?} */
|
|
1143
|
-
var cols = this._internalColumns.map((/**
|
|
1144
|
-
* @param {?} c
|
|
1145
|
-
* @param {?} i
|
|
1146
|
-
* @return {?}
|
|
1147
|
-
*/
|
|
1148
|
-
function (c, i) {
|
|
1149
|
-
c = tslib_1.__assign({}, c);
|
|
1150
|
-
if (c.$$id === column.$$id) {
|
|
1151
|
-
idx = i;
|
|
1152
|
-
c.width = newValue;
|
|
1153
|
-
// set this so we can force the column
|
|
1154
|
-
// width distribution to be to this value
|
|
1155
|
-
c.$$oldWidth = newValue;
|
|
1156
|
-
}
|
|
1157
|
-
return c;
|
|
1158
|
-
}));
|
|
1159
|
-
this.recalculateColumns(cols, idx);
|
|
1160
|
-
this._internalColumns = cols;
|
|
1161
|
-
this.resize.emit({
|
|
1162
|
-
column: column,
|
|
1163
|
-
newValue: newValue
|
|
1164
|
-
});
|
|
1165
|
-
};
|
|
1166
|
-
/**
|
|
1167
|
-
* The header triggered a column re-order event.
|
|
1168
|
-
*/
|
|
1169
|
-
/**
|
|
1170
|
-
* The header triggered a column re-order event.
|
|
1171
|
-
* @param {?} __0
|
|
1172
|
-
* @return {?}
|
|
1173
|
-
*/
|
|
1174
|
-
DatatableComponent.prototype.onColumnReorder = /**
|
|
1175
|
-
* The header triggered a column re-order event.
|
|
1176
|
-
* @param {?} __0
|
|
1177
|
-
* @return {?}
|
|
1178
|
-
*/
|
|
1179
|
-
function (_a) {
|
|
1180
|
-
var column = _a.column, newValue = _a.newValue, prevValue = _a.prevValue;
|
|
1181
|
-
/** @type {?} */
|
|
1182
|
-
var cols = this._internalColumns.map((/**
|
|
1183
|
-
* @param {?} c
|
|
1184
|
-
* @return {?}
|
|
1185
|
-
*/
|
|
1186
|
-
function (c) {
|
|
1187
|
-
return tslib_1.__assign({}, c);
|
|
1188
|
-
}));
|
|
1189
|
-
if (this.swapColumns) {
|
|
1190
|
-
/** @type {?} */
|
|
1191
|
-
var prevCol = cols[newValue];
|
|
1192
|
-
cols[newValue] = column;
|
|
1193
|
-
cols[prevValue] = prevCol;
|
|
1194
|
-
}
|
|
1195
|
-
else {
|
|
1196
|
-
if (newValue > prevValue) {
|
|
1197
|
-
/** @type {?} */
|
|
1198
|
-
var movedCol = cols[prevValue];
|
|
1199
|
-
for (var i = prevValue; i < newValue; i++) {
|
|
1200
|
-
cols[i] = cols[i + 1];
|
|
1201
|
-
}
|
|
1202
|
-
cols[newValue] = movedCol;
|
|
1203
|
-
}
|
|
1204
|
-
else {
|
|
1205
|
-
/** @type {?} */
|
|
1206
|
-
var movedCol = cols[prevValue];
|
|
1207
|
-
for (var i = prevValue; i > newValue; i--) {
|
|
1208
|
-
cols[i] = cols[i - 1];
|
|
1209
|
-
}
|
|
1210
|
-
cols[newValue] = movedCol;
|
|
1211
|
-
}
|
|
1212
|
-
}
|
|
1213
|
-
this._internalColumns = cols;
|
|
1214
|
-
this.reorder.emit({
|
|
1215
|
-
column: column,
|
|
1216
|
-
newValue: newValue,
|
|
1217
|
-
prevValue: prevValue
|
|
1218
|
-
});
|
|
1219
|
-
};
|
|
1220
|
-
/**
|
|
1221
|
-
* The header triggered a column sort event.
|
|
1222
|
-
*/
|
|
1223
|
-
/**
|
|
1224
|
-
* The header triggered a column sort event.
|
|
1225
|
-
* @param {?} event
|
|
1226
|
-
* @return {?}
|
|
1227
|
-
*/
|
|
1228
|
-
DatatableComponent.prototype.onColumnSort = /**
|
|
1229
|
-
* The header triggered a column sort event.
|
|
1230
|
-
* @param {?} event
|
|
1231
|
-
* @return {?}
|
|
1232
|
-
*/
|
|
1233
|
-
function (event) {
|
|
1234
|
-
// clean selected rows
|
|
1235
|
-
if (this.selectAllRowsOnPage) {
|
|
1236
|
-
this.selected = [];
|
|
1237
|
-
this.select.emit({
|
|
1238
|
-
selected: this.selected
|
|
1239
|
-
});
|
|
1240
|
-
}
|
|
1241
|
-
this.sorts = event.sorts;
|
|
1242
|
-
// this could be optimized better since it will resort
|
|
1243
|
-
// the rows again on the 'push' detection...
|
|
1244
|
-
if (this.externalSorting === false) {
|
|
1245
|
-
// don't use normal setter so we don't resort
|
|
1246
|
-
this.sortInternalRows();
|
|
1247
|
-
}
|
|
1248
|
-
// auto group by parent on new update
|
|
1249
|
-
this._internalRows = groupRowsByParents(this._internalRows, optionalGetterForProp(this.treeFromRelation), optionalGetterForProp(this.treeToRelation));
|
|
1250
|
-
// Always go to first page when sorting to see the newly sorted data
|
|
1251
|
-
this.offset = 0;
|
|
1252
|
-
this.bodyComponent.updateOffsetY(this.offset);
|
|
1253
|
-
this.sort.emit(event);
|
|
1254
|
-
};
|
|
1255
|
-
/**
|
|
1256
|
-
* Toggle all row selection
|
|
1257
|
-
*/
|
|
1258
|
-
/**
|
|
1259
|
-
* Toggle all row selection
|
|
1260
|
-
* @param {?} event
|
|
1261
|
-
* @return {?}
|
|
1262
|
-
*/
|
|
1263
|
-
DatatableComponent.prototype.onHeaderSelect = /**
|
|
1264
|
-
* Toggle all row selection
|
|
1265
|
-
* @param {?} event
|
|
1266
|
-
* @return {?}
|
|
1267
|
-
*/
|
|
1268
|
-
function (event) {
|
|
1269
|
-
var _a, _b;
|
|
1270
|
-
if (this.selectAllRowsOnPage) {
|
|
1271
|
-
// before we splice, chk if we currently have all selected
|
|
1272
|
-
/** @type {?} */
|
|
1273
|
-
var first = this.bodyComponent.indexes.first;
|
|
1274
|
-
/** @type {?} */
|
|
1275
|
-
var last = this.bodyComponent.indexes.last;
|
|
1276
|
-
/** @type {?} */
|
|
1277
|
-
var allSelected = this.selected.length === last - first;
|
|
1278
|
-
// remove all existing either way
|
|
1279
|
-
this.selected = [];
|
|
1280
|
-
// do the opposite here
|
|
1281
|
-
if (!allSelected) {
|
|
1282
|
-
(_a = this.selected).push.apply(_a, tslib_1.__spread(this._internalRows.slice(first, last)));
|
|
1283
|
-
}
|
|
1284
|
-
}
|
|
1285
|
-
else {
|
|
1286
|
-
// before we splice, chk if we currently have all selected
|
|
1287
|
-
/** @type {?} */
|
|
1288
|
-
var allSelected = this.selected.length === this.rows.length;
|
|
1289
|
-
// remove all existing either way
|
|
1290
|
-
this.selected = [];
|
|
1291
|
-
// do the opposite here
|
|
1292
|
-
if (!allSelected) {
|
|
1293
|
-
(_b = this.selected).push.apply(_b, tslib_1.__spread(this.rows));
|
|
1294
|
-
}
|
|
1295
|
-
}
|
|
1296
|
-
this.select.emit({
|
|
1297
|
-
selected: this.selected
|
|
1298
|
-
});
|
|
1299
|
-
};
|
|
1300
|
-
/**
|
|
1301
|
-
* A row was selected from body
|
|
1302
|
-
*/
|
|
1303
|
-
/**
|
|
1304
|
-
* A row was selected from body
|
|
1305
|
-
* @param {?} event
|
|
1306
|
-
* @return {?}
|
|
1307
|
-
*/
|
|
1308
|
-
DatatableComponent.prototype.onBodySelect = /**
|
|
1309
|
-
* A row was selected from body
|
|
1310
|
-
* @param {?} event
|
|
1311
|
-
* @return {?}
|
|
1312
|
-
*/
|
|
1313
|
-
function (event) {
|
|
1314
|
-
this.select.emit(event);
|
|
1315
|
-
};
|
|
1316
|
-
/**
|
|
1317
|
-
* A row was expanded or collapsed for tree
|
|
1318
|
-
*/
|
|
1319
|
-
/**
|
|
1320
|
-
* A row was expanded or collapsed for tree
|
|
1321
|
-
* @param {?} event
|
|
1322
|
-
* @return {?}
|
|
1323
|
-
*/
|
|
1324
|
-
DatatableComponent.prototype.onTreeAction = /**
|
|
1325
|
-
* A row was expanded or collapsed for tree
|
|
1326
|
-
* @param {?} event
|
|
1327
|
-
* @return {?}
|
|
1328
|
-
*/
|
|
1329
|
-
function (event) {
|
|
1330
|
-
var _this = this;
|
|
1331
|
-
/** @type {?} */
|
|
1332
|
-
var row = event.row;
|
|
1333
|
-
// TODO: For duplicated items this will not work
|
|
1334
|
-
/** @type {?} */
|
|
1335
|
-
var rowIndex = this._rows.findIndex((/**
|
|
1336
|
-
* @param {?} r
|
|
1337
|
-
* @return {?}
|
|
1338
|
-
*/
|
|
1339
|
-
function (r) { return r[_this.treeToRelation] === event.row[_this.treeToRelation]; }));
|
|
1340
|
-
this.treeAction.emit({ row: row, rowIndex: rowIndex });
|
|
1341
|
-
};
|
|
1342
|
-
/**
|
|
1343
|
-
* @return {?}
|
|
1344
|
-
*/
|
|
1345
|
-
DatatableComponent.prototype.ngOnDestroy = /**
|
|
1346
|
-
* @return {?}
|
|
1347
|
-
*/
|
|
1348
|
-
function () {
|
|
1349
|
-
this._subscriptions.forEach((/**
|
|
1350
|
-
* @param {?} subscription
|
|
1351
|
-
* @return {?}
|
|
1352
|
-
*/
|
|
1353
|
-
function (subscription) { return subscription.unsubscribe(); }));
|
|
1354
|
-
};
|
|
1355
|
-
/**
|
|
1356
|
-
* listen for changes to input bindings of all DataTableColumnDirective and
|
|
1357
|
-
* trigger the columnTemplates.changes observable to emit
|
|
1358
|
-
*/
|
|
1359
|
-
/**
|
|
1360
|
-
* listen for changes to input bindings of all DataTableColumnDirective and
|
|
1361
|
-
* trigger the columnTemplates.changes observable to emit
|
|
1362
|
-
* @private
|
|
1363
|
-
* @return {?}
|
|
1364
|
-
*/
|
|
1365
|
-
DatatableComponent.prototype.listenForColumnInputChanges = /**
|
|
1366
|
-
* listen for changes to input bindings of all DataTableColumnDirective and
|
|
1367
|
-
* trigger the columnTemplates.changes observable to emit
|
|
1368
|
-
* @private
|
|
1369
|
-
* @return {?}
|
|
1370
|
-
*/
|
|
1371
|
-
function () {
|
|
1372
|
-
var _this = this;
|
|
1373
|
-
this._subscriptions.push(this.columnChangesService.columnInputChanges$.subscribe((/**
|
|
1374
|
-
* @return {?}
|
|
1375
|
-
*/
|
|
1376
|
-
function () {
|
|
1377
|
-
if (_this.columnTemplates) {
|
|
1378
|
-
_this.columnTemplates.notifyOnChanges();
|
|
1379
|
-
}
|
|
1380
|
-
})));
|
|
1381
|
-
};
|
|
1382
|
-
/**
|
|
1383
|
-
* @private
|
|
1384
|
-
* @return {?}
|
|
1385
|
-
*/
|
|
1386
|
-
DatatableComponent.prototype.sortInternalRows = /**
|
|
1387
|
-
* @private
|
|
1388
|
-
* @return {?}
|
|
1389
|
-
*/
|
|
1390
|
-
function () {
|
|
1391
|
-
this._internalRows = sortRows(this._internalRows, this._internalColumns, this.sorts);
|
|
1392
|
-
};
|
|
1393
|
-
DatatableComponent.decorators = [
|
|
1394
|
-
{ type: Component, args: [{
|
|
1395
|
-
selector: 'ngx-datatable',
|
|
1396
|
-
template: "<div visibilityObserver (visible)=\"recalculate()\">\n <datatable-header\n *ngIf=\"headerHeight\"\n [sorts]=\"sorts\"\n [sortType]=\"sortType\"\n [scrollbarH]=\"scrollbarH\"\n [innerWidth]=\"_innerWidth\"\n [offsetX]=\"_offsetX | async\"\n [dealsWithGroup]=\"groupedRows !== undefined\"\n [columns]=\"_internalColumns\"\n [headerHeight]=\"headerHeight\"\n [reorderable]=\"reorderable\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [sortAscendingIcon]=\"cssClasses.sortAscending\"\n [sortDescendingIcon]=\"cssClasses.sortDescending\"\n [allRowsSelected]=\"allRowsSelected\"\n [selectionType]=\"selectionType\"\n (sort)=\"onColumnSort($event)\"\n (resize)=\"onColumnResize($event)\"\n (reorder)=\"onColumnReorder($event)\"\n (select)=\"onHeaderSelect($event)\"\n (columnContextmenu)=\"onColumnContextmenu($event)\"\n >\n </datatable-header>\n <datatable-body\n [groupRowsBy]=\"groupRowsBy\"\n [groupedRows]=\"groupedRows\"\n [rows]=\"_internalRows\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [loadingIndicator]=\"loadingIndicator\"\n [externalPaging]=\"externalPaging\"\n [rowHeight]=\"rowHeight\"\n [rowCount]=\"rowCount\"\n [offset]=\"offset\"\n [trackByProp]=\"trackByProp\"\n [columns]=\"_internalColumns\"\n [pageSize]=\"pageSize\"\n [offsetX]=\"_offsetX | async\"\n [rowDetail]=\"rowDetail\"\n [groupHeader]=\"groupHeader\"\n [selected]=\"selected\"\n [innerWidth]=\"_innerWidth\"\n [bodyHeight]=\"bodyHeight\"\n [selectionType]=\"selectionType\"\n [emptyMessage]=\"messages.emptyMessage\"\n [rowIdentity]=\"rowIdentity\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"displayCheck\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"summaryHeight\"\n [summaryPosition]=\"summaryPosition\"\n (page)=\"onBodyPage($event)\"\n (activate)=\"activate.emit($event)\"\n (rowContextmenu)=\"onRowContextmenu($event)\"\n (select)=\"onBodySelect($event)\"\n (scroll)=\"onBodyScroll($event)\"\n (treeAction)=\"onTreeAction($event)\"\n >\n </datatable-body>\n <datatable-footer\n *ngIf=\"footerHeight\"\n [rowCount]=\"rowCount\"\n [pageSize]=\"pageSize\"\n [offset]=\"offset\"\n [footerHeight]=\"footerHeight\"\n [footerTemplate]=\"footer\"\n [totalMessage]=\"messages.totalMessage\"\n [pagerLeftArrowIcon]=\"cssClasses.pagerLeftArrow\"\n [pagerRightArrowIcon]=\"cssClasses.pagerRightArrow\"\n [pagerPreviousIcon]=\"cssClasses.pagerPrevious\"\n [selectedCount]=\"selected.length\"\n [selectedMessage]=\"!!selectionType && messages.selectedMessage\"\n [pagerNextIcon]=\"cssClasses.pagerNext\"\n (page)=\"onFooterPage($event)\"\n >\n </datatable-footer>\n</div>\n",
|
|
1397
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1398
|
-
encapsulation: ViewEncapsulation.None,
|
|
1399
|
-
host: {
|
|
1400
|
-
class: 'ngx-datatable'
|
|
1401
|
-
},
|
|
1402
|
-
styles: [".ngx-datatable{display:block;overflow:hidden;justify-content:center;position:relative;-webkit-transform:translate3d(0,0,0)}.ngx-datatable [hidden]{display:none!important}.ngx-datatable *,.ngx-datatable :after,.ngx-datatable :before{box-sizing:border-box}.ngx-datatable.scroll-vertical .datatable-body{overflow-y:auto}.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper{position:absolute}.ngx-datatable.scroll-horz .datatable-body{overflow-x:auto;-webkit-overflow-scrolling:touch}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner{white-space:nowrap}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ngx-datatable.fixed-row .datatable-scroll,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row{white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ngx-datatable .datatable-body-row,.ngx-datatable .datatable-header-inner,.ngx-datatable .datatable-row-center{display:flex;flex-direction:row;-o-flex-flow:row;flex-flow:row}.ngx-datatable .datatable-body-cell,.ngx-datatable .datatable-header-cell{overflow-x:hidden;vertical-align:top;display:inline-block;line-height:1.625}.ngx-datatable .datatable-body-cell:focus,.ngx-datatable .datatable-header-cell:focus{outline:0}.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{z-index:9}.ngx-datatable .datatable-row-center,.ngx-datatable .datatable-row-group,.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{position:relative}.ngx-datatable .datatable-header{display:block;overflow:hidden}.ngx-datatable .datatable-header .datatable-header-inner{align-items:stretch;-webkit-align-items:stretch}.ngx-datatable .datatable-header .datatable-header-cell{position:relative;display:inline-block}.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper{cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper{cursor:move}.ngx-datatable .datatable-header .datatable-header-cell .sort-btn{line-height:100%;vertical-align:middle;display:inline-block;cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable{display:inline-block;position:absolute;right:0;top:0;bottom:0;width:5px;padding:0 4px;visibility:hidden}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle{cursor:ew-resize}.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable{visibility:visible}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker{position:absolute;top:0;bottom:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft{right:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight{left:0}.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap{height:inherit}.ngx-datatable .datatable-body{position:relative;z-index:10;display:block}.ngx-datatable .datatable-body .datatable-scroll{display:inline-block}.ngx-datatable .datatable-body .datatable-row-detail{overflow-y:hidden}.ngx-datatable .datatable-body .datatable-row-wrapper{display:flex;flex-direction:column}.ngx-datatable .datatable-body .datatable-body-row{outline:0}.ngx-datatable .datatable-body .datatable-body-row>div{display:flex}.ngx-datatable .datatable-footer{display:block;width:100%;overflow:auto}.ngx-datatable .datatable-footer .datatable-footer-inner{display:flex;align-items:center;width:100%}.ngx-datatable .datatable-footer .selected-count .page-count{flex:1 1 40%}.ngx-datatable .datatable-footer .selected-count .datatable-pager{flex:1 1 60%}.ngx-datatable .datatable-footer .page-count{flex:1 1 20%}.ngx-datatable .datatable-footer .datatable-pager{flex:1 1 80%;text-align:right}.ngx-datatable .datatable-footer .datatable-pager .pager,.ngx-datatable .datatable-footer .datatable-pager .pager li{padding:0;margin:0;display:inline-block;list-style:none}.ngx-datatable .datatable-footer .datatable-pager .pager li,.ngx-datatable .datatable-footer .datatable-pager .pager li a{outline:0}.ngx-datatable .datatable-footer .datatable-pager .pager li a{cursor:pointer;display:inline-block}.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a{cursor:not-allowed}"]
|
|
1403
|
-
}] }
|
|
1404
|
-
];
|
|
1405
|
-
/** @nocollapse */
|
|
1406
|
-
DatatableComponent.ctorParameters = function () { return [
|
|
1407
|
-
{ type: ScrollbarHelper, decorators: [{ type: SkipSelf }] },
|
|
1408
|
-
{ type: DimensionsHelper, decorators: [{ type: SkipSelf }] },
|
|
1409
|
-
{ type: ChangeDetectorRef },
|
|
1410
|
-
{ type: ElementRef },
|
|
1411
|
-
{ type: KeyValueDiffers },
|
|
1412
|
-
{ type: ColumnChangesService },
|
|
1413
|
-
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: ['configuration',] }] }
|
|
1414
|
-
]; };
|
|
1415
|
-
DatatableComponent.propDecorators = {
|
|
1416
|
-
targetMarkerTemplate: [{ type: Input }],
|
|
1417
|
-
rows: [{ type: Input }],
|
|
1418
|
-
groupRowsBy: [{ type: Input }],
|
|
1419
|
-
groupedRows: [{ type: Input }],
|
|
1420
|
-
columns: [{ type: Input }],
|
|
1421
|
-
selected: [{ type: Input }],
|
|
1422
|
-
scrollbarV: [{ type: Input }],
|
|
1423
|
-
scrollbarH: [{ type: Input }],
|
|
1424
|
-
rowHeight: [{ type: Input }],
|
|
1425
|
-
columnMode: [{ type: Input }],
|
|
1426
|
-
headerHeight: [{ type: Input }],
|
|
1427
|
-
footerHeight: [{ type: Input }],
|
|
1428
|
-
externalPaging: [{ type: Input }],
|
|
1429
|
-
externalSorting: [{ type: Input }],
|
|
1430
|
-
limit: [{ type: Input }],
|
|
1431
|
-
count: [{ type: Input }],
|
|
1432
|
-
offset: [{ type: Input }],
|
|
1433
|
-
loadingIndicator: [{ type: Input }],
|
|
1434
|
-
selectionType: [{ type: Input }],
|
|
1435
|
-
reorderable: [{ type: Input }],
|
|
1436
|
-
swapColumns: [{ type: Input }],
|
|
1437
|
-
sortType: [{ type: Input }],
|
|
1438
|
-
sorts: [{ type: Input }],
|
|
1439
|
-
cssClasses: [{ type: Input }],
|
|
1440
|
-
messages: [{ type: Input }],
|
|
1441
|
-
rowClass: [{ type: Input }],
|
|
1442
|
-
selectCheck: [{ type: Input }],
|
|
1443
|
-
displayCheck: [{ type: Input }],
|
|
1444
|
-
groupExpansionDefault: [{ type: Input }],
|
|
1445
|
-
trackByProp: [{ type: Input }],
|
|
1446
|
-
selectAllRowsOnPage: [{ type: Input }],
|
|
1447
|
-
virtualization: [{ type: Input }],
|
|
1448
|
-
treeFromRelation: [{ type: Input }],
|
|
1449
|
-
treeToRelation: [{ type: Input }],
|
|
1450
|
-
summaryRow: [{ type: Input }],
|
|
1451
|
-
summaryHeight: [{ type: Input }],
|
|
1452
|
-
summaryPosition: [{ type: Input }],
|
|
1453
|
-
scroll: [{ type: Output }],
|
|
1454
|
-
activate: [{ type: Output }],
|
|
1455
|
-
select: [{ type: Output }],
|
|
1456
|
-
sort: [{ type: Output }],
|
|
1457
|
-
page: [{ type: Output }],
|
|
1458
|
-
reorder: [{ type: Output }],
|
|
1459
|
-
resize: [{ type: Output }],
|
|
1460
|
-
tableContextmenu: [{ type: Output }],
|
|
1461
|
-
treeAction: [{ type: Output }],
|
|
1462
|
-
isFixedHeader: [{ type: HostBinding, args: ['class.fixed-header',] }],
|
|
1463
|
-
isFixedRow: [{ type: HostBinding, args: ['class.fixed-row',] }],
|
|
1464
|
-
isVertScroll: [{ type: HostBinding, args: ['class.scroll-vertical',] }],
|
|
1465
|
-
isVirtualized: [{ type: HostBinding, args: ['class.virtualized',] }],
|
|
1466
|
-
isHorScroll: [{ type: HostBinding, args: ['class.scroll-horz',] }],
|
|
1467
|
-
isSelectable: [{ type: HostBinding, args: ['class.selectable',] }],
|
|
1468
|
-
isCheckboxSelection: [{ type: HostBinding, args: ['class.checkbox-selection',] }],
|
|
1469
|
-
isCellSelection: [{ type: HostBinding, args: ['class.cell-selection',] }],
|
|
1470
|
-
isSingleSelection: [{ type: HostBinding, args: ['class.single-selection',] }],
|
|
1471
|
-
isMultiSelection: [{ type: HostBinding, args: ['class.multi-selection',] }],
|
|
1472
|
-
isMultiClickSelection: [{ type: HostBinding, args: ['class.multi-click-selection',] }],
|
|
1473
|
-
columnTemplates: [{ type: ContentChildren, args: [DataTableColumnDirective,] }],
|
|
1474
|
-
rowDetail: [{ type: ContentChild, args: [DatatableRowDetailDirective, { static: false },] }],
|
|
1475
|
-
groupHeader: [{ type: ContentChild, args: [DatatableGroupHeaderDirective, { static: false },] }],
|
|
1476
|
-
footer: [{ type: ContentChild, args: [DatatableFooterDirective, { static: false },] }],
|
|
1477
|
-
bodyComponent: [{ type: ViewChild, args: [DataTableBodyComponent, { static: false },] }],
|
|
1478
|
-
headerComponent: [{ type: ViewChild, args: [DataTableHeaderComponent, { static: false },] }],
|
|
1479
|
-
rowIdentity: [{ type: Input }],
|
|
1480
|
-
onWindowResize: [{ type: HostListener, args: ['window:resize',] }]
|
|
1481
|
-
};
|
|
1482
|
-
tslib_1.__decorate([
|
|
1483
|
-
throttleable(5),
|
|
1484
|
-
tslib_1.__metadata("design:type", Function),
|
|
1485
|
-
tslib_1.__metadata("design:paramtypes", []),
|
|
1486
|
-
tslib_1.__metadata("design:returntype", void 0)
|
|
1487
|
-
], DatatableComponent.prototype, "onWindowResize", null);
|
|
1488
|
-
return DatatableComponent;
|
|
1489
|
-
}());
|
|
1490
|
-
export { DatatableComponent };
|
|
1491
|
-
if (false) {
|
|
1492
|
-
/**
|
|
1493
|
-
* Template for the target marker of drag target columns.
|
|
1494
|
-
* @type {?}
|
|
1495
|
-
*/
|
|
1496
|
-
DatatableComponent.prototype.targetMarkerTemplate;
|
|
1497
|
-
/**
|
|
1498
|
-
* This attribute allows the user to set a grouped array in the following format:
|
|
1499
|
-
* [
|
|
1500
|
-
* {groupid=1} [
|
|
1501
|
-
* {id=1 name="test1"},
|
|
1502
|
-
* {id=2 name="test2"},
|
|
1503
|
-
* {id=3 name="test3"}
|
|
1504
|
-
* ]},
|
|
1505
|
-
* {groupid=2>[
|
|
1506
|
-
* {id=4 name="test4"},
|
|
1507
|
-
* {id=5 name="test5"},
|
|
1508
|
-
* {id=6 name="test6"}
|
|
1509
|
-
* ]}
|
|
1510
|
-
* ]
|
|
1511
|
-
* @type {?}
|
|
1512
|
-
*/
|
|
1513
|
-
DatatableComponent.prototype.groupedRows;
|
|
1514
|
-
/**
|
|
1515
|
-
* List of row objects that should be
|
|
1516
|
-
* represented as selected in the grid.
|
|
1517
|
-
* Default value: `[]`
|
|
1518
|
-
* @type {?}
|
|
1519
|
-
*/
|
|
1520
|
-
DatatableComponent.prototype.selected;
|
|
1521
|
-
/**
|
|
1522
|
-
* Enable vertical scrollbars
|
|
1523
|
-
* @type {?}
|
|
1524
|
-
*/
|
|
1525
|
-
DatatableComponent.prototype.scrollbarV;
|
|
1526
|
-
/**
|
|
1527
|
-
* Enable horz scrollbars
|
|
1528
|
-
* @type {?}
|
|
1529
|
-
*/
|
|
1530
|
-
DatatableComponent.prototype.scrollbarH;
|
|
1531
|
-
/**
|
|
1532
|
-
* The row height; which is necessary
|
|
1533
|
-
* to calculate the height for the lazy rendering.
|
|
1534
|
-
* @type {?}
|
|
1535
|
-
*/
|
|
1536
|
-
DatatableComponent.prototype.rowHeight;
|
|
1537
|
-
/**
|
|
1538
|
-
* Type of column width distribution formula.
|
|
1539
|
-
* Example: flex, force, standard
|
|
1540
|
-
* @type {?}
|
|
1541
|
-
*/
|
|
1542
|
-
DatatableComponent.prototype.columnMode;
|
|
1543
|
-
/**
|
|
1544
|
-
* The minimum header height in pixels.
|
|
1545
|
-
* Pass a falsey for no header
|
|
1546
|
-
* @type {?}
|
|
1547
|
-
*/
|
|
1548
|
-
DatatableComponent.prototype.headerHeight;
|
|
1549
|
-
/**
|
|
1550
|
-
* The minimum footer height in pixels.
|
|
1551
|
-
* Pass falsey for no footer
|
|
1552
|
-
* @type {?}
|
|
1553
|
-
*/
|
|
1554
|
-
DatatableComponent.prototype.footerHeight;
|
|
1555
|
-
/**
|
|
1556
|
-
* If the table should use external paging
|
|
1557
|
-
* otherwise its assumed that all data is preloaded.
|
|
1558
|
-
* @type {?}
|
|
1559
|
-
*/
|
|
1560
|
-
DatatableComponent.prototype.externalPaging;
|
|
1561
|
-
/**
|
|
1562
|
-
* If the table should use external sorting or
|
|
1563
|
-
* the built-in basic sorting.
|
|
1564
|
-
* @type {?}
|
|
1565
|
-
*/
|
|
1566
|
-
DatatableComponent.prototype.externalSorting;
|
|
1567
|
-
/**
|
|
1568
|
-
* Show the linear loading bar.
|
|
1569
|
-
* Default value: `false`
|
|
1570
|
-
* @type {?}
|
|
1571
|
-
*/
|
|
1572
|
-
DatatableComponent.prototype.loadingIndicator;
|
|
1573
|
-
/**
|
|
1574
|
-
* Type of row selection. Options are:
|
|
1575
|
-
*
|
|
1576
|
-
* - `single`
|
|
1577
|
-
* - `multi`
|
|
1578
|
-
* - `checkbox`
|
|
1579
|
-
* - `multiClick`
|
|
1580
|
-
* - `cell`
|
|
1581
|
-
*
|
|
1582
|
-
* For no selection pass a `falsey`.
|
|
1583
|
-
* Default value: `undefined`
|
|
1584
|
-
* @type {?}
|
|
1585
|
-
*/
|
|
1586
|
-
DatatableComponent.prototype.selectionType;
|
|
1587
|
-
/**
|
|
1588
|
-
* Enable/Disable ability to re-order columns
|
|
1589
|
-
* by dragging them.
|
|
1590
|
-
* @type {?}
|
|
1591
|
-
*/
|
|
1592
|
-
DatatableComponent.prototype.reorderable;
|
|
1593
|
-
/**
|
|
1594
|
-
* Swap columns on re-order columns or
|
|
1595
|
-
* move them.
|
|
1596
|
-
* @type {?}
|
|
1597
|
-
*/
|
|
1598
|
-
DatatableComponent.prototype.swapColumns;
|
|
1599
|
-
/**
|
|
1600
|
-
* The type of sorting
|
|
1601
|
-
* @type {?}
|
|
1602
|
-
*/
|
|
1603
|
-
DatatableComponent.prototype.sortType;
|
|
1604
|
-
/**
|
|
1605
|
-
* Array of sorted columns by property and type.
|
|
1606
|
-
* Default value: `[]`
|
|
1607
|
-
* @type {?}
|
|
1608
|
-
*/
|
|
1609
|
-
DatatableComponent.prototype.sorts;
|
|
1610
|
-
/**
|
|
1611
|
-
* Css class overrides
|
|
1612
|
-
* @type {?}
|
|
1613
|
-
*/
|
|
1614
|
-
DatatableComponent.prototype.cssClasses;
|
|
1615
|
-
/**
|
|
1616
|
-
* Message overrides for localization
|
|
1617
|
-
*
|
|
1618
|
-
* emptyMessage [default] = 'No data to display'
|
|
1619
|
-
* totalMessage [default] = 'total'
|
|
1620
|
-
* selectedMessage [default] = 'selected'
|
|
1621
|
-
* @type {?}
|
|
1622
|
-
*/
|
|
1623
|
-
DatatableComponent.prototype.messages;
|
|
1624
|
-
/**
|
|
1625
|
-
* Row specific classes.
|
|
1626
|
-
* Similar implementation to ngClass.
|
|
1627
|
-
*
|
|
1628
|
-
* [rowClass]="'first second'"
|
|
1629
|
-
* [rowClass]="{ 'first': true, 'second': true, 'third': false }"
|
|
1630
|
-
* @type {?}
|
|
1631
|
-
*/
|
|
1632
|
-
DatatableComponent.prototype.rowClass;
|
|
1633
|
-
/**
|
|
1634
|
-
* A boolean/function you can use to check whether you want
|
|
1635
|
-
* to select a particular row based on a criteria. Example:
|
|
1636
|
-
*
|
|
1637
|
-
* (selection) => {
|
|
1638
|
-
* return selection !== 'Ethel Price';
|
|
1639
|
-
* }
|
|
1640
|
-
* @type {?}
|
|
1641
|
-
*/
|
|
1642
|
-
DatatableComponent.prototype.selectCheck;
|
|
1643
|
-
/**
|
|
1644
|
-
* A function you can use to check whether you want
|
|
1645
|
-
* to show the checkbox for a particular row based on a criteria. Example:
|
|
1646
|
-
*
|
|
1647
|
-
* (row, column, value) => {
|
|
1648
|
-
* return row.name !== 'Ethel Price';
|
|
1649
|
-
* }
|
|
1650
|
-
* @type {?}
|
|
1651
|
-
*/
|
|
1652
|
-
DatatableComponent.prototype.displayCheck;
|
|
1653
|
-
/**
|
|
1654
|
-
* A boolean you can use to set the detault behaviour of rows and groups
|
|
1655
|
-
* whether they will start expanded or not. If ommited the default is NOT expanded.
|
|
1656
|
-
*
|
|
1657
|
-
* @type {?}
|
|
1658
|
-
*/
|
|
1659
|
-
DatatableComponent.prototype.groupExpansionDefault;
|
|
1660
|
-
/**
|
|
1661
|
-
* Property to which you can use for custom tracking of rows.
|
|
1662
|
-
* Example: 'name'
|
|
1663
|
-
* @type {?}
|
|
1664
|
-
*/
|
|
1665
|
-
DatatableComponent.prototype.trackByProp;
|
|
1666
|
-
/**
|
|
1667
|
-
* Property to which you can use for determining select all
|
|
1668
|
-
* rows on current page or not.
|
|
1669
|
-
*
|
|
1670
|
-
* \@memberOf DatatableComponent
|
|
1671
|
-
* @type {?}
|
|
1672
|
-
*/
|
|
1673
|
-
DatatableComponent.prototype.selectAllRowsOnPage;
|
|
1674
|
-
/**
|
|
1675
|
-
* A flag for row virtualization on / off
|
|
1676
|
-
* @type {?}
|
|
1677
|
-
*/
|
|
1678
|
-
DatatableComponent.prototype.virtualization;
|
|
1679
|
-
/**
|
|
1680
|
-
* Tree from relation
|
|
1681
|
-
* @type {?}
|
|
1682
|
-
*/
|
|
1683
|
-
DatatableComponent.prototype.treeFromRelation;
|
|
1684
|
-
/**
|
|
1685
|
-
* Tree to relation
|
|
1686
|
-
* @type {?}
|
|
1687
|
-
*/
|
|
1688
|
-
DatatableComponent.prototype.treeToRelation;
|
|
1689
|
-
/**
|
|
1690
|
-
* A flag for switching summary row on / off
|
|
1691
|
-
* @type {?}
|
|
1692
|
-
*/
|
|
1693
|
-
DatatableComponent.prototype.summaryRow;
|
|
1694
|
-
/**
|
|
1695
|
-
* A height of summary row
|
|
1696
|
-
* @type {?}
|
|
1697
|
-
*/
|
|
1698
|
-
DatatableComponent.prototype.summaryHeight;
|
|
1699
|
-
/**
|
|
1700
|
-
* A property holds a summary row position: top/bottom
|
|
1701
|
-
* @type {?}
|
|
1702
|
-
*/
|
|
1703
|
-
DatatableComponent.prototype.summaryPosition;
|
|
1704
|
-
/**
|
|
1705
|
-
* Body was scrolled typically in a `scrollbarV:true` scenario.
|
|
1706
|
-
* @type {?}
|
|
1707
|
-
*/
|
|
1708
|
-
DatatableComponent.prototype.scroll;
|
|
1709
|
-
/**
|
|
1710
|
-
* A cell or row was focused via keyboard or mouse click.
|
|
1711
|
-
* @type {?}
|
|
1712
|
-
*/
|
|
1713
|
-
DatatableComponent.prototype.activate;
|
|
1714
|
-
/**
|
|
1715
|
-
* A cell or row was selected.
|
|
1716
|
-
* @type {?}
|
|
1717
|
-
*/
|
|
1718
|
-
DatatableComponent.prototype.select;
|
|
1719
|
-
/**
|
|
1720
|
-
* Column sort was invoked.
|
|
1721
|
-
* @type {?}
|
|
1722
|
-
*/
|
|
1723
|
-
DatatableComponent.prototype.sort;
|
|
1724
|
-
/**
|
|
1725
|
-
* The table was paged either triggered by the pager or the body scroll.
|
|
1726
|
-
* @type {?}
|
|
1727
|
-
*/
|
|
1728
|
-
DatatableComponent.prototype.page;
|
|
1729
|
-
/**
|
|
1730
|
-
* Columns were re-ordered.
|
|
1731
|
-
* @type {?}
|
|
1732
|
-
*/
|
|
1733
|
-
DatatableComponent.prototype.reorder;
|
|
1734
|
-
/**
|
|
1735
|
-
* Column was resized.
|
|
1736
|
-
* @type {?}
|
|
1737
|
-
*/
|
|
1738
|
-
DatatableComponent.prototype.resize;
|
|
1739
|
-
/**
|
|
1740
|
-
* The context menu was invoked on the table.
|
|
1741
|
-
* type indicates whether the header or the body was clicked.
|
|
1742
|
-
* content contains either the column or the row that was clicked.
|
|
1743
|
-
* @type {?}
|
|
1744
|
-
*/
|
|
1745
|
-
DatatableComponent.prototype.tableContextmenu;
|
|
1746
|
-
/**
|
|
1747
|
-
* A row was expanded ot collapsed for tree
|
|
1748
|
-
* @type {?}
|
|
1749
|
-
*/
|
|
1750
|
-
DatatableComponent.prototype.treeAction;
|
|
1751
|
-
/**
|
|
1752
|
-
* Row Detail templates gathered from the ContentChild
|
|
1753
|
-
* @type {?}
|
|
1754
|
-
*/
|
|
1755
|
-
DatatableComponent.prototype.rowDetail;
|
|
1756
|
-
/**
|
|
1757
|
-
* Group Header templates gathered from the ContentChild
|
|
1758
|
-
* @type {?}
|
|
1759
|
-
*/
|
|
1760
|
-
DatatableComponent.prototype.groupHeader;
|
|
1761
|
-
/**
|
|
1762
|
-
* Footer template gathered from the ContentChild
|
|
1763
|
-
* @type {?}
|
|
1764
|
-
*/
|
|
1765
|
-
DatatableComponent.prototype.footer;
|
|
1766
|
-
/**
|
|
1767
|
-
* Reference to the body component for manually
|
|
1768
|
-
* invoking functions on the body.
|
|
1769
|
-
* @type {?}
|
|
1770
|
-
*/
|
|
1771
|
-
DatatableComponent.prototype.bodyComponent;
|
|
1772
|
-
/**
|
|
1773
|
-
* Reference to the header component for manually
|
|
1774
|
-
* invoking functions on the header.
|
|
1775
|
-
*
|
|
1776
|
-
* \@memberOf DatatableComponent
|
|
1777
|
-
* @type {?}
|
|
1778
|
-
*/
|
|
1779
|
-
DatatableComponent.prototype.headerComponent;
|
|
1780
|
-
/** @type {?} */
|
|
1781
|
-
DatatableComponent.prototype.element;
|
|
1782
|
-
/** @type {?} */
|
|
1783
|
-
DatatableComponent.prototype._innerWidth;
|
|
1784
|
-
/** @type {?} */
|
|
1785
|
-
DatatableComponent.prototype.pageSize;
|
|
1786
|
-
/** @type {?} */
|
|
1787
|
-
DatatableComponent.prototype.bodyHeight;
|
|
1788
|
-
/** @type {?} */
|
|
1789
|
-
DatatableComponent.prototype.rowCount;
|
|
1790
|
-
/** @type {?} */
|
|
1791
|
-
DatatableComponent.prototype.rowDiffer;
|
|
1792
|
-
/** @type {?} */
|
|
1793
|
-
DatatableComponent.prototype._offsetX;
|
|
1794
|
-
/** @type {?} */
|
|
1795
|
-
DatatableComponent.prototype._limit;
|
|
1796
|
-
/** @type {?} */
|
|
1797
|
-
DatatableComponent.prototype._count;
|
|
1798
|
-
/** @type {?} */
|
|
1799
|
-
DatatableComponent.prototype._offset;
|
|
1800
|
-
/** @type {?} */
|
|
1801
|
-
DatatableComponent.prototype._rows;
|
|
1802
|
-
/** @type {?} */
|
|
1803
|
-
DatatableComponent.prototype._groupRowsBy;
|
|
1804
|
-
/** @type {?} */
|
|
1805
|
-
DatatableComponent.prototype._internalRows;
|
|
1806
|
-
/** @type {?} */
|
|
1807
|
-
DatatableComponent.prototype._internalColumns;
|
|
1808
|
-
/** @type {?} */
|
|
1809
|
-
DatatableComponent.prototype._columns;
|
|
1810
|
-
/** @type {?} */
|
|
1811
|
-
DatatableComponent.prototype._columnTemplates;
|
|
1812
|
-
/** @type {?} */
|
|
1813
|
-
DatatableComponent.prototype._subscriptions;
|
|
1814
|
-
/**
|
|
1815
|
-
* This will be used when displaying or selecting rows.
|
|
1816
|
-
* when tracking/comparing them, we'll use the value of this fn,
|
|
1817
|
-
*
|
|
1818
|
-
* (`fn(x) === fn(y)` instead of `x === y`)
|
|
1819
|
-
* @type {?}
|
|
1820
|
-
*/
|
|
1821
|
-
DatatableComponent.prototype.rowIdentity;
|
|
1822
|
-
/**
|
|
1823
|
-
* @type {?}
|
|
1824
|
-
* @private
|
|
1825
|
-
*/
|
|
1826
|
-
DatatableComponent.prototype.scrollbarHelper;
|
|
1827
|
-
/**
|
|
1828
|
-
* @type {?}
|
|
1829
|
-
* @private
|
|
1830
|
-
*/
|
|
1831
|
-
DatatableComponent.prototype.dimensionsHelper;
|
|
1832
|
-
/**
|
|
1833
|
-
* @type {?}
|
|
1834
|
-
* @private
|
|
1835
|
-
*/
|
|
1836
|
-
DatatableComponent.prototype.cd;
|
|
1837
|
-
/**
|
|
1838
|
-
* @type {?}
|
|
1839
|
-
* @private
|
|
1840
|
-
*/
|
|
1841
|
-
DatatableComponent.prototype.columnChangesService;
|
|
1842
|
-
/**
|
|
1843
|
-
* @type {?}
|
|
1844
|
-
* @private
|
|
1845
|
-
*/
|
|
1846
|
-
DatatableComponent.prototype.configuration;
|
|
1847
|
-
}
|
|
1848
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bzd2ltbGFuZS9uZ3gtZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUVaLGVBQWUsRUFFZixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixRQUFRLEVBRVIsUUFBUSxFQUNSLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JF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O0lBS3pDLG9DQUF5RDs7Ozs7SUFLekQsc0NBQTJEOzs7OztJQUszRCxvQ0FBeUQ7Ozs7O0lBS3pELGtDQUF1RDs7Ozs7SUFLdkQsa0NBQXVEOzs7OztJQUt2RCxxQ0FBMEQ7Ozs7O0lBSzFELG9DQUF5RDs7Ozs7OztJQU96RCw4Q0FBaUg7Ozs7O0lBS2pILHdDQUE2RDs7Ozs7SUFtSDdELHVDQUN1Qzs7Ozs7SUFLdkMseUNBQzJDOzs7OztJQUszQyxvQ0FDaUM7Ozs7OztJQU1qQywyQ0FDc0M7Ozs7Ozs7O0lBUXRDLDZDQUMwQzs7SUFpQjFDLHFDQUFxQjs7SUFDckIseUNBQW9COztJQUNwQixzQ0FBaUI7O0lBQ2pCLHdDQUFtQjs7SUFDbkIsc0NBQXFCOztJQUNyQix1Q0FBa0M7O0lBRWxDLHNDQUFrQzs7SUFDbEMsb0NBQTJCOztJQUMzQixvQ0FBbUI7O0lBQ25CLHFDQUFvQjs7SUFDcEIsbUNBQWE7O0lBQ2IsMENBQXFCOztJQUNyQiwyQ0FBcUI7O0lBQ3JCLDhDQUFnQzs7SUFDaEMsc0NBQXdCOztJQUN4Qiw4Q0FBc0Q7O0lBQ3RELDRDQUFvQzs7Ozs7Ozs7SUEyQnBDLHlDQUFzRDs7Ozs7SUF4QnBELDZDQUFvRDs7Ozs7SUFDcEQsOENBQXNEOzs7OztJQUN0RCxnQ0FBNkI7Ozs7O0lBRzdCLGtEQUFrRDs7Ozs7SUFDbEQsMkNBQStFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgSG9zdExpc3RlbmVyLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIE9uSW5pdCxcbiAgUXVlcnlMaXN0LFxuICBBZnRlclZpZXdJbml0LFxuICBIb3N0QmluZGluZyxcbiAgQ29udGVudENoaWxkLFxuICBEb0NoZWNrLFxuICBLZXlWYWx1ZURpZmZlcnMsXG4gIEtleVZhbHVlRGlmZmVyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBTa2lwU2VsZixcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEYXRhdGFibGVHcm91cEhlYWRlckRpcmVjdGl2ZSB9IGZyb20gJy4vYm9keS9ib2R5LWdyb3VwLWhlYWRlci5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU5neERhdGF0YWJsZUNvbmZpZyB9IGZyb20gJy4uL25neC1kYXRhdGFibGUubW9kdWxlJztcbmltcG9ydCB7IGdyb3VwUm93c0J5UGFyZW50cywgb3B0aW9uYWxHZXR0ZXJGb3JQcm9wIH0gZnJvbSAnLi4vdXRpbHMvdHJlZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzL3RhYmxlLWNvbHVtbi50eXBlJztcbmltcG9ydCB7IHNldENvbHVtbkRlZmF1bHRzLCB0cmFuc2xhdGVUZW1wbGF0ZXMgfSBmcm9tICcuLi91dGlscy9jb2x1bW4taGVscGVyJztcbmltcG9ydCB7IENvbHVtbk1vZGUgfSBmcm9tICcuLi90eXBlcy9jb2x1bW4tbW9kZS50eXBlJztcbmltcG9ydCB7IFNlbGVjdGlvblR5cGUgfSBmcm9tICcuLi90eXBlcy9zZWxlY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gJy4uL3R5cGVzL3NvcnQudHlwZSc7XG5pbXBvcnQgeyBDb250ZXh0bWVudVR5cGUgfSBmcm9tICcuLi90eXBlcy9jb250ZXh0bWVudS50eXBlJztcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSB9IGZyb20gJy4vcm93LWRldGFpbC9yb3ctZGV0YWlsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhdGFibGVGb290ZXJEaXJlY3RpdmUgfSBmcm9tICcuL2Zvb3Rlci9mb290ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZUJvZHlDb21wb25lbnQgfSBmcm9tICcuL2JvZHkvYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVRhYmxlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY3JvbGxiYXJIZWxwZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY3JvbGxiYXItaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sdW1uQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2x1bW4tY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IERpbWVuc2lvbnNIZWxwZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9kaW1lbnNpb25zLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IHRocm90dGxlYWJsZSB9IGZyb20gJy4uL3V0aWxzL3Rocm90dGxlJztcbmltcG9ydCB7IGZvcmNlRmlsbENvbHVtbldpZHRocywgYWRqdXN0Q29sdW1uV2lkdGhzIH0gZnJvbSAnLi4vdXRpbHMvbWF0aCc7XG5pbXBvcnQgeyBzb3J0Um93cyB9IGZyb20gJy4uL3V0aWxzL3NvcnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGF0YXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnbmd4LWRhdGF0YWJsZSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2ssIEFmdGVyVmlld0luaXQge1xuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIHRoZSB0YXJnZXQgbWFya2VyIG9mIGRyYWcgdGFyZ2V0IGNvbHVtbnMuXG4gICAqL1xuICBASW5wdXQoKSB0YXJnZXRNYXJrZXJUZW1wbGF0ZTogYW55O1xuXG4gIC8qKlxuICAgKiBSb3dzIHRoYXQgYXJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcm93cyh2YWw6IGFueSkge1xuICAgIHRoaXMuX3Jvd3MgPSB2YWw7XG5cbiAgICBpZiAodmFsKSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbFJvd3MgPSBbLi4udmFsXTtcbiAgICB9XG5cbiAgICAvLyBhdXRvIHNvcnQgb24gbmV3IHVwZGF0ZXNcbiAgICBpZiAoIXRoaXMuZXh0ZXJuYWxTb3J0aW5nKSB7XG4gICAgICB0aGlzLnNvcnRJbnRlcm5hbFJvd3MoKTtcbiAgICB9XG5cbiAgICAvLyBhdXRvIGdyb3VwIGJ5IHBhcmVudCBvbiBuZXcgdXBkYXRlXG4gICAgdGhpcy5faW50ZXJuYWxSb3dzID0gZ3JvdXBSb3dzQnlQYXJlbnRzKFxuICAgICAgdGhpcy5faW50ZXJuYWxSb3dzLFxuICAgICAgb3B0aW9uYWxHZXR0ZXJGb3JQcm9wKHRoaXMudHJlZUZyb21SZWxhdGlvbiksXG4gICAgICBvcHRpb25hbEdldHRlckZvclByb3AodGhpcy50cmVlVG9SZWxhdGlvbilcbiAgICApO1xuXG4gICAgLy8gcmVjYWxjdWxhdGUgc2l6ZXMvZXRjXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xuXG4gICAgaWYgKHRoaXMuX3Jvd3MgJiYgdGhpcy5fZ3JvdXBSb3dzQnkpIHtcbiAgICAgIC8vIElmIGEgY29sdW1uIGhhcyBiZWVuIHNwZWNpZmllZCBpbiBfZ3JvdXBSb3dzQnkgY3JlYXRlZCBhIG5ldyBhcnJheSB3aXRoIHRoZSBkYXRhIGdyb3VwZWQgYnkgdGhhdCByb3dcbiAgICAgIHRoaXMuZ3JvdXBlZFJvd3MgPSB0aGlzLmdyb3VwQXJyYXlCeSh0aGlzLl9yb3dzLCB0aGlzLl9ncm91cFJvd3NCeSk7XG4gICAgfVxuXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByb3dzLlxuICAgKi9cbiAgZ2V0IHJvd3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGF0dHJpYnV0ZSBhbGxvd3MgdGhlIHVzZXIgdG8gc2V0IHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gdG8gZ3JvdXAgdGhlIGRhdGEgd2l0aFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGdyb3VwUm93c0J5KHZhbDogc3RyaW5nKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5fZ3JvdXBSb3dzQnkgPSB2YWw7XG4gICAgICBpZiAodGhpcy5fcm93cyAmJiB0aGlzLl9ncm91cFJvd3NCeSkge1xuICAgICAgICAvLyBjcmV0ZXMgYSBuZXcgYXJyYXkgd2l0aCB0aGUgZGF0YSBncm91cGVkXG4gICAgICAgIHRoaXMuZ3JvdXBlZFJvd3MgPSB0aGlzLmdyb3VwQXJyYXlCeSh0aGlzLl9yb3dzLCB0aGlzLl9ncm91cFJvd3NCeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGdyb3VwUm93c0J5KCkge1xuICAgIHJldHVybiB0aGlzLl9ncm91cFJvd3NCeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGF0dHJpYnV0ZSBhbGxvd3MgdGhlIHVzZXIgdG8gc2V0IGEgZ3JvdXBlZCBhcnJheSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAgICogIFtcbiAgICogICAge2dyb3VwaWQ9MX0gW1xuICAgKiAgICAgIHtpZD0xIG5hbWU9XCJ0ZXN0MVwifSxcbiAgICogICAgICB7aWQ9MiBuYW1lPVwidGVzdDJcIn0sXG4gICAqICAgICAge2lkPTMgbmFtZT1cInRlc3QzXCJ9XG4gICAqICAgIF19LFxuICAgKiAgICB7Z3JvdXBpZD0yPltcbiAgICogICAgICB7aWQ9NCBuYW1lPVwidGVzdDRcIn0sXG4gICAqICAgICAge2lkPTUgbmFtZT1cInRlc3Q1XCJ9LFxuICAgKiAgICAgIHtpZD02IG5hbWU9XCJ0ZXN0NlwifVxuICAgKiAgICBdfVxuICAgKiAgXVxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBlZFJvd3M6IGFueVtdO1xuXG4gIC8qKlxuICAgKiBDb2x1bW5zIHRvIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5zKHZhbDogVGFibGVDb2x1bW5bXSkge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMuX2ludGVybmFsQ29sdW1ucyA9IFsuLi52YWxdO1xuICAgICAgc2V0Q29sdW1uRGVmYXVsdHModGhpcy5faW50ZXJuYWxDb2x1bW5zKTtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29sdW1ucyA9IHZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbHVtbnMuXG4gICAqL1xuICBnZXQgY29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJvdyBvYmplY3RzIHRoYXQgc2hvdWxkIGJlXG4gICAqIHJlcHJlc2VudGVkIGFzIHNlbGVjdGVkIGluIHRoZSBncmlkLlxuICAgKiBEZWZhdWx0IHZhbHVlOiBgW11gXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZDogYW55W10gPSBbXTtcblxuICAvKipcbiAgICogRW5hYmxlIHZlcnRpY2FsIHNjcm9sbGJhcnNcbiAgICovXG4gIEBJbnB1dCgpIHNjcm9sbGJhclY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRW5hYmxlIGhvcnogc2Nyb2xsYmFyc1xuICAgKi9cbiAgQElucHV0KCkgc2Nyb2xsYmFySDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm93IGhlaWdodDsgd2hpY2ggaXMgbmVjZXNzYXJ5XG4gICAqIHRvIGNhbGN1bGF0ZSB0aGUgaGVpZ2h0IGZvciB0aGUgbGF6eSByZW5kZXJpbmcuXG4gICAqL1xuICBASW5wdXQoKSByb3dIZWlnaHQ6IG51bWJlciB8ICdhdXRvJyB8ICgocm93PzogYW55KSA9PiBudW1iZXIpID0gMzA7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgY29sdW1uIHdpZHRoIGRpc3RyaWJ1dGlvbiBmb3JtdWxhLlxuICAgKiBFeGFtcGxlOiBmbGV4LCBmb3JjZSwgc3RhbmRhcmRcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbk1vZGU6IENvbHVtbk1vZGUgPSBDb2x1bW5Nb2RlLnN0YW5kYXJkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBoZWFkZXIgaGVpZ2h0IGluIHBpeGVscy5cbiAgICogUGFzcyBhIGZhbHNleSBmb3Igbm8gaGVhZGVyXG4gICAqL1xuICBASW5wdXQoKSBoZWFkZXJIZWlnaHQ6IGFueSA9IDMwO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBmb290ZXIgaGVpZ2h0IGluIHBpeGVscy5cbiAgICogUGFzcyBmYWxzZXkgZm9yIG5vIGZvb3RlclxuICAgKi9cbiAgQElucHV0KCkgZm9vdGVySGVpZ2h0OiBudW1iZXIgPSAwO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgdGFibGUgc2hvdWxkIHVzZSBleHRlcm5hbCBwYWdpbmdcbiAgICogb3RoZXJ3aXNlIGl0cyBhc3N1bWVkIHRoYXQgYWxsIGRhdGEgaXMgcHJlbG9hZGVkLlxuICAgKi9cbiAgQElucHV0KCkgZXh0ZXJuYWxQYWdpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSWYgdGhlIHRhYmxlIHNob3VsZCB1c2UgZXh0ZXJuYWwgc29ydGluZyBvclxuICAgKiB0aGUgYnVpbHQtaW4gYmFzaWMgc29ydGluZy5cbiAgICovXG4gIEBJbnB1dCgpIGV4dGVybmFsU29ydGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFnZSBzaXplIHRvIGJlIHNob3duLlxuICAgKiBEZWZhdWx0IHZhbHVlOiBgdW5kZWZpbmVkYFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGxpbWl0KHZhbDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGltaXQgPSB2YWw7XG5cbiAgICAvLyByZWNhbGN1bGF0ZSBzaXplcy9ldGNcbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGltaXQuXG4gICAqL1xuICBnZXQgbGltaXQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvdGFsIGNvdW50IG9mIGFsbCByb3dzLlxuICAgKiBEZWZhdWx0IHZhbHVlOiBgMGBcbiAgICovXG4gIEBJbnB1dCgpIHNldCBjb3VudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2NvdW50ID0gdmFsO1xuXG4gICAgLy8gcmVjYWxjdWxhdGUgc2l6ZXMvZXRjXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNvdW50LlxuICAgKi9cbiAgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IG9mZnNldCAoIHBhZ2UgLSAxICkgc2hvd24uXG4gICAqIERlZmF1bHQgdmFsdWU6IGAwYFxuICAgKi9cbiAgQElucHV0KCkgc2V0IG9mZnNldCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX29mZnNldCA9IHZhbDtcbiAgfVxuICBnZXQgb2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHRoaXMuX29mZnNldCwgTWF0aC5jZWlsKHRoaXMucm93Q291bnQgLyB0aGlzLnBhZ2VTaXplKSAtIDEpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBsaW5lYXIgbG9hZGluZyBiYXIuXG4gICAqIERlZmF1bHQgdmFsdWU6IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgpIGxvYWRpbmdJbmRpY2F0b3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVHlwZSBvZiByb3cgc2VsZWN0aW9uLiBPcHRpb25zIGFyZTpcbiAgICpcbiAgICogIC0gYHNpbmdsZWBcbiAgICogIC0gYG11bHRpYFxuICAgKiAgLSBgY2hlY2tib3hgXG4gICAqICAtIGBtdWx0aUNsaWNrYFxuICAgKiAgLSBgY2VsbGBcbiAgICpcbiAgICogRm9yIG5vIHNlbGVjdGlvbiBwYXNzIGEgYGZhbHNleWAuXG4gICAqIERlZmF1bHQgdmFsdWU6IGB1bmRlZmluZWRgXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiBTZWxlY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBFbmFibGUvRGlzYWJsZSBhYmlsaXR5IHRvIHJlLW9yZGVyIGNvbHVtbnNcbiAgICogYnkgZHJhZ2dpbmcgdGhlbS5cbiAgICovXG4gIEBJbnB1dCgpIHJlb3JkZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogU3dhcCBjb2x1bW5zIG9uIHJlLW9yZGVyIGNvbHVtbnMgb3JcbiAgICogbW92ZSB0aGVtLlxuICAgKi9cbiAgQElucHV0KCkgc3dhcENvbHVtbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzb3J0aW5nXG4gICAqL1xuICBASW5wdXQoKSBzb3J0VHlwZTogU29ydFR5cGUgPSBTb3J0VHlwZS5zaW5nbGU7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIHNvcnRlZCBjb2x1bW5zIGJ5IHByb3BlcnR5IGFuZCB0eXBlLlxuICAgKiBEZWZhdWx0IHZhbHVlOiBgW11gXG4gICAqL1xuICBASW5wdXQoKSBzb3J0czogYW55W10gPSBbXTtcblxuICAvKipcbiAgICogQ3NzIGNsYXNzIG92ZXJyaWRlc1xuICAgKi9cbiAgQElucHV0KCkgY3NzQ2xhc3NlczogYW55ID0ge1xuICAgIHNvcnRBc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi11cCcsXG4gICAgc29ydERlc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi1kb3duJyxcbiAgICBwYWdlckxlZnRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLWxlZnQnLFxuICAgIHBhZ2VyUmlnaHRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLXJpZ2h0JyxcbiAgICBwYWdlclByZXZpb3VzOiAnZGF0YXRhYmxlLWljb24tcHJldicsXG4gICAgcGFnZXJOZXh0OiAnZGF0YXRhYmxlLWljb24tc2tpcCdcbiAgfTtcblxuICAvKipcbiAgICogTWVzc2FnZSBvdmVycmlkZXMgZm9yIGxvY2FsaXphdGlvblxuICAgKlxuICAgKiBlbXB0eU1lc3NhZ2UgICAgIFtkZWZhdWx0XSA9ICdObyBkYXRhIHRvIGRpc3BsYXknXG4gICAqIHRvdGFsTWVzc2FnZSAgICAgW2RlZmF1bHRdID0gJ3RvdGFsJ1xuICAgKiBzZWxlY3RlZE1lc3NhZ2UgIFtkZWZhdWx0XSA9ICdzZWxlY3RlZCdcbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBhbnkgPSB7XG4gICAgLy8gTWVzc2FnZSB0byBzaG93IHdoZW4gYXJyYXkgaXMgcHJlc2VudGVkXG4gICAgLy8gYnV0IGNvbnRhaW5zIG5vIHZhbHVlc1xuICAgIGVtcHR5TWVzc2FnZTogJ05vIGRhdGEgdG8gZGlzcGxheScsXG5cbiAgICAvLyBGb290ZXIgdG90YWwgbWVzc2FnZVxuICAgIHRvdGFsTWVzc2FnZTogJ3RvdGFsJyxcblxuICAgIC8vIEZvb3RlciBzZWxlY3RlZCBtZXNzYWdlXG4gICAgc2VsZWN0ZWRNZXNzYWdlOiAnc2VsZWN0ZWQnXG4gIH07XG5cbiAgLyoqXG4gICAqIFJvdyBzcGVjaWZpYyBjbGFzc2VzLlxuICAgKiBTaW1pbGFyIGltcGxlbWVudGF0aW9uIHRvIG5nQ2xhc3MuXG4gICAqXG4gICAqICBbcm93Q2xhc3NdPVwiJ2ZpcnN0IHNlY29uZCdcIlxuICAgKiAgW3Jvd0NsYXNzXT1cInsgJ2ZpcnN0JzogdHJ1ZSwgJ3NlY29uZCc6IHRydWUsICd0aGlyZCc6IGZhbHNlIH1cIlxuICAgKi9cbiAgQElucHV0KCkgcm93Q2xhc3M6IGFueTtcblxuICAvKipcbiAgICogQSBib29sZWFuL2Z1bmN0aW9uIHlvdSBjYW4gdXNlIHRvIGNoZWNrIHdoZXRoZXIgeW91IHdhbnRcbiAgICogdG8gc2VsZWN0IGEgcGFydGljdWxhciByb3cgYmFzZWQgb24gYSBjcml0ZXJpYS4gRXhhbXBsZTpcbiAgICpcbiAgICogICAgKHNlbGVjdGlvbikgPT4ge1xuICAgKiAgICAgIHJldHVybiBzZWxlY3Rpb24gIT09ICdFdGhlbCBQcmljZSc7XG4gICAqICAgIH1cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdENoZWNrOiBhbnk7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24geW91IGNhbiB1c2UgdG8gY2hlY2sgd2hldGhlciB5b3Ugd2FudFxuICAgKiB0byBzaG93IHRoZSBjaGVja2JveCBmb3IgYSBwYXJ0aWN1bGFyIHJvdyBiYXNlZCBvbiBhIGNyaXRlcmlhLiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAocm93LCBjb2x1bW4sIHZhbHVlKSA9PiB7XG4gICAqICAgICAgcmV0dXJuIHJvdy5uYW1lICE9PSAnRXRoZWwgUHJpY2UnO1xuICAgKiAgICB9XG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5Q2hlY2s6IChyb3c6IGFueSwgY29sdW1uPzogYW55LCB2YWx1ZT86IGFueSkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuIHlvdSBjYW4gdXNlIHRvIHNldCB0aGUgZGV0YXVsdCBiZWhhdmlvdXIgb2Ygcm93cyBhbmQgZ3JvdXBzXG4gICAqIHdoZXRoZXIgdGhleSB3aWxsIHN0YXJ0IGV4cGFuZGVkIG9yIG5vdC4gSWYgb21taXRlZCB0aGUgZGVmYXVsdCBpcyBOT1QgZXhwYW5kZWQuXG4gICAqXG4gICAqL1xuICBASW5wdXQoKSBncm91cEV4cGFuc2lvbkRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJvcGVydHkgdG8gd2hpY2ggeW91IGNhbiB1c2UgZm9yIGN1c3RvbSB0cmFja2luZyBvZiByb3dzLlxuICAgKiBFeGFtcGxlOiAnbmFtZSdcbiAgICovXG4gIEBJbnB1dCgpIHRyYWNrQnlQcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3BlcnR5IHRvIHdoaWNoIHlvdSBjYW4gdXNlIGZvciBkZXRlcm1pbmluZyBzZWxlY3QgYWxsXG4gICAqIHJvd3Mgb24gY3VycmVudCBwYWdlIG9yIG5vdC5cbiAgICpcbiAgICogQG1lbWJlck9mIERhdGF0YWJsZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0QWxsUm93c09uUGFnZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGZsYWcgZm9yIHJvdyB2aXJ0dWFsaXphdGlvbiBvbiAvIG9mZlxuICAgKi9cbiAgQElucHV0KCkgdmlydHVhbGl6YXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUcmVlIGZyb20gcmVsYXRpb25cbiAgICovXG4gIEBJbnB1dCgpIHRyZWVGcm9tUmVsYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVHJlZSB0byByZWxhdGlvblxuICAgKi9cbiAgQElucHV0KCkgdHJlZVRvUmVsYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBmbGFnIGZvciBzd2l0Y2hpbmcgc3VtbWFyeSByb3cgb24gLyBvZmZcbiAgICovXG4gIEBJbnB1dCgpIHN1bW1hcnlSb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBoZWlnaHQgb2Ygc3VtbWFyeSByb3dcbiAgICovXG4gIEBJbnB1dCgpIHN1bW1hcnlIZWlnaHQ6IG51bWJlciA9IDMwO1xuXG4gIC8qKlxuICAgKiBBIHByb3BlcnR5IGhvbGRzIGEgc3VtbWFyeSByb3cgcG9zaXRpb246IHRvcC9ib3R0b21cbiAgICovXG4gIEBJbnB1dCgpIHN1bW1hcnlQb3NpdGlvbjogc3RyaW5nID0gJ3RvcCc7XG5cbiAgLyoqXG4gICAqIEJvZHkgd2FzIHNjcm9sbGVkIHR5cGljYWxseSBpbiBhIGBzY3JvbGxiYXJWOnRydWVgIHNjZW5hcmlvLlxuICAgKi9cbiAgQE91dHB1dCgpIHNjcm9sbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEEgY2VsbCBvciByb3cgd2FzIGZvY3VzZWQgdmlhIGtleWJvYXJkIG9yIG1vdXNlIGNsaWNrLlxuICAgKi9cbiAgQE91dHB1dCgpIGFjdGl2YXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQSBjZWxsIG9yIHJvdyB3YXMgc2VsZWN0ZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQ29sdW1uIHNvcnQgd2FzIGludm9rZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgc29ydDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB3YXMgcGFnZWQgZWl0aGVyIHRyaWdnZXJlZCBieSB0aGUgcGFnZXIgb3IgdGhlIGJvZHkgc2Nyb2xsLlxuICAgKi9cbiAgQE91dHB1dCgpIHBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBDb2x1bW5zIHdlcmUgcmUtb3JkZXJlZC5cbiAgICovXG4gIEBPdXRwdXQoKSByZW9yZGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQ29sdW1uIHdhcyByZXNpemVkLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlc2l6ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0IG1lbnUgd2FzIGludm9rZWQgb24gdGhlIHRhYmxlLlxuICAgKiB0eXBlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBoZWFkZXIgb3IgdGhlIGJvZHkgd2FzIGNsaWNrZWQuXG4gICAqIGNvbnRlbnQgY29udGFpbnMgZWl0aGVyIHRoZSBjb2x1bW4gb3IgdGhlIHJvdyB0aGF0IHdhcyBjbGlja2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIHRhYmxlQ29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQ7IHR5cGU6IENvbnRleHRtZW51VHlwZTsgY29udGVudDogYW55IH0+KGZhbHNlKTtcblxuICAvKipcbiAgICogQSByb3cgd2FzIGV4cGFuZGVkIG90IGNvbGxhcHNlZCBmb3IgdHJlZVxuICAgKi9cbiAgQE91dHB1dCgpIHRyZWVBY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3MgYXBwbGllZCBpZiB0aGUgaGVhZGVyIGhlaWdodCBpZiBmaXhlZCBoZWlnaHQuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpeGVkLWhlYWRlcicpXG4gIGdldCBpc0ZpeGVkSGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhlYWRlckhlaWdodDogbnVtYmVyIHwgc3RyaW5nID0gdGhpcy5oZWFkZXJIZWlnaHQ7XG4gICAgcmV0dXJuIHR5cGVvZiBoZWFkZXJIZWlnaHQgPT09ICdzdHJpbmcnID8gPHN0cmluZz5oZWFkZXJIZWlnaHQgIT09ICdhdXRvJyA6IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ1NTIGNsYXNzIGFwcGxpZWQgdG8gdGhlIHJvb3QgZWxlbWVudCBpZlxuICAgKiB0aGUgcm93IGhlaWdodHMgYXJlIGZpeGVkIGhlaWdodHMuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpeGVkLXJvdycpXG4gIGdldCBpc0ZpeGVkUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvd0hlaWdodCAhPT0gJ2F1dG8nO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyBhcHBsaWVkIHRvIHJvb3QgZWxlbWVudCBpZlxuICAgKiB2ZXJ0aWNhbCBzY3JvbGxpbmcgaXMgZW5hYmxlZC5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2Nyb2xsLXZlcnRpY2FsJylcbiAgZ2V0IGlzVmVydFNjcm9sbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zY3JvbGxiYXJWO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyBhcHBsaWVkIHRvIHJvb3QgZWxlbWVudCBpZlxuICAgKiB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy52aXJ0dWFsaXplZCcpXG4gIGdldCBpc1ZpcnR1YWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpcnR1YWxpemF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb290IGVsZW1lbnRcbiAgICogaWYgdGhlIGhvcnppb250YWwgc2Nyb2xsaW5nIGlzIGVuYWJsZWQuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNjcm9sbC1ob3J6JylcbiAgZ2V0IGlzSG9yU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNjcm9sbGJhckg7XG4gIH1cblxuICAvKipcbiAgICogQ1NTIGNsYXNzIGFwcGxpZWQgdG8gcm9vdCBlbGVtZW50IGlzIHNlbGVjdGFibGUuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdGFibGUnKVxuICBnZXQgaXNTZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblR5cGUgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3MgYXBwbGllZCB0byByb290IGlzIGNoZWNrYm94IHNlbGVjdGlvbi5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY2hlY2tib3gtc2VsZWN0aW9uJylcbiAgZ2V0IGlzQ2hlY2tib3hTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gU2VsZWN0aW9uVHlwZS5jaGVja2JveDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3MgYXBwbGllZCB0byByb290IGlmIGNlbGwgc2VsZWN0aW9uLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jZWxsLXNlbGVjdGlvbicpXG4gIGdldCBpc0NlbGxTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gU2VsZWN0aW9uVHlwZS5jZWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyBhcHBsaWVkIHRvIHJvb3QgaWYgc2luZ2xlIHNlbGVjdC5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2luZ2xlLXNlbGVjdGlvbicpXG4gIGdldCBpc1NpbmdsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25UeXBlID09PSBTZWxlY3Rpb25UeXBlLnNpbmdsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3MgYWRkZWQgdG8gcm9vdCBlbGVtZW50IGlmIG11bGl0IHNlbGVjdFxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tdWx0aS1zZWxlY3Rpb24nKVxuICBnZXQgaXNNdWx0aVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25UeXBlID09PSBTZWxlY3Rpb25UeXBlLm11bHRpO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyBhZGRlZCB0byByb290IGVsZW1lbnQgaWYgbXVsaXQgY2xpY2sgc2VsZWN0XG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm11bHRpLWNsaWNrLXNlbGVjdGlvbicpXG4gIGdldCBpc011bHRpQ2xpY2tTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gU2VsZWN0aW9uVHlwZS5tdWx0aUNsaWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbHVtbiB0ZW1wbGF0ZXMgZ2F0aGVyZWQgZnJvbSBgQ29udGVudENoaWxkcmVuYFxuICAgKiBpZiBkZXNjcmliZWQgaW4geW91ciBtYXJrdXAuXG4gICAqL1xuICBAQ29udGVudENoaWxkcmVuKERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSlcbiAgc2V0IGNvbHVtblRlbXBsYXRlcyh2YWw6IFF1ZXJ5TGlzdDxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+KSB7XG4gICAgdGhpcy5fY29sdW1uVGVtcGxhdGVzID0gdmFsO1xuICAgIHRoaXMudHJhbnNsYXRlQ29sdW1ucyh2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiB0ZW1wbGF0ZXMuXG4gICAqL1xuICBnZXQgY29sdW1uVGVtcGxhdGVzKCk6IFF1ZXJ5TGlzdDxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uVGVtcGxhdGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdyBEZXRhaWwgdGVtcGxhdGVzIGdhdGhlcmVkIGZyb20gdGhlIENvbnRlbnRDaGlsZFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICByb3dEZXRhaWw6IERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZTtcblxuICAvKipcbiAgICogR3JvdXAgSGVhZGVyIHRlbXBsYXRlcyBnYXRoZXJlZCBmcm9tIHRoZSBDb250ZW50Q2hpbGRcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlR3JvdXBIZWFkZXJEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBncm91cEhlYWRlcjogRGF0YXRhYmxlR3JvdXBIZWFkZXJEaXJlY3RpdmU7XG5cbiAgLyoqXG4gICAqIEZvb3RlciB0ZW1wbGF0ZSBnYXRoZXJlZCBmcm9tIHRoZSBDb250ZW50Q2hpbGRcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZm9vdGVyOiBEYXRhdGFibGVGb290ZXJEaXJlY3RpdmU7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgYm9keSBjb21wb25lbnQgZm9yIG1hbnVhbGx5XG4gICAqIGludm9raW5nIGZ1bmN0aW9ucyBvbiB0aGUgYm9keS5cbiAgICovXG4gIEBWaWV3Q2hpbGQoRGF0YVRhYmxlQm9keUNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGJvZHlDb21wb25lbnQ6IERhdGFUYWJsZUJvZHlDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgaGVhZGVyIGNvbXBvbmVudCBmb3IgbWFudWFsbHlcbiAgICogaW52b2tpbmcgZnVuY3Rpb25zIG9uIHRoZSBoZWFkZXIuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBEYXRhdGFibGVDb21wb25lbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoRGF0YVRhYmxlSGVhZGVyQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgaGVhZGVyQ29tcG9uZW50OiBEYXRhVGFibGVIZWFkZXJDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaWYgYWxsIHJvd3MgYXJlIHNlbGVjdGVkLlxuICAgKi9cbiAgZ2V0IGFsbFJvd3NTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgYWxsUm93c1NlbGVjdGVkID0gdGhpcy5yb3dzICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMucm93cy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RBbGxSb3dzT25QYWdlKSB7XG4gICAgICBjb25zdCBpbmRleGVzID0gdGhpcy5ib2R5Q29tcG9uZW50LmluZGV4ZXM7XG4gICAgICBjb25zdCByb3dzT25QYWdlID0gaW5kZXhlcy5sYXN0IC0gaW5kZXhlcy5maXJzdDtcbiAgICAgIGFsbFJvd3NTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSByb3dzT25QYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkICYmIHRoaXMucm93cyAmJiB0aGlzLnJvd3MubGVuZ3RoICE9PSAwICYmIGFsbFJvd3NTZWxlY3RlZDtcbiAgfVxuXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBfaW5uZXJXaWR0aDogbnVtYmVyO1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuICBib2R5SGVpZ2h0OiBudW1iZXI7XG4gIHJvd0NvdW50OiBudW1iZXIgPSAwO1xuICByb3dEaWZmZXI6IEtleVZhbHVlRGlmZmVyPHt9LCB7fT47XG5cbiAgX29mZnNldFggPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICBfbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgX2NvdW50OiBudW1iZXIgPSAwO1xuICBfb2Zmc2V0OiBudW1iZXIgPSAwO1xuICBfcm93czogYW55W107XG4gIF9ncm91cFJvd3NCeTogc3RyaW5nO1xuICBfaW50ZXJuYWxSb3dzOiBhbnlbXTtcbiAgX2ludGVybmFsQ29sdW1uczogVGFibGVDb2x1bW5bXTtcbiAgX2NvbHVtbnM6IFRhYmxlQ29sdW1uW107XG4gIF9jb2x1bW5UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+O1xuICBfc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAU2tpcFNlbGYoKSBwcml2YXRlIHNjcm9sbGJhckhlbHBlcjogU2Nyb2xsYmFySGVscGVyLFxuICAgIEBTa2lwU2VsZigpIHByaXZhdGUgZGltZW5zaW9uc0hlbHBlcjogRGltZW5zaW9uc0hlbHBlcixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcbiAgICBwcml2YXRlIGNvbHVtbkNoYW5nZXNTZXJ2aWNlOiBDb2x1bW5DaGFuZ2VzU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KCdjb25maWd1cmF0aW9uJykgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJTmd4RGF0YXRhYmxlQ29uZmlnXG4gICkge1xuICAgIC8vIGdldCByZWYgdG8gZWxtIGZvciBtZWFzdXJpbmdcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5yb3dEaWZmZXIgPSBkaWZmZXJzLmZpbmQoe30pLmNyZWF0ZSgpO1xuXG4gICAgLy8gYXBwbHkgZ2xvYmFsIHNldHRpbmdzIGZyb20gTW9kdWxlLmZvclJvb3RcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5tZXNzYWdlcykge1xuICAgICAgdGhpcy5tZXNzYWdlcyA9IHsgLi4udGhpcy5jb25maWd1cmF0aW9uLm1lc3NhZ2VzIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSB1c2VkIHdoZW4gZGlzcGxheWluZyBvciBzZWxlY3Rpbmcgcm93cy5cbiAgICogd2hlbiB0cmFja2luZy9jb21wYXJpbmcgdGhlbSwgd2UnbGwgdXNlIHRoZSB2YWx1ZSBvZiB0aGlzIGZuLFxuICAgKlxuICAgKiAoYGZuKHgpID09PSBmbih5KWAgaW5zdGVhZCBvZiBgeCA9PT0geWApXG4gICAqL1xuICBASW5wdXQoKSByb3dJZGVudGl0eTogKHg6IGFueSkgPT4gYW55ID0gKHg6IGFueSkgPT4geDtcblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZFxuICAgKiBwcm9wZXJ0aWVzIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIG5lZWQgdG8gY2FsbCB0aGlzIGltbWVkaWF0bHkgdG8gc2l6ZVxuICAgIC8vIGlmIHRoZSB0YWJsZSBpcyBoaWRkZW4gdGhlIHZpc2liaWxpdHlcbiAgICAvLyBsaXN0ZW5lciB3aWxsIGludm9rZSB0aGlzIGl0c2VsZiB1cG9uIHNob3dcbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQnc1xuICAgKiB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5leHRlcm5hbFNvcnRpbmcpIHtcbiAgICAgIHRoaXMuc29ydEludGVybmFsUm93cygpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgaGFzIHRvIGJlIGRvbmUgdG8gcHJldmVudCB0aGUgY2hhbmdlIGRldGVjdGlvblxuICAgIC8vIHRyZWUgZnJvbSBmcmVha2luZyBvdXQgYmVjYXVzZSB3ZSBhcmUgcmVhZGp1c3RpbmdcbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xuXG4gICAgICAvLyBlbWl0IHBhZ2UgZm9yIHZpcnR1YWwgc2VydmVyLXNpZGUga2lja29mZlxuICAgICAgaWYgKHRoaXMuZXh0ZXJuYWxQYWdpbmcgJiYgdGhpcy5zY3JvbGxiYXJWKSB7XG4gICAgICAgIHRoaXMucGFnZS5lbWl0KHtcbiAgICAgICAgICBjb3VudDogdGhpcy5jb3VudCxcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgICBsaW1pdDogdGhpcy5saW1pdCxcbiAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQnc1xuICAgKiBjb250ZW50IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxuICAgKi9cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuY29sdW1uVGVtcGxhdGVzLmNoYW5nZXMuc3Vic2NyaWJlKHYgPT4gdGhpcy50cmFuc2xhdGVDb2x1bW5zKHYpKTtcblxuICAgIHRoaXMubGlzdGVuRm9yQ29sdW1uSW5wdXRDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlcyB0aGUgdGVtcGxhdGVzIHRvIHRoZSBjb2x1bW4gb2JqZWN0c1xuICAgKi9cbiAgdHJhbnNsYXRlQ29sdW1ucyh2YWw6IGFueSkge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIGNvbnN0IGFyciA9IHZhbC50b0FycmF5KCk7XG4gICAgICBpZiAoYXJyLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9pbnRlcm5hbENvbHVtbnMgPSB0cmFuc2xhdGVUZW1wbGF0ZXMoYXJyKTtcbiAgICAgICAgc2V0Q29sdW1uRGVmYXVsdHModGhpcy5faW50ZXJuYWxDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5zb3J0SW50ZXJuYWxSb3dzKCk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtYXAgd2l0aCB0aGUgZGF0YSBncm91cGVkIGJ5IHRoZSB1c2VyIGNob2ljZSBvZiBncm91cGluZyBpbmRleFxuICAgKlxuICAgKiBAcGFyYW0gb3JpZ2luYWxBcnJheSB0aGUgb3JpZ2luYWwgYXJyYXkgcGFzc2VkIHZpYSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGdyb3VwQnlJbmRleCAgdGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdG8gZ3JvdXAgdGhlIGRhdGEgYnlcbiAgICovXG4gIGdyb3VwQXJyYXlCeShvcmlnaW5hbEFycmF5OiBhbnksIGdyb3VwQnk6IGFueSkge1xuICAgIC8vIGNyZWF0ZSBhIG1hcCB0byBob2xkIGdyb3VwcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgcmVzdWx0c1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcblxuICAgIG9yaWdpbmFsQXJyYXkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBpdGVtW2dyb3VwQnldO1xuICAgICAgaWYgKCFtYXAuaGFzKGtleSkpIHtcbiAgICAgICAgbWFwLnNldChrZXksIFtpdGVtXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXAuZ2V0KGtleSkucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9KTtcblxuICAgIGNvbnN0IGFkZEdyb3VwID0gKGtleTogYW55LCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICByZXR1cm4geyBrZXksIHZhbHVlIH07XG4gICAgfTtcblxuICAgIC8vIGNvbnZlcnQgbWFwIGJhY2sgdG8gYSBzaW1wbGUgYXJyYXkgb2Ygb2JqZWN0c1xuICAgIHJldHVybiBBcnJheS5mcm9tKG1hcCwgeCA9PiBhZGRHcm91cCh4WzBdLCB4WzFdKSk7XG4gIH1cblxuICAvKlxuICAgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCB3aGVuIEFuZ3VsYXIgZGlydHkgY2hlY2tzIGEgZGlyZWN0aXZlLlxuICAgKi9cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvd0RpZmZlci5kaWZmKHRoaXMucm93cykpIHtcbiAgICAgIGlmICghdGhpcy5leHRlcm5hbFNvcnRpbmcpIHtcbiAgICAgICAgdGhpcy5zb3J0SW50ZXJuYWxSb3dzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbnRlcm5hbFJvd3MgPSBbLi4udGhpcy5yb3dzXTtcbiAgICAgIH1cblxuICAgICAgLy8gYXV0byBncm91cCBieSBwYXJlbnQgb24gbmV3IHVwZGF0ZVxuICAgICAgdGhpcy5faW50ZXJuYWxSb3dzID0gZ3JvdXBSb3dzQnlQYXJlbnRzKFxuICAgICAgICB0aGlzLl9pbnRlcm5hbFJvd3MsXG4gICAgICAgIG9wdGlvbmFsR2V0dGVyRm9yUHJvcCh0aGlzLnRyZWVGcm9tUmVsYXRpb24pLFxuICAgICAgICBvcHRpb25hbEdldHRlckZvclByb3AodGhpcy50cmVlVG9SZWxhdGlvbilcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQYWdlcygpO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjJ3MgdGhlIHNpemVzIG9mIHRoZSBncmlkLlxuICAgKlxuICAgKiBVcGRhdGVkIGF1dG9tYXRpY2FsbHkgb24gY2hhbmdlcyB0bzpcbiAgICpcbiAgICogIC0gQ29sdW1uc1xuICAgKiAgLSBSb3dzXG4gICAqICAtIFBhZ2luZyByZWxhdGVkXG4gICAqXG4gICAqIEFsc28gY2FuIGJlIG1hbnVhbGx5IGludm9rZWQgb3IgdXBvbiB3aW5kb3cgcmVzaXplLlxuICAgKi9cbiAgcmVjYWxjdWxhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZURpbXMoKTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpbmRvdyByZXNpemUgaGFuZGxlciB0byB1cGRhdGUgc2l6ZXMuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgQHRocm90dGxlYWJsZSg1KVxuICBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjYWx1bGNhdGVzIHRoZSBjb2x1bW4gd2lkdGhzIGJhc2VkIG9uIGNvbHVtbiB3aWR0aFxuICAgKiBkaXN0cmlidXRpb24gbW9kZSBhbmQgc2Nyb2xsYmFyIG9mZnNldHMuXG4gICAqL1xuICByZWNhbGN1bGF0ZUNvbHVtbnMoXG4gICAgY29sdW1uczogYW55W10gPSB0aGlzLl9pbnRlcm5hbENvbHVtbnMsXG4gICAgZm9yY2VJZHg6IG51bWJlciA9IC0xLFxuICAgIGFsbG93QmxlZWQ6IGJvb2xlYW4gPSB0aGlzLnNjcm9sbGJhckhcbiAgKTogYW55W10gfCB1bmRlZmluZWQge1xuICAgIGlmICghY29sdW1ucykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCB3aWR0aCA9IHRoaXMuX2lubmVyV2lkdGg7XG4gICAgaWYgKHRoaXMuc2Nyb2xsYmFyVikge1xuICAgICAgd2lkdGggPSB3aWR0aCAtIHRoaXMuc2Nyb2xsYmFySGVscGVyLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbHVtbk1vZGUgPT09IENvbHVtbk1vZGUuZm9yY2UpIHtcbiAgICAgIGZvcmNlRmlsbENvbHVtbldpZHRocyhjb2x1bW5zLCB3aWR0aCwgZm9yY2VJZHgsIGFsbG93QmxlZWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW5Nb2RlID09PSBDb2x1bW5Nb2RlLmZsZXgpIHtcbiAgICAgIGFkanVzdENvbHVtbldpZHRocyhjb2x1bW5zLCB3aWR0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB0YWJsZSBzaXplLlxuICAgKiBJbnRlcm5hbGx5IGNhbGxzIHRoZSBwYWdlIHNpemUgYW5kIHJvdyBjb3VudCBjYWxjcyB0b28uXG4gICAqXG4gICAqL1xuICByZWNhbGN1bGF0ZURpbXMoKTogdm9pZCB7XG4gICAgY29uc3QgZGltcyA9IHRoaXMuZGltZW5zaW9uc0hlbHBlci5nZXREaW1lbnNpb25zKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5faW5uZXJXaWR0aCA9IE1hdGguZmxvb3IoZGltcy53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5zY3JvbGxiYXJWKSB7XG4gICAgICBsZXQgaGVpZ2h0ID0gZGltcy5oZWlnaHQ7XG4gICAgICBpZiAodGhpcy5oZWFkZXJIZWlnaHQpIGhlaWdodCA9IGhlaWdodCAtIHRoaXMuaGVhZGVySGVpZ2h0O1xuICAgICAgaWYgKHRoaXMuZm9vdGVySGVpZ2h0KSBoZWlnaHQgPSBoZWlnaHQgLSB0aGlzLmZvb3RlckhlaWdodDtcbiAgICAgIHRoaXMuYm9keUhlaWdodCA9IGhlaWdodDtcbiAgICB9XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlUGFnZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZXMgdGhlIHBhZ2VzIGFmdGVyIGEgdXBkYXRlLlxuICAgKi9cbiAgcmVjYWxjdWxhdGVQYWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5jYWxjUGFnZVNpemUoKTtcbiAgICB0aGlzLnJvd0NvdW50ID0gdGhpcy5jYWxjUm93Q291bnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb2R5IHRyaWdnZXJlZCBhIHBhZ2UgZXZlbnQuXG4gICAqL1xuICBvbkJvZHlQYWdlKHsgb2Zmc2V0IH06IGFueSk6IHZvaWQge1xuICAgIC8vIEF2b2lkIHBhZ2luYXRpb24gY2FtaW5nIGZyb20gYm9keSBldmVudHMgbGlrZSBzY3JvbGwgd2hlbiB0aGUgdGFibGVcbiAgICAvLyBoYXMgbm8gdmlydHVhbGl6YXRpb24gYW5kIHRoZSBleHRlcm5hbCBwYWdpbmcgaXMgZW5hYmxlLlxuICAgIC8vIFRoaXMgbWVhbnMsIGxldCdzIHRoZSBkZXZlbG9wZXIgaGFuZGxlIHBhZ2luYXRpb24gYnkgbXkgaGltKGhlcikgc2VsZlxuICAgIGlmICh0aGlzLmV4dGVybmFsUGFnaW5nICYmICF0aGlzLnZpcnR1YWxpemF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICB0aGlzLnBhZ2UuZW1pdCh7XG4gICAgICBjb3VudDogdGhpcy5jb3VudCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJvZHkgdHJpZ2dlcmVkIGEgc2Nyb2xsIGV2ZW50LlxuICAgKi9cbiAgb25Cb2R5U2Nyb2xsKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fb2Zmc2V0WC5uZXh0KGV2ZW50Lm9mZnNldFgpO1xuICAgIHRoaXMuc2Nyb2xsLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb290ZXIgdHJpZ2dlcmVkIGEgcGFnZSBldmVudC5cbiAgICovXG4gIG9uRm9vdGVyUGFnZShldmVudDogYW55KSB7XG4gICAgdGhpcy5vZmZzZXQgPSBldmVudC5wYWdlIC0gMTtcbiAgICB0aGlzLmJvZHlDb21wb25lbnQudXBkYXRlT2Zmc2V0WSh0aGlzLm9mZnNldCk7XG5cbiAgICB0aGlzLnBhZ2UuZW1pdCh7XG4gICAgICBjb3VudDogdGhpcy5jb3VudCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RBbGxSb3dzT25QYWdlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gICAgICB0aGlzLnNlbGVjdC5lbWl0KHtcbiAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZXMgdGhlIHNpemVzIG9mIHRoZSBwYWdlXG4gICAqL1xuICBjYWxjUGFnZVNpemUodmFsOiBhbnlbXSA9IHRoaXMucm93cyk6IG51bWJlciB7XG4gICAgLy8gS2VlcCB0aGUgcGFnZSBzaXplIGNvbnN0YW50IGV2ZW4gaWYgdGhlIHJvdyBoYXMgYmVlbiBleHBhbmRlZC5cbiAgICAvLyBUaGlzIGlzIGJlY2F1c2UgYW4gZXhwYW5kZWQgcm93IGlzIHN0aWxsIGNvbnNpZGVyZWQgdG8gYmUgYSBjaGlsZCBvZlxuICAgIC8vIHRoZSBvcmlnaW5hbCByb3cuICBIZW5jZSBjYWxjdWxhdGlvbiB3b3VsZCB1c2Ugcm93SGVpZ2h0IG9ubHkuXG4gICAgaWYgKHRoaXMuc2Nyb2xsYmFyViAmJiB0aGlzLnZpcnR1YWxpemF0aW9uKSB7XG4gICAgICBjb25zdCBzaXplID0gTWF0aC5jZWlsKHRoaXMuYm9keUhlaWdodCAvICh0aGlzLnJvd0hlaWdodCBhcyBudW1iZXIpKTtcbiAgICAgIHJldHVybiBNYXRoLm1heChzaXplLCAwKTtcbiAgICB9XG5cbiAgICAvLyBpZiBsaW1pdCBpcyBwYXNzZWQsIHdlIGFyZSBwYWdpbmdcbiAgICBpZiAodGhpcy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5saW1pdDtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UgdXNlIHJvdyBsZW5ndGhcbiAgICBpZiAodmFsKSB7XG4gICAgICByZXR1cm4gdmFsLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBvdGhlciBlbXB0eSA6KFxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHJvdyBjb3VudC5cbiAgICovXG4gIGNhbGNSb3dDb3VudCh2YWw6IGFueVtdID0gdGhpcy5yb3dzKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuZXh0ZXJuYWxQYWdpbmcpIHtcbiAgICAgIGlmICghdmFsKSByZXR1cm4gMDtcblxuICAgICAgaWYgKHRoaXMuZ3JvdXBlZFJvd3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBlZFJvd3MubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRyZWVGcm9tUmVsYXRpb24gIT0gbnVsbCAmJiB0aGlzLnRyZWVUb1JlbGF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsUm93cy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyIHRyaWdnZXJlZCBhIGNvbnRleHRtZW51IGV2ZW50LlxuICAgKi9cbiAgb25Db2x1bW5Db250ZXh0bWVudSh7IGV2ZW50LCBjb2x1bW4gfTogYW55KTogdm9pZCB7XG4gICAgdGhpcy50YWJsZUNvbnRleHRtZW51LmVtaXQoeyBldmVudCwgdHlwZTogQ29udGV4dG1lbnVUeXBlLmhlYWRlciwgY29udGVudDogY29sdW1uIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBib2R5IHRyaWdnZXJlZCBhIGNvbnRleHRtZW51IGV2ZW50LlxuICAgKi9cbiAgb25Sb3dDb250ZXh0bWVudSh7IGV2ZW50LCByb3cgfTogYW55KTogdm9pZCB7XG4gICAgdGhpcy50YWJsZUNvbnRleHRtZW51LmVtaXQoeyBldmVudCwgdHlwZTogQ29udGV4dG1lbnVUeXBlLmJvZHksIGNvbnRlbnQ6IHJvdyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyIHRyaWdnZXJlZCBhIGNvbHVtbiByZXNpemUgZXZlbnQuXG4gICAqL1xuICBvbkNvbHVtblJlc2l6ZSh7IGNvbHVtbiwgbmV3VmFsdWUgfTogYW55KTogdm9pZCB7XG4gICAgLyogU2FmYXJpL2lPUyAxMC4yIHdvcmthcm91bmQgKi9cbiAgICBpZiAoY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaWR4OiBudW1iZXI7XG4gICAgY29uc3QgY29scyA9IHRoaXMuX2ludGVybmFsQ29sdW1ucy5tYXAoKGMsIGkpID0+IHtcbiAgICAgIGMgPSB7IC4uLmMgfTtcblxuICAgICAgaWYgKGMuJCRpZCA9PT0gY29sdW1uLiQkaWQpIHtcbiAgICAgICAgaWR4ID0gaTtcbiAgICAgICAgYy53aWR0aCA9IG5ld1ZhbHVlO1xuXG4gICAgICAgIC8vIHNldCB0aGlzIHNvIHdlIGNhbiBmb3JjZSB0aGUgY29sdW1uXG4gICAgICAgIC8vIHdpZHRoIGRpc3RyaWJ1dGlvbiB0byBiZSB0byB0aGlzIHZhbHVlXG4gICAgICAgIGMuJCRvbGRXaWR0aCA9IG5ld1ZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9KTtcblxuICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5zKGNvbHMsIGlkeCk7XG4gICAgdGhpcy5faW50ZXJuYWxDb2x1bW5zID0gY29scztcblxuICAgIHRoaXMucmVzaXplLmVtaXQoe1xuICAgICAgY29sdW1uLFxuICAgICAgbmV3VmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyIHRyaWdnZXJlZCBhIGNvbHVtbiByZS1vcmRlciBldmVudC5cbiAgICovXG4gIG9uQ29sdW1uUmVvcmRlcih7IGNvbHVtbiwgbmV3VmFsdWUsIHByZXZWYWx1ZSB9OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBjb2xzID0gdGhpcy5faW50ZXJuYWxDb2x1bW5zLm1hcChjID0+IHtcbiAgICAgIHJldHVybiB7IC4uLmMgfTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN3YXBDb2x1bW5zKSB7XG4gICAgICBjb25zdCBwcmV2Q29sID0gY29sc1tuZXdWYWx1ZV07XG4gICAgICBjb2xzW25ld1ZhbHVlXSA9IGNvbHVtbjtcbiAgICAgIGNvbHNbcHJldlZhbHVlXSA9IHByZXZDb2w7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdWYWx1ZSA+IHByZXZWYWx1ZSkge1xuICAgICAgICBjb25zdCBtb3ZlZENvbCA9IGNvbHNbcHJldlZhbHVlXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHByZXZWYWx1ZTsgaSA8IG5ld1ZhbHVlOyBpKyspIHtcbiAgICAgICAgICBjb2xzW2ldID0gY29sc1tpICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgY29sc1tuZXdWYWx1ZV0gPSBtb3ZlZENvbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1vdmVkQ29sID0gY29sc1twcmV2VmFsdWVdO1xuICAgICAgICBmb3IgKGxldCBpID0gcHJldlZhbHVlOyBpID4gbmV3VmFsdWU7IGktLSkge1xuICAgICAgICAgIGNvbHNbaV0gPSBjb2xzW2kgLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBjb2xzW25ld1ZhbHVlXSA9IG1vdmVkQ29sO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludGVybmFsQ29sdW1ucyA9IGNvbHM7XG5cbiAgICB0aGlzLnJlb3JkZXIuZW1pdCh7XG4gICAgICBjb2x1bW4sXG4gICAgICBuZXdWYWx1ZSxcbiAgICAgIHByZXZWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFkZXIgdHJpZ2dlcmVkIGEgY29sdW1uIHNvcnQgZXZlbnQuXG4gICAqL1xuICBvbkNvbHVtblNvcnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8vIGNsZWFuIHNlbGVjdGVkIHJvd3NcbiAgICBpZiAodGhpcy5zZWxlY3RBbGxSb3dzT25QYWdlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gICAgICB0aGlzLnNlbGVjdC5lbWl0KHtcbiAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc29ydHMgPSBldmVudC5zb3J0cztcblxuICAgIC8vIHRoaXMgY291bGQgYmUgb3B0aW1pemVkIGJldHRlciBzaW5jZSBpdCB3aWxsIHJlc29ydFxuICAgIC8vIHRoZSByb3dzIGFnYWluIG9uIHRoZSAncHVzaCcgZGV0ZWN0aW9uLi4uXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxTb3J0aW5nID09PSBmYWxzZSkge1xuICAgICAgLy8gZG9uJ3QgdXNlIG5vcm1hbCBzZXR0ZXIgc28gd2UgZG9uJ3QgcmVzb3J0XG4gICAgICB0aGlzLnNvcnRJbnRlcm5hbFJvd3MoKTtcbiAgICB9XG5cbiAgICAvLyBhdXRvIGdyb3VwIGJ5IHBhcmVudCBvbiBuZXcgdXBkYXRlXG4gICAgdGhpcy5faW50ZXJuYWxSb3dzID0gZ3JvdXBSb3dzQnlQYXJlbnRzKFxuICAgICAgdGhpcy5faW50ZXJuYWxSb3dzLFxuICAgICAgb3B0aW9uYWxHZXR0ZXJGb3JQcm9wKHRoaXMudHJlZUZyb21SZWxhdGlvbiksXG4gICAgICBvcHRpb25hbEdldHRlckZvclByb3AodGhpcy50cmVlVG9SZWxhdGlvbilcbiAgICApO1xuXG4gICAgLy8gQWx3YXlzIGdvIHRvIGZpcnN0IHBhZ2Ugd2hlbiBzb3J0aW5nIHRvIHNlZSB0aGUgbmV3bHkgc29ydGVkIGRhdGFcbiAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgdGhpcy5ib2R5Q29tcG9uZW50LnVwZGF0ZU9mZnNldFkodGhpcy5vZmZzZXQpO1xuICAgIHRoaXMuc29ydC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgYWxsIHJvdyBzZWxlY3Rpb25cbiAgICovXG4gIG9uSGVhZGVyU2VsZWN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RBbGxSb3dzT25QYWdlKSB7XG4gICAgICAvLyBiZWZvcmUgd2Ugc3BsaWNlLCBjaGsgaWYgd2UgY3VycmVudGx5IGhhdmUgYWxsIHNlbGVjdGVkXG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuYm9keUNvbXBvbmVudC5pbmRleGVzLmZpcnN0O1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuYm9keUNvbXBvbmVudC5pbmRleGVzLmxhc3Q7XG4gICAgICBjb25zdCBhbGxTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSBsYXN0IC0gZmlyc3Q7XG5cbiAgICAgIC8vIHJlbW92ZSBhbGwgZXhpc3RpbmcgZWl0aGVyIHdheVxuICAgICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuXG4gICAgICAvLyBkbyB0aGUgb3Bwb3NpdGUgaGVyZVxuICAgICAgaWYgKCFhbGxTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2goLi4udGhpcy5faW50ZXJuYWxSb3dzLnNsaWNlKGZpcnN0LCBsYXN0KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGJlZm9yZSB3ZSBzcGxpY2UsIGNoayBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBhbGwgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMucm93cy5sZW5ndGg7XG4gICAgICAvLyByZW1vdmUgYWxsIGV4aXN0aW5nIGVpdGhlciB3YXlcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgICAgIC8vIGRvIHRoZSBvcHBvc2l0ZSBoZXJlXG4gICAgICBpZiAoIWFsbFNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaCguLi50aGlzLnJvd3MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0LmVtaXQoe1xuICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHJvdyB3YXMgc2VsZWN0ZWQgZnJvbSBib2R5XG4gICAqL1xuICBvbkJvZHlTZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgcm93IHdhcyBleHBhbmRlZCBvciBjb2xsYXBzZWQgZm9yIHRyZWVcbiAgICovXG4gIG9uVHJlZUFjdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3Qgcm93ID0gZXZlbnQucm93O1xuICAgIC8vIFRPRE86IEZvciBkdXBsaWNhdGVkIGl0ZW1zIHRoaXMgd2lsbCBub3Qgd29ya1xuICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5fcm93cy5maW5kSW5kZXgociA9PiByW3RoaXMudHJlZVRvUmVsYXRpb25dID09PSBldmVudC5yb3dbdGhpcy50cmVlVG9SZWxhdGlvbl0pO1xuICAgIHRoaXMudHJlZUFjdGlvbi5lbWl0KHsgcm93LCByb3dJbmRleCB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxpc3RlbiBmb3IgY2hhbmdlcyB0byBpbnB1dCBiaW5kaW5ncyBvZiBhbGwgRGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlIGFuZFxuICAgKiB0cmlnZ2VyIHRoZSBjb2x1bW5UZW1wbGF0ZXMuY2hhbmdlcyBvYnNlcnZhYmxlIHRvIGVtaXRcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuRm9yQ29sdW1uSW5wdXRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY29sdW1uQ2hhbmdlc1NlcnZpY2UuY29sdW1uSW5wdXRDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5UZW1wbGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtblRlbXBsYXRlcy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0SW50ZXJuYWxSb3dzKCk6IHZvaWQge1xuICAgIHRoaXMuX2ludGVybmFsUm93cyA9IHNvcnRSb3dzKHRoaXMuX2ludGVybmFsUm93cywgdGhpcy5faW50ZXJuYWxDb2x1bW5zLCB0aGlzLnNvcnRzKTtcbiAgfVxufVxuIl19
|