@refinitiv-ui/efx-grid 6.0.44 → 6.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/column-selection-dialog/lib/column-selection-dialog.d.ts +3 -1
- package/lib/column-selection-dialog/lib/column-selection-dialog.js +24 -3
- package/lib/column-selection-dialog/themes/base.less +23 -12
- package/lib/column-selection-dialog/themes/elemental/dark/column-selection-dialog.js +1 -1
- package/lib/column-selection-dialog/themes/elemental/dark/es5/all-elements.js +1 -1
- package/lib/column-selection-dialog/themes/elemental/light/column-selection-dialog.js +1 -1
- package/lib/column-selection-dialog/themes/elemental/light/es5/all-elements.js +1 -1
- package/lib/column-selection-dialog/themes/halo/dark/column-selection-dialog.js +1 -1
- package/lib/column-selection-dialog/themes/halo/dark/es5/all-elements.js +1 -1
- package/lib/column-selection-dialog/themes/halo/light/column-selection-dialog.js +1 -1
- package/lib/column-selection-dialog/themes/halo/light/es5/all-elements.js +1 -1
- package/lib/column-selection-dialog/themes/solar/charcoal/column-selection-dialog.js +1 -1
- package/lib/column-selection-dialog/themes/solar/charcoal/es5/all-elements.js +1 -1
- package/lib/column-selection-dialog/themes/solar/pearl/column-selection-dialog.js +1 -1
- package/lib/column-selection-dialog/themes/solar/pearl/es5/all-elements.js +1 -1
- package/lib/core/dist/core.js +204 -186
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/data/DataView.d.ts +2 -0
- package/lib/core/es6/data/DataView.js +170 -81
- package/lib/core/es6/data/Segment.d.ts +2 -0
- package/lib/core/es6/data/Segment.js +6 -0
- package/lib/core/es6/grid/Core.d.ts +0 -4
- package/lib/core/es6/grid/Core.js +28 -105
- package/lib/grid/index.js +1 -1
- package/lib/index.d.ts +0 -4
- package/lib/index.js +0 -4
- package/lib/tr-grid-printer/es6/GridPrinter.js +5 -5
- package/lib/tr-grid-printer/es6/index.js +1 -1
- package/lib/tr-grid-row-filtering/es6/RowFiltering.d.ts +5 -0
- package/lib/tr-grid-row-filtering/es6/RowFiltering.js +30 -1
- package/lib/tr-grid-util/es6/CoralItems.js +2 -2
- package/lib/tr-grid-util/es6/ElfDate.js +1 -1
- package/lib/tr-grid-util/es6/ElfUtil.js +2 -2
- package/lib/tr-grid-util/es6/ExpanderIcon.js +1 -1
- package/lib/tr-grid-util/es6/GridPlugin.js +1 -1
- package/lib/tr-grid-util/es6/Icon.js +3 -3
- package/lib/tr-grid-util/es6/MultiTableManager.js +3 -3
- package/lib/tr-grid-util/es6/RowPainter.js +6 -2
- package/lib/tr-grid-util/es6/jet/Adc.d.ts +9 -0
- package/lib/tr-grid-util/es6/jet/Adc.js +268 -0
- package/lib/tr-grid-util/es6/jet/MockQuotes2.js +96 -7
- package/lib/tr-grid-util/es6/jet/MockUtil.d.ts +7 -0
- package/lib/tr-grid-util/es6/jet/MockUtil.js +25 -0
- package/lib/tr-grid-util/es6/jet/mockDataAPI.d.ts +2 -3
- package/lib/tr-grid-util/es6/jet/mockDataAPI.js +3 -288
- package/lib/types/es6/Core/data/DataView.d.ts +2 -0
- package/lib/types/es6/Core/data/Segment.d.ts +2 -0
- package/lib/types/es6/Core/grid/Core.d.ts +0 -4
- package/lib/types/es6/RowFiltering.d.ts +5 -0
- package/lib/utils/index.d.ts +5 -3
- package/lib/utils/index.js +5 -3
- package/lib/versions.json +3 -5
- package/lib/window-exporter.js +5 -0
- package/package.json +1 -1
    
        package/lib/core/dist/core.js
    CHANGED
    
    | @@ -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( | 
| 19565 | 
            -
            				hiddenRids[rid]  | 
| 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 | 
            -
            				 | 
| 19576 | 
            -
             | 
| 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 | 
            -
            	 | 
| 19674 | 
            -
             | 
| 19675 | 
            -
             | 
| 19676 | 
            -
            		 | 
| 19677 | 
            -
             | 
| 19678 | 
            -
            		 | 
| 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 | 
| 19718 | 
            +
            * @param {!Object} removalMap
         | 
| 19707 19719 | 
             
            * @return {number}
         | 
| 19708 19720 | 
             
            */
         | 
| 19709 19721 | 
             
            DataView.prototype._removeRowIds = function(removalMap) {
         | 
| 19710 | 
            -
            	var firstChange =  | 
| 19722 | 
            +
            	var firstChange = DataView._removeArrayItems(this._rids, removalMap);
         | 
| 19711 19723 | 
             
            	if(this._groupView) {
         | 
| 19712 | 
            -
            		firstChange =  | 
| 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 | 
            -
            	 | 
| 21442 | 
            -
             | 
| 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 | 
            -
            		 | 
| 21449 | 
            -
             | 
| 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. | 
| 21456 | 
            -
             | 
| 21457 | 
            -
             | 
| 21458 | 
            -
            	if( | 
| 21459 | 
            -
            		this. | 
| 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( | 
| 21766 | 
            +
            				if(DataView._removeArrayItem(this._rids, rid) >= 0) {
         | 
| 21733 21767 | 
             
            					if(this._groupView) {
         | 
| 21734 | 
            -
            						 | 
| 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 =  | 
| 21968 | 
            +
            	var at = DataView._removeArrayItem(this._rids, rid);
         | 
| 21935 21969 | 
             
            	if(this._groupView && at >= 0) {
         | 
| 21936 | 
            -
            		at =  | 
| 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. | 
| 21946 | 
            -
            	var  | 
| 21947 | 
            -
            	 | 
| 21948 | 
            -
            		 | 
| 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  | 
| 21984 | 
            +
            	return at;
         | 
| 21954 21985 | 
             
            };
         | 
| 21955 21986 | 
             
            /** Remove multiple array items
         | 
| 21956 21987 | 
             
            * @private
         | 
| 21957 21988 | 
             
            * @param {Array.<string>} ary
         | 
| 21958 | 
            -
            * @param {Object | 
| 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. | 
| 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. | 
| 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  | 
| 22070 | 
            -
            	 | 
| 22071 | 
            -
             | 
| 22072 | 
            -
             | 
| 22073 | 
            -
             | 
| 22074 | 
            -
             | 
| 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 | 
            -
            				 | 
| 22147 | 
            +
            				if(checker(rid, values) === filteringOut) {
         | 
| 22148 | 
            +
            					removalMap[rid] = 1;
         | 
| 22149 | 
            +
            					++count;
         | 
| 22150 | 
            +
            				}
         | 
| 22077 22151 | 
             
            			} else {
         | 
| 22078 | 
            -
            				 | 
| 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 | 
            -
            	 | 
| 22089 | 
            -
             | 
| 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 | 
| 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 | 
| 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 | 
| 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. | 
| 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. | 
| 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. | 
| 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 | 
            -
            			 | 
| 27248 | 
            +
            			return this.moveColumnById(colRefs[0], destId);
         | 
| 27161 27249 | 
             
            		}
         | 
| 27162 | 
            -
            	} | 
| 27250 | 
            +
            	}
         | 
| 27251 | 
            +
             | 
| 27252 | 
            +
            	if(colRefs != null) {
         | 
| 27163 27253 | 
             
            		// colRefs will be a number or string
         | 
| 27164 | 
            -
            		 | 
| 27254 | 
            +
            		return this.moveColumnById(colRefs, destId);
         | 
| 27165 27255 | 
             
            	}
         | 
| 27166 | 
            -
            	 | 
| 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. | 
| 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. | 
| 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. | 
| 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
         |