@refinitiv-ui/efx-grid 6.0.36 → 6.0.38

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 (31) hide show
  1. package/lib/core/dist/core.js +51 -4
  2. package/lib/core/dist/core.min.js +1 -1
  3. package/lib/core/es6/grid/Core.d.ts +2 -0
  4. package/lib/core/es6/grid/Core.js +51 -4
  5. package/lib/grid/index.js +1 -1
  6. package/lib/grid/themes/base.less +1 -0
  7. package/lib/grid/themes/halo/dark/efx-grid.js +1 -1
  8. package/lib/grid/themes/halo/dark/es5/all-elements.js +1 -1
  9. package/lib/grid/themes/halo/efx-grid.less +2 -0
  10. package/lib/grid/themes/halo/light/efx-grid.js +1 -1
  11. package/lib/grid/themes/halo/light/es5/all-elements.js +1 -1
  12. package/lib/grid/themes/solar/charcoal/efx-grid.js +1 -1
  13. package/lib/grid/themes/solar/charcoal/es5/all-elements.js +1 -1
  14. package/lib/grid/themes/solar/pearl/efx-grid.js +1 -1
  15. package/lib/grid/themes/solar/pearl/es5/all-elements.js +1 -1
  16. package/lib/rt-grid/dist/rt-grid.js +375 -131
  17. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  18. package/lib/rt-grid/es6/FieldDefinition.js +0 -41
  19. package/lib/rt-grid/es6/Grid.d.ts +1 -1
  20. package/lib/rt-grid/es6/Grid.js +63 -29
  21. package/lib/rt-grid/es6/RowDefinition.d.ts +2 -2
  22. package/lib/rt-grid/es6/RowDefinition.js +103 -53
  23. package/lib/tr-grid-cell-selection/es6/CellSelection.js +180 -421
  24. package/lib/tr-grid-column-stack/es6/ColumnStack.js +159 -31
  25. package/lib/tr-grid-util/es6/jet/MockQuotes2.js +7 -0
  26. package/lib/types/es6/ColumnStack.d.ts +1 -0
  27. package/lib/types/es6/Core/grid/Core.d.ts +2 -0
  28. package/lib/types/es6/Core/grid/LayoutGrid.d.ts +4 -0
  29. package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +2 -2
  30. package/lib/versions.json +3 -3
  31. package/package.json +1 -1
@@ -13195,9 +13195,10 @@ DataTable._proto = DataTable.prototype;
13195
13195
  * @property {Array.<string>=} fields=null Field that corresponds to the given static values
13196
13196
  * @property {boolean=} asChain=false The given ric will be treated as a chain
13197
13197
  * @property {string=} chainRic="" RIC to be used for chain request (overiding ric property)
13198
- * @property {boolean=} collapsed=false Chain is expanded by default
13198
+ * @property {boolean=} collapsed=true Chain is collapsed by default
13199
13199
  * @property {(string|null)=} label=null
13200
13200
  * @property {boolean=} hidden=true When this row is hidden
13201
+ * @pro // realTime
13201
13202
  */
13202
13203
 
13203
13204
  /** @typedef {Object} RowDefinition~RowTypes
@@ -13273,18 +13274,18 @@ RowDefinition.prototype._ric = ""; // Contains no 0#
13273
13274
  * @private
13274
13275
  */
13275
13276
  RowDefinition.prototype._permId = "";
13276
- /** @type {string}
13277
+ /** @type {string|null}
13277
13278
  * @private
13278
13279
  */
13279
- RowDefinition.prototype._displayText = "";
13280
- /** @type {string|null}
13280
+ RowDefinition.prototype._label = null; // Label overrides _ric and _permId
13281
+ /** @type {boolean|null}
13281
13282
  * @private
13282
13283
  */
13283
- RowDefinition.prototype._label = null; // Label overrides _ric and _displayText
13284
+ RowDefinition.prototype._isChain = null;
13284
13285
  /** @type {boolean}
13285
13286
  * @private
13286
13287
  */
13287
- RowDefinition.prototype._isChain = false;
13288
+ RowDefinition.prototype._realTime = true;
13288
13289
 
13289
13290
  /** @type {string}
13290
13291
  * @private
@@ -13308,10 +13309,10 @@ RowDefinition.prototype._view = null;
13308
13309
  */
13309
13310
  RowDefinition.prototype._subId = "";
13310
13311
 
13311
- /** @type {boolean}
13312
+ /** @type {boolean|null}
13312
13313
  * @private
13313
13314
  */
13314
- RowDefinition.prototype._expanded = false;
13315
+ RowDefinition.prototype._expanded = null;
13315
13316
  /** @type {boolean}
13316
13317
  * @private
13317
13318
  */
@@ -13399,18 +13400,19 @@ RowDefinition.prototype.initialize = function(rowOptions) {
13399
13400
  return;
13400
13401
  }
13401
13402
 
13402
- var val = rowOptions["ric"];
13403
+ var val = rowOptions["permId"];
13403
13404
  if(val != null) {
13404
- this._ric = val;
13405
+ this._permId = val;
13405
13406
  }
13406
- val = rowOptions["permId"];
13407
+ val = rowOptions["ric"];
13407
13408
  if(val != null) {
13408
- this._permId = val;
13409
+ this._ric = val;
13409
13410
  }
13410
- if(this._ric || this._permId){
13411
- this.setContent(this._ric, this._permId); // this._dataId is modified
13411
+ val = rowOptions["label"];
13412
+ // eslint-disable-next-line no-undefined
13413
+ if(val !== undefined) { // Empty string and null are allowed
13414
+ this._label = val;
13412
13415
  }
13413
-
13414
13416
  val = rowOptions["chainRic"];
13415
13417
  if(val != null) {
13416
13418
  this._chainRic = val;
@@ -13422,26 +13424,40 @@ RowDefinition.prototype.initialize = function(rowOptions) {
13422
13424
  }
13423
13425
 
13424
13426
  val = rowOptions["asChain"];
13425
- if(val) {
13426
- this._isChain = true;
13427
- this._expanded = !rowOptions["collapsed"];
13428
- } else if(this._isChain) {
13429
- var collapsed = rowOptions["collapsed"];
13430
- if(collapsed != null) {
13431
- this._expanded = !collapsed;
13432
- }
13427
+ if(val !== null) {
13428
+ this._isChain = val;
13433
13429
  }
13434
13430
 
13435
- val = rowOptions["label"];
13436
- // eslint-disable-next-line no-undefined
13437
- if(val !== undefined) { // Empty string and null are allowed
13438
- this._label = val;
13431
+ val = rowOptions["realTime"];
13432
+ if(val != null) {
13433
+ this._realTime = val;
13439
13434
  }
13440
13435
 
13436
+ val = rowOptions["collapsed"];
13437
+ if(val != null){
13438
+ this._expanded = !val;
13439
+ }
13441
13440
  val = rowOptions["keepModel"];
13442
13441
  if(val) {
13443
13442
  this._userModel = rowOptions;
13444
13443
  }
13444
+
13445
+ var expanded = this._expanded;
13446
+ var symbol = this._ric || this._chainRic;
13447
+ var asChain = this._isChain || !!this._chainRic;
13448
+ if(this._ric && this._ric.indexOf("0#") >= 0){
13449
+ asChain = true;
13450
+ expanded = true;
13451
+ }
13452
+ if(this._isChain === false){
13453
+ asChain = false;
13454
+ }
13455
+ if(this._expanded === false){
13456
+ expanded = false;
13457
+ }
13458
+ if(symbol || this._permId){
13459
+ this.setContent(symbol, this._permId, asChain, expanded); // this._dataId is modified
13460
+ }
13445
13461
  };
13446
13462
  /** @private
13447
13463
  * @param {!Object} rowOptions
@@ -13451,8 +13467,7 @@ RowDefinition.prototype._initializeAsConstituent = function(rowOptions) {
13451
13467
  var parentDef = /** @type{RowDefinition} */(rowOptions["parent"]);
13452
13468
  if(this.setParent(parentDef)) {
13453
13469
  this._dataId = /** @type{string} */(rowOptions["dataId"]); // Constituent will have the same subId as its parent but with different ric
13454
- this._displayText = this._ric = /** @type{string} */(rowOptions["ric"]);
13455
-
13470
+ this._ric = /** @type{string} */(rowOptions["ric"]);
13456
13471
  this._dc = parentDef._dc; // Parent chain must have data cache
13457
13472
  if(this._dc) {
13458
13473
  var rowData = this.getRowData(); // Do not trigger any data update
@@ -13470,9 +13485,12 @@ RowDefinition.prototype._initializeAsConstituent = function(rowOptions) {
13470
13485
  /** @public
13471
13486
  * @param {string} userInput RIC
13472
13487
  * @param {string=} permId=null Organization PermId, which use for getting ADC data for private company
13488
+ * @param {boolean=} asChain
13489
+ * @param {boolean=} expanded
13490
+ * @param {boolean=} realTime
13473
13491
  * @return {boolean} True if there is any change otherwise false
13474
13492
  */
13475
- RowDefinition.prototype.setContent = function(userInput, permId) {
13493
+ RowDefinition.prototype.setContent = function(userInput, permId, asChain, expanded) {
13476
13494
  if(this._autoGenerated) { // AutoGenerated RowDefinition cannot be changed by user input
13477
13495
  return false;
13478
13496
  }
@@ -13486,10 +13504,7 @@ RowDefinition.prototype.setContent = function(userInput, permId) {
13486
13504
  var dirty = (this._userInput !== userInput);
13487
13505
  if(this._permId !== permId){
13488
13506
  this._permId = permId || "";
13489
- if(!userInput){
13490
- this._displayText = this._permId;
13491
- dirty = true;
13492
- }
13507
+ dirty = true;
13493
13508
  }
13494
13509
  if(!dirty) {
13495
13510
  return false;
@@ -13498,34 +13513,44 @@ RowDefinition.prototype.setContent = function(userInput, permId) {
13498
13513
  this.unsubscribeForUpdates();
13499
13514
  this.resetUpdates(); // Remove all previous data updates because a new content is just entered
13500
13515
 
13516
+ // TODO: handle changing between chain and ric row
13501
13517
  this._userInput = userInput;
13502
13518
  if(this._userInput.charAt(0) === "'") { // This is a row header
13503
- this._displayText = this._userInput.substr(1);
13504
13519
  this._ric = this._chainRic = ""; // No ric for realtime request
13505
13520
  } else {
13506
13521
  if(this._userInput.indexOf("0#") >= 0) {
13507
- this._ric = this._userInput.replace("0#", "");
13508
- this._isChain = this._expanded = true; // Only chain can be expanded by 0# TODO: RIC with 0# is not necessarily a chain
13509
- this._chainRic = this._userInput;
13510
- if(this._view) {
13511
- this._view.setSegmentSeparator(this._rowId);
13512
- this.expandChain();
13522
+ if(asChain === false){
13523
+ this._ric = this._userInput;
13524
+ } else {
13525
+ this._ric = expanded === false ? this._userInput : this._userInput.replace("0#", "");
13526
+ this._expanded = expanded;
13527
+ this._isChain = true; // Only chain can be expanded by 0#
13528
+ this._chainRic = this._userInput;
13529
+ if(this._view) {
13530
+ this._view.setSegmentSeparator(this._rowId);
13531
+ this.expandChain();
13532
+ }
13513
13533
  }
13514
13534
  } else {
13515
13535
  this._ric = this._userInput;
13516
- this._chainRic = "";
13536
+ if(asChain){
13537
+ this._isChain = true;
13538
+ }
13517
13539
  }
13518
- this._displayText = this._ric; // No 0#
13519
13540
  }
13520
13541
 
13521
13542
  this._dataId = this._rowId + this.getSymbol(); // JET/RTK will generate data id to be rowId (given from this rowDef) + ric;
13522
13543
 
13523
- // This will work for runtime ric modification, but not for first initilization.
13544
+
13524
13545
  if(!this.subscribeForUpdates()) {
13525
- // Avoid losing the ROW_DEF pointer.
13526
- var rowData = {};
13527
- rowData[ROW_DEF] = this; // Enable tracking back and updating data
13528
- this.setRowData(rowData);
13546
+ if(this._dc) {
13547
+ // This will work for runtime ric modification, but not for first initilization.
13548
+ // Avoid losing the ROW_DEF pointer.
13549
+ var rowData = {};
13550
+ rowData[ROW_DEF] = this; // Enable tracking back and updating data
13551
+ rowData["X_RIC_NAME"] = this.getDisplayText();
13552
+ this.setRowData(rowData);
13553
+ }
13529
13554
  }
13530
13555
  return true;
13531
13556
  };
@@ -13546,6 +13571,16 @@ RowDefinition.prototype.getConfigObject = function(rowOptions) {
13546
13571
  obj["ric"] = val;
13547
13572
  }
13548
13573
 
13574
+ // The user passed a single quote (') case
13575
+ if(!this._ric && this._userInput.charAt(0) === "'") {
13576
+ obj["ric"] = this._userInput;
13577
+ }
13578
+
13579
+ val = this._realTime;
13580
+ if(val !== true) {
13581
+ obj["realTime"] = val;
13582
+ }
13583
+
13549
13584
  val = this._permId;
13550
13585
  if(val) {
13551
13586
  obj["permId"] = val;
@@ -13567,12 +13602,12 @@ RowDefinition.prototype.getConfigObject = function(rowOptions) {
13567
13602
  }
13568
13603
 
13569
13604
  val = this._isChain;
13570
- if(val) {
13605
+ if(val != null) {
13571
13606
  obj["asChain"] = val;
13572
13607
  }
13573
13608
 
13574
13609
  val = this._expanded;
13575
- if(val) {
13610
+ if(val != null) {
13576
13611
  obj["collapsed"] = !val;
13577
13612
  }
13578
13613
 
@@ -13670,6 +13705,7 @@ RowDefinition.prototype.setDataSource = function(dataSource) {
13670
13705
  if(!rowData) {
13671
13706
  rowData = {};
13672
13707
  rowData[ROW_DEF] = this; // Enable tracking back and updating data
13708
+ rowData["X_RIC_NAME"] = this.getDisplayText();
13673
13709
  this.setRowData(rowData); // TODO: This will dispatch dataChanged event and caused update to be added, which should not happen
13674
13710
  }
13675
13711
 
@@ -13812,7 +13848,16 @@ RowDefinition.prototype.getDisplayText = function() {
13812
13848
  if(this._label != null) { // Empty string is allowed
13813
13849
  return this._label;
13814
13850
  }
13815
- return this._displayText;
13851
+
13852
+ if(this._ric) {
13853
+ return this._ric;
13854
+ }
13855
+
13856
+ if(this._permId) {
13857
+ return this._permId;
13858
+ }
13859
+
13860
+ return this._userInput;
13816
13861
  };
13817
13862
  /** @public
13818
13863
  * @return {string|null}
@@ -13876,13 +13921,18 @@ RowDefinition.prototype.isRealTimeRow = function() {
13876
13921
  if(!this.getRic()) { // Empty row
13877
13922
  return false;
13878
13923
  }
13879
- if(this.isRowHeader()) {
13924
+ if(!this._realTime) {
13880
13925
  return false;
13881
13926
  }
13927
+
13882
13928
  if(this._autoGenerated) { // Constituents in chain are not real-time row
13883
13929
  return false;
13884
13930
  }
13885
13931
 
13932
+ if(this.isRowHeader()) {
13933
+ return false;
13934
+ }
13935
+
13886
13936
  return true;
13887
13937
  };
13888
13938
 
@@ -13911,7 +13961,7 @@ RowDefinition.prototype.subscribeForUpdates = function() {
13911
13961
  if(prevRowData) {
13912
13962
  this._dc.setRowData(this._dataId, prevRowData); // TODO: We may need to create a new object instead of prevRowData for data correctness
13913
13963
  } else {
13914
- this._dc.setRowData(this._dataId, {"X_RIC_NAME": this.getSymbol(), "ROW_DEF": this}); // Trigger data update immediately
13964
+ this._dc.setRowData(this._dataId, {"X_RIC_NAME": this.getDisplayText(), "ROW_DEF": this}); // Trigger data update immediately
13915
13965
  }
13916
13966
  return true;
13917
13967
  };
@@ -14372,40 +14422,6 @@ var SYNAPSE_URL =
14372
14422
  + 'hits=1' // search only 1 result
14373
14423
  + '&profile=' + encodeURIComponent('Field Selector');
14374
14424
 
14375
- /** @function
14376
- * @private
14377
- * @param {Object} e
14378
- */
14379
- function xRicNameRenderer(e) {
14380
- e.cell.setContent(e.rowDef.getDisplayText());
14381
- }
14382
- /** @function
14383
- * @private
14384
- * @param {RowDefinition} rowA
14385
- * @param {RowDefinition} rowB
14386
- * @param {number} order
14387
- * @returns {number}
14388
- */
14389
- function xRicNameSorter(rowA, rowB, order) {
14390
- var A = rowA.getDisplayText();
14391
- var B = rowB.getDisplayText();
14392
- if(A === B) {
14393
- return 0;
14394
- }
14395
- if(!A) {
14396
- return 1;
14397
- }
14398
- if(!B) {
14399
- return -1;
14400
- }
14401
- if(A < B) {
14402
- return -order;
14403
- }
14404
-
14405
- return order;
14406
- }
14407
-
14408
-
14409
14425
  /* @namespace */
14410
14426
  var FieldDefinition = {};
14411
14427
 
@@ -14413,13 +14429,6 @@ var FieldDefinition = {};
14413
14429
  * @private
14414
14430
  */
14415
14431
  FieldDefinition._defs = {
14416
- "X_RIC_NAME": {
14417
- name: "RIC",
14418
- IsRealtimeField: false,
14419
- width: 100,
14420
- binding: xRicNameRenderer,
14421
- sortLogic: xRicNameSorter
14422
- },
14423
14432
  "CF_NAME": {
14424
14433
  name: "Name",
14425
14434
  rank: 2800003,
@@ -16814,6 +16823,13 @@ GroupDefinitions.prototype.getGroups = function () {
16814
16823
  }
16815
16824
  return groupDefs;
16816
16825
  };
16826
+ /** Get array of all existing group ids
16827
+ * @public
16828
+ * @return {!Array.<string>}
16829
+ */
16830
+ GroupDefinitions.prototype.getGroupIds = function () {
16831
+ return Object.keys(this._groupMap);
16832
+ };
16817
16833
  /** @public
16818
16834
  * @return {!Object.<string, Object>}
16819
16835
  */
@@ -16920,7 +16936,18 @@ GroupDefinitions.prototype.getParentId = function (childId, groupLevel) {
16920
16936
  return parentId || "";
16921
16937
  };
16922
16938
 
16923
-
16939
+ /** Remove all existing group definitions
16940
+ * @public
16941
+ * @return {boolean}
16942
+ */
16943
+ GroupDefinitions.prototype.removeAllGroups = function () {
16944
+ for(var groupId in this._groupMap) { // eslint-disable-line
16945
+ this._groupMap = {};
16946
+ this._childToParent = {};
16947
+ return true;
16948
+ }
16949
+ return false;
16950
+ };
16924
16951
  /** Remove all existing group definitions and replace them with the given definitions.
16925
16952
  * @public
16926
16953
  * @param {Array.<Object>=} groupDefs Use null or empty array to remove all existing groups
@@ -17065,9 +17092,10 @@ GroupDefinitions.prototype.hasGroupChild = function (parentId, childId) {
17065
17092
  /** @public
17066
17093
  * @param {string} parentId Group id
17067
17094
  * @param {string} childId
17095
+ * @param {number=} position
17068
17096
  * @return {boolean}
17069
17097
  */
17070
- GroupDefinitions.prototype.addGroupChild = function (parentId, childId) {
17098
+ GroupDefinitions.prototype.addGroupChild = function (parentId, childId, position) {
17071
17099
  var groupDef = this._groupMap[parentId];
17072
17100
 
17073
17101
  if(childId && groupDef) {
@@ -17080,7 +17108,11 @@ GroupDefinitions.prototype.addGroupChild = function (parentId, childId) {
17080
17108
  if(childDef) {
17081
17109
  childDef.parentId = parentId;
17082
17110
  }
17083
- chdr.push(childId);
17111
+ if(position != null && position >= 0) {
17112
+ chdr.splice(position, 0, childId);
17113
+ } else {
17114
+ chdr.push(childId);
17115
+ }
17084
17116
  return true;
17085
17117
  }
17086
17118
  }
@@ -17189,6 +17221,18 @@ GroupDefinitions.prototype.setGroupChildren = function (groupId, newChildList) {
17189
17221
  }
17190
17222
  return false;
17191
17223
  };
17224
+
17225
+ /** @public
17226
+ * @param {string} groupId
17227
+ * @return {string}
17228
+ */
17229
+ GroupDefinitions.prototype.getGroupName = function (groupId) {
17230
+ var groupDef = this._groupMap[groupId];
17231
+ if(groupDef) {
17232
+ return groupDef.name || "";
17233
+ }
17234
+ return "";
17235
+ };
17192
17236
  /** @public
17193
17237
  * @param {string} groupId
17194
17238
  * @param {string} groupName
@@ -17205,6 +17249,7 @@ GroupDefinitions.prototype.setGroupName = function (groupId, groupName) {
17205
17249
 
17206
17250
  return false;
17207
17251
  };
17252
+
17208
17253
  /* harmony default export */ var es6_GroupDefinitions = (GroupDefinitions);
17209
17254
 
17210
17255
 
@@ -20366,6 +20411,10 @@ ILayoutGrid.prototype.calculateColumnBounds = function (lftIdx, rgtIdx, outPosit
20366
20411
  * @param {number=} topPx Top position of bound
20367
20412
  */
20368
20413
  ILayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderAry, topPx) {};
20414
+ /** @public
20415
+ * @ignore
20416
+ */
20417
+ ILayoutGrid.prototype.updateColumnSeparators = function () {};
20369
20418
 
20370
20419
  /* harmony default export */ var grid_ILayoutGrid = (ILayoutGrid);
20371
20420
 
@@ -24355,7 +24404,14 @@ LayoutGrid.prototype._colSelDirty = false;
24355
24404
  * @private
24356
24405
  */
24357
24406
  LayoutGrid.prototype._hscrollbar = null;
24358
-
24407
+ /** @type {Element}
24408
+ * @private
24409
+ */
24410
+ LayoutGrid.prototype._leftColumnSeparator = null;
24411
+ /** @type {Element}
24412
+ * @private
24413
+ */
24414
+ LayoutGrid.prototype._rightColumnSeparator = null;
24359
24415
 
24360
24416
  /**
24361
24417
  * {@link ElementWrapper#dispose}
@@ -26322,8 +26378,7 @@ LayoutGrid.prototype.selectColumn = function (colIndex, selected) {
26322
26378
 
26323
26379
  var boundLayer = this._boundLayer;
26324
26380
  if(!boundLayer) {
26325
- boundLayer = this._boundLayer = document.createElement("div");
26326
- boundLayer.className = "cover-layer";
26381
+ this._initBoundLayer();
26327
26382
  this._updateLayers();
26328
26383
  }
26329
26384
  }
@@ -26495,6 +26550,92 @@ LayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderAry, topPx)
26495
26550
  }
26496
26551
  };
26497
26552
 
26553
+ /** @public
26554
+ */
26555
+ LayoutGrid.prototype.updateColumnSeparators = function () {
26556
+ var pinnedLeftCount = this._hscrollbar.getPinnedLeftColumnCount();
26557
+ var pinnedRightCount = this._hscrollbar.getPinnedRightColumnCount();
26558
+ if ((pinnedLeftCount || pinnedRightCount) && !this._boundLayer) {
26559
+ this._initBoundLayer();
26560
+ }
26561
+
26562
+ var isScrollbarActive = false;
26563
+ if(this._hscrollbar) {
26564
+ isScrollbarActive = this._hscrollbar.isActive();
26565
+ }
26566
+
26567
+ var boundLayer = this._boundLayer;
26568
+
26569
+ var colSeparator = this._leftColumnSeparator;
26570
+ if (isScrollbarActive && pinnedLeftCount) {
26571
+ if (!colSeparator) {
26572
+ colSeparator = this._leftColumnSeparator = this._createColumnSeparator();
26573
+ }
26574
+ if (!colSeparator.parentNode) {
26575
+ if (boundLayer.children.length) {
26576
+ boundLayer.insertBefore(colSeparator, boundLayer.children[0]);
26577
+ } else {
26578
+ boundLayer.appendChild(colSeparator);
26579
+ }
26580
+ }
26581
+
26582
+ var rightPos = this._trackX.getLaneStart(pinnedLeftCount);
26583
+ colSeparator.style.left = (rightPos - 1) + "px";
26584
+ colSeparator.style.height = this._trackY.getTrackSize() + "px";
26585
+ } else {
26586
+ if (colSeparator && colSeparator.parentNode) {
26587
+ this._boundLayer.removeChild(colSeparator);
26588
+ }
26589
+ }
26590
+
26591
+ colSeparator = this._rightColumnSeparator;
26592
+ if (isScrollbarActive && pinnedRightCount) {
26593
+ if (!colSeparator) {
26594
+ colSeparator = this._rightColumnSeparator = this._createColumnSeparator();
26595
+ }
26596
+
26597
+ if (!colSeparator.parentNode) {
26598
+ if (boundLayer.children.length) {
26599
+ boundLayer.insertBefore(colSeparator, boundLayer.children[0]);
26600
+ } else {
26601
+ boundLayer.appendChild(colSeparator);
26602
+ }
26603
+ }
26604
+ var colCount = this.getColumnCount();
26605
+ var colWidth = this._trackX.getLaneEnd(colCount - 1) - this._trackX.getLaneStart(colCount - pinnedRightCount);
26606
+ var viewSize = this._getViewSize();
26607
+
26608
+ colSeparator.style.left = (viewSize - colWidth - this._rightSpaceSize) + "px";
26609
+ colSeparator.style.height = this._trackY.getTrackSize() + "px";
26610
+ } else {
26611
+ if (colSeparator && colSeparator.parentNode) {
26612
+ this._boundLayer.removeChild(colSeparator);
26613
+ }
26614
+ }
26615
+ };
26616
+
26617
+ /** @private
26618
+ * @return {Element}
26619
+ */
26620
+ LayoutGrid.prototype._createColumnSeparator = function() {
26621
+ var colSeparator = document.createElement("div");
26622
+ colSeparator.classList.add("column-separator");
26623
+ return colSeparator;
26624
+ };
26625
+
26626
+ /** @private
26627
+ * @return {Element}
26628
+ */
26629
+ LayoutGrid.prototype._initBoundLayer = function () {
26630
+ var boundLayer = this._boundLayer;
26631
+ if(!boundLayer) {
26632
+ boundLayer = this._boundLayer = document.createElement("div");
26633
+ boundLayer.className = "cover-layer";
26634
+ this._element.appendChild(boundLayer);
26635
+ }
26636
+ return boundLayer;
26637
+ };
26638
+
26498
26639
  /**
26499
26640
  * @private
26500
26641
  * @param {number} indexX
@@ -35014,6 +35155,12 @@ VirtualizedLayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderA
35014
35155
  this._grid.updateColumnBounds(posAry, noBorderAry, topPx);
35015
35156
  this._updateRowBounds();
35016
35157
  };
35158
+ /** @public
35159
+ * @ignore
35160
+ */
35161
+ VirtualizedLayoutGrid.prototype.updateColumnSeparators = function () {
35162
+ this._grid.updateColumnSeparators();
35163
+ };
35017
35164
  /** @private
35018
35165
  */
35019
35166
  VirtualizedLayoutGrid.prototype._initBoundLayer = function () {
@@ -35318,6 +35465,7 @@ var Core = function (opt_initializer) {
35318
35465
  _t._onVScroll = _t._onVScroll.bind(_t);
35319
35466
  _t._onHScroll = _t._onHScroll.bind(_t);
35320
35467
  _t._onSyncVScroll = _t._onSyncVScroll.bind(_t);
35468
+ _t._onSyncHScroll = _t._onSyncHScroll.bind(_t);
35321
35469
  _t.updateLayout = _t.updateLayout.bind(_t);
35322
35470
  _t._onRowRefresh = _t._onRowRefresh.bind(_t);
35323
35471
  _t._onVScrollEnabled = _t._onVScrollEnabled.bind(_t);
@@ -35779,7 +35927,7 @@ Core.prototype._batches = null;
35779
35927
  * @return {string}
35780
35928
  */
35781
35929
  Core.getVersion = function () {
35782
- return "5.1.49";
35930
+ return "5.1.51";
35783
35931
  };
35784
35932
  /** {@link ElementWrapper#dispose}
35785
35933
  * @override
@@ -35821,6 +35969,12 @@ Core.prototype.dispose = function () {
35821
35969
  mainScrolbar.unlisten("scroll", this._onSyncVScroll);
35822
35970
  this._vscrollbar._mainScrollbar = null;
35823
35971
  }
35972
+ mainScrolbar = this._hscrollbar._mainScrollbar;
35973
+ if(mainScrolbar) {
35974
+ mainScrolbar.unlisten("scroll", this._onSyncHScroll);
35975
+ this._hscrollbar._mainScrollbar = null;
35976
+ }
35977
+
35824
35978
  this._vscrollbar.dispose();
35825
35979
  this._hscrollbar.dispose();
35826
35980
  this._rowHeightConflator.dispose();
@@ -36992,6 +37146,7 @@ Core.prototype._moveColumn = function (fromCol, destCol) {
36992
37146
  }
36993
37147
  }
36994
37148
  this._updateColumnBounds();
37149
+ this._updateColumnSeparators();
36995
37150
  return true;
36996
37151
  };
36997
37152
 
@@ -37322,6 +37477,7 @@ Core.prototype.setDefaultRowHeight = function (val, opt_includeTitle) {
37322
37477
  this._syncRowHeights();
37323
37478
  this._rowHeightSync = true;
37324
37479
  this.setRowScrollingStep(this._rowScrollingStep);
37480
+ this._updateColumnSeparators();
37325
37481
  }
37326
37482
  };
37327
37483
 
@@ -38156,6 +38312,7 @@ Core.prototype.freezeColumn = function (frozenColIndex, numRightColumn) {
38156
38312
 
38157
38313
  this._onColumnCountChanged(); // Activate horizontal scrollbar and column virtualization
38158
38314
  this._updateScrollbarWidth(true, true);
38315
+ this._updateColumnSeparators();
38159
38316
  };
38160
38317
 
38161
38318
  /** @private
@@ -38980,6 +39137,26 @@ Core.prototype.synchronizeVScrollbar = function (subGrid) {
38980
39137
  this._vscrollbar.listen("scroll", subGrid._onSyncVScroll);
38981
39138
  };
38982
39139
 
39140
+ /** Synchronize two horizontal scrollbars of two grid, by hiding its scrollbar and using the one from the given grid
39141
+ * @public
39142
+ * @param {Core} subGrid
39143
+ */
39144
+ Core.prototype.synchronizeHScrollbar = function (subGrid) {
39145
+ subGrid.unlisten("mousemove", subGrid._onMouseMove);
39146
+ subGrid.listen("mousemove", this._onMouseMove);
39147
+
39148
+ var hscrollbar = subGrid.getHScrollbar();
39149
+ hscrollbar._mainScrollbar = this._hscrollbar; // HACK
39150
+
39151
+ hscrollbar.setStyle("visibility", "hidden");
39152
+ hscrollbar.setStyle("pointerEvents", "none");
39153
+ hscrollbar.disableMouseWheel(); // Disable sub-grid wheel behavior
39154
+ hscrollbar.attachToExternalElement(this._hscrollbar.getParent()); // MouseWheel event is still available on the main
39155
+
39156
+ // TODO: Check if we need to re-append this._hscrollbar to move it to the front over other grid elements.
39157
+ this._hscrollbar.listen("scroll", subGrid._onSyncHScroll);
39158
+ };
39159
+
38983
39160
  /** Fires data binding event without actual change in the data source. <br>
38984
39161
  * This will force visual elements to be re-rendered with the latest data in the data source.
38985
39162
  * @public
@@ -39397,6 +39574,21 @@ Core.prototype._updateColumnBounds = function () {
39397
39574
  section.updateColumnBounds(posAry, noBorderAry);
39398
39575
  }
39399
39576
  };
39577
+ /* @private
39578
+ */
39579
+ Core.prototype._updateColumnSeparators = function() {
39580
+ var sectCount = this._settings.length;
39581
+ if(!sectCount) {
39582
+ return;
39583
+ }
39584
+
39585
+ for(var i = 0; i < sectCount; i++) {
39586
+ var section = this._settings[i].getSection();
39587
+ if (section) {
39588
+ section.updateColumnSeparators();
39589
+ }
39590
+ }
39591
+ };
39400
39592
 
39401
39593
  /** @public
39402
39594
  * @param {number} startColIndex INCLUSIVE
@@ -40466,6 +40658,8 @@ Core.prototype._onRowCountChanged = function (e) {
40466
40658
  if(!forceUpdate) {
40467
40659
  this._updateVScrollbar(); // Asynchronous
40468
40660
  }
40661
+
40662
+ this._updateColumnSeparators();
40469
40663
  if(prevRowCount < newRowCount) {
40470
40664
  this._dispatch("rowAdded", e);
40471
40665
  } else if(prevRowCount > newRowCount) {
@@ -40523,7 +40717,7 @@ Core.prototype._onRowHeightChanged = function (e) {
40523
40717
  minSectionIndex >= this._startVScrollbarIndex);
40524
40718
  }
40525
40719
  }
40526
-
40720
+ this._updateColumnSeparators();
40527
40721
  this._dispatchRowPositionChanged();
40528
40722
  };
40529
40723
  /** @private
@@ -40588,6 +40782,7 @@ Core.prototype._onColumnCountChanged = function () {
40588
40782
  var pinnedRight = this._countPinnedRightColumns();
40589
40783
 
40590
40784
  this._updateColumnBounds();
40785
+ this._updateColumnSeparators();
40591
40786
 
40592
40787
  if (this._hScrollbarEnabled && pinnedLeft + pinnedRight < this.getColumnCount()) {
40593
40788
  this._hscrollbar.enable();
@@ -40617,6 +40812,12 @@ Core.prototype._onSyncVScroll = function (e) {
40617
40812
  this._vscrollbar.setScrollTop(e.scrollTop);
40618
40813
  };
40619
40814
  /** @private
40815
+ * @param {Object} e
40816
+ */
40817
+ Core.prototype._onSyncHScroll = function (e) {
40818
+ this._hscrollbar.setScrollLeft(e.scrollLeft);
40819
+ };
40820
+ /** @private
40620
40821
  * @return {number} index of footer section
40621
40822
  */
40622
40823
  Core.prototype._getFooterStartIndex = function () {
@@ -40869,6 +41070,7 @@ Core.prototype._syncLayoutToColumns = function (from, to, opt_forceDispatching)
40869
41070
  var paneChanged = forceUpdate || (from < this.getHScrollStartIndex()) || (to > this.getFirstPinnedRightIndex());
40870
41071
  this._updateScrollbarWidth(paneChanged, true /* contentChanged */);
40871
41072
  this._updateColumnBounds();
41073
+ this._updateColumnSeparators();
40872
41074
  this._dispatchColumnPositionChanged();
40873
41075
 
40874
41076
  if (dirty || opt_forceDispatching) {
@@ -40964,6 +41166,7 @@ Core.prototype._updateLayout = function () {
40964
41166
  var section = this._settings[s].getSection();
40965
41167
  section.updateLayout(); // Notify section about forced recalculation of the layout
40966
41168
  }
41169
+ this._updateColumnSeparators();
40967
41170
  };
40968
41171
 
40969
41172
  /** @private */
@@ -46701,50 +46904,72 @@ Grid.prototype.freezeColumn = function(colIndex, pinnedRightColumns) {
46701
46904
  }
46702
46905
  this._grid.freezeColumn(colIndex, pinnedRightColumns);
46703
46906
  };
46907
+
46704
46908
  /** Pin column to the left side by moving the specified column to the rightmost of the frozen columns. <br>
46705
46909
  * The method will do nothing if the specified column is already pinned to the left side
46706
46910
  * @public
46707
46911
  * @param {Grid~ColumnReference|Array.<Grid~ColumnReference>} colRef
46912
+ * @param {string=} side Available values are: left|right. If no value is supplied, the column will be pinned to the left.
46708
46913
  * @return {boolean}
46709
46914
  */
46710
- Grid.prototype.pinColumn = function(colRef) {
46915
+ Grid.prototype.pinColumn = function(colRef, side) {
46711
46916
  if(Array.isArray(colRef)) {
46712
46917
  var ary = colRef;
46713
46918
  var len = ary.length;
46714
46919
 
46715
46920
  var dirty = 0;
46716
46921
  for(var i = 0; i < len; ++i) {
46717
- dirty |= this._pinColumn(ary[i]);
46922
+ dirty |= this._pinColumn(ary[i], side);
46718
46923
  }
46719
46924
  return dirty ? true : false;
46720
46925
  }
46721
- return this._pinColumn(colRef);
46926
+ return this._pinColumn(colRef, side);
46722
46927
  };
46723
46928
  /** @private
46724
46929
  * @param {Grid~ColumnReference} colRef
46930
+ * @param {string=} side Available values are: left|right. If no value is supplied, the column will be pinned to the left.
46725
46931
  * @return {boolean}
46726
46932
  */
46727
- Grid.prototype._pinColumn = function(colRef) {
46933
+ Grid.prototype._pinColumn = function(colRef, side) {
46728
46934
  var colIndex = this.getColumnIndex(colRef);
46729
- if(colIndex < 0) {
46935
+ var colCount = this.getColumnCount();
46936
+ if(colIndex < 0 || colIndex > colCount) {
46730
46937
  return false;
46731
46938
  }
46732
- var pinnedCount = this._grid.getFrozenColumnCount();
46733
- if(colIndex < pinnedCount) {
46734
- return false; // The column is already pinned area
46735
- }
46736
- if(!pinnedCount) {
46737
- var stationaryIdx = this._grid.getStationaryColumnIndex();
46738
- if(stationaryIdx >= 0) {
46739
- pinnedCount = stationaryIdx;
46740
- if(colIndex > stationaryIdx) {
46741
- pinnedCount++;
46939
+
46940
+ var leftPinnedCount = this._grid.getPinnedLeftColumnCount();
46941
+ var rightPinnedCount = this._grid.getPinnedRightColumnCount();
46942
+ var stationaryIdx = this._grid.getStationaryColumnIndex();
46943
+
46944
+ if(side && side.toLowerCase() === "right") {
46945
+ var rightPinnedIndex = this._grid.getFirstPinnedRightIndex();
46946
+ if(colIndex >= rightPinnedIndex) {
46947
+ return false; // The column is already pinned area
46948
+ }
46949
+
46950
+ if(stationaryIdx >= 0 && colIndex <= stationaryIdx) {
46951
+ return false;
46952
+ }
46953
+
46954
+ this.moveColumnById(colIndex, rightPinnedIndex);
46955
+ rightPinnedCount += 1;
46956
+ leftPinnedCount -= 1;
46957
+ } else {
46958
+ if(colIndex < leftPinnedCount) {
46959
+ return false; // The column is already pinned area
46960
+ }
46961
+ if(!leftPinnedCount) {
46962
+ if(stationaryIdx >= 0) {
46963
+ leftPinnedCount = stationaryIdx;
46964
+ if(colIndex > stationaryIdx) {
46965
+ leftPinnedCount++;
46966
+ }
46742
46967
  }
46743
46968
  }
46969
+ this.moveColumnById(colIndex, leftPinnedCount);
46744
46970
  }
46745
46971
 
46746
- this.moveColumnById(colIndex, pinnedCount);
46747
- this._grid.freezeColumn(pinnedCount);
46972
+ this._grid.freezeColumn(leftPinnedCount, rightPinnedCount);
46748
46973
  return true;
46749
46974
  };
46750
46975
  /** Unpin column from the left side by moving the specified column to the end of the frozen columns. <br>
@@ -46777,13 +47002,16 @@ Grid.prototype._unpinColumn = function(colRef, dest) {
46777
47002
  if(colIndex < 0) {
46778
47003
  return false;
46779
47004
  }
46780
- var pinnedCount = this._grid.getFrozenColumnCount();
46781
- if(!pinnedCount) {
47005
+
47006
+ var leftPinnedCount = this._grid.getPinnedLeftColumnCount();
47007
+ var rightPinnedCount = this._grid.getPinnedRightColumnCount();
47008
+ var colCount = this.getColumnCount();
47009
+ var firstRightPinnedIndex = colCount - rightPinnedCount;
47010
+
47011
+ if(colIndex >= leftPinnedCount && colIndex < firstRightPinnedIndex) {
46782
47012
  return false;
46783
47013
  }
46784
- if(colIndex >= pinnedCount) {
46785
- return false; // The column is outside of frozen area
46786
- }
47014
+
46787
47015
  var srcId = null;
46788
47016
  var destId = null;
46789
47017
  if(dest != null) {
@@ -46794,11 +47022,19 @@ Grid.prototype._unpinColumn = function(colRef, dest) {
46794
47022
 
46795
47023
  var stationaryIdx = this._grid.getStationaryColumnIndex();
46796
47024
 
46797
- if(colIndex > stationaryIdx) {
46798
- this.moveColumnById(colIndex, pinnedCount);
46799
- }
47025
+ if(colIndex < leftPinnedCount) {
47026
+ if(colIndex > stationaryIdx) {
47027
+ this.moveColumnById(colIndex, leftPinnedCount);
47028
+ }
47029
+
47030
+ this._grid.freezeColumn(leftPinnedCount - 2, rightPinnedCount); // Column index is used for freezing
47031
+ } else if(colIndex >= firstRightPinnedIndex) {
47032
+ if(colIndex > stationaryIdx) {
47033
+ this.moveColumnById(colIndex, firstRightPinnedIndex);
47034
+ }
46800
47035
 
46801
- this._grid.freezeColumn(pinnedCount - 2); // Column index is used for freezing
47036
+ this._grid.freezeColumn(leftPinnedCount - 1, rightPinnedCount - 1); // Column index is used for freezing
47037
+ }
46802
47038
 
46803
47039
  if(colIndex > stationaryIdx) {
46804
47040
  if(destId != null) {
@@ -46813,11 +47049,12 @@ Grid.prototype._unpinColumn = function(colRef, dest) {
46813
47049
  * @return {boolean}
46814
47050
  */
46815
47051
  Grid.prototype.unpinAllColumns = function() {
46816
- var pinnedCount = this._grid.getFrozenColumnCount();
46817
- if(!pinnedCount) {
47052
+ var leftPinnedCount = this._grid.getPinnedLeftColumnCount();
47053
+ var rightPinnedCount = this._grid.getPinnedRightColumnCount();
47054
+ if(!leftPinnedCount && !rightPinnedCount) {
46818
47055
  return false;
46819
47056
  }
46820
- this._grid.freezeColumn(-1); // Column index is used for freezing
47057
+ this._grid.freezeColumn(-1, 0); // Column index is used for left freezing and column count is used for right freezing
46821
47058
  return true;
46822
47059
  };
46823
47060
 
@@ -49573,6 +49810,13 @@ MockSubscriptions.prototype._generateQuoteData = function(sub, fields) {
49573
49810
  values[field] = data.value;
49574
49811
  values[formattedField] = data.formattedValue;
49575
49812
  }
49813
+
49814
+ // The delay symbol for X_RIC_NAME will depend on the INDICATOR field.
49815
+ if(values["X_RIC_NAME"] != null && values["INDICATOR"] != null) {
49816
+ if(values["INDICATOR"] > 0) {
49817
+ values["X_RIC_NAME"] = "/" + values["X_RIC_NAME"];
49818
+ }
49819
+ }
49576
49820
  return values;
49577
49821
  };
49578
49822