@refinitiv-ui/efx-grid 6.0.91 → 6.0.93

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 (160) hide show
  1. package/lib/column-dragging/es6/ColumnDragging.d.ts +1 -1
  2. package/lib/column-dragging/es6/ColumnDragging.js +144 -34
  3. package/lib/core/dist/core.js +2410 -2621
  4. package/lib/core/dist/core.min.js +1 -1
  5. package/lib/core/es6/data/ColumnStats.js +14 -14
  6. package/lib/core/es6/data/DataCache.js +118 -118
  7. package/lib/core/es6/data/DataTable.d.ts +3 -1
  8. package/lib/core/es6/data/DataTable.js +208 -190
  9. package/lib/core/es6/data/DataView.d.ts +1 -1
  10. package/lib/core/es6/data/DataView.js +291 -291
  11. package/lib/core/es6/data/Segment.js +79 -79
  12. package/lib/core/es6/data/SegmentCollection.js +81 -81
  13. package/lib/core/es6/data/WrappedView.js +41 -41
  14. package/lib/core/es6/grid/Core.js +635 -635
  15. package/lib/core/es6/grid/ILayoutGrid.js +1 -1
  16. package/lib/core/es6/grid/LayoutGrid.js +183 -183
  17. package/lib/core/es6/grid/VirtualizedLayoutGrid.js +91 -91
  18. package/lib/core/es6/grid/components/Cell.js +29 -29
  19. package/lib/core/es6/grid/components/CellFloatingPanel.js +11 -11
  20. package/lib/core/es6/grid/components/CellSpan.js +7 -7
  21. package/lib/core/es6/grid/components/CellSpans.js +36 -34
  22. package/lib/core/es6/grid/components/Column.js +40 -40
  23. package/lib/core/es6/grid/components/ElementWrapper.js +17 -17
  24. package/lib/core/es6/grid/components/HScrollbar.js +31 -31
  25. package/lib/core/es6/grid/components/Scrollbar.js +77 -77
  26. package/lib/core/es6/grid/components/StretchedCells.js +49 -49
  27. package/lib/core/es6/grid/components/VScrollbar.js +11 -11
  28. package/lib/core/es6/grid/components/VirtualItems.js +3 -3
  29. package/lib/core/es6/grid/event/EventDispatcher.js +9 -9
  30. package/lib/core/es6/grid/event/EventListeners.js +4 -4
  31. package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +186 -186
  32. package/lib/core/es6/grid/util/Conflator.js +4 -4
  33. package/lib/core/es6/grid/util/Reverter.js +1 -1
  34. package/lib/core/es6/grid/util/SectionSettings.js +20 -20
  35. package/lib/core/es6/grid/util/SelectionList.js +23 -23
  36. package/lib/core/es6/grid/util/TrackLayout.js +74 -74
  37. package/lib/core/es6/grid/util/Virtualizer.js +15 -15
  38. package/lib/core/es6/grid/util/util.js +20 -20
  39. package/lib/core/es6/index.d.ts +0 -2
  40. package/lib/core/es6/index.js +0 -3
  41. package/lib/filter-dialog/lib/filter-dialog.js +1 -0
  42. package/lib/grid/index.js +1 -1
  43. package/lib/rt-grid/dist/rt-grid.js +193 -70
  44. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  45. package/lib/rt-grid/es6/Grid.js +46 -30
  46. package/lib/rt-grid/es6/RowDefinition.d.ts +2 -1
  47. package/lib/rt-grid/es6/RowDefinition.js +74 -16
  48. package/lib/tr-grid-cell-selection/es6/CellSelection.js +56 -1
  49. package/lib/tr-grid-checkbox/es6/Checkbox.js +268 -268
  50. package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +3 -2
  51. package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +60 -32
  52. package/lib/tr-grid-column-stack/es6/ColumnStack.js +279 -279
  53. package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.js +227 -207
  54. package/lib/tr-grid-in-cell-editing/es6/InCellEditing.js +11 -11
  55. package/lib/tr-grid-row-dragging/es6/RowDragging.d.ts +1 -2
  56. package/lib/tr-grid-row-dragging/es6/RowDragging.js +120 -121
  57. package/lib/tr-grid-util/es6/CellPainter.js +94 -104
  58. package/lib/tr-grid-util/es6/Conflator.js +4 -4
  59. package/lib/tr-grid-util/es6/CoralItems.js +6 -6
  60. package/lib/tr-grid-util/es6/DateTime.js +41 -41
  61. package/lib/tr-grid-util/es6/Deferred.js +5 -5
  62. package/lib/tr-grid-util/es6/Delay.d.ts +3 -3
  63. package/lib/tr-grid-util/es6/Delay.js +14 -3
  64. package/lib/tr-grid-util/es6/Dom.js +26 -26
  65. package/lib/tr-grid-util/es6/DragUI.js +17 -17
  66. package/lib/tr-grid-util/es6/ElementObserver.js +12 -12
  67. package/lib/tr-grid-util/es6/ElementWrapper.js +2 -2
  68. package/lib/tr-grid-util/es6/ElfDate.js +4 -4
  69. package/lib/tr-grid-util/es6/ElfUtil.js +37 -37
  70. package/lib/tr-grid-util/es6/EventDispatcher.js +12 -12
  71. package/lib/tr-grid-util/es6/ExpanderIcon.js +6 -6
  72. package/lib/tr-grid-util/es6/ExpressionParser.js +43 -43
  73. package/lib/tr-grid-util/es6/Ext.js +6 -6
  74. package/lib/tr-grid-util/es6/FieldFormatter.js +17 -17
  75. package/lib/tr-grid-util/es6/FilterBuilder.js +57 -58
  76. package/lib/tr-grid-util/es6/FilterOperators.d.ts +12 -1
  77. package/lib/tr-grid-util/es6/FilterOperators.js +13 -2
  78. package/lib/tr-grid-util/es6/GridPlugin.js +86 -87
  79. package/lib/tr-grid-util/es6/GroupDefinitions.js +90 -90
  80. package/lib/tr-grid-util/es6/Icon.js +4 -4
  81. package/lib/tr-grid-util/es6/MouseDownTrait.js +6 -6
  82. package/lib/tr-grid-util/es6/MultiTableManager.js +71 -80
  83. package/lib/tr-grid-util/es6/NumberFormatter.js +23 -23
  84. package/lib/tr-grid-util/es6/PercentBar.js +17 -17
  85. package/lib/tr-grid-util/es6/Perf.js +5 -5
  86. package/lib/tr-grid-util/es6/Popup.js +42 -42
  87. package/lib/tr-grid-util/es6/RangeBar.js +5 -5
  88. package/lib/tr-grid-util/es6/RequestQueue.js +5 -5
  89. package/lib/tr-grid-util/es6/RowPainter.js +23 -23
  90. package/lib/tr-grid-util/es6/SubTable.js +94 -94
  91. package/lib/tr-grid-util/es6/Table.js +51 -51
  92. package/lib/tr-grid-util/es6/TextHighlighter.js +52 -52
  93. package/lib/tr-grid-util/es6/TickCodes.js +2 -2
  94. package/lib/tr-grid-util/es6/Timer.js +2 -2
  95. package/lib/tr-grid-util/es6/TouchProxy.js +7 -7
  96. package/lib/tr-grid-util/es6/Util.js +50 -50
  97. package/lib/tr-grid-util/es6/formula/ADCService.js +2 -2
  98. package/lib/tr-grid-util/es6/formula/ADCSubscription.js +19 -19
  99. package/lib/tr-grid-util/es6/formula/AdFinService.js +2 -2
  100. package/lib/tr-grid-util/es6/formula/AdFinSubscription.js +19 -19
  101. package/lib/tr-grid-util/es6/formula/Engine.js +56 -56
  102. package/lib/tr-grid-util/es6/formula/Formula.js +62 -62
  103. package/lib/tr-grid-util/es6/formula/IntervalSubscription.js +3 -3
  104. package/lib/tr-grid-util/es6/formula/Realtime.js +15 -15
  105. package/lib/tr-grid-util/es6/formula/RealtimeService.js +15 -15
  106. package/lib/tr-grid-util/es6/formula/TSIService.js +2 -2
  107. package/lib/tr-grid-util/es6/formula/TSISubscription.js +104 -104
  108. package/lib/tr-grid-util/es6/formula/VariableToken.js +20 -20
  109. package/lib/tr-grid-util/es6/formula/functions/AdFin.js +10 -10
  110. package/lib/tr-grid-util/es6/formula/functions/Excel.js +1 -1
  111. package/lib/tr-grid-util/es6/formula/functions/Info.js +2 -2
  112. package/lib/tr-grid-util/es6/formula/functions/Internal.js +5 -5
  113. package/lib/tr-grid-util/es6/formula/functions/Logic.js +5 -5
  114. package/lib/tr-grid-util/es6/formula/functions/Math.js +46 -46
  115. package/lib/tr-grid-util/es6/formula/functions/Statistics.js +27 -27
  116. package/lib/tr-grid-util/es6/formula/functions/Text.js +19 -19
  117. package/lib/tr-grid-util/es6/index.js +1 -1
  118. package/lib/tr-grid-util/es6/jet/Adc.js +36 -36
  119. package/lib/tr-grid-util/es6/jet/CollectionDict.js +11 -11
  120. package/lib/tr-grid-util/es6/jet/DataGenerator.js +95 -95
  121. package/lib/tr-grid-util/es6/jet/DataSet.js +1 -1
  122. package/lib/tr-grid-util/es6/jet/MockArchive.js +5 -5
  123. package/lib/tr-grid-util/es6/jet/MockJET.js +1 -1
  124. package/lib/tr-grid-util/es6/jet/MockQuotes.js +13 -13
  125. package/lib/tr-grid-util/es6/jet/MockQuotes2.js +100 -100
  126. package/lib/tr-grid-util/es6/jet/MockRTK.js +4 -4
  127. package/lib/tr-grid-util/es6/jet/MockUtil.js +2 -2
  128. package/lib/tr-grid-util/es6/jet/index.js +1 -1
  129. package/lib/tr-grid-util/es6/jet/mockDataAPI.js +15 -15
  130. package/lib/tr-grid-util/es6/locale/translation-de.js +1 -1
  131. package/lib/tr-grid-util/es6/locale/translation-en.js +1 -1
  132. package/lib/tr-grid-util/es6/locale/translation-ja.js +1 -1
  133. package/lib/tr-grid-util/es6/locale/translation-zh-hant.js +1 -1
  134. package/lib/tr-grid-util/es6/locale/translation-zh.js +1 -1
  135. package/lib/tr-grid-util/es6/locale/translation.js +1 -1
  136. package/lib/types/es6/ColumnDragging.d.ts +1 -1
  137. package/lib/types/es6/ColumnGrouping.d.ts +3 -1
  138. package/lib/types/es6/Core/data/DataTable.d.ts +4 -0
  139. package/lib/types/es6/Core/data/DataView.d.ts +2 -0
  140. package/lib/types/es6/Core/data/SegmentCollection.d.ts +2 -0
  141. package/lib/types/es6/Core/index.d.ts +0 -2
  142. package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +2 -1
  143. package/lib/types/es6/RowDragging.d.ts +1 -2
  144. package/lib/versions.json +12 -12
  145. package/package.json +1 -1
  146. package/lib/core/es6/grid/util/ElementFrameWork.d.ts +0 -18
  147. package/lib/core/es6/grid/util/ElementFrameWork.js +0 -227
  148. package/lib/core/es6/grid/util/HttpRequest.d.ts +0 -53
  149. package/lib/core/es6/grid/util/HttpRequest.js +0 -371
  150. package/lib/core/es6/grid/util/PercentBar.d.ts +0 -43
  151. package/lib/core/es6/grid/util/PercentBar.js +0 -390
  152. package/lib/core/es6/grid/util/PercentBarRenderer.d.ts +0 -41
  153. package/lib/core/es6/grid/util/PercentBarRenderer.js +0 -316
  154. package/lib/core/es6/grid/util/RangeBar.d.ts +0 -25
  155. package/lib/core/es6/grid/util/RangeBar.js +0 -255
  156. package/lib/types/es6/Core/grid/util/ElementFrameWork.d.ts +0 -18
  157. package/lib/types/es6/Core/grid/util/HttpRequest.d.ts +0 -53
  158. package/lib/types/es6/Core/grid/util/PercentBar.d.ts +0 -43
  159. package/lib/types/es6/Core/grid/util/PercentBarRenderer.d.ts +0 -41
  160. package/lib/types/es6/Core/grid/util/RangeBar.d.ts +0 -25
@@ -19,7 +19,7 @@ import SegmentCollection from "./SegmentCollection.js";
19
19
  /** @constructor
20
20
  * @extends {DataCache}
21
21
  */
22
- var DataTable = function() {
22
+ let DataTable = function() {
23
23
  DataTable.base(this, 'constructor');
24
24
 
25
25
  this._removeRows = this._removeRows.bind(this);
@@ -104,7 +104,7 @@ DataTable.prototype._classifyingTimer = 0;
104
104
  * @property {number=} order 1 indicates ascending order, and -1 indicates descending order
105
105
  * @property {*=} contextObject Any given user context
106
106
  * @example
107
- * var customComparer = function(a, b, order) {
107
+ * let customComparer = function(a, b, order) {
108
108
  * if(a + 10 < b) { return -order; }
109
109
  * if(b + 10 < a) { return order; }
110
110
  * return 0; // a and b are less than 10 difference apart
@@ -137,8 +137,8 @@ DataTable.prototype.dispose = function() {
137
137
  * @override
138
138
  */
139
139
  DataTable.prototype.getColumnData = function(cid) {
140
- var rows = new Array(this._rids.length);
141
- for(var i = this._rids.length; --i >= 0;) {
140
+ let rows = new Array(this._rids.length);
141
+ for(let i = this._rids.length; --i >= 0;) {
142
142
  rows[i] = this._rows[this._rids[i]][cid];
143
143
  }
144
144
  return rows;
@@ -195,7 +195,7 @@ DataTable.prototype.getRowDataAt = function(rowIndex) {
195
195
  * @return {Object.<string, *>}
196
196
  */
197
197
  DataTable.prototype.getPreviousData = function(rid, cid) {
198
- var row = this._prevData[rid] || null;
198
+ let row = this._prevData[rid] || null;
199
199
  if(row) {
200
200
  return row[cid];
201
201
  }
@@ -214,19 +214,45 @@ DataTable.prototype.setData = function(rid, cid, value) { // Data changed event
214
214
  if(!this._needFiring()) {
215
215
  return this._setData(rid, cid, value);
216
216
  }
217
- var values = {};
217
+ let values = {};
218
218
  values[cid] = value;
219
219
  return this.setRowData(rid, values);
220
220
  };
221
+ /** @private
222
+ * @param {string} rid Row Id
223
+ * @returns {boolean}
224
+ */
225
+ DataTable.prototype._removeRidFromSegments = function(rid) {
226
+ if(this._segments) {
227
+ let segment = this._segments.getSegment(rid);
228
+ if(segment) {
229
+ if(this._segments.removeSegment(rid)) {
230
+ // TODO: Handle sub segment removal
231
+ if(!this._segments.getSegmentCount()) {
232
+ this._segments.dispose();
233
+ this._segments = null;
234
+ }
235
+ return true;
236
+ }
237
+ } else {
238
+ let segmentParentId = this._segments.getParentRowId(rid);
239
+ if(segmentParentId) {
240
+ this._segments.removeSegmentChild(segmentParentId, rid);
241
+ }
242
+ }
243
+ }
244
+ return false;
245
+ };
221
246
  /** Set data in row manner
222
247
  * @override
248
+ * @public
223
249
  * @param {string} rid Row Id
224
250
  * @param {Object.<string, *>=} values Object where the key is column Id and value is the data to be set
225
251
  * @param {Object=} eventArg Additional arguments to be attached to the event fired
226
252
  * @return {boolean} Return true if there is any change, and false otherwise
227
253
  * @fires DataTable#dataChanged
228
254
  * @example
229
- * var dt = new DataTable();
255
+ * let dt = new DataTable();
230
256
  * dt.setRowData("row 1", {"column 1": "a", "column 2": 1, "column 3": null});
231
257
  * dt.log(); // See console for the results
232
258
  */
@@ -235,10 +261,10 @@ DataTable.prototype.setRowData = function(rid, values, eventArg) { // Data chang
235
261
  return false;
236
262
  }
237
263
 
238
- var row = this.getRowData(rid);
239
- var dirty = false;
240
- var type = "updated";
241
- var segmentChanged = false;
264
+ let row = this.getRowData(rid);
265
+ let dirty = false;
266
+ let type = "updated";
267
+ let segmentChanged = false;
242
268
 
243
269
  if(values) {
244
270
  if(!row) {
@@ -247,8 +273,8 @@ DataTable.prototype.setRowData = function(rid, values, eventArg) { // Data chang
247
273
  this._rows[rid] = row; // WARNING: Dangerous use of external reference. User may modify data without using DataTable's API
248
274
  this._prevData[rid] = {};
249
275
  if(eventArg) {
250
- var nextRid = /** @type{string} */(eventArg["nextRid"]); // Used for insertion only
251
- var rowIndex = (nextRid) ? this.getRowIndex(nextRid) : -1;
276
+ let nextRid = /** @type{string} */(eventArg["nextRid"]); // Used for insertion only
277
+ let rowIndex = (nextRid) ? this.getRowIndex(nextRid) : -1;
252
278
  if(rowIndex < 0) {
253
279
  rowIndex = /** @type{number} */(eventArg["fallback"]);
254
280
  }
@@ -262,8 +288,8 @@ DataTable.prototype.setRowData = function(rid, values, eventArg) { // Data chang
262
288
  this._rids.push(rid);
263
289
  }
264
290
  } else {
265
- var prevData = this._prevData[rid];
266
- for (var cid in values) {
291
+ let prevData = this._prevData[rid];
292
+ for (let cid in values) {
267
293
  prevData[cid] = row[cid];
268
294
  row[cid] = values[cid];
269
295
  }
@@ -276,18 +302,7 @@ DataTable.prototype.setRowData = function(rid, values, eventArg) { // Data chang
276
302
  // delete this._prevData[rid];
277
303
  this._prevData[rid] = this._rows[rid]; // Move reference from the removed row to history
278
304
  delete this._rows[rid];
279
- if(this._segments) {
280
- var segment = this._segments.getSegment(rid);
281
- if(segment) {
282
- if(this._segments.removeSegment(rid)) {
283
- // TODO: Handle sub segment removal
284
- segmentChanged = true;
285
- if(!this._segments.getSegmentCount()) {
286
- this._segments = null;
287
- }
288
- }
289
- }
290
- }
305
+ segmentChanged = this._removeRidFromSegments(rid);
291
306
  DataTable._removeArrayItem(this._rids, rid);
292
307
  dirty = true;
293
308
  }
@@ -297,7 +312,7 @@ DataTable.prototype.setRowData = function(rid, values, eventArg) { // Data chang
297
312
  if(this._autoFillSegments()) {
298
313
  this.dispatchGlobalChange();
299
314
  } else {
300
- var e = eventArg || {};
315
+ let e = eventArg || {};
301
316
  e["rid"] = rid;
302
317
  e["changes"] = values; // WARNING: External user data is passed along
303
318
  e["rowData"] = row;
@@ -317,19 +332,19 @@ DataTable.prototype.setRowData = function(rid, values, eventArg) { // Data chang
317
332
  * @param {Array.<*>} valueList
318
333
  * @param {Array.<string>=} opt_ridList Specify row id to be set corresponding to the data item
319
334
  * @example
320
- * var dt = new DataTable();
335
+ * let dt = new DataTable();
321
336
  * dt.setColumnData("column 1", ["1st row data", "2nd row data", "3rd row data"]);
322
337
  * dt.log(); // See console for the results
323
338
  */
324
339
  DataTable.prototype.setColumnData = function(cid, valueList, opt_ridList) { // Data changed event may be dispatched
325
- var rLen = (valueList) ? valueList.length : 0;
340
+ let rLen = (valueList) ? valueList.length : 0;
326
341
  if(rLen < 0) { return; }
327
342
 
328
- var prevFrozen = this._frozen;
343
+ let prevFrozen = this._frozen;
329
344
  this.freeze();
330
- var rids = this._generateRids(rLen, opt_ridList);
345
+ let rids = this._generateRids(rLen, opt_ridList);
331
346
 
332
- for(var r = 0; r < rLen; ++r) {
347
+ for(let r = 0; r < rLen; ++r) {
333
348
  this._setData(rids[r], cid, valueList[r]);
334
349
  }
335
350
 
@@ -344,12 +359,12 @@ Row id with null value will cause a removal of the row with the same id.
344
359
  * @see {@link DataTable#addRows}
345
360
  * @see {@link DataTable#setDataFrom2DArray}
346
361
  * @example
347
- * var data = {
362
+ * let data = {
348
363
  * "rowId 1": {"column 1": "a", "column 2": 1, "column 3": 2},
349
364
  * "rowId 2": {"column 1": "b", "column 2": 3, "column 3": 4},
350
365
  * "rowId 4": {"column 1": "d", "group_criteria": 1} // Rows don't need to be in uniform structure
351
366
  * };
352
- * var dt = new DataTable();
367
+ * let dt = new DataTable();
353
368
  * dt.setDataFromObjectMap(data);
354
369
  * dt.log(); // See console for the results
355
370
  * dt.setDataFromObjectMap({"rowId 1": null}); // Remove the row with "rowId 1"
@@ -364,10 +379,10 @@ DataTable.prototype.setDataFromObjectMap = function(obj) {
364
379
  return;
365
380
  }
366
381
 
367
- var prevFrozen = this._frozen;
382
+ let prevFrozen = this._frozen;
368
383
  this.freeze();
369
384
 
370
- for(var rid in obj) {
385
+ for(let rid in obj) {
371
386
  this.setRowData(rid, obj[rid]);
372
387
  }
373
388
 
@@ -381,28 +396,28 @@ DataTable.prototype.setDataFromObjectMap = function(obj) {
381
396
  * @see {@link DataTable#addRows}
382
397
  * @see {@link DataTable#setDataFromObjectMap}
383
398
  * @example
384
- * var data = [
399
+ * let data = [
385
400
  * ["a", 1, 2],
386
401
  * ["b", 3, 4],
387
402
  * ["c", 5, 6]
388
403
  * ];
389
- * var dt = new DataTable();
404
+ * let dt = new DataTable();
390
405
  * dt.setDataFrom2DArray(data, ["column 1", "column 2", "column 3"]);
391
406
  * dt.log(); // See console for the results
392
407
  */
393
408
  DataTable.prototype.setDataFrom2DArray = function(ary, opt_cidList, opt_ridList) {
394
- var rLen = (ary) ? ary.length : 0;
409
+ let rLen = (ary) ? ary.length : 0;
395
410
  if(rLen < 0) { return; }
396
411
 
397
- var prevFrozen = this._frozen;
412
+ let prevFrozen = this._frozen;
398
413
  this.freeze();
399
414
 
400
- var c = 0;
401
- var rids = this._generateRids(rLen, opt_ridList);
415
+ let c = 0;
416
+ let rids = this._generateRids(rLen, opt_ridList);
402
417
 
403
- for(var r = 0; r < rLen; ++r) {
404
- var row = ary[r];
405
- var rid = rids[r];
418
+ for(let r = 0; r < rLen; ++r) {
419
+ let row = ary[r];
420
+ let rid = rids[r];
406
421
  if(opt_cidList) {
407
422
  for(c = row.length; --c >= 0;) {
408
423
  this._setData(rid, opt_cidList[c], row[c]);
@@ -426,7 +441,7 @@ DataTable.prototype.setDataFrom2DArray = function(ary, opt_cidList, opt_ridList)
426
441
  * @fires DataTable#dataChanged
427
442
  */
428
443
  DataTable.prototype.setDataAt = function(rowIndex, cid, value) { // Data changed event may be dispatched
429
- var rid = this.getRowId(rowIndex);
444
+ let rid = this.getRowId(rowIndex);
430
445
  return (rid) ? this.setData(rid, cid, value) : false;
431
446
  };
432
447
  /** @public
@@ -437,7 +452,7 @@ DataTable.prototype.setDataAt = function(rowIndex, cid, value) { // Data changed
437
452
  * @fires DataTable#dataChanged
438
453
  */
439
454
  DataTable.prototype.setRowDataAt = function(rowIndex, values, opt_eventArg) { // Data changed event may be dispatched
440
- var rid = this.getRowId(rowIndex);
455
+ let rid = this.getRowId(rowIndex);
441
456
  return (rid) ? this.setRowData(rid, values, opt_eventArg) : false;
442
457
  };
443
458
  /** Add new row of data to the end of the Data Table
@@ -447,7 +462,7 @@ DataTable.prototype.setRowDataAt = function(rowIndex, values, opt_eventArg) { //
447
462
  * @return {string} Return Row id that has been inserted or changed
448
463
  * @fires DataTable#dataChanged
449
464
  * @example
450
- * var dt = new DataTable();
465
+ * let dt = new DataTable();
451
466
  * dt.addRow({"column 1": "a", "column 2": 1, "column 3": null});
452
467
  * dt.addRow({"column 1": "b", "column 2": 5, "column 3": {"someKey": 10}});
453
468
  * dt.log(); // See console for the results
@@ -467,7 +482,7 @@ DataTable.prototype.addRow = function(values, rid) {
467
482
  * @see {@link DataTable#setDataFrom2DArray}
468
483
  * @see {@link DataTable#setDataFromObjectMap}
469
484
  * @example
470
- * var dt = new DataTable();
485
+ * let dt = new DataTable();
471
486
  * dt.addRows([
472
487
  * {"field1": "a", "field2": 1, "field3": null},
473
488
  * {"field1": "b", "field2": 5, "field3": {"someKey": 10}},
@@ -480,7 +495,7 @@ DataTable.prototype.addRows = function(rows, rids) {
480
495
  if(!Array.isArray(rows)) {
481
496
  return;
482
497
  }
483
- var len = rows.length;
498
+ let len = rows.length;
484
499
  if(!len) {
485
500
  return;
486
501
  } else if(len === 1) {
@@ -490,9 +505,9 @@ DataTable.prototype.addRows = function(rows, rids) {
490
505
  if(!rids) {
491
506
  rids = [];
492
507
  }
493
- var prevFrozen = this._frozen;
508
+ let prevFrozen = this._frozen;
494
509
  this.freeze();
495
- for(var i = 0; i < len; ++i) {
510
+ for(let i = 0; i < len; ++i) {
496
511
  this.addRow(rows[i], rids[i]);
497
512
  }
498
513
  this.freeze(prevFrozen);
@@ -519,7 +534,7 @@ DataTable.prototype.unshiftRow = function(opt_values, opt_rid) {
519
534
  * @see {@link DataTable#removeRow}
520
535
  */
521
536
  DataTable.prototype.insertRow = function(rowRef, values, rid) {
522
- var arg = null;
537
+ let arg = null;
523
538
  if(typeof rowRef === "number") {
524
539
  arg = {};
525
540
  arg["nextRid"] = this._rids[rowRef];
@@ -543,7 +558,7 @@ DataTable.prototype.insertRow = function(rowRef, values, rid) {
543
558
  * @fires DataTable#dataChanged
544
559
  */
545
560
  DataTable.prototype.insertAfter = function(rowRef, opt_values, opt_rid) {
546
- var rowIndex = (typeof rowRef === "string") ? this.getRowIndex(rowRef) : /** @type{number}*/ (rowRef);
561
+ let rowIndex = (typeof rowRef === "string") ? this.getRowIndex(rowRef) : /** @type{number}*/ (rowRef);
547
562
 
548
563
  if(!(rowIndex >= 0) || rowIndex >= this._rids.length - 1) {
549
564
  return this.addRow(opt_values, opt_rid);
@@ -567,8 +582,9 @@ DataTable.prototype.removeRow = function(rowRef) { // Data changed event may be
567
582
  * @see {@link DataTable#removeAllRows}
568
583
  */
569
584
  DataTable.prototype.removeRows = function(refs) {
585
+ let rid;
570
586
  if(refs.length === 1) {
571
- var rid = refs[0];
587
+ rid = refs[0];
572
588
  if (typeof rid === "number") {
573
589
  this.removeRow(rid);
574
590
  } else {
@@ -577,8 +593,8 @@ DataTable.prototype.removeRows = function(refs) {
577
593
  return;
578
594
  }
579
595
 
580
- var i;
581
- var dirty = false;
596
+ let i;
597
+ let dirty = false;
582
598
  this._removedRows = {};
583
599
  for (i = refs.length; --i >= 0;) {
584
600
  rid = refs[i];
@@ -586,12 +602,12 @@ DataTable.prototype.removeRows = function(refs) {
586
602
  rid = this.getRowId(rid);
587
603
  }
588
604
 
589
- var row = this.getRowData(rid);
605
+ let row = this.getRowData(rid);
590
606
  if(row) {
591
607
  this._prevData[rid] = this._rows[rid];
592
608
  this._removedRows[rid] = 1;
593
609
  delete this._rows[rid];
594
- // TODO: remove segments
610
+ this._removeRidFromSegments(rid);
595
611
  dirty = true;
596
612
  }
597
613
  }
@@ -617,7 +633,7 @@ DataTable.prototype._removeRows = function(rid) {
617
633
  * @return {boolean}
618
634
  */
619
635
  DataTable._removeArrayItem = function(ary, item) {
620
- var at = ary.indexOf(item);
636
+ let at = ary.indexOf(item);
621
637
  if(at >= 0) {
622
638
  if(at >= ary.length) {
623
639
  ary.pop(); // Array.pop is 100 times faster than Array.splice
@@ -634,9 +650,10 @@ DataTable._removeArrayItem = function(ary, item) {
634
650
  DataTable.prototype.clearAllData = function(suppressEvent) {
635
651
  DataTable.base(this, "clearAllData", true);
636
652
  this._prevData = {};
637
- // TODO: Clear all segments
653
+
638
654
  if(this._segments) {
639
- this._segments.removeAllSegmentChildren(); // This immediately remove all sub segments
655
+ this._segments.dispose();
656
+ this._segments = null;
640
657
  }
641
658
 
642
659
  if(this._rids.length) {
@@ -666,18 +683,18 @@ DataTable._ascendingOrder = function(a, b) { return a - b; };
666
683
  * @return {Array.<string>|string} Return row id(s). Return null if nothing has changed
667
684
  */
668
685
  DataTable.prototype.moveRow = function(fromIndex, toIndex, suppressEvent) {
669
- var output = null;
670
- var rid = "";
686
+ let output = null;
687
+ let rid = "";
671
688
  if(!(toIndex >= 0 && toIndex < this._rids.length)) {
672
689
  toIndex = this._rids.length;
673
690
  }
674
691
 
675
692
  if (Array.isArray(fromIndex)) {
676
- var fromIndices = fromIndex;
693
+ let fromIndices = fromIndex;
677
694
  fromIndices.sort(DataTable._ascendingOrder);
678
- var movedRids = [];
679
- for (var i = fromIndices.length; --i >= 0;) {
680
- var idx = fromIndices[i];
695
+ let movedRids = [];
696
+ for (let i = fromIndices.length; --i >= 0;) {
697
+ let idx = fromIndices[i];
681
698
  rid = this._rids[idx];
682
699
  if(rid) {
683
700
  movedRids.unshift(rid);
@@ -725,17 +742,17 @@ DataTable.prototype.moveRow = function(fromIndex, toIndex, suppressEvent) {
725
742
  * @return {Array.<string>|string} rid
726
743
  */
727
744
  DataTable.prototype._moveRow = function(fromRids, toRid, suppressEvent) {
728
- var len = fromRids.length;
745
+ let len = fromRids.length;
729
746
  if(!len) {
730
747
  return null;
731
748
  }
732
749
 
733
- var fromIndices = new Array(len);
734
- for(var i = 0; i < len; ++i) {
750
+ let fromIndices = new Array(len);
751
+ for(let i = 0; i < len; ++i) {
735
752
  fromIndices[i] = this.getRowIndex(fromRids[i]);
736
753
  }
737
754
 
738
- var toIndex = (toRid) ? this.getRowIndex(toRid) : this._rids.length;
755
+ let toIndex = (toRid) ? this.getRowIndex(toRid) : this._rids.length;
739
756
  if(len > 1) {
740
757
  return this.moveRow(fromIndices, toIndex, suppressEvent);
741
758
  }
@@ -762,8 +779,8 @@ DataTable.prototype.moveRows = function(startIndex, toIndex, opt_count, suppress
762
779
  if(toIndex < 0) { toIndex = this._rids.length; }
763
780
  if(!opt_count) { opt_count = 1; }
764
781
 
765
- var endIndex = startIndex + opt_count - 1;
766
- var targetIndex = toIndex;
782
+ let endIndex = startIndex + opt_count - 1;
783
+ let targetIndex = toIndex;
767
784
  if (toIndex >= startIndex) {
768
785
  if (toIndex <= endIndex) {
769
786
  targetIndex = startIndex;
@@ -777,8 +794,8 @@ DataTable.prototype.moveRows = function(startIndex, toIndex, opt_count, suppress
777
794
  targetIndex = this._rids.length;
778
795
  }
779
796
 
780
- var rows = this._rids.splice(startIndex, opt_count);
781
- var args = [targetIndex, 0].concat(rows);
797
+ let rows = this._rids.splice(startIndex, opt_count);
798
+ let args = [targetIndex, 0].concat(rows);
782
799
  Array.prototype.splice.apply(this._rids, args);
783
800
 
784
801
  if(this._segments) {
@@ -797,11 +814,11 @@ DataTable.prototype.moveRows = function(startIndex, toIndex, opt_count, suppress
797
814
  * @param {number} toIndex
798
815
  */
799
816
  DataTable.prototype.swapRow = function(fromIndex, toIndex) { // No event is fired. No effect on other views
800
- var len = this._rids.length;
817
+ let len = this._rids.length;
801
818
  if(fromIndex < 0 || fromIndex >= len) { return; }
802
819
  if(toIndex < 0 || toIndex >= len) { return; }
803
820
 
804
- var rid = this._rids[fromIndex];
821
+ let rid = this._rids[fromIndex];
805
822
  this._rids[fromIndex] = this._rids[toIndex];
806
823
  this._rids[toIndex] = rid;
807
824
  };
@@ -815,11 +832,11 @@ DataTable.prototype.clearRowData = DataTable.prototype.removeRow;
815
832
  * @override
816
833
  */
817
834
  DataTable.prototype.clearColumnData = function(colId, suppressEvent) {
818
- var cids = (typeof colId === "string") ? [/** @type {string} */(colId)] : /** @type {Array.<string>} */(colId);
819
- for(var i = cids.length; --i >= 0;) {
820
- var cid = cids[i];
835
+ let cids = (typeof colId === "string") ? [/** @type {string} */(colId)] : /** @type {Array.<string>} */(colId);
836
+ for(let i = cids.length; --i >= 0;) {
837
+ let cid = cids[i];
821
838
  if(cid) {
822
- for(var rid in this._rows) {
839
+ for(let rid in this._rows) {
823
840
  delete this._rows[rid][cid];
824
841
  delete this._prevData[rid][cid];
825
842
  }
@@ -858,7 +875,7 @@ DataTable.prototype.getSortingLogics = function() {
858
875
  * @fires DataTable#dataChanged
859
876
  */
860
877
  DataTable.prototype.sortOnce = function(cid, sortOrders, customComparer, contextObj) {
861
- var sortingDefs = DataTable._buildSortContext(
878
+ let sortingDefs = DataTable._buildSortContext(
862
879
  [],
863
880
  cid,
864
881
  sortOrders,
@@ -878,7 +895,7 @@ DataTable.prototype.sortOnce = function(cid, sortOrders, customComparer, context
878
895
  * customLogic = function(a, b, sortOrder) {
879
896
  * return (a - b) * sortOrder; // for numeric comparison
880
897
  * };
881
- * var dt = new DataTable();
898
+ * let dt = new DataTable();
882
899
  * dt.setSortingLogic(customLogic);
883
900
  * dt.sortOnce("Column id", "ascending");
884
901
  */
@@ -902,7 +919,7 @@ DataTable.prototype.setColumnSortingLogic = function(cid, func) {
902
919
  */
903
920
  DataTable.prototype.getColumnSortingLogic = function(cid) {
904
921
  if(cid) {
905
- var logic = this._compMap[cid];
922
+ let logic = this._compMap[cid];
906
923
  if(logic) {
907
924
  return logic;
908
925
  }
@@ -917,15 +934,15 @@ DataTable.prototype.getColumnSortingLogic = function(cid) {
917
934
  * @return {boolean} Previous freeze state before the execution
918
935
  * @fires DataTable#dataChanged
919
936
  * @example
920
- * var prevState = dt.freeze();
921
- * for(var i = 0; i < 100; ++i) {
937
+ * let prevState = dt.freeze();
938
+ * for(let i = 0; i < 100; ++i) {
922
939
  * dt.insertRow(); // no event is fired
923
940
  * }
924
941
  * dt.freeze(prevState); // Restore previous freeze states
925
942
  */
926
943
  DataTable.prototype.freeze = function(bool) {
927
944
  bool = bool !== false;
928
- var prevState = this._frozen;
945
+ let prevState = this._frozen;
929
946
  if(prevState !== bool) {
930
947
  this._frozen = bool;
931
948
  this._autoFillSegments();
@@ -955,8 +972,8 @@ DataTable.prototype.isFrozen = function() {
955
972
  * @return {boolean} Return true if there is any change
956
973
  */
957
974
  DataTable.prototype.setSegmentSeparator = function(rid, enabled) {
958
- var change = false;
959
- var memberCount = 0;
975
+ let change = false;
976
+ let memberCount = 0;
960
977
  if(rid && typeof rid === "string") {
961
978
  if(enabled !== false) {
962
979
  if(!this._segments) {
@@ -964,7 +981,7 @@ DataTable.prototype.setSegmentSeparator = function(rid, enabled) {
964
981
  this._segments.addEventListener("subSegmentChanged", this._onSubSegmentChanged);
965
982
  }
966
983
  if(this._autoSegmentFilling) {
967
- var parentId = this._segments.getParentRowId(rid);
984
+ let parentId = this._segments.getParentRowId(rid);
968
985
  if(parentId) {
969
986
  this._segments.removeSegmentChild(parentId, rid);
970
987
  }
@@ -974,7 +991,7 @@ DataTable.prototype.setSegmentSeparator = function(rid, enabled) {
974
991
  change = true;
975
992
  }
976
993
  } else if(this._segments) {
977
- var segment = this._segments.getSegment(rid);
994
+ let segment = this._segments.getSegment(rid);
978
995
  if(segment) {
979
996
  memberCount = segment.getChildCount();
980
997
  if(this._segments.removeSegment(rid)) {
@@ -990,7 +1007,7 @@ DataTable.prototype.setSegmentSeparator = function(rid, enabled) {
990
1007
  if(this._autoFillSegments() || memberCount) {
991
1008
  this.dispatchGlobalChange();
992
1009
  } else {
993
- var rowData = this._rows[rid] || null;
1010
+ let rowData = this._rows[rid] || null;
994
1011
  if(rowData) {
995
1012
  this._dispatchDataChange({
996
1013
  "rid": rid,
@@ -1010,6 +1027,7 @@ DataTable.prototype.setSegmentSeparator = function(rid, enabled) {
1010
1027
  */
1011
1028
  DataTable.prototype.unsetAllSegmentSeparators = function() {
1012
1029
  if(this._segments) {
1030
+ this._segments.dispose();
1013
1031
  this._segments = null;
1014
1032
  this.dispatchGlobalChange();
1015
1033
  return true;
@@ -1048,7 +1066,7 @@ DataTable.prototype.getSegment = function(rid) {
1048
1066
  /**
1049
1067
  * @public
1050
1068
  * @param {string} rid Row id of a segment child
1051
- * @return {string} Returns null if a segment cannot be found
1069
+ * @return {Segment} Returns null if a segment cannot be found
1052
1070
  */
1053
1071
  DataTable.prototype.getSegmentParent = function(rid) {
1054
1072
  if(this._segments) {
@@ -1062,7 +1080,7 @@ DataTable.prototype.getSegmentParent = function(rid) {
1062
1080
  * @return {number} Return 0 if the given rid is not a segment
1063
1081
  */
1064
1082
  DataTable.prototype.getSegmentLevel = function(rid) {
1065
- var segment = this.getSegment(rid);
1083
+ let segment = this.getSegment(rid);
1066
1084
  if(segment) {
1067
1085
  return segment.getSegmentLevel() + 1;
1068
1086
  }
@@ -1097,11 +1115,11 @@ DataTable.prototype.getSegmentValues = function(rids, partial) {
1097
1115
  * @return {boolean} Return true if the given row is in the last segment
1098
1116
  */
1099
1117
  DataTable.prototype._isLastSegment = function(at) {
1100
- var segmentSeparators = this._segments;
1118
+ let segmentSeparators = this._segments;
1101
1119
  if(segmentSeparators) {
1102
- var rids = this._rids;
1103
- var rowCount = rids.length;
1104
- for(var r = at + 1; r < rowCount; ++r) {
1120
+ let rids = this._rids;
1121
+ let rowCount = rids.length;
1122
+ for(let r = at + 1; r < rowCount; ++r) {
1105
1123
  if(segmentSeparators.containsSegment(rids[r])) {
1106
1124
  return false;
1107
1125
  }
@@ -1151,7 +1169,7 @@ DataTable.prototype.fillSegment = function(segmentId) {
1151
1169
  */
1152
1170
  DataTable.prototype.fillSegments = function() {
1153
1171
  if(this._segments) {
1154
- var dirty = this._segments.fillSegments(this._rids);
1172
+ let dirty = this._segments.fillSegments(this._rids);
1155
1173
  if(dirty) {
1156
1174
  this.dispatchGlobalChange();
1157
1175
  this.requestClassifying();
@@ -1168,7 +1186,7 @@ DataTable.prototype.fillSegments = function() {
1168
1186
  */
1169
1187
  DataTable.prototype.addSegmentChild = function(segmentId, rid, dataId) {
1170
1188
  if(this._segments) {
1171
- var dirty = this._segments.addSegmentChild(segmentId, rid, dataId);
1189
+ let dirty = this._segments.addSegmentChild(segmentId, rid, dataId);
1172
1190
  if(dirty) {
1173
1191
  this._sort(null);
1174
1192
  this._dispatchPositionChange(); // Force rerendering, even if there is no position change
@@ -1187,7 +1205,7 @@ DataTable.prototype.addSegmentChild = function(segmentId, rid, dataId) {
1187
1205
  */
1188
1206
  DataTable.prototype.addSegmentChildren = function(segmentId, rids, dataIds) {
1189
1207
  if(this._segments) {
1190
- var dirty = this._segments.addSegmentChildren(segmentId, rids, dataIds);
1208
+ let dirty = this._segments.addSegmentChildren(segmentId, rids, dataIds);
1191
1209
  if(dirty) {
1192
1210
  this._sort(null);
1193
1211
  this._dispatchPositionChange(); // Force rerendering, even if there is no position change
@@ -1205,7 +1223,7 @@ DataTable.prototype.addSegmentChildren = function(segmentId, rids, dataIds) {
1205
1223
  */
1206
1224
  DataTable.prototype.removeSegmentChild = function(segmentId, rid) {
1207
1225
  if(this._segments) {
1208
- var dirty = this._segments.removeSegmentChild(segmentId, rid);
1226
+ let dirty = this._segments.removeSegmentChild(segmentId, rid);
1209
1227
  if(dirty) {
1210
1228
  this.dispatchGlobalChange();
1211
1229
  this.requestClassifying();
@@ -1221,7 +1239,7 @@ DataTable.prototype.removeSegmentChild = function(segmentId, rid) {
1221
1239
  */
1222
1240
  DataTable.prototype.removeSegmentChildren = function(segmentId, rids) {
1223
1241
  if(this._segments) {
1224
- var dirty = this._segments.removeSegmentChildren(segmentId, rids);
1242
+ let dirty = this._segments.removeSegmentChildren(segmentId, rids);
1225
1243
  if(dirty) {
1226
1244
  this.dispatchGlobalChange();
1227
1245
  this.requestClassifying();
@@ -1235,7 +1253,7 @@ DataTable.prototype.removeSegmentChildren = function(segmentId, rids) {
1235
1253
  */
1236
1254
  DataTable.prototype.removeAllSegmentChildren = function() {
1237
1255
  if(this._segments) {
1238
- var dirty = this._segments.removeAllSegmentChildren(); // This immediately remove all sub segments
1256
+ let dirty = this._segments.removeAllSegmentChildren(); // This immediately remove all sub segments
1239
1257
  if (dirty) {
1240
1258
  this.dispatchGlobalChange();
1241
1259
  }
@@ -1260,9 +1278,9 @@ DataTable.prototype.getSegmentIds = function() {
1260
1278
  */
1261
1279
  DataTable.prototype.getSegmentChildIds = function(segmentId) {
1262
1280
  if(this._segments) {
1263
- var segment = this._segments.getSegment(segmentId);
1281
+ let segment = this._segments.getSegment(segmentId);
1264
1282
  if(segment) {
1265
- var chdr = segment.getChildIds();
1283
+ let chdr = segment.getChildIds();
1266
1284
  return chdr.length ? chdr : null;
1267
1285
  }
1268
1286
  }
@@ -1276,26 +1294,26 @@ DataTable.prototype.getSegmentChildIds = function(segmentId) {
1276
1294
  * @return {boolean}
1277
1295
  */
1278
1296
  DataTable.prototype.sortSeparators = function (sortLogics, sortOrders, cids) {
1279
- var dirty = false;
1297
+ let dirty = false;
1280
1298
  if(!this._segments){
1281
1299
  return false;
1282
1300
  }
1283
1301
  if(typeof sortLogics === "function"){
1284
1302
  return this.sortSegments(sortLogics);
1285
1303
  }
1286
- var sortingDefs = DataTable._buildSortContext(
1304
+ let sortingDefs = DataTable._buildSortContext(
1287
1305
  [],
1288
1306
  cids,
1289
1307
  sortOrders,
1290
1308
  sortLogics
1291
1309
  );
1292
- var defCount = sortingDefs ? sortingDefs.length : 0;
1310
+ let defCount = sortingDefs ? sortingDefs.length : 0;
1293
1311
  if(!defCount){
1294
1312
  return dirty;
1295
1313
  }
1296
1314
 
1297
- var sortOrder = 0;
1298
- var sortLogic, sortContext;
1315
+ let sortOrder = 0;
1316
+ let sortLogic, sortContext;
1299
1317
  if(defCount > 1) {
1300
1318
  sortLogic = DataTable._multiColumnSeparatorCompareLogic;
1301
1319
  sortContext = sortingDefs;
@@ -1326,16 +1344,16 @@ DataTable.prototype.sortSegments = function (compare) {
1326
1344
  this._segments.calcSegmentOrder(this._rids);
1327
1345
  return false;
1328
1346
  }
1329
- var rids = this._rids;
1330
- var segments = this._segments;
1331
- var segmentCount = segments.getSegmentCount();
1332
- var segmentList = [];
1333
- var origOrder = [];
1334
- var itemCount = 0;
1335
- var rowCount = rids.length;
1336
- var rid = "";
1337
- var segment = null;
1338
- var i;
1347
+ let rids = this._rids;
1348
+ let segments = this._segments;
1349
+ let segmentCount = segments.getSegmentCount();
1350
+ let segmentList = [];
1351
+ let origOrder = [];
1352
+ let itemCount = 0;
1353
+ let rowCount = rids.length;
1354
+ let rid = "";
1355
+ let segment = null;
1356
+ let i;
1339
1357
  for(i = 0; i < rowCount; ++i) {
1340
1358
  rid = rids[i];
1341
1359
  segment = segments.getSegment(rid);
@@ -1352,12 +1370,12 @@ DataTable.prototype.sortSegments = function (compare) {
1352
1370
  segmentList.sort(this._bySegmentSeparator);
1353
1371
  this._userSegmentComparer = null;
1354
1372
 
1355
- var dirty = false;
1373
+ let dirty = false;
1356
1374
  for(i = 0; i < itemCount; ++i) {
1357
- var idx = origOrder[i];
1375
+ let idx = origOrder[i];
1358
1376
  rid = rids[idx];
1359
1377
  segment = segmentList[i];
1360
- var newRid = segment.getId();
1378
+ let newRid = segment.getId();
1361
1379
  if(rid !== newRid) {
1362
1380
  rids[idx] = newRid;
1363
1381
  dirty = true;
@@ -1406,7 +1424,7 @@ DataTable.prototype.setClassificationSource = function(dc) {
1406
1424
  */
1407
1425
  DataTable.prototype.setSegmentClassification = function(segmentId, fields) {
1408
1426
  if(this._segments) {
1409
- var dirty = this._segments.setSegmentClassification(segmentId, fields);
1427
+ let dirty = this._segments.setSegmentClassification(segmentId, fields);
1410
1428
  if(dirty) {
1411
1429
  return this.classifySegments();
1412
1430
  }
@@ -1444,20 +1462,20 @@ DataTable.prototype._onClassifyingTimer = function() {
1444
1462
  * @param {Object} e
1445
1463
  */
1446
1464
  DataTable.prototype._onSubSegmentChanged = function(e) {
1447
- var insertionList = /** @type{Array.<Segment>} */(e["insertionList"]);
1448
- var removalList = /** @type{Array.<string>} */(e["removalList"]);
1449
-
1450
- var dirty = false;
1451
- var rows = this._rows;
1452
- var clsSource = this._clsSource || rows;
1453
- var rids = this._rids;
1454
- var prevData = this._prevData;
1455
- var i;
1456
-
1457
- var removalCount = removalList.length;
1458
- var removedRows = {};
1465
+ let insertionList = /** @type{Array.<Segment>} */(e["insertionList"]);
1466
+ let removalList = /** @type{Array.<string>} */(e["removalList"]);
1467
+
1468
+ let dirty = false;
1469
+ let rows = this._rows;
1470
+ let clsSource = this._clsSource || rows;
1471
+ let rids = this._rids;
1472
+ let prevData = this._prevData;
1473
+ let i;
1474
+
1475
+ let removalCount = removalList.length;
1476
+ let removedRows = {};
1459
1477
  for(i = 0; i < removalCount; i++) {
1460
- var rid = removalList[i];
1478
+ let rid = removalList[i];
1461
1479
  if(rows[rid]) {
1462
1480
  removedRows[rid] = prevData[rid] = rows[rid];
1463
1481
  delete rows[rid];
@@ -1467,17 +1485,17 @@ DataTable.prototype._onSubSegmentChanged = function(e) {
1467
1485
  }
1468
1486
  }
1469
1487
 
1470
- var insertionCount = insertionList.length;
1488
+ let insertionCount = insertionList.length;
1471
1489
  for(i = 0; i < insertionCount; i++) {
1472
- var segment = insertionList[i];
1473
- var parentId = segment.getParentId();
1474
- var segmentId = segment.getId();
1490
+ let segment = insertionList[i];
1491
+ let parentId = segment.getParentId();
1492
+ let segmentId = segment.getId();
1475
1493
 
1476
1494
  if(!rows[segmentId]) {
1477
1495
  prevData[segmentId] = {};
1478
1496
  segment.setRowData(rows, clsSource);
1479
1497
 
1480
- var parentAt = rids.indexOf(parentId);
1498
+ let parentAt = rids.indexOf(parentId);
1481
1499
  if(parentAt < 0 || parentAt + 1 >= rids.length) {
1482
1500
  rids.push(segmentId);
1483
1501
  } else {
@@ -1501,10 +1519,10 @@ DataTable.prototype._onSubSegmentChanged = function(e) {
1501
1519
  * @return {boolean} Return true if there is any change, otherwise false
1502
1520
  */
1503
1521
  DataTable.prototype._sort = function(sortingDefs) {
1504
- var rids = this._rids;
1505
- var dataRows = this.getMultipleRowData(rids);
1506
- var segmentValues = this.getSegmentValues(rids);
1507
- var change = DataTable._performMultiLevelSorting(dataRows, sortingDefs, segmentValues);
1522
+ let rids = this._rids;
1523
+ let dataRows = this.getMultipleRowData(rids);
1524
+ let segmentValues = this.getSegmentValues(rids);
1525
+ let change = DataTable._performMultiLevelSorting(dataRows, sortingDefs, segmentValues);
1508
1526
 
1509
1527
  if(change) {
1510
1528
  this._rids = DataTable._reorderItems(rids, change);
@@ -1554,7 +1572,7 @@ DataTable.prototype.dump = function(opt_options) {
1554
1572
  * @return {boolean} Return true if there is any change, and false otherwise
1555
1573
  */
1556
1574
  DataTable.prototype._setData = function(rid, cid, value) {
1557
- var row = this.getRowData(rid);
1575
+ let row = this.getRowData(rid);
1558
1576
 
1559
1577
  if(!row) {
1560
1578
  row = {};
@@ -1572,12 +1590,12 @@ DataTable.prototype._setData = function(rid, cid, value) {
1572
1590
  * @returns {Array.<string>}
1573
1591
  */
1574
1592
  DataTable.prototype._generateRids = function(len, opt_ridList) {
1575
- var r = 0, rids;
1593
+ let r = 0, rids;
1576
1594
  if(opt_ridList) {
1577
1595
  rids = opt_ridList;
1578
1596
  } else {
1579
1597
  rids = [];
1580
- var rowCount = this._rids.length;
1598
+ let rowCount = this._rids.length;
1581
1599
  while(r < rowCount && r < len) {
1582
1600
  rids.push(this._rids[r++]);
1583
1601
  }
@@ -1645,7 +1663,7 @@ DataTable._positionChangeArg = {"globalChange": true, "positionChangeOnly": true
1645
1663
  * @return {!Array.<Array>}
1646
1664
  */
1647
1665
  DataTable._buildSortContext = function(out_defs, cids, sortOrders, logics, contextObj) {
1648
- var aryColumnIds, aryOrders;
1666
+ let aryColumnIds, aryOrders;
1649
1667
  if(Array.isArray(cids)) {
1650
1668
  aryColumnIds = /** @type{Array.<string>} */(cids);
1651
1669
  aryOrders = /** @type{Array.<string|number>} */(sortOrders);
@@ -1654,24 +1672,24 @@ DataTable._buildSortContext = function(out_defs, cids, sortOrders, logics, conte
1654
1672
  aryOrders = (cids) ? [/** @type{string|number} */(sortOrders)] : [0];
1655
1673
  }
1656
1674
 
1657
- var logic = null;
1658
- var logicMap = null;
1675
+ let logic = null;
1676
+ let logicMap = null;
1659
1677
  if(typeof logics == "function") {
1660
1678
  logic = logics;
1661
1679
  } else {
1662
1680
  logicMap = /** @type{Array.<Function>|Object.<string, DataTable.SortLogic>} */(logics);
1663
1681
  }
1664
- var len = aryColumnIds.length;
1682
+ let len = aryColumnIds.length;
1665
1683
  out_defs.length = len;
1666
- for(var c = len; --c >= 0;) {
1684
+ for(let c = len; --c >= 0;) {
1667
1685
  if (Array.isArray(logicMap)) {
1668
1686
  logic = logicMap[c];
1669
1687
  }
1670
- var sortingDef = out_defs[c];
1688
+ let sortingDef = out_defs[c];
1671
1689
  if(!sortingDef) {
1672
1690
  sortingDef = out_defs[c] = new Array(5);
1673
1691
  }
1674
- var columnId = aryColumnIds[c];
1692
+ let columnId = aryColumnIds[c];
1675
1693
  sortingDef[0] = columnId; // text field
1676
1694
  sortingDef[1] = null; // Reserved for row data
1677
1695
  sortingDef[2] = logic || logicMap[columnId] || logicMap["_default"]; // sort logic
@@ -1694,10 +1712,10 @@ DataTable._buildSortContext = function(out_defs, cids, sortOrders, logics, conte
1694
1712
  * @return {number}
1695
1713
  */
1696
1714
  DataTable._multiColumnCompareLogic = function(a, b, order, sortingDefs) {
1697
- var count = sortingDefs.length;
1698
- var result = 0;
1699
- for(var c = 0; c < count; ++c) {
1700
- var sortingDef = sortingDefs[c];
1715
+ let count = sortingDefs.length;
1716
+ let result = 0;
1717
+ for(let c = 0; c < count; ++c) {
1718
+ let sortingDef = sortingDefs[c];
1701
1719
  result = DataTable._singleColumnCompareLogic(a, b, sortingDef[3], sortingDef);
1702
1720
  if(result) {
1703
1721
  return result;
@@ -1716,7 +1734,7 @@ DataTable._multiColumnCompareLogic = function(a, b, order, sortingDefs) {
1716
1734
  * @return {number}
1717
1735
  */
1718
1736
  DataTable._singleColumnCompareLogic = function(a, b, order, sortingDef) {
1719
- var values = /** @type{Array} */(sortingDef[1]);
1737
+ let values = /** @type{Array} */(sortingDef[1]);
1720
1738
  return /** @type{number} */(sortingDef[2](
1721
1739
  values[a], // Value1
1722
1740
  values[b], // Value2
@@ -1735,10 +1753,10 @@ DataTable._singleColumnCompareLogic = function(a, b, order, sortingDef) {
1735
1753
  * @return {number}
1736
1754
  */
1737
1755
  DataTable._multiColumnSeparatorCompareLogic = function(a, b, order, sortingDefs) {
1738
- var count = sortingDefs.length;
1739
- var result = 0;
1740
- for(var c = 0; c < count; ++c) {
1741
- var sortingDef = sortingDefs[c];
1756
+ let count = sortingDefs.length;
1757
+ let result = 0;
1758
+ for(let c = 0; c < count; ++c) {
1759
+ let sortingDef = sortingDefs[c];
1742
1760
  result = DataTable._singleColumnSeparatorCompareLogic(a, b, sortingDef[3], sortingDef);
1743
1761
  if(result) {
1744
1762
  return result;
@@ -1757,7 +1775,7 @@ DataTable._multiColumnSeparatorCompareLogic = function(a, b, order, sortingDefs)
1757
1775
  * @return {number}
1758
1776
  */
1759
1777
  DataTable._singleColumnSeparatorCompareLogic = function(a, b, order, sortingDef) {
1760
- var key = /** @type{string} */(sortingDef[0]);
1778
+ let key = /** @type{string} */(sortingDef[0]);
1761
1779
  return /** @type{number} */(sortingDef[2](
1762
1780
  a[key], // Value1
1763
1781
  b[key], // Value2
@@ -1774,20 +1792,20 @@ DataTable._singleColumnSeparatorCompareLogic = function(a, b, order, sortingDef)
1774
1792
  * @return {Array.<number>} Returns new item positions if there is any change, otherwise returns null
1775
1793
  */
1776
1794
  DataTable._performMultiLevelSorting = function(dataRows, sortingDefs, segmentValues) {
1777
- var rowCount = dataRows ? dataRows.length : 0;
1778
- var defCount = sortingDefs ? sortingDefs.length : 0;
1795
+ let rowCount = dataRows ? dataRows.length : 0;
1796
+ let defCount = sortingDefs ? sortingDefs.length : 0;
1779
1797
  if(!rowCount) {
1780
1798
  return null;
1781
1799
  }
1782
1800
 
1783
- var sortLogic;
1801
+ let sortLogic;
1784
1802
  // Populate data for each definition
1785
- for(var c = 0; c < defCount; ++c) {
1786
- var sortingDef = sortingDefs[c];
1787
- var rows = sortingDef[1];
1803
+ for(let c = 0; c < defCount; ++c) {
1804
+ let sortingDef = sortingDefs[c];
1805
+ let rows = sortingDef[1];
1788
1806
  sortLogic = sortingDef[2];
1789
- var rowSorting = sortLogic["rowSorting"];
1790
- var r;
1807
+ let rowSorting = sortLogic["rowSorting"];
1808
+ let r;
1791
1809
  if(rowSorting) {
1792
1810
  if(rows) {
1793
1811
  rows.length = rowCount;
@@ -1803,7 +1821,7 @@ DataTable._performMultiLevelSorting = function(dataRows, sortingDefs, segmentVal
1803
1821
  } else {
1804
1822
  rows = sortingDef[1] = new Array(rowCount);
1805
1823
  }
1806
- var columnId = sortingDef[0];
1824
+ let columnId = sortingDef[0];
1807
1825
  for(r = 0; r < rowCount; ++r) {
1808
1826
  rows[r] = dataRows[r][columnId];
1809
1827
  }
@@ -1811,7 +1829,7 @@ DataTable._performMultiLevelSorting = function(dataRows, sortingDefs, segmentVal
1811
1829
  }
1812
1830
 
1813
1831
  if(segmentValues) {
1814
- var segmentDef = [ // TODO: Make this static variable
1832
+ let segmentDef = [ // TODO: Make this static variable
1815
1833
  "ROW_SEGMENT", // Dummy column id
1816
1834
  segmentValues, // Segment values
1817
1835
  DataTable._segmentComparer,
@@ -1831,8 +1849,8 @@ DataTable._performMultiLevelSorting = function(dataRows, sortingDefs, segmentVal
1831
1849
  return null;
1832
1850
  }
1833
1851
 
1834
- var sortOrder = 0;
1835
- var sortContext;
1852
+ let sortOrder = 0;
1853
+ let sortContext;
1836
1854
  if(defCount > 1) {
1837
1855
  sortLogic = DataTable._multiColumnCompareLogic;
1838
1856
  sortContext = sortingDefs;
@@ -1856,12 +1874,12 @@ DataTable._performMultiLevelSorting = function(dataRows, sortingDefs, segmentVal
1856
1874
  * @return {Array.<number>} Returns new item positions if there is any change, otherwise returns null
1857
1875
  */
1858
1876
  DataTable._mergeSort = function(len, order, comparer, contextObj) {
1859
- var change = false;
1877
+ let change = false;
1860
1878
 
1861
- var grpSize = 1;
1862
- var iter, lhsFrom, rhsFrom, lhsTo, rhsTo;
1863
- var subj = DataTable._createIndexArray(len);
1864
- var obj = subj.slice();
1879
+ let grpSize = 1;
1880
+ let iter, lhsFrom, rhsFrom, lhsTo, rhsTo;
1881
+ let subj = DataTable._createIndexArray(len);
1882
+ let obj = subj.slice();
1865
1883
 
1866
1884
  while(grpSize <= len) {
1867
1885
  iter = rhsTo = 0; // start from 0
@@ -1903,7 +1921,7 @@ DataTable._mergeSort = function(len, order, comparer, contextObj) {
1903
1921
  }
1904
1922
  }
1905
1923
 
1906
- var tmp = subj;
1924
+ let tmp = subj;
1907
1925
  subj = obj;
1908
1926
  obj = tmp;
1909
1927
  grpSize <<= 1;
@@ -1921,7 +1939,7 @@ DataTable._mergeSort = function(len, order, comparer, contextObj) {
1921
1939
  */
1922
1940
  DataTable._reorderItems = function (ary, orders) {
1923
1941
  if(orders) {
1924
- for(var i = ary.length; --i >= 0;) {
1942
+ for(let i = ary.length; --i >= 0;) {
1925
1943
  orders[i] = ary[orders[i]];
1926
1944
  }
1927
1945
  return orders;
@@ -1936,7 +1954,7 @@ DataTable._reorderItems = function (ary, orders) {
1936
1954
  * @return {!Array.<number>}
1937
1955
  */
1938
1956
  DataTable._createIndexArray = function(len) {
1939
- var ary = DataTable._idxAryMap[len];
1957
+ let ary = DataTable._idxAryMap[len];
1940
1958
  if(!ary) {
1941
1959
  if(DataTable._idxAryCount > 50) { // Clear cache to avoid caching huge memory
1942
1960
  DataTable._idxAryMap = {};
@@ -1945,7 +1963,7 @@ DataTable._createIndexArray = function(len) {
1945
1963
  ary = DataTable._idxAryMap[len] = new Array(len);
1946
1964
  DataTable._idxAryCount++;
1947
1965
 
1948
- for(var i = 0; i < len; ++i) {
1966
+ for(let i = 0; i < len; ++i) {
1949
1967
  ary[i] = i;
1950
1968
  }
1951
1969
  }