@refinitiv-ui/efx-grid 6.0.36 → 6.0.38

Sign up to get free protection for your applications and to get access to all the features.
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