@refinitiv-ui/efx-grid 6.0.32 → 6.0.33

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.
Files changed (30) hide show
  1. package/lib/core/dist/core.js +86 -11
  2. package/lib/core/dist/core.min.js +1 -1
  3. package/lib/core/es6/grid/Core.d.ts +4 -0
  4. package/lib/core/es6/grid/Core.js +27 -6
  5. package/lib/core/es6/grid/plugins/SortableTitlePlugin.d.ts +1 -0
  6. package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +29 -5
  7. package/lib/grid/index.js +1 -1
  8. package/lib/rt-grid/dist/rt-grid.js +521 -179
  9. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  10. package/lib/rt-grid/es6/Grid.js +14 -13
  11. package/lib/rt-grid/es6/RowDefinition.js +1 -1
  12. package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +4 -0
  13. package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +58 -30
  14. package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +2 -0
  15. package/lib/tr-grid-column-stack/es6/ColumnStack.js +35 -12
  16. package/lib/tr-grid-util/es6/GroupDefinitions.d.ts +2 -0
  17. package/lib/tr-grid-util/es6/GroupDefinitions.js +15 -0
  18. package/lib/tr-grid-util/es6/Util.d.ts +3 -0
  19. package/lib/tr-grid-util/es6/Util.js +15 -0
  20. package/lib/tr-grid-util/es6/jet/CollectionDict.d.ts +1 -1
  21. package/lib/tr-grid-util/es6/jet/CollectionDict.js +12 -2
  22. package/lib/tr-grid-util/es6/jet/MockQuotes2.js +170 -47
  23. package/lib/types/es6/ColumnGrouping.d.ts +4 -0
  24. package/lib/types/es6/ColumnSelection.d.ts +2 -0
  25. package/lib/types/es6/ColumnStack.d.ts +2 -0
  26. package/lib/types/es6/Core/grid/util/SelectionList.d.ts +6 -2
  27. package/lib/types/es6/RowDragging.d.ts +23 -1
  28. package/lib/types/es6/StatisticsRow.d.ts +25 -25
  29. package/lib/versions.json +3 -3
  30. package/package.json +1 -1
@@ -2337,7 +2337,7 @@ Grid.prototype.removeRow = function(rowRef) {
2337
2337
  if(this._mainGrid) {
2338
2338
  return this._mainGrid.removeRow(this._getRowId(rowRef));
2339
2339
  }
2340
- var rowDef = this._getRowDefinition(rowRef);
2340
+ var rowDef = this._getRowDefinitionByRef(rowRef);
2341
2341
  if(rowDef) {
2342
2342
  if(!rowDef.isAutoGenerated()) { // Users cannot remove auto-generated row by themselves
2343
2343
  this._removeRow(rowDef);
@@ -2368,7 +2368,7 @@ Grid.prototype.removeRows = function(rowRefs) {
2368
2368
 
2369
2369
  // Verify user input
2370
2370
  for(i = 0; i < len; ++i) {
2371
- rowDef = this._getRowDefinition(rowRefs[i]);
2371
+ rowDef = this._getRowDefinitionByRef(rowRefs[i]);
2372
2372
  if(rowDef) {
2373
2373
  if(!rowDef.isAutoGenerated()) {
2374
2374
  rowDefs.push(rowDef);
@@ -2504,7 +2504,7 @@ Grid.prototype.setRic = function(rowRef, str, options) {
2504
2504
  this._mainGrid.setRic(this._toRowId(rowRef), str);
2505
2505
  return;
2506
2506
  }
2507
- var rowDef = this._getRowDefinition(rowRef);
2507
+ var rowDef = this._getRowDefinitionByRef(rowRef);
2508
2508
  if(rowDef) {
2509
2509
  options = options || {};
2510
2510
  var newChain = false;
@@ -2539,7 +2539,7 @@ Grid.prototype.setRic = function(rowRef, str, options) {
2539
2539
  * @param {Grid~RowReference} rowRef
2540
2540
  */
2541
2541
  Grid.prototype.unlinkChain = function(rowRef) {
2542
- var rowDef = this._getRowDefinition(rowRef);
2542
+ var rowDef = this._getRowDefinitionByRef(rowRef);
2543
2543
  if(!rowDef) {
2544
2544
  return;
2545
2545
  }
@@ -2718,7 +2718,8 @@ Grid.prototype.getRowType = function(rowRef) {
2718
2718
  var rowDef = this.getRowDefinition(rowRef);
2719
2719
  return rowDef ? rowDef.getType() : "";
2720
2720
  };
2721
- /** @public
2721
+ /** Get RowDefinition object by either number or row id
2722
+ * @public
2722
2723
  * @param {number|string} rowRef Row index as shown in the view or row id (string)
2723
2724
  * @return {RowDefinition}
2724
2725
  */
@@ -2748,7 +2749,7 @@ Grid.prototype._getRowDefinitionById = function(rowId) {
2748
2749
  * @param {Grid~RowReference} rowRef
2749
2750
  * @return {RowDefinition}
2750
2751
  */
2751
- Grid.prototype._getRowDefinition = function(rowRef) {
2752
+ Grid.prototype._getRowDefinitionByRef = function(rowRef) {
2752
2753
  if(rowRef instanceof RowDefinition) {
2753
2754
  if(rowRef.getRowId()) { // The row may have been removed from the grid
2754
2755
  return /** @type{!RowDefinition} */(rowRef);
@@ -2852,7 +2853,7 @@ Grid.prototype.setRicData = function(ric, values) {
2852
2853
  * @param {Object} values {"FIELD1": value1, "FIELD2": value2, ...} Use null to remove current row data (not row in the view).
2853
2854
  */
2854
2855
  Grid.prototype.setRowData = function(rowRef, values) {
2855
- var rowDef = this._getRowDefinition(rowRef);
2856
+ var rowDef = this._getRowDefinitionByRef(rowRef);
2856
2857
  if(rowDef) {
2857
2858
  rowDef.setRowData(values);
2858
2859
  }
@@ -2864,7 +2865,7 @@ Grid.prototype.setRowData = function(rowRef, values) {
2864
2865
  * @param {Object} values
2865
2866
  */
2866
2867
  Grid.prototype.setStaticRowData = function(rowRef, values) {
2867
- var rowDef = this._getRowDefinition(rowRef);
2868
+ var rowDef = this._getRowDefinitionByRef(rowRef);
2868
2869
  if(rowDef) {
2869
2870
  rowDef.setStaticRowData(values);
2870
2871
  }
@@ -2877,7 +2878,7 @@ Grid.prototype.setStaticRowData = function(rowRef, values) {
2877
2878
  * @param {*} value
2878
2879
  */
2879
2880
  Grid.prototype.setStaticData = function(rowRef, field, value) {
2880
- var rowDef = this._getRowDefinition(rowRef);
2881
+ var rowDef = this._getRowDefinitionByRef(rowRef);
2881
2882
  if(rowDef) {
2882
2883
  rowDef.setStaticData(field, value);
2883
2884
  }
@@ -3227,7 +3228,7 @@ Grid.prototype._onDataChanged = function(e) {
3227
3228
  // The new data update has no row definition, meaning that we have found a new constituent from a chain.
3228
3229
  var subId = rowData[SUB_ID]; // The constituent will share the same sub id as its parent
3229
3230
  if(subId) {
3230
- var parentDef = this._getRowDefinition(subId);
3231
+ var parentDef = this._getRowDefinitionById(subId);
3231
3232
  if(parentDef && parentDef.getRic() !== rowData["RIC"]) { // TODO: Check for delayed ric
3232
3233
  if(!this._chainMembers) {
3233
3234
  this._chainMembers = {};
@@ -3259,7 +3260,7 @@ Grid.prototype._addMemberOfChain = function(rowData) {
3259
3260
  for(i = 0; i < len; ++i) {
3260
3261
  rowData = /** @type{!Object} */(rows[i]);
3261
3262
  var subId = rowData[SUB_ID];
3262
- var parentDef = this._getRowDefinition(subId);
3263
+ var parentDef = this._getRowDefinitionById(subId);
3263
3264
  if(parentDef) {
3264
3265
  var childDef = parentDef.addConstituent(/** @type{string} */(rowData["RIC"]), this._dt);
3265
3266
  if(childDef) {
@@ -3405,7 +3406,7 @@ Grid.prototype.getPageCount = function() {
3405
3406
  * @param {Grid~RowReference} rowRef
3406
3407
  */
3407
3408
  Grid.prototype.toggleChain = function(rowRef) {
3408
- var rowDef = this._getRowDefinition(rowRef);
3409
+ var rowDef = this._getRowDefinitionByRef(rowRef);
3409
3410
  if(rowDef) {
3410
3411
  rowDef.toggleChain();
3411
3412
  }
@@ -3417,7 +3418,7 @@ Grid.prototype.toggleChain = function(rowRef) {
3417
3418
  * @return {boolean}
3418
3419
  */
3419
3420
  Grid.prototype.setClassification = function(rowRef, fields) {
3420
- var rowDef = this._getRowDefinition(rowRef);
3421
+ var rowDef = this._getRowDefinitionByRef(rowRef);
3421
3422
  if(rowDef) {
3422
3423
  return this._dt.setSegmentClassification(rowDef.getRowId(), fields);
3423
3424
  }
@@ -49,7 +49,7 @@ var ROW_TYPES = {
49
49
  */
50
50
  var RowDefinition = function(rowOptions) {
51
51
  this._changes = {};
52
- if(rowOptions && rowOptions["segmentId"]) {
52
+ if(rowOptions && rowOptions["segmentId"]) { // This row will be classification header row
53
53
  this._dataId = this._rowId = rowOptions["segmentId"];
54
54
  this._autoGenerated = true;
55
55
  this._subSegment = true;
@@ -37,6 +37,8 @@ declare class ColumnGroupingPlugin extends GridPlugin {
37
37
 
38
38
  public getConfigObject(gridOptions?: any): any;
39
39
 
40
+ public renderGroups(): void;
41
+
40
42
  public addColumnToGroup(column: any, groupId: string, colIndex: number): void;
41
43
 
42
44
  public addGroup(groupDef: ColumnGroupingPlugin.GroupDefinition|null): string;
@@ -55,6 +57,8 @@ declare class ColumnGroupingPlugin extends GridPlugin {
55
57
 
56
58
  public setGroupChildren(groupId: string, newChildList: (string)[]|null): boolean;
57
59
 
60
+ public setGroupName(groupId: string, groupName: string): void;
61
+
58
62
  public getGroupChildren(groupId: string): (string)[]|null;
59
63
 
60
64
  public getChildColumnIndices(groupId: string): (number)[]|null;
@@ -661,9 +661,10 @@ ColumnGroupingPlugin.prototype._spanGroupHorizontally = function (titleSection)
661
661
  }
662
662
  }
663
663
  };
664
- /** @private
664
+ /** Render all column group headers without affecting cell spans.
665
+ * @public
665
666
  */
666
- ColumnGroupingPlugin.prototype._renderGroups = function () {
667
+ ColumnGroupingPlugin.prototype.renderGroups = function () {
667
668
  var hostCount = this._hosts.length;
668
669
  var groupMap = this._visibleGroupMap;
669
670
  for (var i = 0; i < hostCount; ++i) {
@@ -671,35 +672,42 @@ ColumnGroupingPlugin.prototype._renderGroups = function () {
671
672
  if (!section) {
672
673
  continue;
673
674
  }
674
- var arg = {};
675
675
  for (var id in groupMap) {
676
- var node = groupMap[id];
677
- var colIndex = node["colIndex"];
678
- if (colIndex == null) {
679
- continue;
680
- }
681
- var rowIndex = node["onRow"];
682
- var cell = section.getCell(colIndex, rowIndex);
683
- if (cell) {
684
- // Overide the defaults
685
- cell.setStyle("text-align", node["alignment"] || "");
686
- cell.setTooltip(ColumnGroupingPlugin._getTooltip(node));
687
- cell.setContent(node["title"] || node["name"]);
676
+ this._renderGroup(groupMap[id], section);
677
+ }
678
+ }
679
+ };
680
+ /** Render single column group header without affecting cell span.
681
+ * @private
682
+ * @param {Object} groupDef
683
+ * @param {Object} section
684
+ */
685
+ ColumnGroupingPlugin.prototype._renderGroup = function (groupDef, section) {
686
+ var colIndex = groupDef["colIndex"];
687
+ if (colIndex == null) {
688
+ return;
689
+ }
690
+ var rowIndex = groupDef["onRow"];
691
+ var cell = section.getCell(colIndex, rowIndex);
692
+ if (cell) {
693
+ // Overide the defaults
694
+ cell.setStyle("text-align", groupDef["alignment"] || "");
695
+ cell.setTooltip(ColumnGroupingPlugin._getTooltip(groupDef));
696
+ cell.setContent(groupDef["name"] || groupDef["title"]);
688
697
 
689
- // Additional cell settings must be removed in the _applyGrouping() method
690
- cell.addClass("no-sort");
691
- cell.setAttribute("group-id", node["id"]);
692
- if (node["legacyRender"]) {
693
- // Built-in version if render receive colIndex, cell, groupDefinition as arguments
694
- node["legacyRender"](colIndex, cell, node);
695
- }
696
- if (node["render"]) {
697
- arg["cell"] = cell;
698
- arg["colIndex"] = colIndex;
699
- arg["groupNode"] = node;
700
- node["render"](arg);
701
- }
702
- }
698
+ // Additional cell settings must be removed in the _applyGrouping() method
699
+ cell.addClass("no-sort");
700
+ cell.setAttribute("group-id", groupDef["id"]);
701
+ if (groupDef["legacyRender"]) {
702
+ // Built-in version if render receive colIndex, cell, groupDefinition as arguments
703
+ groupDef["legacyRender"](colIndex, cell, groupDef);
704
+ }
705
+ if (groupDef["render"]) {
706
+ var arg = {};
707
+ arg["cell"] = cell;
708
+ arg["colIndex"] = colIndex;
709
+ arg["groupNode"] = groupDef;
710
+ groupDef["render"](arg);
703
711
  }
704
712
  }
705
713
  };
@@ -709,7 +717,7 @@ ColumnGroupingPlugin.prototype._renderGroups = function () {
709
717
  */
710
718
  ColumnGroupingPlugin.prototype._onPostSectionRender = function (e) {
711
719
  if (e.sectionType === "title" && !this._restructuring) {
712
- this._renderGroups();
720
+ this.renderGroups();
713
721
  }
714
722
  };
715
723
 
@@ -1029,6 +1037,26 @@ ColumnGroupingPlugin.prototype.setGroupChildren = function (groupId, newChildLis
1029
1037
  }
1030
1038
  return false;
1031
1039
  };
1040
+ /** @public
1041
+ * @param {string} groupId
1042
+ * @param {string} groupName
1043
+ */
1044
+ ColumnGroupingPlugin.prototype.setGroupName = function (groupId, groupName) {
1045
+ if (this._groupDefs.setGroupName(groupId, groupName)) {
1046
+ var groupDef = this._visibleGroupMap[groupId];
1047
+ if (groupDef) {
1048
+ groupDef.name = groupName;
1049
+ var hostCount = this._hosts.length;
1050
+ for (var i = 0; i < hostCount; ++i) {
1051
+ var section = this._hosts[i].getSection("title");
1052
+ if (!section) {
1053
+ continue;
1054
+ }
1055
+ this._renderGroup(groupDef, section);
1056
+ }
1057
+ }
1058
+ }
1059
+ };
1032
1060
  /** @private
1033
1061
  * @param {string} groupId
1034
1062
  * @return {!Array.<string>} The list of immediate valid child, including invisible child groups
@@ -119,6 +119,8 @@ declare class ColumnStackPlugin extends GridPlugin {
119
119
 
120
120
  public getActiveColumnField(stackId: string): string;
121
121
 
122
+ public getActiveColumnIndex(stackId: string): number;
123
+
122
124
  public addStackChild(stackId: string, colRef: number|string|null): void;
123
125
 
124
126
  public removeStackChild(stackId: string, colRef: number|string|null): void;
@@ -1045,8 +1045,22 @@ ColumnStackPlugin.prototype.stackColumns = function(colRefs, stackId, options) {
1045
1045
  stack.activeColumn = stack.stackRefs[stack.stackRefs.length - 1]; // Right most column is the active column
1046
1046
  } else {
1047
1047
  var csp = this._getPlugin("ColumnSelectionPlugin");
1048
- if(csp && csp.isEnabled()) {
1049
- csp.selectSingleColumn(activeIndex);
1048
+ if(csp && csp.isEnabled()){
1049
+ var stackSelection = false;
1050
+ for(i = 0; i < len; ++i){
1051
+ colIndex = colRefs[i];
1052
+ if(colIndex === activeIndex){
1053
+ continue;
1054
+ }
1055
+ if(csp.isSelectedColumn(colIndex)){
1056
+ stackSelection = true;
1057
+ break;
1058
+ }
1059
+ }
1060
+ if(stackSelection) {
1061
+ csp.selectSingleColumn(activeIndex);
1062
+ csp.dispatchSelectionChanged();
1063
+ }
1050
1064
  }
1051
1065
  }
1052
1066
 
@@ -1113,7 +1127,6 @@ ColumnStackPlugin.prototype.unstackColumns = function(colIndices) {
1113
1127
  }
1114
1128
 
1115
1129
  var dirty = false;
1116
- var selFrom, selLen;
1117
1130
 
1118
1131
  for(var sid in stacks) {
1119
1132
  var stack = this._stacks[sid];
@@ -1124,8 +1137,6 @@ ColumnStackPlugin.prototype.unstackColumns = function(colIndices) {
1124
1137
 
1125
1138
  var stackRefs = stack.stackRefs;
1126
1139
  len = stackRefs.length;
1127
- selFrom = this._getColumnIndex(stack.stackRefs[0]);
1128
- selLen = len - 1;
1129
1140
 
1130
1141
  for(i = 0; i < len; ++i) {
1131
1142
  var stackRef = stackRefs[i];
@@ -1140,10 +1151,6 @@ ColumnStackPlugin.prototype.unstackColumns = function(colIndices) {
1140
1151
  delete this._stacks[sid]; // Remove all reference to the stack
1141
1152
  }
1142
1153
  if(dirty) {
1143
- var csp = this._getPlugin("ColumnSelectionPlugin");
1144
- if(csp && csp.isEnabled()) {
1145
- csp.selectRange(selFrom, selLen);
1146
- }
1147
1154
  var cfp = this._getPlugin("ColumnFilterPlugin");
1148
1155
  if(cfp) {
1149
1156
  cfp["refresh"]();
@@ -1256,6 +1263,7 @@ ColumnStackPlugin.prototype.swapColumn = function(colRef, swappingIndex) {
1256
1263
  var csp = this._getPlugin("ColumnSelectionPlugin");
1257
1264
  if(csp && csp.isEnabled()) {
1258
1265
  csp.selectSingleColumn(newActiveColumnIndex);
1266
+ csp.dispatchSelectionChanged();
1259
1267
  }
1260
1268
  var cfp = this._getPlugin("ColumnFilterPlugin");
1261
1269
  if(cfp) {
@@ -1513,6 +1521,7 @@ ColumnStackPlugin.prototype._onStackButtonClicked = function(e) {
1513
1521
  pos["columnIndices"] = colIndices;
1514
1522
  pos["activeColIndex"] = this._getColumnIndex(colData.activeColumn);
1515
1523
  pos["event"] = e;
1524
+ pos["stackId"] = colData.stackId;
1516
1525
 
1517
1526
  elem.focus();
1518
1527
  this._dispatch("clicked", pos);
@@ -1809,15 +1818,29 @@ ColumnStackPlugin.prototype.getStackName = function(stackId) {
1809
1818
  */
1810
1819
  ColumnStackPlugin.prototype.getActiveColumnField = function(stackId) {
1811
1820
  var field = "";
1821
+ var activeColIndex = this.getActiveColumnIndex(stackId);
1822
+ if(activeColIndex !== -1){
1823
+ field = this._getField(activeColIndex);
1824
+ }
1825
+ return field;
1826
+ };
1827
+
1828
+ /** @public
1829
+ * @description Get active column index of specific stack
1830
+ * @param {string} stackId
1831
+ * @return {number} active column index
1832
+ */
1833
+ ColumnStackPlugin.prototype.getActiveColumnIndex = function(stackId) {
1834
+ var activeColIndex = -1;
1812
1835
  if(stackId !== null) {
1813
1836
  var stack = this._stacks[stackId];
1814
1837
  if(stack){
1815
- var activeColIndex = this._getColumnIndex(stack.activeColumn);
1816
- field = this._getField(activeColIndex);
1838
+ activeColIndex = this._getColumnIndex(stack.activeColumn);
1817
1839
  }
1818
1840
  }
1819
- return field;
1841
+ return activeColIndex;
1820
1842
  };
1843
+ //getActiveColumnIndex
1821
1844
 
1822
1845
  /** @public
1823
1846
  * @param {string} stackId
@@ -56,6 +56,8 @@ declare class GroupDefinitions {
56
56
 
57
57
  public setGroupChildren(groupId: string, newChildList: (string)[]|null): boolean;
58
58
 
59
+ public setGroupName(groupId: string, groupName: string): boolean;
60
+
59
61
  }
60
62
 
61
63
  export default GroupDefinitions;
@@ -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 };
@@ -18,6 +18,8 @@ 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;
@@ -49,6 +51,7 @@ export {
49
51
  Util,
50
52
  extendObject,
51
53
  cloneObject,
54
+ isEmptyObject,
52
55
  arrayToObject,
53
56
  extendProperty,
54
57
  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
@@ -512,6 +526,7 @@ export {
512
526
  Util,
513
527
  extendObject,
514
528
  cloneObject,
529
+ isEmptyObject,
515
530
  arrayToObject,
516
531
  extendProperty,
517
532
  extendArrayProperty,
@@ -18,7 +18,7 @@ declare class CollectionDict {
18
18
 
19
19
  public getAllItems(): any[]|null;
20
20
 
21
- public getItemCount(): number;
21
+ public getItemCount(key?: string|null): number;
22
22
 
23
23
  public getAllKeys(): (string)[];
24
24
 
@@ -1,4 +1,6 @@
1
- /** @constructor */
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