@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.
Files changed (152) hide show
  1. package/README.md +1 -1
  2. package/assets/icons-reference.html +2 -2
  3. package/assets/icons.css +39 -19
  4. package/bundles/swimlane-ngx-datatable.umd.js +1663 -5743
  5. package/bundles/swimlane-ngx-datatable.umd.js.map +1 -1
  6. package/bundles/swimlane-ngx-datatable.umd.min.js +1 -1
  7. package/bundles/swimlane-ngx-datatable.umd.min.js.map +1 -1
  8. package/esm2015/lib/components/body/body-cell.component.js +5 -235
  9. package/esm2015/lib/components/body/body-group-header-template.directive.js +1 -13
  10. package/esm2015/lib/components/body/body-group-header.directive.js +1 -28
  11. package/esm2015/lib/components/body/body-row-wrapper.component.js +4 -86
  12. package/esm2015/lib/components/body/body-row.component.js +2 -153
  13. package/esm2015/lib/components/body/body.component.js +71 -303
  14. package/esm2015/lib/components/body/progress-bar.component.js +2 -6
  15. package/esm2015/lib/components/body/scroller.component.js +6 -82
  16. package/esm2015/lib/components/body/selection.component.js +7 -112
  17. package/esm2015/lib/components/body/summary/summary-row.component.js +10 -100
  18. package/esm2015/lib/components/columns/column-cell.directive.js +1 -13
  19. package/esm2015/lib/components/columns/column-header.directive.js +1 -13
  20. package/esm2015/lib/components/columns/column.directive.js +1 -89
  21. package/esm2015/lib/components/columns/tree.directive.js +1 -13
  22. package/esm2015/lib/components/datatable.component.js +49 -570
  23. package/esm2015/lib/components/footer/footer-template.directive.js +1 -13
  24. package/esm2015/lib/components/footer/footer.component.js +2 -41
  25. package/esm2015/lib/components/footer/footer.directive.js +2 -29
  26. package/esm2015/lib/components/footer/pager.component.js +3 -77
  27. package/esm2015/lib/components/header/header-cell.component.js +11 -130
  28. package/esm2015/lib/components/header/header.component.js +20 -193
  29. package/esm2015/lib/components/row-detail/row-detail-template.directive.js +1 -13
  30. package/esm2015/lib/components/row-detail/row-detail.directive.js +1 -29
  31. package/esm2015/lib/directives/draggable.directive.js +4 -72
  32. package/esm2015/lib/directives/long-press.directive.js +8 -88
  33. package/esm2015/lib/directives/orderable.directive.js +11 -104
  34. package/esm2015/lib/directives/resizeable.directive.js +14 -81
  35. package/esm2015/lib/directives/visibility.directive.js +9 -64
  36. package/esm2015/lib/events.js +6 -13
  37. package/esm2015/lib/ngx-datatable.module.js +2 -16
  38. package/esm2015/lib/services/column-changes.service.js +1 -18
  39. package/esm2015/lib/services/dimensions-helper.service.js +1 -9
  40. package/esm2015/lib/services/scrollbar-helper.service.js +1 -25
  41. package/esm2015/lib/types/click.type.js +6 -11
  42. package/esm2015/lib/types/column-mode.type.js +7 -12
  43. package/esm2015/lib/types/contextmenu.type.js +6 -11
  44. package/esm2015/lib/types/selection.type.js +9 -14
  45. package/esm2015/lib/types/sort-direction.type.js +6 -11
  46. package/esm2015/lib/types/sort-prop-dir.type.js +2 -15
  47. package/esm2015/lib/types/sort.type.js +6 -11
  48. package/esm2015/lib/types/table-column.type.js +2 -217
  49. package/esm2015/lib/utils/camel-case.js +4 -26
  50. package/esm2015/lib/utils/column-helper.js +1 -18
  51. package/esm2015/lib/utils/column-prop-getters.js +6 -21
  52. package/esm2015/lib/utils/column.js +1 -28
  53. package/esm2015/lib/utils/elm-from-point.js +3 -15
  54. package/esm2015/lib/utils/id.js +1 -6
  55. package/esm2015/lib/utils/keys.js +10 -21
  56. package/esm2015/lib/utils/math.js +4 -51
  57. package/esm2015/lib/utils/prefixes.js +5 -24
  58. package/esm2015/lib/utils/row-height-cache.js +6 -46
  59. package/esm2015/lib/utils/selection.js +1 -25
  60. package/esm2015/lib/utils/sort.js +9 -50
  61. package/esm2015/lib/utils/throttle.js +7 -41
  62. package/esm2015/lib/utils/translate.js +1 -17
  63. package/esm2015/lib/utils/tree.js +7 -56
  64. package/esm2015/public-api.js +56 -60
  65. package/esm2015/swimlane-ngx-datatable.js +2 -6
  66. package/fesm2015/swimlane-ngx-datatable.js +308 -3513
  67. package/fesm2015/swimlane-ngx-datatable.js.map +1 -1
  68. package/index.css +1 -1
  69. package/index.scss +1 -1
  70. package/lib/components/body/body-cell.component.d.ts +23 -14
  71. package/lib/components/body/body-group-header.directive.d.ts +1 -1
  72. package/lib/components/body/body-row-wrapper.component.d.ts +4 -2
  73. package/lib/components/body/body-row.component.d.ts +8 -5
  74. package/lib/components/body/body.component.d.ts +17 -10
  75. package/lib/components/columns/column.directive.d.ts +3 -3
  76. package/lib/components/datatable.component.d.ts +45 -38
  77. package/lib/components/footer/footer.component.d.ts +2 -2
  78. package/lib/components/footer/footer.directive.d.ts +1 -1
  79. package/lib/components/footer/pager.component.d.ts +7 -4
  80. package/lib/components/header/header-cell.component.d.ts +14 -9
  81. package/lib/components/header/header.component.d.ts +14 -7
  82. package/lib/components/row-detail/row-detail.directive.d.ts +1 -1
  83. package/lib/directives/long-press.directive.d.ts +2 -2
  84. package/lib/directives/resizeable.directive.d.ts +1 -0
  85. package/lib/ngx-datatable.module.d.ts +1 -1
  86. package/lib/services/column-changes.service.d.ts +1 -1
  87. package/lib/utils/throttle.d.ts +1 -1
  88. package/package.json +10 -13
  89. package/swimlane-ngx-datatable.metadata.json +1 -1
  90. package/themes/material.css +53 -51
  91. package/themes/material.scss +4 -2
  92. package/esm5/lib/components/body/body-cell.component.js +0 -667
  93. package/esm5/lib/components/body/body-group-header-template.directive.js +0 -26
  94. package/esm5/lib/components/body/body-group-header.directive.js +0 -109
  95. package/esm5/lib/components/body/body-row-wrapper.component.js +0 -181
  96. package/esm5/lib/components/body/body-row.component.js +0 -409
  97. package/esm5/lib/components/body/body.component.js +0 -1148
  98. package/esm5/lib/components/body/progress-bar.component.js +0 -19
  99. package/esm5/lib/components/body/scroller.component.js +0 -172
  100. package/esm5/lib/components/body/selection.component.js +0 -289
  101. package/esm5/lib/components/body/summary/summary-row.component.js +0 -179
  102. package/esm5/lib/components/columns/column-cell.directive.js +0 -24
  103. package/esm5/lib/components/columns/column-header.directive.js +0 -24
  104. package/esm5/lib/components/columns/column.directive.js +0 -167
  105. package/esm5/lib/components/columns/tree.directive.js +0 -24
  106. package/esm5/lib/components/datatable.component.js +0 -1848
  107. package/esm5/lib/components/footer/footer-template.directive.js +0 -24
  108. package/esm5/lib/components/footer/footer.component.js +0 -88
  109. package/esm5/lib/components/footer/footer.directive.js +0 -57
  110. package/esm5/lib/components/footer/pager.component.js +0 -214
  111. package/esm5/lib/components/header/header-cell.component.js +0 -351
  112. package/esm5/lib/components/header/header.component.js +0 -502
  113. package/esm5/lib/components/row-detail/row-detail-template.directive.js +0 -26
  114. package/esm5/lib/components/row-detail/row-detail.directive.js +0 -111
  115. package/esm5/lib/directives/draggable.directive.js +0 -194
  116. package/esm5/lib/directives/long-press.directive.js +0 -220
  117. package/esm5/lib/directives/orderable.directive.js +0 -274
  118. package/esm5/lib/directives/resizeable.directive.js +0 -178
  119. package/esm5/lib/directives/visibility.directive.js +0 -129
  120. package/esm5/lib/events.js +0 -14
  121. package/esm5/lib/ngx-datatable.module.js +0 -123
  122. package/esm5/lib/services/column-changes.service.js +0 -47
  123. package/esm5/lib/services/dimensions-helper.service.js +0 -30
  124. package/esm5/lib/services/scrollbar-helper.service.js +0 -60
  125. package/esm5/lib/types/click.type.js +0 -11
  126. package/esm5/lib/types/column-mode.type.js +0 -12
  127. package/esm5/lib/types/contextmenu.type.js +0 -11
  128. package/esm5/lib/types/selection.type.js +0 -14
  129. package/esm5/lib/types/sort-direction.type.js +0 -11
  130. package/esm5/lib/types/sort-prop-dir.type.js +0 -15
  131. package/esm5/lib/types/sort.type.js +0 -11
  132. package/esm5/lib/types/table-column.type.js +0 -217
  133. package/esm5/lib/utils/camel-case.js +0 -50
  134. package/esm5/lib/utils/column-helper.js +0 -145
  135. package/esm5/lib/utils/column-prop-getters.js +0 -111
  136. package/esm5/lib/utils/column.js +0 -130
  137. package/esm5/lib/utils/elm-from-point.js +0 -50
  138. package/esm5/lib/utils/id.js +0 -13
  139. package/esm5/lib/utils/keys.js +0 -21
  140. package/esm5/lib/utils/math.js +0 -271
  141. package/esm5/lib/utils/prefixes.js +0 -59
  142. package/esm5/lib/utils/row-height-cache.js +0 -264
  143. package/esm5/lib/utils/selection.js +0 -64
  144. package/esm5/lib/utils/sort.js +0 -180
  145. package/esm5/lib/utils/throttle.js +0 -94
  146. package/esm5/lib/utils/translate.js +0 -41
  147. package/esm5/lib/utils/tree.js +0 -157
  148. package/esm5/public-api.js +0 -68
  149. package/esm5/swimlane-ngx-datatable.js +0 -9
  150. package/fesm5/swimlane-ngx-datatable.js +0 -9695
  151. package/fesm5/swimlane-ngx-datatable.js.map +0 -1
  152. package/lib/test/jasmine-matchers.d.ts +0 -12
@@ -1,667 +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, HostBinding, ViewChild, ChangeDetectorRef, Output, EventEmitter, HostListener, ElementRef, ViewContainerRef, ChangeDetectionStrategy } from '@angular/core';
7
- import { MouseEvent, KeyboardEvent } from '../../events';
8
- import { SortDirection } from '../../types/sort-direction.type';
9
- import { Keys } from '../../utils/keys';
10
- var DataTableBodyCellComponent = /** @class */ (function () {
11
- function DataTableBodyCellComponent(element, cd) {
12
- this.cd = cd;
13
- this.activate = new EventEmitter();
14
- this.treeAction = new EventEmitter();
15
- this.isFocused = false;
16
- this.onCheckboxChangeFn = this.onCheckboxChange.bind(this);
17
- this.activateFn = this.activate.emit.bind(this.activate);
18
- this.cellContext = {
19
- onCheckboxChangeFn: this.onCheckboxChangeFn,
20
- activateFn: this.activateFn,
21
- row: this.row,
22
- group: this.group,
23
- value: this.value,
24
- column: this.column,
25
- rowHeight: this.rowHeight,
26
- isSelected: this.isSelected,
27
- rowIndex: this.rowIndex,
28
- treeStatus: this.treeStatus,
29
- onTreeAction: this.onTreeAction.bind(this)
30
- };
31
- this._element = element.nativeElement;
32
- }
33
- Object.defineProperty(DataTableBodyCellComponent.prototype, "group", {
34
- get: /**
35
- * @return {?}
36
- */
37
- function () {
38
- return this._group;
39
- },
40
- set: /**
41
- * @param {?} group
42
- * @return {?}
43
- */
44
- function (group) {
45
- this._group = group;
46
- this.cellContext.group = group;
47
- this.checkValueUpdates();
48
- this.cd.markForCheck();
49
- },
50
- enumerable: true,
51
- configurable: true
52
- });
53
- Object.defineProperty(DataTableBodyCellComponent.prototype, "rowHeight", {
54
- get: /**
55
- * @return {?}
56
- */
57
- function () {
58
- return this._rowHeight;
59
- },
60
- set: /**
61
- * @param {?} val
62
- * @return {?}
63
- */
64
- function (val) {
65
- this._rowHeight = val;
66
- this.cellContext.rowHeight = val;
67
- this.checkValueUpdates();
68
- this.cd.markForCheck();
69
- },
70
- enumerable: true,
71
- configurable: true
72
- });
73
- Object.defineProperty(DataTableBodyCellComponent.prototype, "isSelected", {
74
- get: /**
75
- * @return {?}
76
- */
77
- function () {
78
- return this._isSelected;
79
- },
80
- set: /**
81
- * @param {?} val
82
- * @return {?}
83
- */
84
- function (val) {
85
- this._isSelected = val;
86
- this.cellContext.isSelected = val;
87
- this.cd.markForCheck();
88
- },
89
- enumerable: true,
90
- configurable: true
91
- });
92
- Object.defineProperty(DataTableBodyCellComponent.prototype, "expanded", {
93
- get: /**
94
- * @return {?}
95
- */
96
- function () {
97
- return this._expanded;
98
- },
99
- set: /**
100
- * @param {?} val
101
- * @return {?}
102
- */
103
- function (val) {
104
- this._expanded = val;
105
- this.cellContext.expanded = val;
106
- this.cd.markForCheck();
107
- },
108
- enumerable: true,
109
- configurable: true
110
- });
111
- Object.defineProperty(DataTableBodyCellComponent.prototype, "rowIndex", {
112
- get: /**
113
- * @return {?}
114
- */
115
- function () {
116
- return this._rowIndex;
117
- },
118
- set: /**
119
- * @param {?} val
120
- * @return {?}
121
- */
122
- function (val) {
123
- this._rowIndex = val;
124
- this.cellContext.rowIndex = val;
125
- this.checkValueUpdates();
126
- this.cd.markForCheck();
127
- },
128
- enumerable: true,
129
- configurable: true
130
- });
131
- Object.defineProperty(DataTableBodyCellComponent.prototype, "column", {
132
- get: /**
133
- * @return {?}
134
- */
135
- function () {
136
- return this._column;
137
- },
138
- set: /**
139
- * @param {?} column
140
- * @return {?}
141
- */
142
- function (column) {
143
- this._column = column;
144
- this.cellContext.column = column;
145
- this.checkValueUpdates();
146
- this.cd.markForCheck();
147
- },
148
- enumerable: true,
149
- configurable: true
150
- });
151
- Object.defineProperty(DataTableBodyCellComponent.prototype, "row", {
152
- get: /**
153
- * @return {?}
154
- */
155
- function () {
156
- return this._row;
157
- },
158
- set: /**
159
- * @param {?} row
160
- * @return {?}
161
- */
162
- function (row) {
163
- this._row = row;
164
- this.cellContext.row = row;
165
- this.checkValueUpdates();
166
- this.cd.markForCheck();
167
- },
168
- enumerable: true,
169
- configurable: true
170
- });
171
- Object.defineProperty(DataTableBodyCellComponent.prototype, "sorts", {
172
- get: /**
173
- * @return {?}
174
- */
175
- function () {
176
- return this._sorts;
177
- },
178
- set: /**
179
- * @param {?} val
180
- * @return {?}
181
- */
182
- function (val) {
183
- this._sorts = val;
184
- this.calcSortDir = this.calcSortDir(val);
185
- },
186
- enumerable: true,
187
- configurable: true
188
- });
189
- Object.defineProperty(DataTableBodyCellComponent.prototype, "treeStatus", {
190
- get: /**
191
- * @return {?}
192
- */
193
- function () {
194
- return this._treeStatus;
195
- },
196
- set: /**
197
- * @param {?} status
198
- * @return {?}
199
- */
200
- function (status) {
201
- if (status !== 'collapsed' && status !== 'expanded' && status !== 'loading' && status !== 'disabled') {
202
- this._treeStatus = 'collapsed';
203
- }
204
- else {
205
- this._treeStatus = status;
206
- }
207
- this.cellContext.treeStatus = this._treeStatus;
208
- this.checkValueUpdates();
209
- this.cd.markForCheck();
210
- },
211
- enumerable: true,
212
- configurable: true
213
- });
214
- Object.defineProperty(DataTableBodyCellComponent.prototype, "columnCssClasses", {
215
- get: /**
216
- * @return {?}
217
- */
218
- function () {
219
- var e_1, _a;
220
- /** @type {?} */
221
- var cls = 'datatable-body-cell';
222
- if (this.column.cellClass) {
223
- if (typeof this.column.cellClass === 'string') {
224
- cls += ' ' + this.column.cellClass;
225
- }
226
- else if (typeof this.column.cellClass === 'function') {
227
- /** @type {?} */
228
- var res = this.column.cellClass({
229
- row: this.row,
230
- group: this.group,
231
- column: this.column,
232
- value: this.value,
233
- rowHeight: this.rowHeight
234
- });
235
- if (typeof res === 'string') {
236
- cls += res;
237
- }
238
- else if (typeof res === 'object') {
239
- /** @type {?} */
240
- var keys = Object.keys(res);
241
- try {
242
- for (var keys_1 = tslib_1.__values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
243
- var k = keys_1_1.value;
244
- if (res[k] === true) {
245
- cls += " " + k;
246
- }
247
- }
248
- }
249
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
250
- finally {
251
- try {
252
- if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
253
- }
254
- finally { if (e_1) throw e_1.error; }
255
- }
256
- }
257
- }
258
- }
259
- if (!this.sortDir) {
260
- cls += ' sort-active';
261
- }
262
- if (this.isFocused) {
263
- cls += ' active';
264
- }
265
- if (this.sortDir === SortDirection.asc) {
266
- cls += ' sort-asc';
267
- }
268
- if (this.sortDir === SortDirection.desc) {
269
- cls += ' sort-desc';
270
- }
271
- return cls;
272
- },
273
- enumerable: true,
274
- configurable: true
275
- });
276
- Object.defineProperty(DataTableBodyCellComponent.prototype, "width", {
277
- get: /**
278
- * @return {?}
279
- */
280
- function () {
281
- return this.column.width;
282
- },
283
- enumerable: true,
284
- configurable: true
285
- });
286
- Object.defineProperty(DataTableBodyCellComponent.prototype, "minWidth", {
287
- get: /**
288
- * @return {?}
289
- */
290
- function () {
291
- return this.column.minWidth;
292
- },
293
- enumerable: true,
294
- configurable: true
295
- });
296
- Object.defineProperty(DataTableBodyCellComponent.prototype, "maxWidth", {
297
- get: /**
298
- * @return {?}
299
- */
300
- function () {
301
- return this.column.maxWidth;
302
- },
303
- enumerable: true,
304
- configurable: true
305
- });
306
- Object.defineProperty(DataTableBodyCellComponent.prototype, "height", {
307
- get: /**
308
- * @return {?}
309
- */
310
- function () {
311
- /** @type {?} */
312
- var height = this.rowHeight;
313
- if (isNaN(height)) {
314
- return height;
315
- }
316
- return height + 'px';
317
- },
318
- enumerable: true,
319
- configurable: true
320
- });
321
- /**
322
- * @return {?}
323
- */
324
- DataTableBodyCellComponent.prototype.ngDoCheck = /**
325
- * @return {?}
326
- */
327
- function () {
328
- this.checkValueUpdates();
329
- };
330
- /**
331
- * @return {?}
332
- */
333
- DataTableBodyCellComponent.prototype.ngOnDestroy = /**
334
- * @return {?}
335
- */
336
- function () {
337
- if (this.cellTemplate) {
338
- this.cellTemplate.clear();
339
- }
340
- };
341
- /**
342
- * @return {?}
343
- */
344
- DataTableBodyCellComponent.prototype.checkValueUpdates = /**
345
- * @return {?}
346
- */
347
- function () {
348
- /** @type {?} */
349
- var value = '';
350
- if (!this.row || !this.column) {
351
- value = '';
352
- }
353
- else {
354
- /** @type {?} */
355
- var val = this.column.$$valueGetter(this.row, this.column.prop);
356
- /** @type {?} */
357
- var userPipe = this.column.pipe;
358
- if (userPipe) {
359
- value = userPipe.transform(val);
360
- }
361
- else if (value !== undefined) {
362
- value = val;
363
- }
364
- }
365
- if (this.value !== value) {
366
- this.value = value;
367
- this.cellContext.value = value;
368
- this.sanitizedValue = value !== null && value !== undefined ? this.stripHtml(value) : value;
369
- this.cd.markForCheck();
370
- }
371
- };
372
- /**
373
- * @return {?}
374
- */
375
- DataTableBodyCellComponent.prototype.onFocus = /**
376
- * @return {?}
377
- */
378
- function () {
379
- this.isFocused = true;
380
- };
381
- /**
382
- * @return {?}
383
- */
384
- DataTableBodyCellComponent.prototype.onBlur = /**
385
- * @return {?}
386
- */
387
- function () {
388
- this.isFocused = false;
389
- };
390
- /**
391
- * @param {?} event
392
- * @return {?}
393
- */
394
- DataTableBodyCellComponent.prototype.onClick = /**
395
- * @param {?} event
396
- * @return {?}
397
- */
398
- function (event) {
399
- this.activate.emit({
400
- type: 'click',
401
- event: event,
402
- row: this.row,
403
- group: this.group,
404
- rowHeight: this.rowHeight,
405
- column: this.column,
406
- value: this.value,
407
- cellElement: this._element
408
- });
409
- };
410
- /**
411
- * @param {?} event
412
- * @return {?}
413
- */
414
- DataTableBodyCellComponent.prototype.onDblClick = /**
415
- * @param {?} event
416
- * @return {?}
417
- */
418
- function (event) {
419
- this.activate.emit({
420
- type: 'dblclick',
421
- event: event,
422
- row: this.row,
423
- group: this.group,
424
- rowHeight: this.rowHeight,
425
- column: this.column,
426
- value: this.value,
427
- cellElement: this._element
428
- });
429
- };
430
- /**
431
- * @param {?} event
432
- * @return {?}
433
- */
434
- DataTableBodyCellComponent.prototype.onKeyDown = /**
435
- * @param {?} event
436
- * @return {?}
437
- */
438
- function (event) {
439
- /** @type {?} */
440
- var keyCode = event.keyCode;
441
- /** @type {?} */
442
- var isTargetCell = event.target === this._element;
443
- /** @type {?} */
444
- var isAction = keyCode === Keys.return ||
445
- keyCode === Keys.down ||
446
- keyCode === Keys.up ||
447
- keyCode === Keys.left ||
448
- keyCode === Keys.right;
449
- if (isAction && isTargetCell) {
450
- event.preventDefault();
451
- event.stopPropagation();
452
- this.activate.emit({
453
- type: 'keydown',
454
- event: event,
455
- row: this.row,
456
- group: this.group,
457
- rowHeight: this.rowHeight,
458
- column: this.column,
459
- value: this.value,
460
- cellElement: this._element
461
- });
462
- }
463
- };
464
- /**
465
- * @param {?} event
466
- * @return {?}
467
- */
468
- DataTableBodyCellComponent.prototype.onCheckboxChange = /**
469
- * @param {?} event
470
- * @return {?}
471
- */
472
- function (event) {
473
- this.activate.emit({
474
- type: 'checkbox',
475
- event: event,
476
- row: this.row,
477
- group: this.group,
478
- rowHeight: this.rowHeight,
479
- column: this.column,
480
- value: this.value,
481
- cellElement: this._element,
482
- treeStatus: 'collapsed'
483
- });
484
- };
485
- /**
486
- * @param {?} sorts
487
- * @return {?}
488
- */
489
- DataTableBodyCellComponent.prototype.calcSortDir = /**
490
- * @param {?} sorts
491
- * @return {?}
492
- */
493
- function (sorts) {
494
- var _this = this;
495
- if (!sorts) {
496
- return;
497
- }
498
- /** @type {?} */
499
- var sort = sorts.find((/**
500
- * @param {?} s
501
- * @return {?}
502
- */
503
- function (s) {
504
- return s.prop === _this.column.prop;
505
- }));
506
- if (sort) {
507
- return sort.dir;
508
- }
509
- };
510
- /**
511
- * @param {?} html
512
- * @return {?}
513
- */
514
- DataTableBodyCellComponent.prototype.stripHtml = /**
515
- * @param {?} html
516
- * @return {?}
517
- */
518
- function (html) {
519
- if (!html.replace) {
520
- return html;
521
- }
522
- return html.replace(/<\/?[^>]+(>|$)/g, '');
523
- };
524
- /**
525
- * @return {?}
526
- */
527
- DataTableBodyCellComponent.prototype.onTreeAction = /**
528
- * @return {?}
529
- */
530
- function () {
531
- this.treeAction.emit(this.row);
532
- };
533
- /**
534
- * @param {?} column
535
- * @param {?} row
536
- * @return {?}
537
- */
538
- DataTableBodyCellComponent.prototype.calcLeftMargin = /**
539
- * @param {?} column
540
- * @param {?} row
541
- * @return {?}
542
- */
543
- function (column, row) {
544
- /** @type {?} */
545
- var levelIndent = column.treeLevelIndent != null ? column.treeLevelIndent : 50;
546
- return column.isTreeColumn ? row.level * levelIndent : 0;
547
- };
548
- DataTableBodyCellComponent.decorators = [
549
- { type: Component, args: [{
550
- selector: 'datatable-body-cell',
551
- changeDetection: ChangeDetectionStrategy.OnPush,
552
- template: "\n <div class=\"datatable-body-cell-label\" [style.margin-left.px]=\"calcLeftMargin(column, row)\">\n <label\n *ngIf=\"column.checkboxable && (!displayCheck || displayCheck(row, column, value))\"\n class=\"datatable-checkbox\"\n >\n <input type=\"checkbox\" [checked]=\"isSelected\" (click)=\"onCheckboxChange($event)\" />\n </label>\n <ng-container *ngIf=\"column.isTreeColumn\">\n <button\n *ngIf=\"!column.treeToggleTemplate\"\n class=\"datatable-tree-button\"\n [disabled]=\"treeStatus === 'disabled'\"\n (click)=\"onTreeAction()\"\n >\n <span>\n <i *ngIf=\"treeStatus === 'loading'\" class=\"icon datatable-icon-collapse\"></i>\n <i *ngIf=\"treeStatus === 'collapsed'\" class=\"icon datatable-icon-up\"></i>\n <i *ngIf=\"treeStatus === 'expanded' || treeStatus === 'disabled'\" class=\"icon datatable-icon-down\"></i>\n </span>\n </button>\n <ng-template\n *ngIf=\"column.treeToggleTemplate\"\n [ngTemplateOutlet]=\"column.treeToggleTemplate\"\n [ngTemplateOutletContext]=\"{ cellContext: cellContext }\"\n >\n </ng-template>\n </ng-container>\n\n <span *ngIf=\"!column.cellTemplate\" [title]=\"sanitizedValue\" [innerHTML]=\"value\"> </span>\n <ng-template\n #cellTemplate\n *ngIf=\"column.cellTemplate\"\n [ngTemplateOutlet]=\"column.cellTemplate\"\n [ngTemplateOutletContext]=\"cellContext\"\n >\n </ng-template>\n </div>\n "
553
- }] }
554
- ];
555
- /** @nocollapse */
556
- DataTableBodyCellComponent.ctorParameters = function () { return [
557
- { type: ElementRef },
558
- { type: ChangeDetectorRef }
559
- ]; };
560
- DataTableBodyCellComponent.propDecorators = {
561
- displayCheck: [{ type: Input }],
562
- group: [{ type: Input }],
563
- rowHeight: [{ type: Input }],
564
- isSelected: [{ type: Input }],
565
- expanded: [{ type: Input }],
566
- rowIndex: [{ type: Input }],
567
- column: [{ type: Input }],
568
- row: [{ type: Input }],
569
- sorts: [{ type: Input }],
570
- treeStatus: [{ type: Input }],
571
- activate: [{ type: Output }],
572
- treeAction: [{ type: Output }],
573
- cellTemplate: [{ type: ViewChild, args: ['cellTemplate', { read: ViewContainerRef, static: true },] }],
574
- columnCssClasses: [{ type: HostBinding, args: ['class',] }],
575
- width: [{ type: HostBinding, args: ['style.width.px',] }],
576
- minWidth: [{ type: HostBinding, args: ['style.minWidth.px',] }],
577
- maxWidth: [{ type: HostBinding, args: ['style.maxWidth.px',] }],
578
- height: [{ type: HostBinding, args: ['style.height',] }],
579
- onFocus: [{ type: HostListener, args: ['focus',] }],
580
- onBlur: [{ type: HostListener, args: ['blur',] }],
581
- onClick: [{ type: HostListener, args: ['click', ['$event'],] }],
582
- onDblClick: [{ type: HostListener, args: ['dblclick', ['$event'],] }],
583
- onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
584
- };
585
- return DataTableBodyCellComponent;
586
- }());
587
- export { DataTableBodyCellComponent };
588
- if (false) {
589
- /** @type {?} */
590
- DataTableBodyCellComponent.prototype.displayCheck;
591
- /** @type {?} */
592
- DataTableBodyCellComponent.prototype.activate;
593
- /** @type {?} */
594
- DataTableBodyCellComponent.prototype.treeAction;
595
- /** @type {?} */
596
- DataTableBodyCellComponent.prototype.cellTemplate;
597
- /** @type {?} */
598
- DataTableBodyCellComponent.prototype.sanitizedValue;
599
- /** @type {?} */
600
- DataTableBodyCellComponent.prototype.value;
601
- /** @type {?} */
602
- DataTableBodyCellComponent.prototype.sortDir;
603
- /** @type {?} */
604
- DataTableBodyCellComponent.prototype.isFocused;
605
- /** @type {?} */
606
- DataTableBodyCellComponent.prototype.onCheckboxChangeFn;
607
- /** @type {?} */
608
- DataTableBodyCellComponent.prototype.activateFn;
609
- /** @type {?} */
610
- DataTableBodyCellComponent.prototype.cellContext;
611
- /**
612
- * @type {?}
613
- * @private
614
- */
615
- DataTableBodyCellComponent.prototype._isSelected;
616
- /**
617
- * @type {?}
618
- * @private
619
- */
620
- DataTableBodyCellComponent.prototype._sorts;
621
- /**
622
- * @type {?}
623
- * @private
624
- */
625
- DataTableBodyCellComponent.prototype._column;
626
- /**
627
- * @type {?}
628
- * @private
629
- */
630
- DataTableBodyCellComponent.prototype._row;
631
- /**
632
- * @type {?}
633
- * @private
634
- */
635
- DataTableBodyCellComponent.prototype._group;
636
- /**
637
- * @type {?}
638
- * @private
639
- */
640
- DataTableBodyCellComponent.prototype._rowHeight;
641
- /**
642
- * @type {?}
643
- * @private
644
- */
645
- DataTableBodyCellComponent.prototype._rowIndex;
646
- /**
647
- * @type {?}
648
- * @private
649
- */
650
- DataTableBodyCellComponent.prototype._expanded;
651
- /**
652
- * @type {?}
653
- * @private
654
- */
655
- DataTableBodyCellComponent.prototype._element;
656
- /**
657
- * @type {?}
658
- * @private
659
- */
660
- DataTableBodyCellComponent.prototype._treeStatus;
661
- /**
662
- * @type {?}
663
- * @private
664
- */
665
- DataTableBodyCellComponent.prototype.cd;
666
- }
667
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bzd2ltbGFuZS9uZ3gtZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYm9keS9ib2R5LWNlbGwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBRUwsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osVUFBVSxFQUNWLGdCQUFnQixFQUdoQix1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUl4QztJQTJQRSxvQ0FBWSxPQUFtQixFQUFVLEVBQXFCO1FBQXJCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBMUdwRCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFakQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBMkU3RCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLHVCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsZUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEQsZ0JBQVcsR0FBUTtZQUNqQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixLQUFLLEVBQUUs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V0FBVyxTQUFDLE9BQU87d0JBMkNuQixXQUFXLFNBQUMsZ0JBQWdCOzJCQUs1QixXQUFXLFNBQUMsbUJBQW1COzJCQUsvQixXQUFXLFNBQUMsbUJBQW1CO3lCQUsvQixXQUFXLFNBQUMsY0FBYzswQkErRTFCLFlBQVksU0FBQyxPQUFPO3lCQUtwQixZQUFZLFNBQUMsTUFBTTswQkFLbkIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs2QkFjaEMsWUFBWSxTQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQzs0QkFjbkMsWUFBWSxTQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7SUF3RXJDLGlDQUFDO0NBQUEsQUEvWUQsSUErWUM7U0FwV1ksMEJBQTBCOzs7SUFDckMsa0RBQWdGOztJQXFHaEYsOENBQTJEOztJQUUzRCxnREFBNkQ7O0lBRTdELGtEQUMrQjs7SUFxRS9CLG9EQUFvQjs7SUFDcEIsMkNBQVc7O0lBQ1gsNkNBQXVCOztJQUN2QiwrQ0FBa0I7O0lBQ2xCLHdEQUFzRDs7SUFDdEQsZ0RBQW9EOztJQUVwRCxpREFZRTs7Ozs7SUFFRixpREFBNkI7Ozs7O0lBQzdCLDRDQUFzQjs7Ozs7SUFDdEIsNkNBQTZCOzs7OztJQUM3QiwwQ0FBa0I7Ozs7O0lBQ2xCLDRDQUFvQjs7Ozs7SUFDcEIsZ0RBQTJCOzs7OztJQUMzQiwrQ0FBMEI7Ozs7O0lBQzFCLCtDQUEyQjs7Ozs7SUFDM0IsOENBQXNCOzs7OztJQUN0QixpREFBZ0M7Ozs7O0lBRUMsd0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgUGlwZVRyYW5zZm9ybSxcbiAgSG9zdEJpbmRpbmcsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIE9uRGVzdHJveSxcbiAgRG9DaGVjayxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUtY29sdW1uLnR5cGUnO1xuaW1wb3J0IHsgTW91c2VFdmVudCwgS2V5Ym9hcmRFdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cyc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvc29ydC1kaXJlY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbHMva2V5cyc7XG5cbmV4cG9ydCB0eXBlIFRyZWVTdGF0dXMgPSAnY29sbGFwc2VkJyB8ICdleHBhbmRlZCcgfCAnbG9hZGluZycgfCAnZGlzYWJsZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRhdGFibGUtYm9keS1jZWxsJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRhdGF0YWJsZS1ib2R5LWNlbGwtbGFiZWxcIiBbc3R5bGUubWFyZ2luLWxlZnQucHhdPVwiY2FsY0xlZnRNYXJnaW4oY29sdW1uLCByb3cpXCI+XG4gICAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJjb2x1bW4uY2hlY2tib3hhYmxlICYmICghZGlzcGxheUNoZWNrIHx8IGRpc3BsYXlDaGVjayhyb3csIGNvbHVtbiwgdmFsdWUpKVwiXG4gICAgICAgIGNsYXNzPVwiZGF0YXRhYmxlLWNoZWNrYm94XCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIiAoY2xpY2spPVwib25DaGVja2JveENoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmlzVHJlZUNvbHVtblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnRyZWVUb2dnbGVUZW1wbGF0ZVwiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhdGFibGUtdHJlZS1idXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cmVlU3RhdHVzID09PSAnZGlzYWJsZWQnXCJcbiAgICAgICAgICAoY2xpY2spPVwib25UcmVlQWN0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8aSAqbmdJZj1cInRyZWVTdGF0dXMgPT09ICdsb2FkaW5nJ1wiIGNsYXNzPVwiaWNvbiBkYXRhdGFibGUtaWNvbi1jb2xsYXBzZVwiPjwvaT5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwidHJlZVN0YXR1cyA9PT0gJ2NvbGxhcHNlZCdcIiBjbGFzcz1cImljb24gZGF0YXRhYmxlLWljb24tdXBcIj48L2k+XG4gICAgICAgICAgICA8aSAqbmdJZj1cInRyZWVTdGF0dXMgPT09ICdleHBhbmRlZCcgfHwgdHJlZVN0YXR1cyA9PT0gJ2Rpc2FibGVkJ1wiIGNsYXNzPVwiaWNvbiBkYXRhdGFibGUtaWNvbi1kb3duXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnRyZWVUb2dnbGVUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLnRyZWVUb2dnbGVUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY2VsbENvbnRleHQ6IGNlbGxDb250ZXh0IH1cIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPHNwYW4gKm5nSWY9XCIhY29sdW1uLmNlbGxUZW1wbGF0ZVwiIFt0aXRsZV09XCJzYW5pdGl6ZWRWYWx1ZVwiIFtpbm5lckhUTUxdPVwidmFsdWVcIj4gPC9zcGFuPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICNjZWxsVGVtcGxhdGVcbiAgICAgICAgKm5nSWY9XCJjb2x1bW4uY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJjZWxsQ29udGV4dFwiXG4gICAgICA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUJvZHlDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZGlzcGxheUNoZWNrOiAocm93OiBhbnksIGNvbHVtbj86IFRhYmxlQ29sdW1uLCB2YWx1ZT86IGFueSkgPT4gYm9vbGVhbjtcblxuICBASW5wdXQoKSBzZXQgZ3JvdXAoZ3JvdXA6IGFueSkge1xuICAgIHRoaXMuX2dyb3VwID0gZ3JvdXA7XG4gICAgdGhpcy5jZWxsQ29udGV4dC5ncm91cCA9IGdyb3VwO1xuICAgIHRoaXMuY2hlY2tWYWx1ZVVwZGF0ZXMoKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGdyb3VwKCkge1xuICAgIHJldHVybiB0aGlzLl9ncm91cDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByb3dIZWlnaHQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9yb3dIZWlnaHQgPSB2YWw7XG4gICAgdGhpcy5jZWxsQ29udGV4dC5yb3dIZWlnaHQgPSB2YWw7XG4gICAgdGhpcy5jaGVja1ZhbHVlVXBkYXRlcygpO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgcm93SGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHQ7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXNTZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1NlbGVjdGVkID0gdmFsO1xuICAgIHRoaXMuY2VsbENvbnRleHQuaXNTZWxlY3RlZCA9IHZhbDtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGlzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2VsZWN0ZWQ7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZXhwYW5kZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZXhwYW5kZWQgPSB2YWw7XG4gICAgdGhpcy5jZWxsQ29udGV4dC5leHBhbmRlZCA9IHZhbDtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByb3dJbmRleCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX3Jvd0luZGV4ID0gdmFsO1xuICAgIHRoaXMuY2VsbENvbnRleHQucm93SW5kZXggPSB2YWw7XG4gICAgdGhpcy5jaGVja1ZhbHVlVXBkYXRlcygpO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgcm93SW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm93SW5kZXg7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgY29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICB0aGlzLl9jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy5jZWxsQ29udGV4dC5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy5jaGVja1ZhbHVlVXBkYXRlcygpO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgY29sdW1uKCk6IFRhYmxlQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMuX3JvdyA9IHJvdztcbiAgICB0aGlzLmNlbGxDb250ZXh0LnJvdyA9IHJvdztcbiAgICB0aGlzLmNoZWNrVmFsdWVVcGRhdGVzKCk7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByb3coKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fcm93O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNvcnRzKHZhbDogYW55W10pIHtcbiAgICB0aGlzLl9zb3J0cyA9IHZhbDtcbiAgICB0aGlzLmNhbGNTb3J0RGlyID0gdGhpcy5jYWxjU29ydERpcih2YWwpO1xuICB9XG5cbiAgZ2V0IHNvcnRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydHM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdHJlZVN0YXR1cyhzdGF0dXM6IFRyZWVTdGF0dXMpIHtcbiAgICBpZiAoc3RhdHVzICE9PSAnY29sbGFwc2VkJyAmJiBzdGF0dXMgIT09ICdleHBhbmRlZCcgJiYgc3RhdHVzICE9PSAnbG9hZGluZycgJiYgc3RhdHVzICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICB0aGlzLl90cmVlU3RhdHVzID0gJ2NvbGxhcHNlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RyZWVTdGF0dXMgPSBzdGF0dXM7XG4gICAgfVxuICAgIHRoaXMuY2VsbENvbnRleHQudHJlZVN0YXR1cyA9IHRoaXMuX3RyZWVTdGF0dXM7XG4gICAgdGhpcy5jaGVja1ZhbHVlVXBkYXRlcygpO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgdHJlZVN0YXR1cygpOiBUcmVlU3RhdHVzIHtcbiAgICByZXR1cm4gdGhpcy5fdHJlZVN0YXR1cztcbiAgfVxuXG4gIEBPdXRwdXQoKSBhY3RpdmF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHRyZWVBY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2NlbGxUZW1wbGF0ZScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIGNlbGxUZW1wbGF0ZTogVmlld0NvbnRhaW5lclJlZjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGNvbHVtbkNzc0NsYXNzZXMoKTogYW55IHtcbiAgICBsZXQgY2xzID0gJ2RhdGF0YWJsZS1ib2R5LWNlbGwnO1xuICAgIGlmICh0aGlzLmNvbHVtbi5jZWxsQ2xhc3MpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2x1bW4uY2VsbENsYXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbHMgKz0gJyAnICsgdGhpcy5jb2x1bW4uY2VsbENsYXNzO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jb2x1bW4uY2VsbENsYXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY29sdW1uLmNlbGxDbGFzcyh7XG4gICAgICAgICAgcm93OiB0aGlzLnJvdyxcbiAgICAgICAgICBncm91cDogdGhpcy5ncm91cCxcbiAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgIHJvd0hlaWdodDogdGhpcy5yb3dIZWlnaHRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY2xzICs9IHJlcztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZXMpO1xuICAgICAgICAgIGZvciAoY29uc3QgayBvZiBrZXlzKSB7XG4gICAgICAgICAgICBpZiAocmVzW2tdID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGNscyArPSBgICR7a31gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuc29ydERpcikge1xuICAgICAgY2xzICs9ICcgc29ydC1hY3RpdmUnO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgIGNscyArPSAnIGFjdGl2ZSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnREaXIgPT09IFNvcnREaXJlY3Rpb24uYXNjKSB7XG4gICAgICBjbHMgKz0gJyBzb3J0LWFzYyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnREaXIgPT09IFNvcnREaXJlY3Rpb24uZGVzYykge1xuICAgICAgY2xzICs9ICcgc29ydC1kZXNjJztcbiAgICB9XG5cbiAgICByZXR1cm4gY2xzO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aC5weCcpXG4gIGdldCB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbi53aWR0aDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWluV2lkdGgucHgnKVxuICBnZXQgbWluV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW4ubWluV2lkdGg7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heFdpZHRoLnB4JylcbiAgZ2V0IG1heFdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uLm1heFdpZHRoO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxuICBnZXQgaGVpZ2h0KCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgaWYgKGlzTmFOKGhlaWdodCkpIHtcbiAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBoZWlnaHQgKyAncHgnO1xuICB9XG5cbiAgc2FuaXRpemVkVmFsdWU6IGFueTtcbiAgdmFsdWU6IGFueTtcbiAgc29ydERpcjogU29ydERpcmVjdGlvbjtcbiAgaXNGb2N1c2VkID0gZmFsc2U7XG4gIG9uQ2hlY2tib3hDaGFuZ2VGbiA9IHRoaXMub25DaGVja2JveENoYW5nZS5iaW5kKHRoaXMpO1xuICBhY3RpdmF0ZUZuID0gdGhpcy5hY3RpdmF0ZS5lbWl0LmJpbmQodGhpcy5hY3RpdmF0ZSk7XG5cbiAgY2VsbENvbnRleHQ6IGFueSA9IHtcbiAgICBvbkNoZWNrYm94Q2hhbmdlRm46IHRoaXMub25DaGVja2JveENoYW5nZUZuLFxuICAgIGFjdGl2YXRlRm46IHRoaXMuYWN0aXZhdGVGbixcbiAgICByb3c6IHRoaXMucm93LFxuICAgIGdyb3VwOiB0aGlzLmdyb3VwLFxuICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgcm93SGVpZ2h0OiB0aGlzLnJvd0hlaWdodCxcbiAgICBpc1NlbGVjdGVkOiB0aGlzLmlzU2VsZWN0ZWQsXG4gICAgcm93SW5kZXg6IHRoaXMucm93SW5kZXgsXG4gICAgdHJlZVN0YXR1czogdGhpcy50cmVlU3RhdHVzLFxuICAgIG9uVHJlZUFjdGlvbjogdGhpcy5vblRyZWVBY3Rpb24uYmluZCh0aGlzKVxuICB9O1xuXG4gIHByaXZhdGUgX2lzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX3NvcnRzOiBhbnlbXTtcbiAgcHJpdmF0ZSBfY29sdW1uOiBUYWJsZUNvbHVtbjtcbiAgcHJpdmF0ZSBfcm93OiBhbnk7XG4gIHByaXZhdGUgX2dyb3VwOiBhbnk7XG4gIHByaXZhdGUgX3Jvd0hlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3dJbmRleDogbnVtYmVyO1xuICBwcml2YXRlIF9leHBhbmRlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZWxlbWVudDogYW55O1xuICBwcml2YXRlIF90cmVlU3RhdHVzOiBUcmVlU3RhdHVzO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrVmFsdWVVcGRhdGVzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMuY2VsbFRlbXBsYXRlLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tWYWx1ZVVwZGF0ZXMoKTogdm9pZCB7XG4gICAgbGV0IHZhbHVlID0gJyc7XG5cbiAgICBpZiAoIXRoaXMucm93IHx8ICF0aGlzLmNvbHVtbikge1xuICAgICAgdmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5jb2x1bW4uJCR2YWx1ZUdldHRlcih0aGlzLnJvdywgdGhpcy5jb2x1bW4ucHJvcCk7XG4gICAgICBjb25zdCB1c2VyUGlwZTogUGlwZVRyYW5zZm9ybSA9IHRoaXMuY29sdW1uLnBpcGU7XG5cbiAgICAgIGlmICh1c2VyUGlwZSkge1xuICAgICAgICB2YWx1ZSA9IHVzZXJQaXBlLnRyYW5zZm9ybSh2YWwpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jZWxsQ29udGV4dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zYW5pdGl6ZWRWYWx1ZSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnN0cmlwSHRtbCh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZhdGUuZW1pdCh7XG4gICAgICB0eXBlOiAnY2xpY2snLFxuICAgICAgZXZlbnQsXG4gICAgICByb3c6IHRoaXMucm93LFxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAsXG4gICAgICByb3dIZWlnaHQ6IHRoaXMucm93SGVpZ2h0LFxuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgY2VsbEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25EYmxDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZhdGUuZW1pdCh7XG4gICAgICB0eXBlOiAnZGJsY2xpY2snLFxuICAgICAgZXZlbnQsXG4gICAgICByb3c6IHRoaXMucm93LFxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAsXG4gICAgICByb3dIZWlnaHQ6IHRoaXMucm93SGVpZ2h0LFxuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgY2VsbEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCBpc1RhcmdldENlbGwgPSBldmVudC50YXJnZXQgPT09IHRoaXMuX2VsZW1lbnQ7XG5cbiAgICBjb25zdCBpc0FjdGlvbiA9XG4gICAgICBrZXlDb2RlID09PSBLZXlzLnJldHVybiB8fFxuICAgICAga2V5Q29kZSA9PT0gS2V5cy5kb3duIHx8XG4gICAgICBrZXlDb2RlID09PSBLZXlzLnVwIHx8XG4gICAgICBrZXlDb2RlID09PSBLZXlzLmxlZnQgfHxcbiAgICAgIGtleUNvZGUgPT09IEtleXMucmlnaHQ7XG5cbiAgICBpZiAoaXNBY3Rpb24gJiYgaXNUYXJnZXRDZWxsKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIHRoaXMuYWN0aXZhdGUuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdrZXlkb3duJyxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHJvdzogdGhpcy5yb3csXG4gICAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLFxuICAgICAgICByb3dIZWlnaHQ6IHRoaXMucm93SGVpZ2h0LFxuICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgY2VsbEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hlY2tib3hDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZhdGUuZW1pdCh7XG4gICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgZXZlbnQsXG4gICAgICByb3c6IHRoaXMucm93LFxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAsXG4gICAgICByb3dIZWlnaHQ6IHRoaXMucm93SGVpZ2h0LFxuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgY2VsbEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnQsXG4gICAgICB0cmVlU3RhdHVzOiAnY29sbGFwc2VkJ1xuICAgIH0pO1xuICB9XG5cbiAgY2FsY1NvcnREaXIoc29ydHM6IGFueVtdKTogYW55IHtcbiAgICBpZiAoIXNvcnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydCA9IHNvcnRzLmZpbmQoKHM6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHMucHJvcCA9PT0gdGhpcy5jb2x1bW4ucHJvcDtcbiAgICB9KTtcblxuICAgIGlmIChzb3J0KSB7XG4gICAgICByZXR1cm4gc29ydC5kaXI7XG4gICAgfVxuICB9XG5cbiAgc3RyaXBIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFodG1sLnJlcGxhY2UpIHtcbiAgICAgIHJldHVybiBodG1sO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbC5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgJycpO1xuICB9XG5cbiAgb25UcmVlQWN0aW9uKCkge1xuICAgIHRoaXMudHJlZUFjdGlvbi5lbWl0KHRoaXMucm93KTtcbiAgfVxuXG4gIGNhbGNMZWZ0TWFyZ2luKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGNvbnN0IGxldmVsSW5kZW50ID0gY29sdW1uLnRyZWVMZXZlbEluZGVudCAhPSBudWxsID8gY29sdW1uLnRyZWVMZXZlbEluZGVudCA6IDUwO1xuICAgIHJldHVybiBjb2x1bW4uaXNUcmVlQ29sdW1uID8gcm93LmxldmVsICogbGV2ZWxJbmRlbnQgOiAwO1xuICB9XG59XG4iXX0=