@refinitiv-ui/efx-grid 6.0.32 → 6.0.34
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/core/dist/core.js +197 -46
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/data/DataTable.d.ts +1 -1
- package/lib/core/es6/data/DataTable.js +9 -8
- package/lib/core/es6/data/DataView.js +1 -1
- package/lib/core/es6/data/Segment.d.ts +2 -0
- package/lib/core/es6/data/Segment.js +16 -0
- package/lib/core/es6/data/SegmentCollection.d.ts +1 -3
- package/lib/core/es6/data/SegmentCollection.js +25 -18
- package/lib/core/es6/grid/Core.d.ts +4 -0
- package/lib/core/es6/grid/Core.js +27 -6
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.d.ts +1 -0
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +36 -12
- package/lib/grid/index.js +1 -1
- package/lib/grid/themes/halo/dark/efx-grid.js +1 -1
- package/lib/grid/themes/halo/dark/es5/all-elements.js +1 -1
- package/lib/grid/themes/halo/efx-grid.less +2 -0
- package/lib/grid/themes/halo/light/efx-grid.js +1 -1
- package/lib/grid/themes/halo/light/es5/all-elements.js +1 -1
- package/lib/rt-grid/dist/rt-grid.js +945 -331
- package/lib/rt-grid/dist/rt-grid.min.js +1 -1
- package/lib/rt-grid/es6/ColumnDefinition.js +13 -8
- package/lib/rt-grid/es6/DataConnector.js +3 -2
- package/lib/rt-grid/es6/Grid.d.ts +3 -1
- package/lib/rt-grid/es6/Grid.js +130 -28
- package/lib/rt-grid/es6/RowDefinition.d.ts +7 -2
- package/lib/rt-grid/es6/RowDefinition.js +49 -11
- package/lib/rt-grid/es6/SnapshotFiller.d.ts +1 -0
- package/lib/rt-grid/es6/SnapshotFiller.js +1 -11
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +4 -0
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +58 -30
- package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +2 -0
- package/lib/tr-grid-column-stack/es6/ColumnStack.js +56 -22
- package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.d.ts +12 -5
- package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.js +128 -42
- package/lib/tr-grid-heat-map/es6/HeatMap.d.ts +3 -3
- package/lib/tr-grid-heat-map/es6/HeatMap.js +13 -2
- package/lib/tr-grid-row-dragging/es6/RowDragging.d.ts +2 -1
- package/lib/tr-grid-row-dragging/es6/RowDragging.js +142 -17
- package/lib/tr-grid-textformatting/es6/TextFormatting.d.ts +20 -20
- package/lib/tr-grid-textformatting/es6/TextFormatting.js +37 -138
- package/lib/tr-grid-util/es6/CellPainter.d.ts +1 -1
- package/lib/tr-grid-util/es6/CellPainter.js +56 -55
- package/lib/tr-grid-util/es6/FieldFormatter.js +6 -2
- package/lib/tr-grid-util/es6/GroupDefinitions.d.ts +2 -0
- package/lib/tr-grid-util/es6/GroupDefinitions.js +15 -0
- package/lib/tr-grid-util/es6/NumberFormatter.js +23 -11
- package/lib/tr-grid-util/es6/Util.d.ts +6 -0
- package/lib/tr-grid-util/es6/Util.js +68 -0
- package/lib/tr-grid-util/es6/jet/CollectionDict.d.ts +1 -1
- package/lib/tr-grid-util/es6/jet/CollectionDict.js +12 -2
- package/lib/tr-grid-util/es6/jet/MockQuotes2.js +170 -47
- package/lib/types/es6/ColumnGrouping.d.ts +4 -0
- package/lib/types/es6/ColumnSelection.d.ts +2 -0
- package/lib/types/es6/ColumnStack.d.ts +2 -0
- package/lib/types/es6/ConditionalColoring.d.ts +12 -5
- package/lib/types/es6/Core/data/Segment.d.ts +2 -0
- package/lib/types/es6/Core/data/SegmentCollection.d.ts +1 -3
- package/lib/types/es6/Core/grid/Core.d.ts +4 -0
- package/lib/types/es6/Core/grid/plugins/SortableTitlePlugin.d.ts +1 -0
- package/lib/types/es6/Core/grid/util/SelectionList.d.ts +6 -2
- package/lib/types/es6/HeatMap.d.ts +3 -3
- package/lib/types/es6/RealtimeGrid/Grid.d.ts +3 -1
- package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +7 -2
- package/lib/types/es6/RealtimeGrid/SnapshotFiller.d.ts +1 -0
- package/lib/types/es6/RowDragging.d.ts +25 -2
- package/lib/types/es6/StatisticsRow.d.ts +25 -25
- package/lib/types/es6/TextFormatting.d.ts +20 -20
- package/lib/versions.json +7 -7
- package/package.json +1 -1
@@ -237,25 +237,17 @@ CellPainter.prototype.clearHeatMap = function() {
|
|
237
237
|
/** @public */
|
238
238
|
CellPainter.prototype.applyThemeColor = function() {
|
239
239
|
var colors = ElfUtil.getColors();
|
240
|
-
|
241
|
-
|
242
|
-
if(
|
240
|
+
if(this._coloringType === CellPainter.ColoringTypes.HEATMAP) { // Heatmap uses grid color to blend the result color
|
241
|
+
var cond = this._conditions[0]; // Heatmap, color text condition must be the first
|
242
|
+
if(cond) {
|
243
243
|
if(cond["textMode"]) {
|
244
244
|
cond["baseColor"] = colors["baseText"];
|
245
245
|
} else {
|
246
246
|
cond["baseColor"] = colors["baseGrid"];
|
247
247
|
}
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
var up, down;
|
252
|
-
if(this._coloringType === CellPainter.ColoringTypes.TEXT && cond["field"] === "CF_TICK") {
|
253
|
-
up = colors["tickUp"];
|
254
|
-
down = colors["tickDown"];
|
255
|
-
} else {
|
256
|
-
up = colors["up"];
|
257
|
-
down = colors["down"];
|
258
|
-
}
|
248
|
+
if(cond["useThemeColor"]) {
|
249
|
+
var up = colors["up"];
|
250
|
+
var down = colors["down"];
|
259
251
|
var level = (colors["level"] === colors["baseText"]) ? "" : colors["level"];
|
260
252
|
CellPainter._setUpDownColors(cond, up, down, level);
|
261
253
|
}
|
@@ -374,34 +366,36 @@ CellPainter.prototype.addHeatmapWithTheme = function(field, midPoint, opt_textMo
|
|
374
366
|
/** @private
|
375
367
|
* @param {Function} expression
|
376
368
|
* @param {string} field
|
377
|
-
* @param {string}
|
378
|
-
* @param {string}
|
379
|
-
* @param {string}
|
369
|
+
* @param {string=} upClass CSS class name
|
370
|
+
* @param {string=} downClass CSS class name
|
371
|
+
* @param {string=} levelClass CSS class name
|
380
372
|
* @return {!Object}
|
381
373
|
*/
|
382
|
-
CellPainter.prototype._addColorText = function(expression, field,
|
374
|
+
CellPainter.prototype._addColorText = function(expression, field, upClass, downClass, levelClass) {
|
383
375
|
this._setColoringType(CellPainter.ColoringTypes.TEXT);
|
384
376
|
|
385
377
|
var condition = {};
|
386
378
|
condition["field"] = field;
|
387
379
|
condition["expression"] = expression.bind(null, field);
|
388
|
-
|
380
|
+
condition["upClass"] = upClass;
|
381
|
+
condition["downClass"] = downClass;
|
382
|
+
condition["levelClass"] = levelClass;
|
389
383
|
|
390
384
|
this._addCondition(condition);
|
391
385
|
return condition;
|
392
386
|
};
|
393
387
|
/** @public
|
394
388
|
* @param {string} field
|
395
|
-
* @param {string}
|
396
|
-
* @param {string}
|
397
|
-
* @param {string}
|
389
|
+
* @param {string=} upClass CSS class name
|
390
|
+
* @param {string=} downClass CSS class name
|
391
|
+
* @param {string=} levelClass CSS class name
|
398
392
|
* @return {!Object}
|
399
393
|
*/
|
400
|
-
CellPainter.prototype.addColorText = function(field,
|
394
|
+
CellPainter.prototype.addColorText = function(field, upClass, downClass, levelClass) {
|
401
395
|
return this._addColorText(
|
402
396
|
TickFields[field] ? CellPainter._tickColorTextCondition : CellPainter._colorTextCondition,
|
403
397
|
field,
|
404
|
-
|
398
|
+
upClass, downClass, levelClass
|
405
399
|
);
|
406
400
|
};
|
407
401
|
/** @public
|
@@ -409,14 +403,7 @@ CellPainter.prototype.addColorText = function(field, upColor, downColor, levelCo
|
|
409
403
|
* @return {!Object}
|
410
404
|
*/
|
411
405
|
CellPainter.prototype.addColorTextWithTheme = function(field) {
|
412
|
-
var
|
413
|
-
var condition = this.addColorText(field,
|
414
|
-
colors["up"],
|
415
|
-
colors["down"],
|
416
|
-
(colors["level"] === colors["baseText"]) ? "" : colors["level"]
|
417
|
-
);
|
418
|
-
|
419
|
-
condition["useThemeColor"] = true;
|
406
|
+
var condition = this.addColorText(field, "positive", "negative", "neutral");
|
420
407
|
return condition;
|
421
408
|
};
|
422
409
|
/** @public
|
@@ -518,14 +505,16 @@ CellPainter.prototype.renderForPrinting = function(cell, rowData, min, max) {
|
|
518
505
|
return;
|
519
506
|
}
|
520
507
|
var styles = this._getStyles(rowData, min, max);
|
521
|
-
var cssClass = styles["cssClass"];
|
522
|
-
if (cssClass) {
|
523
|
-
if (
|
524
|
-
|
525
|
-
|
508
|
+
var cssClass = styles["cssClass"]; // Can be an empty string
|
509
|
+
if (cssClass != null) { // Predefined colors mode
|
510
|
+
if (elem._coloringCssClass && elem._coloringCssClass !== cssClass) {
|
511
|
+
elem.classList.remove(elem._coloringCssClass);
|
512
|
+
elem._coloringCssClass = null;
|
513
|
+
}
|
514
|
+
if (cssClass) {
|
515
|
+
elem.classList.add(cssClass);
|
516
|
+
elem._coloringCssClass = cssClass;
|
526
517
|
}
|
527
|
-
cell.classList.add(cssClass);
|
528
|
-
cell._coloringCssClass = cssClass;
|
529
518
|
} else {
|
530
519
|
if (cell._coloringCssClass) {
|
531
520
|
cell.classList.remove(cell._coloringCssClass);
|
@@ -658,14 +647,17 @@ CellPainter._cellRestorer = function(scope) {
|
|
658
647
|
}
|
659
648
|
|
660
649
|
var styles = this._getStyles(rowData, min, max);
|
661
|
-
var cssClass = styles["cssClass"];
|
662
|
-
if (cssClass) {
|
650
|
+
var cssClass = styles["cssClass"]; // Can be an empty string
|
651
|
+
if (cssClass != null) { // Predefined colors mode
|
663
652
|
if (elem._coloringCssClass && elem._coloringCssClass !== cssClass) {
|
664
653
|
elem.classList.remove(elem._coloringCssClass);
|
665
654
|
elem._coloringCssClass = null;
|
666
655
|
}
|
667
|
-
|
668
|
-
|
656
|
+
if (cssClass) {
|
657
|
+
elem.classList.add(cssClass);
|
658
|
+
elem._coloringCssClass = cssClass;
|
659
|
+
}
|
660
|
+
// Remove blinking color
|
669
661
|
elem.style.backgroundColor = "";
|
670
662
|
elem.style.color = "";
|
671
663
|
} else {
|
@@ -720,13 +712,14 @@ CellPainter.prototype._getStyles = function(rowData, min, max) {
|
|
720
712
|
}
|
721
713
|
} else if(this._coloringType === CellPainter.ColoringTypes.TEXT) {
|
722
714
|
if(ret > 0) {
|
723
|
-
|
715
|
+
curCond["cssClass"] = curCond["upClass"];
|
724
716
|
} else if(ret < 0) {
|
725
|
-
|
717
|
+
curCond["cssClass"] = curCond["downClass"];
|
726
718
|
} else {
|
727
|
-
|
719
|
+
curCond["cssClass"] = this._levelColorDisabled ? "" : curCond["levelClass"];
|
728
720
|
}
|
729
|
-
|
721
|
+
curCond["cssClass"] = curCond["cssClass"] || "";
|
722
|
+
return curCond;
|
730
723
|
}
|
731
724
|
|
732
725
|
// Expected return value is {
|
@@ -902,6 +895,10 @@ CellPainter.clearCellStyle = function(cell, styles) {
|
|
902
895
|
// WARNING: Scope is not removed from the this._scopes collection to speed things up
|
903
896
|
}
|
904
897
|
|
898
|
+
if(elem._coloringCssClass) {
|
899
|
+
elem.classList.remove(elem._coloringCssClass);
|
900
|
+
}
|
901
|
+
|
905
902
|
styles = styles || CellPainter.supportedStyles;
|
906
903
|
for(var i = styles.length; --i >= 0;) {
|
907
904
|
elem.style[styles[i]] = ""; // WARNING: Very slow
|
@@ -915,22 +912,24 @@ CellPainter.clearCellStyle = function(cell, styles) {
|
|
915
912
|
* @param {boolean=} withContrast
|
916
913
|
*/
|
917
914
|
CellPainter._setUpDownColors = function(scp, upColor, downColor, levelColor, withContrast) {
|
915
|
+
scp["upColor"] = upColor;
|
918
916
|
if(upColor != null) {
|
919
|
-
scp["upColor"] = upColor;
|
920
917
|
if(withContrast) {
|
921
918
|
scp["contrastUpColor"] = CellPainter.getOppositeColor(upColor);
|
922
919
|
}
|
923
920
|
//scp["rgbUp"] = CellPainter.hex2Rgb(upColor);
|
924
921
|
}
|
922
|
+
|
923
|
+
scp["downColor"] = downColor;
|
925
924
|
if(downColor != null) {
|
926
|
-
scp["downColor"] = downColor;
|
927
925
|
if(withContrast) {
|
928
926
|
scp["contrastDownColor"] = CellPainter.getOppositeColor(downColor);
|
929
927
|
}
|
930
928
|
//scp["rgbDown"] = CellPainter.hex2Rgb(downColor);
|
931
929
|
}
|
930
|
+
|
931
|
+
scp["levelColor"] = levelColor;
|
932
932
|
if(levelColor != null) {
|
933
|
-
scp["levelColor"] = levelColor;
|
934
933
|
if(withContrast) {
|
935
934
|
scp["contrastLevelColor"] = CellPainter.getOppositeColor(levelColor);
|
936
935
|
}
|
@@ -1024,14 +1023,16 @@ CellPainter.prototype._paintCell = function(cell, rowData, min, max) {
|
|
1024
1023
|
}
|
1025
1024
|
|
1026
1025
|
var styles = this._getStyles(rowData, min, max);
|
1027
|
-
var cssClass = styles["cssClass"];
|
1028
|
-
if (cssClass) {
|
1029
|
-
if (elem._coloringCssClass !== cssClass) {
|
1026
|
+
var cssClass = styles["cssClass"]; // Can be an empty string
|
1027
|
+
if (cssClass != null) { // Predefined colors mode
|
1028
|
+
if (elem._coloringCssClass && elem._coloringCssClass !== cssClass) {
|
1030
1029
|
elem.classList.remove(elem._coloringCssClass);
|
1031
1030
|
elem._coloringCssClass = null;
|
1032
1031
|
}
|
1033
|
-
|
1034
|
-
|
1032
|
+
if (cssClass) {
|
1033
|
+
elem.classList.add(cssClass);
|
1034
|
+
elem._coloringCssClass = cssClass;
|
1035
|
+
}
|
1035
1036
|
} else {
|
1036
1037
|
if (elem._coloringCssClass) {
|
1037
1038
|
elem.classList.remove(elem._coloringCssClass);
|
@@ -189,8 +189,12 @@ FieldFormatter.prototype.getOptions = function(options) { // serialize
|
|
189
189
|
options["field"] = this._field;
|
190
190
|
options["formatType"] = this._userFormatType ? this._userFormatType : this._formatType; // WARNING: Beware of case sensitivity
|
191
191
|
if(toDateTimeType(options["formatType"]) == DATE_TIME){
|
192
|
-
|
193
|
-
|
192
|
+
if(this._dateTimeFormat !== "") {
|
193
|
+
options["dateTimeFormat"] = this._dateTimeFormat;
|
194
|
+
}
|
195
|
+
if(this._timeZone !== "GMT") {
|
196
|
+
options["useUTCTime"] = false;
|
197
|
+
} // useUTCTime by default, otherwise is use local
|
194
198
|
}
|
195
199
|
return options;
|
196
200
|
};
|
@@ -562,6 +562,21 @@ GroupDefinitions.prototype.setGroupChildren = function (groupId, newChildList) {
|
|
562
562
|
}
|
563
563
|
return false;
|
564
564
|
};
|
565
|
+
/** @public
|
566
|
+
* @param {string} groupId
|
567
|
+
* @param {string} groupName
|
568
|
+
* @return {boolean}
|
569
|
+
*/
|
570
|
+
GroupDefinitions.prototype.setGroupName = function (groupId, groupName) {
|
571
|
+
var groupDef = this._groupMap[groupId];
|
572
|
+
if(groupDef) {
|
573
|
+
if(groupDef.name !== groupName) {
|
574
|
+
groupDef.name = groupName;
|
575
|
+
return true;
|
576
|
+
}
|
577
|
+
}
|
565
578
|
|
579
|
+
return false;
|
580
|
+
};
|
566
581
|
export default GroupDefinitions;
|
567
582
|
export { GroupDefinitions };
|
@@ -242,25 +242,37 @@ NumberFormatter.prototype.getOptions = function(options) { // serialize
|
|
242
242
|
|
243
243
|
var formatType = options["formatType"];
|
244
244
|
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
245
|
+
if(this._precisionEnabled !== true) {
|
246
|
+
options["precisionEnabled"] = this._precisionEnabled; // Default in init
|
247
|
+
}
|
248
|
+
|
249
|
+
if(this._precision !== 2) {
|
250
|
+
options["decimalPlaces"] = this._precision;
|
251
|
+
}
|
252
|
+
|
253
|
+
if(this._plusSignEnabled !== false) {
|
254
|
+
options["plusSign"] = this._plusSignEnabled;
|
255
|
+
}
|
256
|
+
|
257
|
+
if(this._separatorEnabled !== false) {
|
258
|
+
options["separator"] = this._separatorEnabled;
|
259
|
+
}
|
249
260
|
|
250
261
|
if(formatType === "scaled" || formatType === "scaledvalue") {
|
251
262
|
var su = "";
|
252
263
|
if(this._scaler == "b") {
|
253
264
|
su = "billion";
|
254
|
-
|
255
|
-
|
256
|
-
}
|
257
|
-
options["scalingUnit"] = su;
|
265
|
+
options["scalingUnit"] = su;
|
266
|
+
} // We didn't return default value (million) for clean up getConfigObject
|
258
267
|
}
|
259
268
|
|
260
269
|
if(formatType === "percent") {
|
261
|
-
|
262
|
-
|
263
|
-
|
270
|
+
if(this._percentSignEnabled !== true) {
|
271
|
+
options["percentSign"] = this._percentSignEnabled;
|
272
|
+
}
|
273
|
+
if(this._multiplyBy100Enabled !== false) {
|
274
|
+
options["multiplyBy100"] = this._multiplyBy100Enabled;
|
275
|
+
}
|
264
276
|
}
|
265
277
|
return options;
|
266
278
|
};
|
@@ -18,10 +18,14 @@ declare function extendObject(obj: any, extender?: any, limiters?: (string)[]|nu
|
|
18
18
|
|
19
19
|
declare function cloneObject(obj: any, limiters?: (string)[]|null): any;
|
20
20
|
|
21
|
+
declare function isEmptyObject(obj: any): boolean;
|
22
|
+
|
21
23
|
declare function arrayToObject(data?: any[]|null, fields?: (string)[]|null): any|null|null;
|
22
24
|
|
23
25
|
declare function extendProperty(obj: any, extender: any, propName: string): void;
|
24
26
|
|
27
|
+
declare function deepEqual(obj1: any, obj2: any): boolean;
|
28
|
+
|
25
29
|
declare function extendArrayProperty(obj: any, propName: string, ary: any): any[]|null;
|
26
30
|
|
27
31
|
declare function parseCondition(expression: string|((...params: any[]) => any)|null): ((...params: any[]) => any)|null;
|
@@ -49,6 +53,8 @@ export {
|
|
49
53
|
Util,
|
50
54
|
extendObject,
|
51
55
|
cloneObject,
|
56
|
+
isEmptyObject,
|
57
|
+
deepEqual,
|
52
58
|
arrayToObject,
|
53
59
|
extendProperty,
|
54
60
|
extendArrayProperty,
|
@@ -138,6 +138,20 @@ var extendObject = function (obj, extender, limiters) {
|
|
138
138
|
var cloneObject = function (obj, limiters) {
|
139
139
|
return extendObject({}, obj, limiters);
|
140
140
|
};
|
141
|
+
|
142
|
+
/** Check empty object
|
143
|
+
* @public
|
144
|
+
* @function
|
145
|
+
* @param {Object} obj
|
146
|
+
* @return {boolean}=true, if the obj is empty
|
147
|
+
*/
|
148
|
+
var isEmptyObject = function (obj) {
|
149
|
+
for (var key in obj) {
|
150
|
+
return false;
|
151
|
+
}
|
152
|
+
return true;
|
153
|
+
};
|
154
|
+
|
141
155
|
/** @public
|
142
156
|
* @param {Array=} data
|
143
157
|
* @param {Array.<string>=} fields In case of the given data is an array, this param will be used for mapping index to field
|
@@ -186,6 +200,58 @@ var extendProperty = function (obj, extender, propName) {
|
|
186
200
|
}
|
187
201
|
}
|
188
202
|
};
|
203
|
+
|
204
|
+
|
205
|
+
/** Compare the values of obj1 and obj2. if they are the same object or have the same value, the result will be true. Otherwise, it will return false.
|
206
|
+
* @public
|
207
|
+
* @param {*} obj1
|
208
|
+
* @param {*} obj2
|
209
|
+
* @return {boolean}
|
210
|
+
*/
|
211
|
+
var deepEqual = function (obj1, obj2) {
|
212
|
+
|
213
|
+
if(obj1 === obj2) {
|
214
|
+
return true;
|
215
|
+
}
|
216
|
+
|
217
|
+
if (typeof obj1 !== typeof obj2) {
|
218
|
+
return false;
|
219
|
+
}
|
220
|
+
|
221
|
+
if (typeof obj1 === "object") {
|
222
|
+
|
223
|
+
// We need to split array and object for performance reason
|
224
|
+
if(Array.isArray(obj1)) {
|
225
|
+
if(obj1.length !== obj2.length) {
|
226
|
+
return false;
|
227
|
+
}
|
228
|
+
|
229
|
+
for (var i = 0; i < obj1.length; i++) {
|
230
|
+
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.
|
231
|
+
return false;
|
232
|
+
}
|
233
|
+
}
|
234
|
+
|
235
|
+
} else {
|
236
|
+
|
237
|
+
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
|
238
|
+
return false;
|
239
|
+
}
|
240
|
+
|
241
|
+
for (var key in obj1) {
|
242
|
+
if (!deepEqual(obj1[key], obj2[key])) {
|
243
|
+
return false;
|
244
|
+
}
|
245
|
+
}
|
246
|
+
}
|
247
|
+
|
248
|
+
|
249
|
+
return true;
|
250
|
+
}
|
251
|
+
|
252
|
+
return false;
|
253
|
+
|
254
|
+
};
|
189
255
|
/** Array.push() is much faster than Array.concat(). The downside is the parameters must be an array, whereas concat() has no such requirement. <br>
|
190
256
|
* This method excels in extending known array property in an object.
|
191
257
|
* @public
|
@@ -512,6 +578,8 @@ export {
|
|
512
578
|
Util,
|
513
579
|
extendObject,
|
514
580
|
cloneObject,
|
581
|
+
isEmptyObject,
|
582
|
+
deepEqual,
|
515
583
|
arrayToObject,
|
516
584
|
extendProperty,
|
517
585
|
extendArrayProperty,
|
@@ -1,4 +1,6 @@
|
|
1
|
-
/** @
|
1
|
+
/** @description CollectionDict stores a collection (Array) of any value using a text (string) as a key for accessing the collection.
|
2
|
+
* @constructor
|
3
|
+
*/
|
2
4
|
var CollectionDict = function() {
|
3
5
|
this._dict = {};
|
4
6
|
};
|
@@ -125,9 +127,17 @@ CollectionDict.prototype.getAllItems = function() {
|
|
125
127
|
return null;
|
126
128
|
};
|
127
129
|
/** @public
|
130
|
+
* @param {string=} key
|
128
131
|
* @return {number}
|
129
132
|
*/
|
130
|
-
CollectionDict.prototype.getItemCount = function() {
|
133
|
+
CollectionDict.prototype.getItemCount = function(key) {
|
134
|
+
if(key) {
|
135
|
+
var items = this._dict[key] || null;
|
136
|
+
if(items) {
|
137
|
+
return items.length;
|
138
|
+
}
|
139
|
+
return 0;
|
140
|
+
}
|
131
141
|
return this._count;
|
132
142
|
};
|
133
143
|
/** @public
|