@refinitiv-ui/efx-grid 6.0.98 → 6.0.100
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/core/dist/core.js +223 -185
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/data/DataView.js +2 -1
- package/lib/core/es6/grid/Core.d.ts +2 -0
- package/lib/core/es6/grid/Core.js +43 -17
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +11 -0
- package/lib/core/es6/grid/util/Virtualizer.js +5 -5
- package/lib/grid/index.js +1 -1
- package/lib/rt-grid/dist/rt-grid.js +2805 -2440
- package/lib/rt-grid/dist/rt-grid.min.js +1 -1
- package/lib/rt-grid/es6/ColumnDefinition.d.ts +4 -1
- package/lib/rt-grid/es6/ColumnDefinition.js +20 -0
- package/lib/rt-grid/es6/Grid.d.ts +4 -0
- package/lib/rt-grid/es6/Grid.js +238 -1
- package/lib/rt-grid/es6/RowDefinition.d.ts +0 -2
- package/lib/rt-grid/es6/RowDefinition.js +85 -44
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +12 -1
- package/lib/tr-grid-in-cell-editing/es6/InCellEditing.d.ts +9 -1
- package/lib/tr-grid-in-cell-editing/es6/InCellEditing.js +203 -1
- package/lib/tr-grid-row-dragging/es6/RowDragging.js +18 -6
- package/lib/tr-grid-row-selection/es6/RowSelection.d.ts +1 -3
- package/lib/tr-grid-row-selection/es6/RowSelection.js +39 -58
- package/lib/types/es6/Core/data/DataView.d.ts +3 -1
- package/lib/types/es6/InCellEditing.d.ts +9 -1
- package/lib/types/es6/RealtimeGrid/Grid.d.ts +4 -0
- package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +0 -2
- package/lib/types/es6/RowSelection.d.ts +1 -3
- package/lib/versions.json +5 -5
- package/package.json +1 -1
package/lib/core/dist/core.js
CHANGED
@@ -709,15 +709,15 @@ EventDispatcher._proto = EventDispatcher.prototype;
|
|
709
709
|
/** Provide ability for prototype based Class to inherits another class
|
710
710
|
* @namespace
|
711
711
|
* @example
|
712
|
-
*
|
712
|
+
* let BaseClass = function() {};
|
713
713
|
* BaseClass.prototype.method = function() {};
|
714
714
|
* BaseClass.prototype._member = 1;
|
715
|
-
*
|
715
|
+
* let DerivedClass = function() {};
|
716
716
|
* Ext.inherits(DerivedClass, BaseClass); // Derived class will have methods and members of the base class
|
717
717
|
* // To call base class method
|
718
718
|
* DeriveClass["base"](this, "methodName", ...params);
|
719
719
|
*/
|
720
|
-
|
720
|
+
let Ext = {};
|
721
721
|
|
722
722
|
/** @public
|
723
723
|
* @function
|
@@ -747,9 +747,9 @@ Ext.inherits = function (childCtor, parentCtor) {
|
|
747
747
|
childCtor["base"] = function(me, methodName, var_args) {
|
748
748
|
if(!methodName) { methodName = 'constructor'; }
|
749
749
|
// Copying using loop to avoid deop due to passing arguments object to function. This is faster in many JS engines as of late 2014.
|
750
|
-
|
751
|
-
|
752
|
-
for (
|
750
|
+
let len = arguments.length;
|
751
|
+
let args = new Array(len); // http://jsperf.com/creating-an-array
|
752
|
+
for (let i = 2; i < len; i++) {
|
753
753
|
args[i - 2] = arguments[i];
|
754
754
|
}
|
755
755
|
return parentCtor.prototype[methodName].apply(me, args);
|
@@ -10620,7 +10620,7 @@ LayoutGrid._proto = LayoutGrid.prototype;
|
|
10620
10620
|
|
10621
10621
|
;// CONCATENATED MODULE: ./node_modules/tr-grid-util/es6/Util.js
|
10622
10622
|
/** @namespace */
|
10623
|
-
|
10623
|
+
let Util_Util = {};
|
10624
10624
|
|
10625
10625
|
/** This is a shorthand for fetch() API by POST method and with json body <br>
|
10626
10626
|
* WARNING: fetch is not supported in IE (including IE11)
|
@@ -10703,7 +10703,7 @@ Util_Util._logError = function(resp) {
|
|
10703
10703
|
* @return {!Promise<Response>}
|
10704
10704
|
*/
|
10705
10705
|
Util_Util._post = function(url, obj, contentType) {
|
10706
|
-
|
10706
|
+
let options = {
|
10707
10707
|
method: obj ? "POST" : "GET",
|
10708
10708
|
headers: { "Content-Type": contentType || "application/json" }
|
10709
10709
|
};
|
@@ -10724,7 +10724,7 @@ Util_Util._post = function(url, obj, contentType) {
|
|
10724
10724
|
* @param {Array.<string>=} limiters Specify property to be extended
|
10725
10725
|
* @return {Object}
|
10726
10726
|
*/
|
10727
|
-
|
10727
|
+
let extendObject = function (obj, extender, limiters) {
|
10728
10728
|
if(!obj) { // null undefined NaN empty string and 0
|
10729
10729
|
return null;
|
10730
10730
|
}
|
@@ -10732,10 +10732,10 @@ var extendObject = function (obj, extender, limiters) {
|
|
10732
10732
|
return obj;
|
10733
10733
|
}
|
10734
10734
|
|
10735
|
-
|
10735
|
+
let key;
|
10736
10736
|
if(limiters) {
|
10737
|
-
|
10738
|
-
for(
|
10737
|
+
let len = limiters.length;
|
10738
|
+
for(let i = 0; i < len; ++i) {
|
10739
10739
|
key = limiters[i];
|
10740
10740
|
if(key) {
|
10741
10741
|
extendProperty(obj, extender, key);
|
@@ -10756,7 +10756,7 @@ var extendObject = function (obj, extender, limiters) {
|
|
10756
10756
|
* @param {Array.<string>=} limiters
|
10757
10757
|
* @return {Object}
|
10758
10758
|
*/
|
10759
|
-
|
10759
|
+
let cloneObject = function (obj, limiters) {
|
10760
10760
|
return extendObject({}, obj, limiters);
|
10761
10761
|
};
|
10762
10762
|
|
@@ -10766,8 +10766,8 @@ var cloneObject = function (obj, limiters) {
|
|
10766
10766
|
* @param {Object} obj
|
10767
10767
|
* @return {boolean}=true, if the obj is empty
|
10768
10768
|
*/
|
10769
|
-
|
10770
|
-
for (
|
10769
|
+
let isEmptyObject = function (obj) {
|
10770
|
+
for (let key in obj) {
|
10771
10771
|
return false;
|
10772
10772
|
}
|
10773
10773
|
return true;
|
@@ -10778,17 +10778,17 @@ var isEmptyObject = function (obj) {
|
|
10778
10778
|
* @param {Array.<string>=} fields In case of the given data is an array, this param will be used for mapping index to field
|
10779
10779
|
* @return {Object|null}
|
10780
10780
|
*/
|
10781
|
-
|
10781
|
+
let arrayToObject = function(data, fields) {
|
10782
10782
|
if(!Array.isArray(data)) {
|
10783
10783
|
return data;
|
10784
10784
|
} else if(!fields) {
|
10785
10785
|
return null;
|
10786
10786
|
}
|
10787
|
-
|
10787
|
+
let ary = data;
|
10788
10788
|
data = {};
|
10789
|
-
|
10790
|
-
for(
|
10791
|
-
|
10789
|
+
let len = ary.length;
|
10790
|
+
for(let i = 0; i < len; ++i) {
|
10791
|
+
let field = fields[i];
|
10792
10792
|
// eslint-disable-next-line no-undefined
|
10793
10793
|
if(field && ary[i] !== undefined) {
|
10794
10794
|
data[field] = ary[i];
|
@@ -10808,10 +10808,10 @@ var arrayToObject = function(data, fields) {
|
|
10808
10808
|
* extendProperty({a: [0]}, {a: 1}, "a"); // {a: [0, 1]}
|
10809
10809
|
* extendProperty({a: [0]}, {a: [1, 2]}, "a"); // {a: [0, 1, 2]}
|
10810
10810
|
*/
|
10811
|
-
|
10812
|
-
|
10811
|
+
let extendProperty = function (obj, extender, propName) {
|
10812
|
+
let val = extender[propName];
|
10813
10813
|
if(val != null) {
|
10814
|
-
|
10814
|
+
let objVal = obj[propName];
|
10815
10815
|
if(Array.isArray(objVal)) {
|
10816
10816
|
obj[propName] = objVal.concat(val);
|
10817
10817
|
} else if(Array.isArray(val) && objVal) {
|
@@ -10829,7 +10829,7 @@ var extendProperty = function (obj, extender, propName) {
|
|
10829
10829
|
* @param {*} obj2
|
10830
10830
|
* @return {boolean}
|
10831
10831
|
*/
|
10832
|
-
|
10832
|
+
let deepEqual = function (obj1, obj2) {
|
10833
10833
|
|
10834
10834
|
if(obj1 === obj2) {
|
10835
10835
|
return true;
|
@@ -10847,7 +10847,7 @@ var deepEqual = function (obj1, obj2) {
|
|
10847
10847
|
return false;
|
10848
10848
|
}
|
10849
10849
|
|
10850
|
-
for (
|
10850
|
+
for (let i = 0; i < obj1.length; i++) {
|
10851
10851
|
if (!deepEqual(obj1[i], obj2[i])) { // The array may not be a match if the elements are not sorted, so it will not be considered equal if there is a mismatch.
|
10852
10852
|
return false;
|
10853
10853
|
}
|
@@ -10859,7 +10859,7 @@ var deepEqual = function (obj1, obj2) {
|
|
10859
10859
|
return false;
|
10860
10860
|
}
|
10861
10861
|
|
10862
|
-
for (
|
10862
|
+
for (let key in obj1) {
|
10863
10863
|
if (!deepEqual(obj1[key], obj2[key])) {
|
10864
10864
|
return false;
|
10865
10865
|
}
|
@@ -10883,7 +10883,7 @@ var deepEqual = function (obj1, obj2) {
|
|
10883
10883
|
* @return {Array} Returns the result of the extended array
|
10884
10884
|
* @see {@link https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki}
|
10885
10885
|
* @example
|
10886
|
-
*
|
10886
|
+
* let obj = {};
|
10887
10887
|
* extendArrayProperty(obj, "prop1", 1); // [1]
|
10888
10888
|
* extendArrayProperty(obj, "prop1", 2); // [1, 2]
|
10889
10889
|
* extendArrayProperty(obj, "prop1", [3, 4]); // [1, 2, 3, 4]
|
@@ -10892,10 +10892,10 @@ var deepEqual = function (obj1, obj2) {
|
|
10892
10892
|
* extendArrayProperty(obj, "prop2", [7]); // [5, 6, 7]
|
10893
10893
|
* extendArrayProperty(obj, "prop2", null); // null
|
10894
10894
|
*/
|
10895
|
-
|
10896
|
-
|
10895
|
+
let extendArrayProperty = function (obj, propName, ary) {
|
10896
|
+
let objAry = null;
|
10897
10897
|
if(ary) {
|
10898
|
-
|
10898
|
+
let objVal = obj[propName];
|
10899
10899
|
if(objVal) {
|
10900
10900
|
if(Array.isArray(objVal)) {
|
10901
10901
|
objAry = objVal;
|
@@ -10926,14 +10926,14 @@ var extendArrayProperty = function (obj, propName, ary) {
|
|
10926
10926
|
* @param {string|Array.<string>} item
|
10927
10927
|
* @return {string}
|
10928
10928
|
*/
|
10929
|
-
|
10929
|
+
let _encloseBracket = function(item) {
|
10930
10930
|
return Array.isArray(item) ? "{\n" + item.join("\n") + "\n}" : item;
|
10931
10931
|
};
|
10932
10932
|
/** @private
|
10933
10933
|
* @param {string} str
|
10934
10934
|
* @return {string}
|
10935
10935
|
*/
|
10936
|
-
|
10936
|
+
let _indentBracketContent = function(str){
|
10937
10937
|
return str.replace(/\n+/g, "\n\t").replace(/\n\t}$/, "\n}");
|
10938
10938
|
};
|
10939
10939
|
/** @public
|
@@ -10949,11 +10949,11 @@ var _indentBracketContent = function(str){
|
|
10949
10949
|
* ]
|
10950
10950
|
* ]);
|
10951
10951
|
*/
|
10952
|
-
|
10952
|
+
let prettifyCss = function(css) {
|
10953
10953
|
if(css) {
|
10954
|
-
|
10954
|
+
let cssStr = "";
|
10955
10955
|
if (Array.isArray(css)) {
|
10956
|
-
|
10956
|
+
let ary = css.map(_encloseBracket);
|
10957
10957
|
cssStr = ary.join("\n").replace(/{\s*{/g, "{").replace(/\s+{/g, " {");
|
10958
10958
|
} else {
|
10959
10959
|
cssStr = (typeof css === "string") ? css : css + "";
|
@@ -10970,9 +10970,9 @@ var prettifyCss = function(css) {
|
|
10970
10970
|
* @param {Element} elem
|
10971
10971
|
* @return {DocumentFragment}
|
10972
10972
|
*/
|
10973
|
-
|
10973
|
+
let getShadowRoot = function(elem) {
|
10974
10974
|
if(elem) {
|
10975
|
-
|
10975
|
+
let rootNode;
|
10976
10976
|
if(elem.shadowRoot) {
|
10977
10977
|
rootNode = elem.shadowRoot;
|
10978
10978
|
} else if(elem.getRootNode) {
|
@@ -10994,23 +10994,23 @@ var getShadowRoot = function(elem) {
|
|
10994
10994
|
* @param {Element=} targetContext Element that needs the CSS
|
10995
10995
|
* @return {Element} New style tag
|
10996
10996
|
*/
|
10997
|
-
|
10997
|
+
let injectCss = function(cssStr, targetContext) {
|
10998
10998
|
if(!cssStr) {
|
10999
10999
|
return null;
|
11000
11000
|
}
|
11001
11001
|
|
11002
|
-
|
11002
|
+
let styleTag = document.createElement("style");
|
11003
11003
|
styleTag.textContent = "\n" + cssStr + "\n";
|
11004
11004
|
|
11005
|
-
|
11006
|
-
|
11005
|
+
let styleHost = getShadowRoot(targetContext);
|
11006
|
+
let isInShadow = true;
|
11007
11007
|
if(!styleHost) {
|
11008
11008
|
isInShadow = false;
|
11009
11009
|
styleHost = document.head;
|
11010
11010
|
}
|
11011
11011
|
|
11012
11012
|
// Find a place to insert the style tag
|
11013
|
-
|
11013
|
+
let beforeElem;
|
11014
11014
|
if(isInShadow) {
|
11015
11015
|
if(styleHost.children && styleHost.children.length) {
|
11016
11016
|
beforeElem = styleHost.children[0];
|
@@ -11028,8 +11028,8 @@ var injectCss = function(cssStr, targetContext) {
|
|
11028
11028
|
* @public
|
11029
11029
|
* @return {boolean}
|
11030
11030
|
*/
|
11031
|
-
|
11032
|
-
|
11031
|
+
let isIE = function () {
|
11032
|
+
let ua = window.navigator.userAgent;
|
11033
11033
|
return (ua.indexOf('MSIE ') > 0) || (ua.indexOf('Trident/') > 0) || (ua.indexOf('Edge/') > 0);
|
11034
11034
|
};
|
11035
11035
|
|
@@ -11037,7 +11037,7 @@ var isIE = function () {
|
|
11037
11037
|
* @public
|
11038
11038
|
* @return {boolean}
|
11039
11039
|
*/
|
11040
|
-
|
11040
|
+
let isMac = function () {
|
11041
11041
|
return /Mac/.test(navigator.platform);
|
11042
11042
|
};
|
11043
11043
|
|
@@ -11045,7 +11045,7 @@ var isMac = function () {
|
|
11045
11045
|
* @public
|
11046
11046
|
* @return {boolean}
|
11047
11047
|
*/
|
11048
|
-
|
11048
|
+
let isTouchDevice = function () {
|
11049
11049
|
if ((navigator["maxTouchPoints"] && navigator["maxTouchPoints"] < 256) ||
|
11050
11050
|
(navigator["msMaxTouchPoints"] && navigator["msMaxTouchPoints"] < 256)) {
|
11051
11051
|
return true;
|
@@ -11059,12 +11059,12 @@ var isTouchDevice = function () {
|
|
11059
11059
|
* @param {Array=} ary
|
11060
11060
|
* @return {Array}
|
11061
11061
|
*/
|
11062
|
-
|
11062
|
+
let nestedObjectToArray = function (obj, ary) {
|
11063
11063
|
if (!ary) {
|
11064
11064
|
ary = [];
|
11065
11065
|
}
|
11066
|
-
for (
|
11067
|
-
|
11066
|
+
for (let key in obj) {
|
11067
|
+
let element = obj[key];
|
11068
11068
|
if ('object' === typeof element) {
|
11069
11069
|
nestedObjectToArray(element, ary);
|
11070
11070
|
} else {
|
@@ -11088,21 +11088,21 @@ var nestedObjectToArray = function (obj, ary) {
|
|
11088
11088
|
* rgb2Hex("invalid"); // "invalid"
|
11089
11089
|
* rgb2Hex(null); // ""
|
11090
11090
|
*/
|
11091
|
-
|
11091
|
+
let rgb2Hex = function (rgbCode) {
|
11092
11092
|
if(!rgbCode || typeof rgbCode !== "string") {
|
11093
11093
|
return "";
|
11094
11094
|
}
|
11095
11095
|
if(rgbCode.charAt(0) === "#") {
|
11096
11096
|
return rgbCode;
|
11097
11097
|
}
|
11098
|
-
|
11098
|
+
let rgb = rgbCode.match(/\d+/g);
|
11099
11099
|
if(!rgb || rgb.length < 3) {
|
11100
11100
|
return rgbCode;
|
11101
11101
|
}
|
11102
11102
|
|
11103
|
-
|
11104
|
-
for(
|
11105
|
-
|
11103
|
+
let hex = "#";
|
11104
|
+
for(let i = 0; i < 3; i++) {
|
11105
|
+
let num = +rgb[i];
|
11106
11106
|
if(!(num >= 16)) { // Handle NaN case
|
11107
11107
|
hex += "0";
|
11108
11108
|
}
|
@@ -11116,12 +11116,12 @@ var rgb2Hex = function (rgbCode) {
|
|
11116
11116
|
* @param {*} data
|
11117
11117
|
* @return {string}
|
11118
11118
|
*/
|
11119
|
-
|
11119
|
+
let prepareTSVContent = function (data) {
|
11120
11120
|
if (data == null) {
|
11121
11121
|
return "";
|
11122
11122
|
}
|
11123
11123
|
|
11124
|
-
|
11124
|
+
let content = (typeof data === 'string') ? data : data.toString();
|
11125
11125
|
|
11126
11126
|
if (!content.length) { return ""; }
|
11127
11127
|
|
@@ -11150,7 +11150,7 @@ var prepareTSVContent = function (data) {
|
|
11150
11150
|
|
11151
11151
|
/** @constructor
|
11152
11152
|
*/
|
11153
|
-
|
11153
|
+
let GroupDefinitions = function () {
|
11154
11154
|
this._groupMap = {};
|
11155
11155
|
this._childToParent = {};
|
11156
11156
|
};
|
@@ -11184,14 +11184,14 @@ GroupDefinitions.getGroupId = function(groupDef) {
|
|
11184
11184
|
* @return {number} Return total number of parents. Return 0 if there is no parent.
|
11185
11185
|
*/
|
11186
11186
|
GroupDefinitions.calcTreeDepth = function (groupMap, groupDef) {
|
11187
|
-
|
11188
|
-
|
11187
|
+
let curDepth = -1;
|
11188
|
+
let curNode = groupDef;
|
11189
11189
|
while(curNode) { // WARNING: infinite loop could occured, if parentId is cycle back to one of the child group
|
11190
11190
|
if(++curDepth > 15) {
|
11191
11191
|
console.log("WARNING: Infinite loop detected during column group creation");
|
11192
11192
|
break;
|
11193
11193
|
}
|
11194
|
-
|
11194
|
+
let parentId = curNode.parentId;
|
11195
11195
|
curNode = groupMap[parentId];
|
11196
11196
|
}
|
11197
11197
|
return curDepth;
|
@@ -11202,22 +11202,22 @@ GroupDefinitions.calcTreeDepth = function (groupMap, groupDef) {
|
|
11202
11202
|
* @return {Array.<string>}
|
11203
11203
|
*/
|
11204
11204
|
GroupDefinitions.getLeafDescendants = function (groupMap, groupId) {
|
11205
|
-
|
11205
|
+
let groupDef = groupMap[groupId];
|
11206
11206
|
if(!groupDef) {
|
11207
11207
|
return null;
|
11208
11208
|
}
|
11209
11209
|
|
11210
|
-
|
11211
|
-
|
11212
|
-
|
11213
|
-
|
11210
|
+
let leaves = [];
|
11211
|
+
let unvisitedGroups = [groupDef];
|
11212
|
+
let visitedCount = 0;
|
11213
|
+
let visitedMap = {};
|
11214
11214
|
while(visitedCount < unvisitedGroups.length) {
|
11215
11215
|
groupDef = unvisitedGroups[visitedCount++];
|
11216
11216
|
visitedMap[groupDef.id] = true;
|
11217
|
-
|
11218
|
-
|
11219
|
-
for(
|
11220
|
-
|
11217
|
+
let chdr = groupDef.children;
|
11218
|
+
let len = chdr ? chdr.length : 0;
|
11219
|
+
for(let i = 0; i < len; ++i) {
|
11220
|
+
let childId = chdr[i];
|
11221
11221
|
groupDef = groupMap[childId];
|
11222
11222
|
if(groupDef) {
|
11223
11223
|
if(!visitedMap[groupDef.id]) { // Prevent infinite loop
|
@@ -11238,7 +11238,7 @@ GroupDefinitions.getLeafDescendants = function (groupMap, groupId) {
|
|
11238
11238
|
* @return {Object} Return a new object with guaranteed children property
|
11239
11239
|
*/
|
11240
11240
|
GroupDefinitions._cloneObject = function(obj) {
|
11241
|
-
|
11241
|
+
let newObj = cloneObject(obj);
|
11242
11242
|
if(Array.isArray(newObj.children)) { // This is to prevent modification from the outside source
|
11243
11243
|
newObj.children = newObj.children.slice();
|
11244
11244
|
} else {
|
@@ -11254,7 +11254,7 @@ GroupDefinitions._cloneObject = function(obj) {
|
|
11254
11254
|
* @return {Object} Return a new object with guaranteed children property
|
11255
11255
|
*/
|
11256
11256
|
GroupDefinitions._toGroupDefinition = function(obj, groupId) {
|
11257
|
-
|
11257
|
+
let groupDef = null;
|
11258
11258
|
if(obj) {
|
11259
11259
|
if(Array.isArray(obj)) {
|
11260
11260
|
groupDef = {
|
@@ -11277,11 +11277,11 @@ GroupDefinitions._toGroupDefinition = function(obj, groupId) {
|
|
11277
11277
|
* @return {string}
|
11278
11278
|
*/
|
11279
11279
|
GroupDefinitions.prototype.toString = function() {
|
11280
|
-
|
11281
|
-
|
11280
|
+
let groupMap = this._groupMap;
|
11281
|
+
let lines = [];
|
11282
11282
|
lines.push("=== groupDefs ===");
|
11283
|
-
for(
|
11284
|
-
|
11283
|
+
for(let key in groupMap) {
|
11284
|
+
let group = groupMap[key];
|
11285
11285
|
lines.push(key + ": " + JSON.stringify(group, ["id", "parentId", "children"]));
|
11286
11286
|
}
|
11287
11287
|
|
@@ -11314,9 +11314,9 @@ GroupDefinitions.prototype.getDefinition = GroupDefinitions.prototype.getGroup;
|
|
11314
11314
|
* @return {!Array.<Object>}
|
11315
11315
|
*/
|
11316
11316
|
GroupDefinitions.prototype.getGroups = function () {
|
11317
|
-
|
11318
|
-
|
11319
|
-
for(
|
11317
|
+
let groupDefs = [];
|
11318
|
+
let groupMap = this._groupMap;
|
11319
|
+
for(let key in groupMap) {
|
11320
11320
|
groupDefs.push(groupMap[key]);
|
11321
11321
|
}
|
11322
11322
|
return groupDefs;
|
@@ -11338,11 +11338,11 @@ GroupDefinitions.prototype.getGroupMap = function () {
|
|
11338
11338
|
* @return {!Object.<string, Object>}
|
11339
11339
|
*/
|
11340
11340
|
GroupDefinitions.prototype.cloneGroupMap = function () {
|
11341
|
-
|
11342
|
-
|
11343
|
-
for(
|
11344
|
-
|
11345
|
-
|
11341
|
+
let groupMap = this._groupMap;
|
11342
|
+
let outMap = {};
|
11343
|
+
for(let groupId in groupMap) {
|
11344
|
+
let groupDef = groupMap[groupId];
|
11345
|
+
let obj = GroupDefinitions._cloneObject(groupDef);
|
11346
11346
|
outMap[groupId] = obj;
|
11347
11347
|
}
|
11348
11348
|
return outMap;
|
@@ -11351,18 +11351,18 @@ GroupDefinitions.prototype.cloneGroupMap = function () {
|
|
11351
11351
|
* @public
|
11352
11352
|
*/
|
11353
11353
|
GroupDefinitions.prototype.rebuildMap = function () {
|
11354
|
-
|
11355
|
-
|
11354
|
+
let groupMap = this._groupMap;
|
11355
|
+
let childToParent = this._childToParent = {};
|
11356
11356
|
|
11357
11357
|
// Create child to parent map
|
11358
|
-
|
11359
|
-
|
11360
|
-
|
11358
|
+
let groupIds = Object.keys(groupMap);
|
11359
|
+
let grpCount = groupIds.length;
|
11360
|
+
let i, groupId;
|
11361
11361
|
for(i = 0; i < grpCount; ++i) {
|
11362
11362
|
groupId = groupIds[i];
|
11363
|
-
|
11364
|
-
|
11365
|
-
for (
|
11363
|
+
let chdr = groupMap[groupId].children;
|
11364
|
+
let childCount = chdr ? chdr.length : 0;
|
11365
|
+
for (let j = 0; j < childCount; j++) {
|
11366
11366
|
childToParent[chdr[j]] = groupId;
|
11367
11367
|
}
|
11368
11368
|
}
|
@@ -11370,7 +11370,7 @@ GroupDefinitions.prototype.rebuildMap = function () {
|
|
11370
11370
|
// Apply a parent id to group definition to make it easier to find depth
|
11371
11371
|
for(i = 0; i < grpCount; ++i) {
|
11372
11372
|
groupId = groupIds[i];
|
11373
|
-
|
11373
|
+
let parentId = childToParent[groupId];
|
11374
11374
|
if(parentId) {
|
11375
11375
|
groupMap[groupId].parentId = parentId;
|
11376
11376
|
}
|
@@ -11383,7 +11383,7 @@ GroupDefinitions.prototype.rebuildMap = function () {
|
|
11383
11383
|
* @return {Array.<string>}
|
11384
11384
|
*/
|
11385
11385
|
GroupDefinitions.prototype.getGroupChildren = function (groupId) {
|
11386
|
-
|
11386
|
+
let groupDef = this._groupMap[groupId];
|
11387
11387
|
return groupDef ? groupDef.children : null;
|
11388
11388
|
};
|
11389
11389
|
/** Get all non-group descendants of the given group id.
|
@@ -11409,12 +11409,12 @@ GroupDefinitions.prototype.getRootGroup = function (groupId) {
|
|
11409
11409
|
if (!groupId) {
|
11410
11410
|
return null;
|
11411
11411
|
}
|
11412
|
-
|
11413
|
-
|
11412
|
+
let groupMap = this._groupMap;
|
11413
|
+
let groupDef = groupMap[groupId] || null;
|
11414
11414
|
// TODO: Support column id
|
11415
11415
|
if(groupDef) {
|
11416
11416
|
while (groupDef.parentId) {
|
11417
|
-
|
11417
|
+
let parentDef = groupMap[groupDef.parentId];
|
11418
11418
|
if(parentDef) {
|
11419
11419
|
groupDef = parentDef;
|
11420
11420
|
} else {
|
@@ -11437,10 +11437,10 @@ GroupDefinitions.prototype.getParentGroup = function (childId) {
|
|
11437
11437
|
*/
|
11438
11438
|
GroupDefinitions.prototype.getParentIds = function(childId) {
|
11439
11439
|
if (childId && typeof childId === "string") {
|
11440
|
-
|
11440
|
+
let groupId = this._childToParent[childId];
|
11441
11441
|
if (groupId) {
|
11442
|
-
|
11443
|
-
|
11442
|
+
let groupIds = [groupId];
|
11443
|
+
let group = this._groupMap[groupId];
|
11444
11444
|
while (group && group.parentId) {
|
11445
11445
|
group = this._groupMap[group.parentId];
|
11446
11446
|
if (group) {
|
@@ -11458,9 +11458,9 @@ GroupDefinitions.prototype.getParentIds = function(childId) {
|
|
11458
11458
|
* @return {string}
|
11459
11459
|
*/
|
11460
11460
|
GroupDefinitions.prototype.getParentId = function (childId, groupLevel) {
|
11461
|
-
|
11461
|
+
let parentId = this._childToParent[childId];
|
11462
11462
|
if(groupLevel != null) {
|
11463
|
-
|
11463
|
+
let currentLevel = this.getGroupLevel(parentId);
|
11464
11464
|
while(currentLevel > groupLevel && parentId){
|
11465
11465
|
parentId = this._childToParent[parentId];
|
11466
11466
|
currentLevel--;
|
@@ -11475,7 +11475,7 @@ GroupDefinitions.prototype.getParentId = function (childId, groupLevel) {
|
|
11475
11475
|
* @return {boolean}
|
11476
11476
|
*/
|
11477
11477
|
GroupDefinitions.prototype.removeAllGroups = function () {
|
11478
|
-
for(
|
11478
|
+
for(let groupId in this._groupMap) { // eslint-disable-line
|
11479
11479
|
this._groupMap = {};
|
11480
11480
|
this._childToParent = {};
|
11481
11481
|
return true;
|
@@ -11488,13 +11488,13 @@ GroupDefinitions.prototype.removeAllGroups = function () {
|
|
11488
11488
|
*/
|
11489
11489
|
GroupDefinitions.prototype.setGroups = function (groupDefs) {
|
11490
11490
|
// Clear existing group structure
|
11491
|
-
|
11491
|
+
let groupMap = this._groupMap = {};
|
11492
11492
|
|
11493
11493
|
// Create group map
|
11494
|
-
|
11495
|
-
for (
|
11496
|
-
|
11497
|
-
|
11494
|
+
let grpCount = groupDefs ? groupDefs.length : 0;
|
11495
|
+
for (let i = 0; i < grpCount; i++) {
|
11496
|
+
let groupDef = groupDefs[i];
|
11497
|
+
let groupId = groupDef.id;
|
11498
11498
|
if(groupId) {
|
11499
11499
|
groupMap[groupId] = GroupDefinitions._cloneObject(groupDef);
|
11500
11500
|
}
|
@@ -11508,7 +11508,7 @@ GroupDefinitions.prototype.setGroups = function (groupDefs) {
|
|
11508
11508
|
* @return {string} Return group ID
|
11509
11509
|
*/
|
11510
11510
|
GroupDefinitions.prototype.addGroup = function (groupDef) {
|
11511
|
-
|
11511
|
+
let groupId = GroupDefinitions.getGroupId(groupDef);
|
11512
11512
|
if(groupId) {
|
11513
11513
|
return this.setGroup(groupId, groupDef);
|
11514
11514
|
}
|
@@ -11519,7 +11519,7 @@ GroupDefinitions.prototype.addGroup = function (groupDef) {
|
|
11519
11519
|
* @return {boolean}
|
11520
11520
|
*/
|
11521
11521
|
GroupDefinitions.prototype.removeGroup = function (groupId) {
|
11522
|
-
|
11522
|
+
let curDef = this._groupMap[groupId];
|
11523
11523
|
if(curDef) {
|
11524
11524
|
this.removeAllChildren(groupId);
|
11525
11525
|
this.unsetParent(groupId);
|
@@ -11541,25 +11541,25 @@ GroupDefinitions.prototype.setGroup = function (groupId, groupDef) {
|
|
11541
11541
|
}
|
11542
11542
|
|
11543
11543
|
if(groupDef) {
|
11544
|
-
|
11544
|
+
let newDef = GroupDefinitions._toGroupDefinition(groupDef, groupId);
|
11545
11545
|
this._ungroupChildren(newDef.children);
|
11546
11546
|
|
11547
|
-
|
11547
|
+
let curDef = this._groupMap[groupId];
|
11548
11548
|
if(curDef) { // Replace
|
11549
11549
|
this.removeAllChildren(groupId);
|
11550
11550
|
}
|
11551
|
-
|
11551
|
+
let parentDef = this._childToParent[groupId];
|
11552
11552
|
if(parentDef) {
|
11553
11553
|
newDef.parentId = parentDef.id;
|
11554
11554
|
}
|
11555
11555
|
this._groupMap[groupId] = newDef;
|
11556
11556
|
|
11557
|
-
|
11558
|
-
|
11559
|
-
for(
|
11560
|
-
|
11557
|
+
let chdr = newDef.children; // newDef is guaranteed to have children property
|
11558
|
+
let len = chdr.length;
|
11559
|
+
for(let i = 0; i < len; ++i) {
|
11560
|
+
let childId = chdr[i];
|
11561
11561
|
this._childToParent[childId] = groupId;
|
11562
|
-
|
11562
|
+
let childDef = this._groupMap[childId];
|
11563
11563
|
if(childDef) {
|
11564
11564
|
childDef.parentId = groupId;
|
11565
11565
|
}
|
@@ -11579,8 +11579,8 @@ GroupDefinitions.prototype.setGroup = function (groupId, groupDef) {
|
|
11579
11579
|
*/
|
11580
11580
|
GroupDefinitions.prototype._ungroupChildren = function(children) {
|
11581
11581
|
if (Array.isArray(children)) {
|
11582
|
-
|
11583
|
-
for(
|
11582
|
+
let len = children.length;
|
11583
|
+
for(let i = 0; i < len; ++i) {
|
11584
11584
|
this.unsetParent(children[i]);
|
11585
11585
|
}
|
11586
11586
|
}
|
@@ -11593,9 +11593,9 @@ GroupDefinitions.prototype._ungroupChildren = function(children) {
|
|
11593
11593
|
* @return {boolean}
|
11594
11594
|
*/
|
11595
11595
|
GroupDefinitions.prototype.hasGroupChild = function (parentId, childId) {
|
11596
|
-
|
11596
|
+
let groupDef = this._groupMap[parentId];
|
11597
11597
|
if(childId && groupDef) {
|
11598
|
-
|
11598
|
+
let chdr = groupDef.children;
|
11599
11599
|
if(chdr) {
|
11600
11600
|
return chdr.indexOf(childId) >= 0; // TODO: Use childToParent map to improve performance
|
11601
11601
|
}
|
@@ -11613,8 +11613,8 @@ GroupDefinitions.prototype.contains = function (groupId, childId) {
|
|
11613
11613
|
if(groupId === childId) {
|
11614
11614
|
return true;
|
11615
11615
|
}
|
11616
|
-
|
11617
|
-
|
11616
|
+
let levelLimit = 20;
|
11617
|
+
let parentId = this._childToParent[childId];
|
11618
11618
|
while(parentId && levelLimit) { // WARNING: Circular dependency could happen
|
11619
11619
|
if(groupId === parentId) {
|
11620
11620
|
return true;
|
@@ -11632,15 +11632,15 @@ GroupDefinitions.prototype.contains = function (groupId, childId) {
|
|
11632
11632
|
* @return {boolean}
|
11633
11633
|
*/
|
11634
11634
|
GroupDefinitions.prototype.addGroupChild = function (parentId, childId, position) {
|
11635
|
-
|
11635
|
+
let groupDef = this._groupMap[parentId];
|
11636
11636
|
|
11637
11637
|
if(childId && groupDef) {
|
11638
|
-
|
11638
|
+
let chdr = groupDef.children;
|
11639
11639
|
if(chdr && chdr.indexOf(childId) < 0) {
|
11640
11640
|
this.unsetParent(childId); // Remove previous parent
|
11641
11641
|
// Add new child to group structures
|
11642
11642
|
this._childToParent[childId] = parentId;
|
11643
|
-
|
11643
|
+
let childDef = this._groupMap[childId];
|
11644
11644
|
if(childDef) {
|
11645
11645
|
childDef.parentId = parentId;
|
11646
11646
|
}
|
@@ -11675,20 +11675,20 @@ GroupDefinitions.prototype.removeGroupChild = function (parentId, childId) {
|
|
11675
11675
|
* @return {boolean}
|
11676
11676
|
*/
|
11677
11677
|
GroupDefinitions.prototype.unsetParent = function (childId) {
|
11678
|
-
|
11678
|
+
let parentId = this._childToParent[childId];
|
11679
11679
|
if(!parentId) {
|
11680
11680
|
return false;
|
11681
11681
|
}
|
11682
11682
|
this._childToParent[childId] = "";
|
11683
|
-
|
11683
|
+
let childDef = this._groupMap[childId];
|
11684
11684
|
if(childDef) {
|
11685
11685
|
childDef.parentId = "";
|
11686
11686
|
}
|
11687
|
-
|
11687
|
+
let parentDef = this._groupMap[parentId];
|
11688
11688
|
if(parentDef) {
|
11689
|
-
|
11689
|
+
let chdr = parentDef.children;
|
11690
11690
|
if(chdr && chdr.length) {
|
11691
|
-
|
11691
|
+
let at = chdr.indexOf(childId);
|
11692
11692
|
if (at >= 0) {
|
11693
11693
|
chdr.splice(at, 1); // splice is slow
|
11694
11694
|
}
|
@@ -11702,18 +11702,18 @@ GroupDefinitions.prototype.unsetParent = function (childId) {
|
|
11702
11702
|
* @return {boolean}
|
11703
11703
|
*/
|
11704
11704
|
GroupDefinitions.prototype.removeAllChildren = function(groupId) {
|
11705
|
-
|
11705
|
+
let grpDef = this._groupMap[groupId];
|
11706
11706
|
if(grpDef) {
|
11707
|
-
|
11708
|
-
|
11707
|
+
let chdr = grpDef.children;
|
11708
|
+
let len = chdr ? chdr.length : 0;
|
11709
11709
|
if(len) {
|
11710
11710
|
grpDef.children = [];
|
11711
|
-
for(
|
11712
|
-
|
11711
|
+
for(let i = 0; i < len; ++i) {
|
11712
|
+
let childId = chdr[i];
|
11713
11713
|
if(this._childToParent[childId]) {
|
11714
11714
|
this._childToParent[childId] = "";
|
11715
11715
|
}
|
11716
|
-
|
11716
|
+
let childDef = this._groupMap[childId];
|
11717
11717
|
if(childDef) {
|
11718
11718
|
childDef.parentId = "";
|
11719
11719
|
}
|
@@ -11730,20 +11730,20 @@ GroupDefinitions.prototype.removeAllChildren = function(groupId) {
|
|
11730
11730
|
* @return {boolean}
|
11731
11731
|
*/
|
11732
11732
|
GroupDefinitions.prototype.setGroupChildren = function (groupId, newChildList) {
|
11733
|
-
|
11733
|
+
let groupDef = this._groupMap[groupId];
|
11734
11734
|
if(groupDef) {
|
11735
11735
|
if(Array.isArray(newChildList)) {
|
11736
|
-
|
11736
|
+
let chdr = newChildList.slice();
|
11737
11737
|
this._ungroupChildren(chdr);
|
11738
11738
|
this.removeAllChildren(groupId);
|
11739
11739
|
groupDef.children = chdr;
|
11740
11740
|
|
11741
|
-
|
11742
|
-
|
11743
|
-
for(
|
11744
|
-
|
11741
|
+
let parentId = groupDef.id;
|
11742
|
+
let len = chdr.length;
|
11743
|
+
for(let i = 0; i < len; ++i) {
|
11744
|
+
let childId = chdr[i];
|
11745
11745
|
this._childToParent[childId] = parentId;
|
11746
|
-
|
11746
|
+
let childDef = this._groupMap[childId];
|
11747
11747
|
if(childDef) {
|
11748
11748
|
childDef.parentId = parentId;
|
11749
11749
|
}
|
@@ -11763,7 +11763,7 @@ GroupDefinitions.prototype.setGroupChildren = function (groupId, newChildList) {
|
|
11763
11763
|
* @return {string}
|
11764
11764
|
*/
|
11765
11765
|
GroupDefinitions.prototype.getGroupName = function (groupId) {
|
11766
|
-
|
11766
|
+
let groupDef = this._groupMap[groupId];
|
11767
11767
|
if(groupDef) {
|
11768
11768
|
return groupDef.name || "";
|
11769
11769
|
}
|
@@ -11775,7 +11775,7 @@ GroupDefinitions.prototype.getGroupName = function (groupId) {
|
|
11775
11775
|
* @return {boolean}
|
11776
11776
|
*/
|
11777
11777
|
GroupDefinitions.prototype.setGroupName = function (groupId, groupName) {
|
11778
|
-
|
11778
|
+
let groupDef = this._groupMap[groupId];
|
11779
11779
|
if(groupDef) {
|
11780
11780
|
if(groupDef.name !== groupName) {
|
11781
11781
|
groupDef.name = groupName;
|
@@ -13131,7 +13131,7 @@ DataCache_DataCache._proto = DataCache_DataCache.prototype;
|
|
13131
13131
|
/** Abstract base class that provides event management methods for derived class
|
13132
13132
|
* @constructor
|
13133
13133
|
*/
|
13134
|
-
|
13134
|
+
let EventDispatcher_EventDispatcher = function () {};
|
13135
13135
|
|
13136
13136
|
/** @type {Object.<string, Function>}
|
13137
13137
|
* @protected
|
@@ -13156,7 +13156,7 @@ EventDispatcher_EventDispatcher.prototype.addEventListener = function(type, hand
|
|
13156
13156
|
this._events = {};
|
13157
13157
|
}
|
13158
13158
|
|
13159
|
-
|
13159
|
+
let listeners = this._events[type];
|
13160
13160
|
if(listeners) {
|
13161
13161
|
if(listeners.indexOf(handler) < 0) {
|
13162
13162
|
listeners.push(handler);
|
@@ -13173,9 +13173,9 @@ EventDispatcher_EventDispatcher.prototype.addEventListener = function(type, hand
|
|
13173
13173
|
* @param {Function} handler Event handler
|
13174
13174
|
*/
|
13175
13175
|
EventDispatcher_EventDispatcher.prototype.removeEventListener = function(type, handler) {
|
13176
|
-
|
13176
|
+
let listeners = (this._events) ? this._events[type] : null;
|
13177
13177
|
if(listeners) {
|
13178
|
-
|
13178
|
+
let at = listeners.indexOf(handler);
|
13179
13179
|
if(at >= 0) {
|
13180
13180
|
listeners.splice(at, 1);
|
13181
13181
|
--this._listenerCount;
|
@@ -13198,7 +13198,7 @@ EventDispatcher_EventDispatcher.prototype.removeAllEventListeners = function() {
|
|
13198
13198
|
EventDispatcher_EventDispatcher.prototype.hasListener = function(type) {
|
13199
13199
|
if(this._listenerCount) {
|
13200
13200
|
if(type) {
|
13201
|
-
|
13201
|
+
let listeners = this._events ? this._events[type] : null;
|
13202
13202
|
return listeners ? (listeners.length > 0) : false;
|
13203
13203
|
} else {
|
13204
13204
|
return true;
|
@@ -13215,7 +13215,7 @@ EventDispatcher_EventDispatcher.prototype.hasListener = function(type) {
|
|
13215
13215
|
*/
|
13216
13216
|
EventDispatcher_EventDispatcher.prototype.getListener = function(type, idx) {
|
13217
13217
|
if(type) {
|
13218
|
-
|
13218
|
+
let listeners = this._events ? this._events[type] : null;
|
13219
13219
|
if(listeners) {
|
13220
13220
|
if(!idx) {
|
13221
13221
|
idx = 0;
|
@@ -13231,12 +13231,12 @@ EventDispatcher_EventDispatcher.prototype.getListener = function(type, idx) {
|
|
13231
13231
|
* @param {Object} obj Object that contains a handler with the same name as the given `type`
|
13232
13232
|
* @param {string} type Event name
|
13233
13233
|
* @example
|
13234
|
-
*
|
13234
|
+
* let obj = {"mouseUp": function(e) { console.log(e); }};
|
13235
13235
|
* plugin.addListener(obj, "mouseUp");
|
13236
13236
|
* plugin.addListener(obj, "mouseDown");
|
13237
13237
|
*/
|
13238
13238
|
EventDispatcher_EventDispatcher.prototype.addListener = function(obj, type) {
|
13239
|
-
|
13239
|
+
let func = obj ? obj[type] : null;
|
13240
13240
|
if(typeof func === "function") {
|
13241
13241
|
this.addEventListener(type, func);
|
13242
13242
|
}
|
@@ -13260,11 +13260,11 @@ EventDispatcher_EventDispatcher.prototype._prepareEventArguments = function(type
|
|
13260
13260
|
* @param {Object} eventArg Event arguments
|
13261
13261
|
*/
|
13262
13262
|
EventDispatcher_EventDispatcher.prototype._dispatch = function(type, eventArg) {
|
13263
|
-
|
13263
|
+
let listeners = this._events ? this._events[type] : null;
|
13264
13264
|
if(listeners) {
|
13265
13265
|
eventArg = this._prepareEventArguments(type, eventArg);
|
13266
|
-
|
13267
|
-
for(
|
13266
|
+
let len = listeners.length;
|
13267
|
+
for(let i = 0; i < len; ++i) {
|
13268
13268
|
listeners[i](eventArg);
|
13269
13269
|
}
|
13270
13270
|
}
|
@@ -13274,7 +13274,7 @@ EventDispatcher_EventDispatcher.prototype._dispatch = function(type, eventArg) {
|
|
13274
13274
|
* @function
|
13275
13275
|
* @param {Event} e
|
13276
13276
|
*/
|
13277
|
-
|
13277
|
+
let preventDefault = function(e) {
|
13278
13278
|
if(e && e.preventDefault) {
|
13279
13279
|
e.preventDefault();
|
13280
13280
|
e.stopPropagation();
|
@@ -18498,12 +18498,12 @@ WrappedView.prototype.isRowFiltered = function(rid, rowData) {
|
|
18498
18498
|
* @param {(number|Function)=} ms The delay time in millisecond before executing the function
|
18499
18499
|
* @param {*=} thisObj "this" object to be bound with the given function. If the function is already bound, there is no need to provide thisObj parameter
|
18500
18500
|
* @example
|
18501
|
-
*
|
18502
|
-
* for(
|
18501
|
+
* let c = new Conflator(function() { console.log("Executed"); }, 1000);
|
18502
|
+
* for(let i = 10; --i >= 0;) {
|
18503
18503
|
* c.conflate(i); // Only one "Executed" text will be logged to console after one second
|
18504
18504
|
* }
|
18505
18505
|
*/
|
18506
|
-
|
18506
|
+
let Conflator = function (func, ms, thisObj) {
|
18507
18507
|
this._onConflated = this._onConflated.bind(this);
|
18508
18508
|
|
18509
18509
|
this._data = [];
|
@@ -18565,7 +18565,7 @@ Conflator.prototype.reset = function () {
|
|
18565
18565
|
*/
|
18566
18566
|
Conflator.prototype.popAllData = function() {
|
18567
18567
|
if(this._data.length) {
|
18568
|
-
|
18568
|
+
let data = this._data;
|
18569
18569
|
this._data = [];
|
18570
18570
|
return data;
|
18571
18571
|
}
|
@@ -21072,8 +21072,9 @@ DataView.prototype.stallSorting = function(bool) {
|
|
21072
21072
|
this._dispatchDataChange(data_DataTable._positionChangeArg);
|
21073
21073
|
}
|
21074
21074
|
}
|
21075
|
+
return true;
|
21075
21076
|
}
|
21076
|
-
return
|
21077
|
+
return false;
|
21077
21078
|
};
|
21078
21079
|
|
21079
21080
|
/** Automatically and asyncronuosly remove group that has no member or no content. Predefined groups will not be removed in this way.
|
@@ -23941,12 +23942,12 @@ Virtualizer.prototype.setViewOffset = function (px) {
|
|
23941
23942
|
};
|
23942
23943
|
/** @public
|
23943
23944
|
* @ignore
|
23944
|
-
* @param {number}
|
23945
|
-
* @param {number}
|
23945
|
+
* @param {number} startItemCount
|
23946
|
+
* @param {number} endItemCount
|
23946
23947
|
*/
|
23947
|
-
Virtualizer.prototype.setViewBounds = function (
|
23948
|
-
this._startOffsetCount =
|
23949
|
-
this._endOffsetCount =
|
23948
|
+
Virtualizer.prototype.setViewBounds = function (startItemCount, endItemCount) {
|
23949
|
+
this._startOffsetCount = startItemCount > 0 ? startItemCount : 0;
|
23950
|
+
this._endOffsetCount = endItemCount > 0 ? endItemCount : 0;
|
23950
23951
|
this.validateVirtualization(); // Everytime row height is changed
|
23951
23952
|
};
|
23952
23953
|
/** @public
|
@@ -26027,7 +26028,7 @@ Core_Core.prototype._hasPendingRowChange = false;
|
|
26027
26028
|
* @return {string}
|
26028
26029
|
*/
|
26029
26030
|
Core_Core.getVersion = function () {
|
26030
|
-
return "5.1.
|
26031
|
+
return "5.1.103";
|
26031
26032
|
};
|
26032
26033
|
/** {@link ElementWrapper#dispose}
|
26033
26034
|
* @override
|
@@ -27228,6 +27229,16 @@ Core_Core.prototype._moveColumn = function (fromCol, destCol) {
|
|
27228
27229
|
}
|
27229
27230
|
}
|
27230
27231
|
|
27232
|
+
// The deactivated column may be moved directly or indirectly to the current view. It's necessary to make all columns in view activated.
|
27233
|
+
if(!this._frozenLayout) {
|
27234
|
+
if(this._colVirtualizer.isEnabled()) {
|
27235
|
+
let vBegin = this._colVirtualizer.getFirstIndexInView();
|
27236
|
+
if(!((fromCol < vBegin && destCol < vBegin) || (fromCol > vEnd && destCol > vEnd))) { // Columns does not move between hidden columns
|
27237
|
+
this._activateColumns(vBegin, vEnd, vBegin, vEnd); // To confirm that all columns in view are activated
|
27238
|
+
}
|
27239
|
+
}
|
27240
|
+
}
|
27241
|
+
|
27231
27242
|
// no need to invoke because moving column does not change column-width
|
27232
27243
|
// this._syncLayoutToColumns(minColumn, this.getColumnCount());
|
27233
27244
|
|
@@ -29026,33 +29037,24 @@ Core_Core.prototype.getYScrollVal = function (sectionRef, rowIndex, topOfView) {
|
|
29026
29037
|
}
|
29027
29038
|
|
29028
29039
|
let rowCount = this._layoutY.getLaneCount();
|
29029
|
-
let rowIndexOffset = (section) ? section.getRowOffset() : this._sectionStarts[this._startVScrollbarIndex];
|
29030
|
-
|
29031
|
-
if(rowIndexOffset) {
|
29032
|
-
rowIndex += rowIndexOffset;
|
29033
|
-
}
|
29034
29040
|
if (rowIndex <= 0) { rowIndex = 0; }
|
29035
29041
|
else if (rowIndex >= rowCount) { rowIndex = rowCount - 1; }
|
29036
29042
|
|
29037
|
-
let
|
29038
|
-
let
|
29039
|
-
let viewTop = scrollTop + heightOffset;
|
29040
|
-
let viewTopIndex = section ? section.getFirstIndexInView() : this._layoutY.hitTest(viewTop); // TODO: Make it work in zooming mode
|
29043
|
+
let viewInfo = this.getVerticalViewInfo();
|
29044
|
+
let viewTopIndex = viewInfo.topRowIndex; // TODO: Make it work in zooming mode
|
29041
29045
|
|
29042
29046
|
let scrollIndex = -1;
|
29043
29047
|
if (topOfView) {
|
29044
29048
|
scrollIndex = rowIndex;
|
29045
29049
|
} else {
|
29046
|
-
if(rowIndex
|
29050
|
+
if(rowIndex < viewTopIndex) { // Scroll up
|
29047
29051
|
scrollIndex = rowIndex - 3; // Have some spaces at the top for more appealing visual
|
29048
29052
|
if(scrollIndex < 0) {
|
29049
29053
|
scrollIndex = 0;
|
29050
29054
|
}
|
29051
29055
|
} else { // Scroll down
|
29052
|
-
let
|
29053
|
-
|
29054
|
-
let viewBottomIndex = section ? section.getLastIndexInView() : this._layoutY.hitTest(viewBottom - 0.1);
|
29055
|
-
if (rowIndex >= viewBottomIndex) {
|
29056
|
+
let viewBottomIndex = viewInfo.bottomRowIndex;
|
29057
|
+
if (rowIndex > viewBottomIndex) {
|
29056
29058
|
let viewIndexSize = viewBottomIndex - viewTopIndex;
|
29057
29059
|
scrollIndex = rowIndex - viewIndexSize + 3;
|
29058
29060
|
if(scrollIndex < 0) {
|
@@ -29062,7 +29064,9 @@ Core_Core.prototype.getYScrollVal = function (sectionRef, rowIndex, topOfView) {
|
|
29062
29064
|
}
|
29063
29065
|
}
|
29064
29066
|
|
29065
|
-
|
29067
|
+
let rowIndexOffset = (section) ? section.getRowOffset() : this._sectionStarts[this._startVScrollbarIndex];
|
29068
|
+
let heightOffset = this._layoutY.getLaneStart(this._startVScrollbarIndex);
|
29069
|
+
return (scrollIndex >= 0) ? (this._layoutY.getLaneStart(scrollIndex + rowIndexOffset) - heightOffset) : null;
|
29066
29070
|
};
|
29067
29071
|
/** Scroll up or down to make specified row visible in the view
|
29068
29072
|
* @public
|
@@ -29077,6 +29081,21 @@ Core_Core.prototype.scrollToRow = function (sectionRef, rowIndex, topOfView) {
|
|
29077
29081
|
}
|
29078
29082
|
};
|
29079
29083
|
/** @public
|
29084
|
+
* @return {Object}
|
29085
|
+
*/
|
29086
|
+
Core_Core.prototype.getVerticalViewInfo = function() {
|
29087
|
+
let rowIndexOffset = this._sectionStarts[this._startVScrollbarIndex];
|
29088
|
+
let heightOffset = this._layoutY.getLaneStart(rowIndexOffset);
|
29089
|
+
let viewHeight = this._vscrollbar.getHeight();
|
29090
|
+
let viewTop = this._vscrollbar.getScrollTop() + heightOffset;
|
29091
|
+
let viewBottom = viewTop + viewHeight;
|
29092
|
+
|
29093
|
+
return {
|
29094
|
+
topRowIndex: this._layoutY.hitTest(viewTop) - rowIndexOffset,
|
29095
|
+
bottomRowIndex: this._layoutY.hitTest(viewBottom - 0.1) - rowIndexOffset
|
29096
|
+
};
|
29097
|
+
};
|
29098
|
+
/** @public
|
29080
29099
|
* @return {Object} Returns null if vscrollbar does not exists
|
29081
29100
|
*/
|
29082
29101
|
Core_Core.prototype.getVScrollView = function () {
|
@@ -31174,7 +31193,15 @@ Core_Core.prototype._updateScrollbarHeight = function (paneChanged, contentChang
|
|
31174
31193
|
// HACK: Due to fixed layout size we need to scale view size instead of content size, when zooming
|
31175
31194
|
// TODO: Check if zoom factor is used for virtualization correctly
|
31176
31195
|
this._rowVirtualizer.setViewSize(viewSize / this._zoomFactor);
|
31177
|
-
|
31196
|
+
|
31197
|
+
let offsetRowCount = this._sectionStarts[this._startVScrollbarIndex];
|
31198
|
+
let footerCount = this.getFooterCount();
|
31199
|
+
let footerRowCount = 0;
|
31200
|
+
if(footerCount) {
|
31201
|
+
let sectionCount = this.getSectionCount();
|
31202
|
+
footerRowCount = this._sectionStarts[sectionCount] - this._sectionStarts[sectionCount - footerCount];
|
31203
|
+
}
|
31204
|
+
this._rowVirtualizer.setViewBounds(offsetRowCount, footerRowCount);
|
31178
31205
|
} else {
|
31179
31206
|
this._rowVirtualizer.validateVirtualization(); // Content height may be changed
|
31180
31207
|
}
|
@@ -32660,6 +32687,17 @@ SortableTitlePlugin.prototype._getPlugin = function(pluginName) {
|
|
32660
32687
|
let host = this._hosts[0];
|
32661
32688
|
return (host) ? host.getPlugin(pluginName) : null;
|
32662
32689
|
};
|
32690
|
+
|
32691
|
+
/** @public
|
32692
|
+
* @description Click title to sort with mouse event. This is for testing purpose.
|
32693
|
+
* @ignore
|
32694
|
+
* @param {Core} grid
|
32695
|
+
* @param {Object=} mouseEvt
|
32696
|
+
*/
|
32697
|
+
SortableTitlePlugin.prototype.clickTitleByMouse = function (grid, mouseEvt) {
|
32698
|
+
this._onClickTitle(grid, mouseEvt);
|
32699
|
+
};
|
32700
|
+
|
32663
32701
|
/** @private
|
32664
32702
|
* @param {Core} grid
|
32665
32703
|
* @param {MouseEvent} e
|