@refinitiv-ui/efx-grid 6.0.44 → 6.0.45

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. package/lib/column-selection-dialog/lib/column-selection-dialog.d.ts +3 -1
  2. package/lib/column-selection-dialog/lib/column-selection-dialog.js +24 -3
  3. package/lib/column-selection-dialog/themes/base.less +23 -12
  4. package/lib/column-selection-dialog/themes/elemental/dark/column-selection-dialog.js +1 -1
  5. package/lib/column-selection-dialog/themes/elemental/dark/es5/all-elements.js +1 -1
  6. package/lib/column-selection-dialog/themes/elemental/light/column-selection-dialog.js +1 -1
  7. package/lib/column-selection-dialog/themes/elemental/light/es5/all-elements.js +1 -1
  8. package/lib/column-selection-dialog/themes/halo/dark/column-selection-dialog.js +1 -1
  9. package/lib/column-selection-dialog/themes/halo/dark/es5/all-elements.js +1 -1
  10. package/lib/column-selection-dialog/themes/halo/light/column-selection-dialog.js +1 -1
  11. package/lib/column-selection-dialog/themes/halo/light/es5/all-elements.js +1 -1
  12. package/lib/column-selection-dialog/themes/solar/charcoal/column-selection-dialog.js +1 -1
  13. package/lib/column-selection-dialog/themes/solar/charcoal/es5/all-elements.js +1 -1
  14. package/lib/column-selection-dialog/themes/solar/pearl/column-selection-dialog.js +1 -1
  15. package/lib/column-selection-dialog/themes/solar/pearl/es5/all-elements.js +1 -1
  16. package/lib/core/dist/core.js +204 -186
  17. package/lib/core/dist/core.min.js +1 -1
  18. package/lib/core/es6/data/DataView.d.ts +2 -0
  19. package/lib/core/es6/data/DataView.js +170 -81
  20. package/lib/core/es6/data/Segment.d.ts +2 -0
  21. package/lib/core/es6/data/Segment.js +6 -0
  22. package/lib/core/es6/grid/Core.d.ts +0 -4
  23. package/lib/core/es6/grid/Core.js +28 -105
  24. package/lib/grid/index.js +1 -1
  25. package/lib/index.d.ts +0 -4
  26. package/lib/index.js +0 -4
  27. package/lib/tr-grid-row-filtering/es6/RowFiltering.d.ts +5 -0
  28. package/lib/tr-grid-row-filtering/es6/RowFiltering.js +30 -1
  29. package/lib/tr-grid-util/es6/CoralItems.js +2 -2
  30. package/lib/tr-grid-util/es6/ElfDate.js +1 -1
  31. package/lib/tr-grid-util/es6/ElfUtil.js +2 -2
  32. package/lib/tr-grid-util/es6/ExpanderIcon.js +1 -1
  33. package/lib/tr-grid-util/es6/GridPlugin.js +1 -1
  34. package/lib/tr-grid-util/es6/Icon.js +3 -3
  35. package/lib/tr-grid-util/es6/MultiTableManager.js +3 -3
  36. package/lib/tr-grid-util/es6/RowPainter.js +6 -2
  37. package/lib/tr-grid-util/es6/jet/Adc.d.ts +9 -0
  38. package/lib/tr-grid-util/es6/jet/Adc.js +268 -0
  39. package/lib/tr-grid-util/es6/jet/MockQuotes2.js +96 -7
  40. package/lib/tr-grid-util/es6/jet/MockUtil.d.ts +7 -0
  41. package/lib/tr-grid-util/es6/jet/MockUtil.js +25 -0
  42. package/lib/tr-grid-util/es6/jet/mockDataAPI.d.ts +2 -3
  43. package/lib/tr-grid-util/es6/jet/mockDataAPI.js +3 -288
  44. package/lib/types/es6/Core/data/DataView.d.ts +2 -0
  45. package/lib/types/es6/Core/data/Segment.d.ts +2 -0
  46. package/lib/types/es6/Core/grid/Core.d.ts +0 -4
  47. package/lib/utils/index.d.ts +5 -3
  48. package/lib/utils/index.js +5 -3
  49. package/lib/versions.json +3 -5
  50. package/lib/window-exporter.js +5 -0
  51. package/package.json +1 -1
  52. package/lib/tr-grid-printer/es6/CellWriter.d.ts +0 -49
  53. package/lib/tr-grid-printer/es6/CellWriter.js +0 -226
  54. package/lib/tr-grid-printer/es6/ColumnWriter.d.ts +0 -12
  55. package/lib/tr-grid-printer/es6/ColumnWriter.js +0 -21
  56. package/lib/tr-grid-printer/es6/GridPrinter.d.ts +0 -32
  57. package/lib/tr-grid-printer/es6/GridPrinter.js +0 -774
  58. package/lib/tr-grid-printer/es6/PrintTrait.d.ts +0 -38
  59. package/lib/tr-grid-printer/es6/PrintTrait.js +0 -481
  60. package/lib/tr-grid-printer/es6/SectionWriter.d.ts +0 -54
  61. package/lib/tr-grid-printer/es6/SectionWriter.js +0 -213
  62. package/lib/tr-grid-printer/es6/index.d.ts +0 -1
  63. package/lib/tr-grid-printer/es6/index.js +0 -1
@@ -13778,6 +13778,12 @@ Segment.prototype.getChildIds = function() {
13778
13778
  return this._childCount ? Object.keys(this._children) : [];
13779
13779
  };
13780
13780
  /** @public
13781
+ * @return {!Object}
13782
+ */
13783
+ Segment.prototype.getChildren = function() {
13784
+ return this._children;
13785
+ };
13786
+ /** @public
13781
13787
  * @return {number}
13782
13788
  */
13783
13789
  Segment.prototype.getChildCount = function() {
@@ -18797,6 +18803,8 @@ var DataView = function(source) {
18797
18803
  t._onRefreshTimeout = t._onRefreshTimeout.bind(t);
18798
18804
  t._updateWrapCount = t._updateWrapCount.bind(t);
18799
18805
 
18806
+ t._byRemovalMap = t._byRemovalMap.bind(t);
18807
+
18800
18808
  t._rids = [];
18801
18809
  t._sortingDefs = [];
18802
18810
  t._columnStats = {};
@@ -18850,6 +18858,15 @@ DataView.prototype._hiddenRids = null;
18850
18858
  * @type {Object.<string, boolean>}
18851
18859
  */
18852
18860
  DataView.prototype._collapsedRids = null; // for segmentation
18861
+ /** @private
18862
+ * @type {Object.<string, number>}
18863
+ */
18864
+ DataView.prototype._excludedRids = null;
18865
+ /** @private
18866
+ * @type {boolean}
18867
+ */
18868
+ DataView.prototype._emptySegmentFiltering = false;
18869
+
18853
18870
  /** @private
18854
18871
  * @type {Object.<string, number>}
18855
18872
  */
@@ -19546,8 +19563,6 @@ DataView.prototype.hideRow = function(rId, hidden) {
19546
19563
  */
19547
19564
  DataView.prototype.hideRows = function(rowRefs, hidden) {
19548
19565
  hidden = hidden !== false;
19549
- var dirty = false;
19550
- var rids = this._toRowIds(rowRefs);
19551
19566
  var hiddenRids = this._hiddenRids;
19552
19567
 
19553
19568
  if(hidden){
@@ -19558,11 +19573,19 @@ DataView.prototype.hideRows = function(rowRefs, hidden) {
19558
19573
  return; // All rows are visible
19559
19574
  }
19560
19575
 
19576
+ var rids = this._toRowIds(rowRefs);
19577
+ var dirty = false;
19578
+
19561
19579
  for(var i = rids.length; --i >= 0;) {
19562
19580
  var rid = rids[i];
19563
19581
  if(rid) { // undefined, null, and an empty string value are not a valid row id
19564
- if(!!hiddenRids[rid] !== hidden) {
19565
- hiddenRids[rid] = hidden;
19582
+ if(hidden) {
19583
+ if(!hiddenRids[rid]) {
19584
+ hiddenRids[rid] = true;
19585
+ dirty = true;
19586
+ }
19587
+ } else if(hiddenRids[rid]) {
19588
+ delete hiddenRids[rid];
19566
19589
  dirty = true;
19567
19590
  }
19568
19591
  }
@@ -19571,11 +19594,9 @@ DataView.prototype.hideRows = function(rowRefs, hidden) {
19571
19594
  if(dirty) {
19572
19595
  if(!hidden) {
19573
19596
  var hasHiddenRow = false;
19574
- for(var key in hiddenRids) {
19575
- if(hiddenRids[key]) {
19576
- hasHiddenRow = true;
19577
- break;
19578
- }
19597
+ for(var key in hiddenRids) { // eslint-disable-line
19598
+ hasHiddenRow = true;
19599
+ break;
19579
19600
  }
19580
19601
  if(!hasHiddenRow) {
19581
19602
  hiddenRids = this._hiddenRids = null;
@@ -19664,23 +19685,14 @@ DataView.prototype.filterOut = function(cid, value) {
19664
19685
  */
19665
19686
  DataView.prototype.filterInOnce = function(cid, value, opt_filteringOut) {
19666
19687
  var checker = this._getFilterLogic(cid, value);
19667
- if(!checker) { return; }
19668
-
19669
- var filteringOut = (opt_filteringOut === true);
19670
- var rids = this._rids;
19671
- var dt = this._dt;
19672
19688
  var removalMap = {};
19673
- var totalRem = 0;
19674
- var len = rids.length;
19675
- for(var i = len; --i >= 0;) {
19676
- var rid = rids[i];
19677
- var values = dt.getRowData(rid);
19678
- if (!values || checker(rid, values) === filteringOut) {
19679
- removalMap[rid] = true;
19680
- ++totalRem;
19681
- }
19689
+ if(!this._getRemovalMap(
19690
+ removalMap,
19691
+ checker,
19692
+ (opt_filteringOut === true)
19693
+ )) {
19694
+ return;
19682
19695
  }
19683
- if(totalRem <= 0) { return; }
19684
19696
 
19685
19697
  var firstChange = this._removeRowIds(removalMap);
19686
19698
 
@@ -19703,13 +19715,13 @@ DataView.prototype.filterOutOnce = function(cid, value) {
19703
19715
  this.filterInOnce(cid, value, true);
19704
19716
  };
19705
19717
  /** @private
19706
- * @param {!Object.<string, *>} removalMap
19718
+ * @param {!Object} removalMap
19707
19719
  * @return {number}
19708
19720
  */
19709
19721
  DataView.prototype._removeRowIds = function(removalMap) {
19710
- var firstChange = this._removeArrayItems(this._rids, removalMap);
19722
+ var firstChange = DataView._removeArrayItems(this._rids, removalMap);
19711
19723
  if(this._groupView) {
19712
- firstChange = this._removeArrayItems(this._groupView, removalMap);
19724
+ firstChange = DataView._removeArrayItems(this._groupView, removalMap);
19713
19725
  }
19714
19726
 
19715
19727
  if(this._groupMembers) {
@@ -21278,6 +21290,19 @@ DataView.prototype.getSegmentChildIds = function(segmentRef) {
21278
21290
  DataView.prototype.sortSegments = function (compare) {
21279
21291
  this._dt.sortSegments(compare);
21280
21292
  };
21293
+ /** Automatically hide empty segment when all of its member are filtered out. An empty segment will not be hidden, if there is no active filter. Collapsed segment does not count as filtering.
21294
+ * @public
21295
+ * @param {boolean=} enabled
21296
+ */
21297
+ DataView.prototype.enableEmptySegmentFiltering = function (enabled) {
21298
+ enabled = enabled !== false;
21299
+ if(this._emptySegmentFiltering !== enabled) {
21300
+ this._emptySegmentFiltering = enabled;
21301
+ if(this._userFilter) {
21302
+ this._refreshAndNotify();
21303
+ }
21304
+ }
21305
+ };
21281
21306
 
21282
21307
  /**
21283
21308
  * @public
@@ -21438,26 +21463,35 @@ DataView.prototype._updateRowIds = function(opt_rowIds) {
21438
21463
  // Perform the following sequences: parent view cloning >> row hiding >> row filtering >> row grouping >> sorting >> paging
21439
21464
  this._rids = opt_rowIds || this._parent.getAllRowIds(); // Get all data ids
21440
21465
 
21441
- if(this._hiddenRids) {
21442
- this._removeArrayItems(this._rids, this._hiddenRids);
21443
- }
21466
+ this._dispatch("beforeFiltering", {});
21467
+
21468
+ this._excludedRids = {};
21469
+ var exclusionCount = 0;
21470
+ exclusionCount += DataView._copyObjectKeys(this._excludedRids, this._hiddenRids);
21471
+
21472
+ // Segment separators should not be filtered out (hidden)
21444
21473
  var segments = this._dt._getSegmentSeparators();
21474
+ var filterExceptions = segments ? segments.getSegments() : null;
21475
+ var userRemoval = this._getRemovalMap(this._excludedRids, this._userFilter, this._filteringOut, filterExceptions);
21476
+ exclusionCount += userRemoval;
21477
+
21445
21478
  this._collapsedRids = null;
21446
- var filterExceptions = null;
21447
21479
  if(segments) {
21448
- filterExceptions = segments.getSegments(); // Segment separators should not be filtered out (hidden)
21449
- var collapsedRows = this._collapsedRids = segments.getCollapsedRows(); // Children of collapsed segments must be filtered out (hidden)
21450
- if(collapsedRows) {
21451
- this._removeArrayItems(this._rids, collapsedRows);
21480
+ if(userRemoval && this._emptySegmentFiltering) {
21481
+ exclusionCount += this._getEmptySegments(this._excludedRids, filterExceptions);
21452
21482
  }
21483
+ this._collapsedRids = segments.getCollapsedRows();
21484
+ // Children of collapsed segments must be filtered out (hidden)
21485
+ exclusionCount += DataView._copyObjectKeys(this._excludedRids, this._collapsedRids);
21453
21486
  }
21454
21487
 
21455
- this._dispatch("beforeFiltering", {});
21456
- this._quickFilter(this._userFilter, this._filteringOut, filterExceptions);
21457
-
21458
- if(this._groupLevel > 0 && !opt_rowIds) {
21459
- this._quickFilter(this._groupFilterLogic, false); // Filter In
21488
+ if(this._groupLevel > 0 && !opt_rowIds) { // WARNING: The line below is quite slow
21489
+ exclusionCount += this._getRemovalMap(this._excludedRids, this._groupFilterLogic, false); // Filter In
21490
+ }
21491
+ if(exclusionCount) {
21492
+ this._rids = this._rids.filter(this._byRemovalMap);
21460
21493
  }
21494
+ this._excludedRids = null;
21461
21495
 
21462
21496
  if(this._groupMembers) { // Has grouping
21463
21497
  this._populateGroups(); // View will be properly re-populate inside _populateGroups()
@@ -21729,9 +21763,9 @@ DataView.prototype._onRowUpdated = function(e) { // onUpdate
21729
21763
 
21730
21764
  if(this._groupLevel > 0) {
21731
21765
  if(processingFlag === 1) { // The row is moved to the other group
21732
- if(this._removeArrayItem(this._rids, rid) >= 0) {
21766
+ if(DataView._removeArrayItem(this._rids, rid) >= 0) {
21733
21767
  if(this._groupView) {
21734
- this._removeArrayItem(this._groupView, rid);
21768
+ DataView._removeArrayItem(this._groupView, rid);
21735
21769
  }
21736
21770
  }
21737
21771
  if(this._shared.multiGroupRow) {
@@ -21931,34 +21965,31 @@ DataView.prototype._getRowIndex = function(rids, opt_nextRid, opt_fallback) {
21931
21965
  * @returns {number}
21932
21966
  */
21933
21967
  DataView.prototype._removeDataRow = function(rid) {
21934
- var at = this._removeArrayItem(this._rids, rid);
21968
+ var at = DataView._removeArrayItem(this._rids, rid);
21935
21969
  if(this._groupView && at >= 0) {
21936
- at = this._removeArrayItem(this._groupView, rid);
21970
+ at = DataView._removeArrayItem(this._groupView, rid);
21937
21971
  }
21938
21972
  return at;
21939
21973
  };
21940
21974
  /** @private
21941
- * @param {Array} ary
21975
+ * @param {!Array} ary
21942
21976
  * @param {*} item
21943
21977
  * @return {number} Index of the removed item
21944
21978
  */
21945
- DataView.prototype._removeArrayItem = function(ary, item) {
21946
- var len = ary.length;
21947
- for(var i = 0; i < len; ++i) {
21948
- if(ary[i] === item) {
21949
- ary.splice(i, 1);
21950
- return i;
21951
- }
21979
+ DataView._removeArrayItem = function(ary, item) {
21980
+ var at = ary.indexOf(item);
21981
+ if(at >= 0) {
21982
+ ary.splice(at, 1);
21952
21983
  }
21953
- return -1;
21984
+ return at;
21954
21985
  };
21955
21986
  /** Remove multiple array items
21956
21987
  * @private
21957
21988
  * @param {Array.<string>} ary
21958
- * @param {Object.<string, *>} items
21989
+ * @param {Object} items
21959
21990
  * @return {number} First item index that is being removed. NaN if no item is removed
21960
21991
  */
21961
- DataView.prototype._removeArrayItems = function(ary, items) {
21992
+ DataView._removeArrayItems = function(ary, items) {
21962
21993
  var f = NaN;
21963
21994
  var c = 0;
21964
21995
  for(var i = ary.length; --i >= 0;) {
@@ -21977,6 +22008,23 @@ DataView.prototype._removeArrayItems = function(ary, items) {
21977
22008
  return f;
21978
22009
  };
21979
22010
  /** @private
22011
+ * @param {Object} baseObj
22012
+ * @param {Object} masterObj
22013
+ * @returns {number}
22014
+ */
22015
+ DataView._copyObjectKeys = function(baseObj, masterObj) {
22016
+ if(masterObj) {
22017
+ var count = 0;
22018
+
22019
+ for(var key in masterObj) {
22020
+ baseObj[key] = 1;
22021
+ ++count; // WARNING: duplicated key can be counted more than once
22022
+ }
22023
+ return count;
22024
+ }
22025
+ return 0;
22026
+ };
22027
+ /** @private
21980
22028
  * @param {string|null} rid
21981
22029
  * @param {Object} rowData
21982
22030
  * @return {boolean}
@@ -22010,9 +22058,6 @@ DataView.prototype.isRowFiltered = function(rid, rowData) {
22010
22058
  return true;
22011
22059
  }
22012
22060
  }
22013
- if(this.isSegmentSeparator(rid)) {
22014
- return false; // Segment separator cannot be filtered
22015
- }
22016
22061
  if(this._collapsedRids) {
22017
22062
  if(this._collapsedRids[rid]) {
22018
22063
  return true;
@@ -22054,40 +22099,90 @@ DataView.prototype._sort = function() {
22054
22099
  };
22055
22100
 
22056
22101
  /** @private
22102
+ * @param {string} rid
22103
+ * @returns {boolean}
22104
+ */
22105
+ DataView.prototype._byRemovalMap = function(rid) {
22106
+ return !this._excludedRids[rid];
22107
+ };
22108
+ /** @private
22109
+ * @param {Object} removalMap
22057
22110
  * @param {Function} checker
22058
22111
  * @param {boolean} filteringOut
22059
22112
  * @param {Object=} exceptions
22113
+ * @returns {number} Number of rids that would be filtered out
22060
22114
  */
22061
- DataView.prototype._quickFilter = function(checker, filteringOut, exceptions) {
22115
+ DataView.prototype._getRemovalMap = function(removalMap, checker, filteringOut, exceptions) {
22062
22116
  if(!checker) {
22063
- return;
22117
+ return 0;
22064
22118
  }
22065
22119
 
22066
22120
  var rids = this._rids; // Make local variable to speed up the process
22067
- var len = rids.length;
22068
22121
  var dt = this._dt;
22069
- var spliceCount = 0;
22070
- for(var i = len; --i >= 0;) {
22071
- var rid = rids[i];
22072
- var removed = false;
22073
- if(!exceptions || !exceptions[rid]) {
22074
- var values = dt.getRowData(rid);
22122
+ var count = 0;
22123
+ var rid, i, values;
22124
+ var len = rids.length;
22125
+
22126
+ if(exceptions) {
22127
+ for(i = len; --i >= 0;) {
22128
+ rid = rids[i];
22129
+ if(!exceptions[rid]) {
22130
+ values = dt.getRowData(rid);
22131
+ if (values) {
22132
+ if(checker(rid, values) === filteringOut) {
22133
+ removalMap[rid] = 1;
22134
+ ++count;
22135
+ }
22136
+ } else {
22137
+ removalMap[rid] = 1;
22138
+ ++count;
22139
+ }
22140
+ }
22141
+ }
22142
+ } else {
22143
+ for(i = len; --i >= 0;) {
22144
+ rid = rids[i];
22145
+ values = dt.getRowData(rid);
22075
22146
  if (values) {
22076
- removed = checker(rid, values) === filteringOut;
22147
+ if(checker(rid, values) === filteringOut) {
22148
+ removalMap[rid] = 1;
22149
+ ++count;
22150
+ }
22077
22151
  } else {
22078
- removed = true;
22152
+ removalMap[rid] = 1;
22153
+ ++count;
22079
22154
  }
22080
22155
  }
22081
- if(removed) {
22082
- ++spliceCount;
22083
- } else if(spliceCount > 0) {
22084
- rids.splice(i + 1, spliceCount);
22085
- spliceCount = 0;
22086
- }
22087
22156
  }
22088
- if(spliceCount > 0) {
22089
- rids.splice(0, spliceCount);
22157
+ return count;
22158
+ };
22159
+ /** @private
22160
+ * @param {Object} removalMap
22161
+ * @param {Object} segmentRids
22162
+ * @returns {number} Number of rids that would be filtered out
22163
+ */
22164
+ DataView.prototype._getEmptySegments = function(removalMap, segmentRids) {
22165
+ var segments = this._dt._getSegmentSeparators();
22166
+ var count = 0;
22167
+ for(var segmentId in segmentRids) {
22168
+ var segment = segments.getSegment(segmentId);
22169
+ if(segment) {
22170
+ var chdr = segment.getChildren();
22171
+ var emptySegment = true;
22172
+ for(var childId in chdr) {
22173
+ if(!removalMap[childId]) {
22174
+ emptySegment = false;
22175
+ break;
22176
+ }
22177
+ }
22178
+ if(emptySegment) {
22179
+ removalMap[segmentId] = 1;
22180
+ ++count;
22181
+ }
22182
+ }
22090
22183
  }
22184
+
22185
+ return count;
22091
22186
  };
22092
22187
  /** @private
22093
22188
  * @param {string|Function|undefined} cid
@@ -22367,13 +22462,13 @@ DataView.prototype._removeGroupMember = function (groupIndex, groupId) {
22367
22462
  };
22368
22463
  /** @private
22369
22464
  * @param {string} cid
22370
- * @param {Object.<string, *>} values
22465
+ * @param {Object} values
22371
22466
  * @return {Array.<string>}
22372
22467
  */
22373
22468
  DataView.prototype._defaultGroupCriteria = function(cid, values) {
22374
22469
  var val = values[cid];
22375
22470
  if(Array.isArray(val)) {
22376
- return val.map(function(data) {
22471
+ return val.map(function(data) { // TODO: this is very slow
22377
22472
  return data + "";
22378
22473
  });
22379
22474
  } else {
@@ -22382,11 +22477,11 @@ DataView.prototype._defaultGroupCriteria = function(cid, values) {
22382
22477
  };
22383
22478
  /** @private
22384
22479
  * @param {string|null} rid
22385
- * @param {Object.<string, *>} values
22480
+ * @param {Object} values
22386
22481
  * @return {boolean}
22387
22482
  */
22388
22483
  DataView.prototype._groupFilterLogic = function(rid, values) {
22389
- var gids = this._groupCriteria[this._groupLevel - 1](values);
22484
+ var gids = this._groupCriteria[this._groupLevel - 1](values); // TODO: this is very slow
22390
22485
  return gids.indexOf(this._groupId) >= 0;
22391
22486
  };
22392
22487
 
@@ -25295,7 +25390,6 @@ VirtualizedLayoutGrid._proto = VirtualizedLayoutGrid.prototype;
25295
25390
  * @property {string} rowId
25296
25391
  * @property {number} rowIndex
25297
25392
  */
25298
- /** @event Core#beforeContentBinding */
25299
25393
  /** @event Core#postSectionDataBinding */
25300
25394
  /** @event Core#rowHighlighted */
25301
25395
 
@@ -25346,7 +25440,6 @@ var Core_Core = function (opt_initializer) {
25346
25440
 
25347
25441
  _t._onMouseMove = _t._onMouseMove.bind(_t);
25348
25442
  _t._onRowHightlighted = _t._onRowHightlighted.bind(_t);
25349
- _t._onGridClicked = _t._onGridClicked.bind(_t);
25350
25443
 
25351
25444
  _t._onWindowResize = _t._onWindowResize.bind(_t);
25352
25445
  _t._onSectionDataChanged = _t._onSectionDataChanged.bind(_t);
@@ -25432,16 +25525,11 @@ var Core_Core = function (opt_initializer) {
25432
25525
  _t._hscrollbar.setOtherScrollbar(_t._vscrollbar);
25433
25526
  _t._vscrollbar.setOtherScrollbar(_t._hscrollbar);
25434
25527
 
25435
- if (util.isMobile || util.isTouchDevice) {
25528
+ if (util.isMobile) {
25436
25529
  _t._element.addEventListener("touchmove", this._onMouseMove, false);
25437
25530
  } else {
25438
25531
  _t._element.addEventListener("mousemove", this._onMouseMove, false);
25439
25532
  }
25440
-
25441
- if(util.isSafari){
25442
- _t._element.addEventListener("click", this._onGridClicked);
25443
- }
25444
-
25445
25533
  window.addEventListener("resize", _t._onWindowResize, false); // Should be unlistened after destroyed
25446
25534
  _t._rowVirtualizer.listen("indexChanged", _t._onRowInViewChanged);
25447
25535
  _t._colVirtualizer.listen("indexChanged", _t._onColInViewChanged);
@@ -25464,7 +25552,6 @@ var Core_Core = function (opt_initializer) {
25464
25552
  "postDataSourceChanged",
25465
25553
  "preSectionRender",
25466
25554
  "postSectionRender",
25467
- "beforeContentBinding",
25468
25555
  "preSectionDataBinding",
25469
25556
  "postSectionDataBinding",
25470
25557
  "rowExpansionBinding",
@@ -25826,7 +25913,7 @@ Core_Core.prototype._batches = null;
25826
25913
  * @return {string}
25827
25914
  */
25828
25915
  Core_Core.getVersion = function () {
25829
- return "5.1.64";
25916
+ return "5.1.65";
25830
25917
  };
25831
25918
  /** {@link ElementWrapper#dispose}
25832
25919
  * @override
@@ -26628,7 +26715,6 @@ Core_Core.prototype.getColumnCount = function () {
26628
26715
  * @fires Core#columnAdded
26629
26716
  * @fires Core#preSectionRender
26630
26717
  * @fires Core#columnRender
26631
- * @fires Core#beforeContentBinding
26632
26718
  * @fires Core#preSectionDataBinding
26633
26719
  * @fires Core#columnDataBinding
26634
26720
  * @fires Core#postSectionDataBinding
@@ -26656,7 +26742,6 @@ Core_Core.prototype.setColumnCount = function(num) {
26656
26742
  * @fires Core#columnAdded
26657
26743
  * @fires Core#preSectionRender
26658
26744
  * @fires Core#columnRender
26659
- * @fires Core#beforeContentBinding
26660
26745
  * @fires Core#preSectionDataBinding
26661
26746
  * @fires Core#columnDataBinding
26662
26747
  * @fires Core#postSectionDataBinding
@@ -26773,12 +26858,16 @@ Core_Core.prototype.removeColumnAt = function (index) {
26773
26858
 
26774
26859
  if (this._hasListener("columnRemoved")) {
26775
26860
  var e = {};
26861
+ var batches = this._batches;
26862
+ if(batches){
26863
+ e["batches"] = batches;
26864
+ }
26776
26865
  e["atTheMiddle"] = true;
26777
26866
  e["colIndex"] = index;
26778
26867
  e["columns"] = "deprecated";
26779
26868
  e["columnData"] = colDef["columnData"];
26780
26869
  e["colId"] = colDef["id"] || "";
26781
- this._dispatchColumnEvent("columnRemoved", e);
26870
+ this._dispatch("columnRemoved", e);
26782
26871
  }
26783
26872
 
26784
26873
  // Last index in view here might be different from before moving column if columns have different width.
@@ -27031,7 +27120,7 @@ Core_Core.prototype._moveColumn = function (fromCol, destCol) {
27031
27120
  e["fromColIndex"] = fromCol;
27032
27121
  e["toColIndex"] = destCol;
27033
27122
  e["colId"] = colId; // TODO: Id may not needed
27034
- this._dispatchColumnEvent("columnMoved", e); // add remove move
27123
+ this._dispatch("columnMoved", e);
27035
27124
  }
27036
27125
 
27037
27126
  // Last index in view here might be different from before moving column if columns have different width.
@@ -27101,9 +27190,6 @@ Core_Core.prototype.reorderColumns = function (colRefs, destCol) {
27101
27190
  destId = destCol;
27102
27191
  }
27103
27192
 
27104
- this.startBatch("move");
27105
-
27106
- var dirty = 0;
27107
27193
  if(Array.isArray(colRefs)) {
27108
27194
  var srcLen = colRefs.length;
27109
27195
  if(srcLen > 1) {
@@ -27146,6 +27232,7 @@ Core_Core.prototype.reorderColumns = function (colRefs, destCol) {
27146
27232
  }
27147
27233
  }
27148
27234
 
27235
+ var dirty = 0;
27149
27236
  for(i = srcLen; --i >= 0;) {
27150
27237
  srcId = srcIds[i]; // Only valid source columns are left at this point
27151
27238
  srcIdx = this.getColumnIndex(srcId);
@@ -27156,15 +27243,17 @@ Core_Core.prototype.reorderColumns = function (colRefs, destCol) {
27156
27243
  dirty |= this._moveColumnByIndex(srcIdx, destIdx);
27157
27244
  destId = srcId;
27158
27245
  }
27246
+ return dirty ? true : false;
27159
27247
  } else {
27160
- dirty = this.moveColumnById(colRefs[0], destId);
27248
+ return this.moveColumnById(colRefs[0], destId);
27161
27249
  }
27162
- } else if(colRefs != null) {
27250
+ }
27251
+
27252
+ if(colRefs != null) {
27163
27253
  // colRefs will be a number or string
27164
- dirty = this.moveColumnById(colRefs, destId);
27254
+ return this.moveColumnById(colRefs, destId);
27165
27255
  }
27166
- this.stopBatch("move");
27167
- return dirty ? true : false;
27256
+ return false;
27168
27257
  };
27169
27258
 
27170
27259
  /** @public
@@ -27271,7 +27360,6 @@ Core_Core.prototype._deserializeColumn = function (index, jsonObj) {
27271
27360
  * @param {number=} opt_num Default is one row
27272
27361
  * @fires Core#preSectionRender
27273
27362
  * @fires Core#columnRender
27274
- * @fires Core#beforeContentBinding
27275
27363
  * @fires Core#preSectionDataBinding
27276
27364
  * @fires Core#columnDataBinding
27277
27365
  * @fires Core#postSectionDataBinding
@@ -29075,7 +29163,6 @@ Core_Core.prototype.synchronizeHScrollbar = function (subGrid) {
29075
29163
  * @param {number=} fromRowIndex INCLUSIVE If the value is undefined, the first row index will be used
29076
29164
  * @param {number=} lastRowIndex INCLUSIVE If the value is undefined, the last row index will be used
29077
29165
  * @param {Object=} userParam Addtional parameters to be fired with the event
29078
- * @fires Core#beforeContentBinding
29079
29166
  * @fires Core#preSectionDataBinding
29080
29167
  * @fires Core#columnDataBinding
29081
29168
  * @fires Core#postSectionDataBinding
@@ -29681,53 +29768,6 @@ Core_Core.prototype.getColumnGroupChildIds = function (groupId) {
29681
29768
  return null;
29682
29769
  };
29683
29770
 
29684
- /** @public
29685
- * @description Get a list of objects with column id and column index in sorted order
29686
- * @param {Array.<string>} colIds
29687
- * @param {Object=} columnMap
29688
- * @return {!Array.<string>} Return column array with corresponding order to UI
29689
- * @example
29690
- * core.getValidColumnList(["c1","c2","c5"]); // Get list of valid columns
29691
- * core.getValidColumnList(["c1","c2","c5"],{ "c2":true, "c5":true }); // Get list of valid columns from specific mapping
29692
- */
29693
- Core_Core.prototype.getValidColumnList = function (colIds, columnMap) {
29694
- var colList = [];
29695
- if(!colIds){
29696
- return colList;
29697
- }
29698
- if(!columnMap){
29699
- columnMap = this.createColumnMap(colIds);
29700
- }
29701
- var colCount = this.getColumnCount();
29702
- for(var c = 0; c < colCount; ++c) {
29703
- var id = this._getColumnDef(c)["id"];
29704
- if(columnMap[id] != null){
29705
- colList.push({"index": c, "id": id});
29706
- }
29707
- }
29708
- return colList;
29709
- };
29710
-
29711
- /** @public
29712
- * @description Create mapping object from an array of strings
29713
- * @param {Array.<string>=} colIds
29714
- * @return {!Object} Column mapping object
29715
- */
29716
- Core_Core.prototype.createColumnMap = function (colIds) {
29717
- if(!colIds){
29718
- colIds = this.getColumnIds();
29719
- }
29720
- var mappingObj = {};
29721
- var count = colIds.length;
29722
- for(var i = 0; i < count; i++){
29723
- var colId = colIds[i];
29724
- if(colId){
29725
- mappingObj[colId] = true;
29726
- }
29727
- }
29728
- return mappingObj;
29729
- };
29730
-
29731
29771
  /** @public
29732
29772
  * @param {string} batchType
29733
29773
  * @return {boolean}
@@ -29765,17 +29805,6 @@ Core_Core.prototype.stopBatch = function (batchType) {
29765
29805
 
29766
29806
  //#region Private Methods
29767
29807
  /** @private
29768
- * @param {string} type
29769
- * @param {!Object} eventArg
29770
- */
29771
- Core_Core.prototype._dispatchColumnEvent = function (type, eventArg) {
29772
- var batches = this._batches;
29773
- if(batches){
29774
- eventArg["batches"] = batches;
29775
- }
29776
- this._dispatch(type, eventArg);
29777
- };
29778
- /** @private
29779
29808
  */
29780
29809
  Core_Core.prototype._dispatchColumnPositionChanged = function () {
29781
29810
  if(this._columnPositionConflator.conflate()) {
@@ -30015,16 +30044,20 @@ Core_Core.prototype._dispatchColumnAddedEvent = function (at, count, atTheMiddle
30015
30044
  if (this._hasListener("columnAdded")) {
30016
30045
  var e = {};
30017
30046
  e["atTheMiddle"] = atTheMiddle;
30047
+ var batches = this._batches;
30048
+ if(batches){
30049
+ e["batches"] = batches;
30050
+ }
30018
30051
  if(count === 1) {
30019
30052
  e["colIndex"] = at;
30020
30053
  e["context"] = ctx;
30021
- this._dispatchColumnEvent("columnAdded", e);
30054
+ this._dispatch("columnAdded", e);
30022
30055
  } else {
30023
30056
  var ary = Array.isArray(ctx) ? ctx : [];
30024
30057
  for (var i = 0; i < count; ++i) {
30025
30058
  e["colIndex"] = at + i;
30026
30059
  e["context"] = ary[i];
30027
- this._dispatchColumnEvent("columnAdded", e);
30060
+ this._dispatch("columnAdded", e);
30028
30061
  }
30029
30062
  }
30030
30063
  }
@@ -30166,11 +30199,15 @@ Core_Core.prototype._removeColumn = function (num) { // TODO: change the logic
30166
30199
 
30167
30200
  if (this._hasListener("columnRemoved")) {
30168
30201
  var e = {};
30202
+ var batches = this._batches;
30203
+ if(batches){
30204
+ e["batches"] = batches;
30205
+ }
30169
30206
  for (var c = colCount; --c >= newCount; ) {
30170
30207
  var colDef = removedCols[c - newCount];
30171
30208
  e["colIndex"] = c;
30172
30209
  e["columnData"] = colDef ? colDef["columnData"] : null;
30173
- this._dispatchColumnEvent("columnRemoved", e);
30210
+ this._dispatch("columnRemoved", e);
30174
30211
  }
30175
30212
  }
30176
30213
  };
@@ -30203,9 +30240,6 @@ Core_Core.prototype._onSectionDataChanged = function (e) {
30203
30240
  rowDataCollection = dataView.getMultipleRowData(rids, fromR, toR);
30204
30241
  e["dataRows"] = rowDataCollection;
30205
30242
  }
30206
- if(e["sectionType"] === "content"){
30207
- this._dispatch("beforeContentBinding", e);
30208
- }
30209
30243
  this._dispatch("preSectionDataBinding", e);
30210
30244
 
30211
30245
  var dataMap = this.getDataColumnMap();
@@ -30220,13 +30254,9 @@ Core_Core.prototype._onSectionDataChanged = function (e) {
30220
30254
  for (var r = fromR; r < toR; ++r) {
30221
30255
  if(hasDataView) {
30222
30256
  var rowData = rowDataCollection[r];
30223
- if(!rowData) { // This is a header row
30224
- continue;
30225
- }
30226
-
30227
30257
  e["rowData"] = rowData;
30228
30258
  e["rowId"] = rids[r];
30229
- e["dataValue"] = rowData[cid];
30259
+ e["dataValue"] = rowData ? rowData[cid] : null;
30230
30260
  }
30231
30261
  e["rowIndex"] = r;
30232
30262
  e["cell"] = section["getCell"](c, r, false); // Accessing cell by using bracket allows extenal object to mock Section
@@ -30567,18 +30597,6 @@ Core_Core.prototype._onMouseMove = function () {
30567
30597
  this._vscrollbar.flash();
30568
30598
  this._hscrollbar.flash();
30569
30599
  };
30570
- /** @private */
30571
- Core_Core.prototype._onGridClicked = function () {
30572
- // research for dragging
30573
- var selection = window.getSelection();
30574
- if(selection.toString()){
30575
- return;
30576
- }
30577
- var activeElem = document.activeElement;
30578
- if(!this._element.contains(activeElem)){
30579
- this.focus();
30580
- }
30581
- };
30582
30600
 
30583
30601
  /** @private
30584
30602
  * @param {Object} e