@refinitiv-ui/efx-grid 6.0.91 → 6.0.92

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) 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/grid/index.js +1 -1
  42. package/lib/rt-grid/dist/rt-grid.js +193 -70
  43. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  44. package/lib/rt-grid/es6/Grid.js +46 -30
  45. package/lib/rt-grid/es6/RowDefinition.d.ts +2 -1
  46. package/lib/rt-grid/es6/RowDefinition.js +74 -16
  47. package/lib/tr-grid-cell-selection/es6/CellSelection.js +56 -1
  48. package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +3 -1
  49. package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +29 -1
  50. package/lib/tr-grid-util/es6/CellPainter.js +94 -93
  51. package/lib/tr-grid-util/es6/Conflator.js +4 -4
  52. package/lib/tr-grid-util/es6/CoralItems.js +6 -6
  53. package/lib/tr-grid-util/es6/DateTime.js +39 -39
  54. package/lib/tr-grid-util/es6/Deferred.js +5 -5
  55. package/lib/tr-grid-util/es6/Delay.js +1 -1
  56. package/lib/tr-grid-util/es6/Dom.js +26 -26
  57. package/lib/tr-grid-util/es6/DragUI.js +17 -17
  58. package/lib/tr-grid-util/es6/ElementObserver.js +12 -12
  59. package/lib/tr-grid-util/es6/ElementWrapper.js +2 -2
  60. package/lib/tr-grid-util/es6/ElfDate.js +4 -4
  61. package/lib/tr-grid-util/es6/ElfUtil.js +37 -37
  62. package/lib/tr-grid-util/es6/EventDispatcher.js +12 -12
  63. package/lib/tr-grid-util/es6/ExpanderIcon.js +6 -6
  64. package/lib/tr-grid-util/es6/ExpressionParser.js +43 -43
  65. package/lib/tr-grid-util/es6/Ext.js +6 -6
  66. package/lib/tr-grid-util/es6/FieldFormatter.js +17 -17
  67. package/lib/tr-grid-util/es6/FilterBuilder.js +57 -57
  68. package/lib/tr-grid-util/es6/FilterOperators.d.ts +12 -1
  69. package/lib/tr-grid-util/es6/FilterOperators.js +13 -2
  70. package/lib/tr-grid-util/es6/GridPlugin.js +86 -86
  71. package/lib/tr-grid-util/es6/GroupDefinitions.js +90 -90
  72. package/lib/tr-grid-util/es6/Icon.js +4 -4
  73. package/lib/tr-grid-util/es6/MouseDownTrait.js +6 -6
  74. package/lib/tr-grid-util/es6/MultiTableManager.js +68 -68
  75. package/lib/tr-grid-util/es6/NumberFormatter.js +22 -22
  76. package/lib/tr-grid-util/es6/PercentBar.js +17 -17
  77. package/lib/tr-grid-util/es6/Perf.js +5 -5
  78. package/lib/tr-grid-util/es6/Popup.js +42 -42
  79. package/lib/tr-grid-util/es6/RangeBar.js +5 -5
  80. package/lib/tr-grid-util/es6/RequestQueue.js +5 -5
  81. package/lib/tr-grid-util/es6/RowPainter.js +23 -23
  82. package/lib/tr-grid-util/es6/SubTable.js +94 -94
  83. package/lib/tr-grid-util/es6/Table.js +51 -51
  84. package/lib/tr-grid-util/es6/TextHighlighter.js +49 -49
  85. package/lib/tr-grid-util/es6/TickCodes.js +2 -2
  86. package/lib/tr-grid-util/es6/Timer.js +2 -2
  87. package/lib/tr-grid-util/es6/TouchProxy.js +7 -7
  88. package/lib/tr-grid-util/es6/Util.js +50 -50
  89. package/lib/tr-grid-util/es6/formula/ADCService.js +2 -2
  90. package/lib/tr-grid-util/es6/formula/ADCSubscription.js +19 -19
  91. package/lib/tr-grid-util/es6/formula/AdFinService.js +2 -2
  92. package/lib/tr-grid-util/es6/formula/AdFinSubscription.js +19 -19
  93. package/lib/tr-grid-util/es6/formula/Engine.js +56 -56
  94. package/lib/tr-grid-util/es6/formula/Formula.js +62 -62
  95. package/lib/tr-grid-util/es6/formula/IntervalSubscription.js +3 -3
  96. package/lib/tr-grid-util/es6/formula/Realtime.js +15 -15
  97. package/lib/tr-grid-util/es6/formula/RealtimeService.js +15 -15
  98. package/lib/tr-grid-util/es6/formula/TSIService.js +2 -2
  99. package/lib/tr-grid-util/es6/formula/TSISubscription.js +104 -104
  100. package/lib/tr-grid-util/es6/formula/VariableToken.js +20 -20
  101. package/lib/tr-grid-util/es6/formula/functions/AdFin.js +10 -10
  102. package/lib/tr-grid-util/es6/formula/functions/Excel.js +1 -1
  103. package/lib/tr-grid-util/es6/formula/functions/Info.js +2 -2
  104. package/lib/tr-grid-util/es6/formula/functions/Internal.js +5 -5
  105. package/lib/tr-grid-util/es6/formula/functions/Logic.js +5 -5
  106. package/lib/tr-grid-util/es6/formula/functions/Math.js +46 -46
  107. package/lib/tr-grid-util/es6/formula/functions/Statistics.js +27 -27
  108. package/lib/tr-grid-util/es6/formula/functions/Text.js +19 -19
  109. package/lib/tr-grid-util/es6/index.js +1 -1
  110. package/lib/tr-grid-util/es6/jet/Adc.js +36 -36
  111. package/lib/tr-grid-util/es6/jet/CollectionDict.js +11 -11
  112. package/lib/tr-grid-util/es6/jet/DataGenerator.js +95 -95
  113. package/lib/tr-grid-util/es6/jet/DataSet.js +1 -1
  114. package/lib/tr-grid-util/es6/jet/MockArchive.js +5 -5
  115. package/lib/tr-grid-util/es6/jet/MockJET.js +1 -1
  116. package/lib/tr-grid-util/es6/jet/MockQuotes.js +13 -13
  117. package/lib/tr-grid-util/es6/jet/MockQuotes2.js +100 -100
  118. package/lib/tr-grid-util/es6/jet/MockRTK.js +4 -4
  119. package/lib/tr-grid-util/es6/jet/MockUtil.js +2 -2
  120. package/lib/tr-grid-util/es6/jet/index.js +1 -1
  121. package/lib/tr-grid-util/es6/jet/mockDataAPI.js +15 -15
  122. package/lib/tr-grid-util/es6/locale/translation-de.js +1 -1
  123. package/lib/tr-grid-util/es6/locale/translation-en.js +1 -1
  124. package/lib/tr-grid-util/es6/locale/translation-ja.js +1 -1
  125. package/lib/tr-grid-util/es6/locale/translation-zh-hant.js +1 -1
  126. package/lib/tr-grid-util/es6/locale/translation-zh.js +1 -1
  127. package/lib/tr-grid-util/es6/locale/translation.js +1 -1
  128. package/lib/types/es6/ColumnDragging.d.ts +1 -1
  129. package/lib/types/es6/ColumnGrouping.d.ts +3 -1
  130. package/lib/types/es6/Core/data/DataTable.d.ts +4 -0
  131. package/lib/types/es6/Core/data/DataView.d.ts +2 -0
  132. package/lib/types/es6/Core/data/SegmentCollection.d.ts +2 -0
  133. package/lib/types/es6/Core/index.d.ts +0 -2
  134. package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +2 -1
  135. package/lib/versions.json +4 -4
  136. package/package.json +1 -1
  137. package/lib/core/es6/grid/util/ElementFrameWork.d.ts +0 -18
  138. package/lib/core/es6/grid/util/ElementFrameWork.js +0 -227
  139. package/lib/core/es6/grid/util/HttpRequest.d.ts +0 -53
  140. package/lib/core/es6/grid/util/HttpRequest.js +0 -371
  141. package/lib/core/es6/grid/util/PercentBar.d.ts +0 -43
  142. package/lib/core/es6/grid/util/PercentBar.js +0 -390
  143. package/lib/core/es6/grid/util/PercentBarRenderer.d.ts +0 -41
  144. package/lib/core/es6/grid/util/PercentBarRenderer.js +0 -316
  145. package/lib/core/es6/grid/util/RangeBar.d.ts +0 -25
  146. package/lib/core/es6/grid/util/RangeBar.js +0 -255
  147. package/lib/types/es6/Core/grid/util/ElementFrameWork.d.ts +0 -18
  148. package/lib/types/es6/Core/grid/util/HttpRequest.d.ts +0 -53
  149. package/lib/types/es6/Core/grid/util/PercentBar.d.ts +0 -43
  150. package/lib/types/es6/Core/grid/util/PercentBarRenderer.d.ts +0 -41
  151. 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
  }