tabulator-tables 5.0.9 → 5.0.10

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.
@@ -1,4 +1,4 @@
1
- /* Tabulator v5.0.9 (c) Oliver Folkerd 2021 */
1
+ /* Tabulator v5.0.10 (c) Oliver Folkerd 2021 */
2
2
  class CoreFeature{
3
3
 
4
4
  constructor(table){
@@ -2361,7 +2361,7 @@ class Column$1 extends CoreFeature{
2361
2361
  cell.hide();
2362
2362
  });
2363
2363
 
2364
- this.dispatch("column-hide", this);
2364
+ this.dispatch("column-hide", this, responsiveToggle);
2365
2365
 
2366
2366
  if(!silent){
2367
2367
  this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false);
@@ -7065,20 +7065,23 @@ class Edit extends Module{
7065
7065
 
7066
7066
  this.invalidEdit = false;
7067
7067
 
7068
+ console.log("clear", cancel, cell, cell.validate);
7069
+
7068
7070
  if(cell){
7069
7071
  this.currentCell = false;
7070
7072
 
7071
7073
  cellEl = cell.getElement();
7072
7074
 
7073
7075
  if(cancel){
7074
- if(cell.validate){
7075
- cell.validate();
7076
+ if(cell.column.modules.validate && this.table.modExists("validate")){
7077
+ this.table.modules.validate.cellValidate(cell);
7076
7078
  }
7077
7079
  }else {
7078
7080
  cellEl.classList.remove("tabulator-validation-fail");
7079
7081
  }
7080
7082
 
7081
7083
  cellEl.classList.remove("tabulator-editing");
7084
+
7082
7085
  while(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);
7083
7086
 
7084
7087
  cell.row.getElement().classList.remove("tabulator-row-editing");
@@ -9831,7 +9834,7 @@ class FrozenColumns extends Module{
9831
9834
  this.subscribe("cell-layout", this.layoutCell.bind(this));
9832
9835
  this.subscribe("column-init", this.initializeColumn.bind(this));
9833
9836
  this.subscribe("column-width", this.layout.bind(this));
9834
- this.subscribe("row-layout-before", this.layoutRow.bind(this));
9837
+ this.subscribe("row-layout-after", this.layoutRow.bind(this));
9835
9838
  this.subscribe("table-layout", this.layout.bind(this));
9836
9839
  this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this));
9837
9840
  this.subscribe("columns-loading", this.reset.bind(this));
@@ -16066,7 +16069,7 @@ class ResponsiveLayout extends Module{
16066
16069
  this.registerColumnOption("responsive");
16067
16070
  }
16068
16071
 
16069
- //generate resposive columns list
16072
+ //generate responsive columns list
16070
16073
  initialize(){
16071
16074
 
16072
16075
  if(this.table.options.responsiveLayout){
@@ -16103,7 +16106,7 @@ class ResponsiveLayout extends Module{
16103
16106
  this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;
16104
16107
  this.hiddenColumns = [];
16105
16108
 
16106
- //detemine level of responsivity for each column
16109
+ //determine level of responsivity for each column
16107
16110
  this.table.columnManager.columnsByIndex.forEach(function(column, i){
16108
16111
  if(column.modules.responsive){
16109
16112
  if(column.modules.responsive.order && column.modules.responsive.visible){
@@ -16185,10 +16188,8 @@ class ResponsiveLayout extends Module{
16185
16188
  updateColumnVisibility(column, responsiveToggle){
16186
16189
  if(!responsiveToggle && column.modules.responsive){
16187
16190
  column.modules.responsive.visible = column.visible;
16188
- this.initialize();
16191
+ this.initializeResponsivity();
16189
16192
  }
16190
-
16191
- //this.update();
16192
16193
  }
16193
16194
 
16194
16195
  hideColumn(column){
@@ -18108,7 +18109,7 @@ class Renderer extends CoreFeature{
18108
18109
  }
18109
18110
 
18110
18111
  scrollToRowNearestTop(row){
18111
- //determin weather the row is nearest the top or bottom of the table, retur true for top or false for bottom
18112
+ //determine weather the row is nearest the top or bottom of the table, retur true for top or false for bottom
18112
18113
  }
18113
18114
 
18114
18115
  visibleRows(includingBuffer){
@@ -18250,157 +18251,157 @@ class BaiscHorizontal extends Renderer{
18250
18251
  class VirtualDomHorizontal extends Renderer{
18251
18252
  constructor(table){
18252
18253
  super(table);
18253
-
18254
+
18254
18255
  this.leftCol = 0;
18255
18256
  this.rightCol = 0;
18256
18257
  this.scrollLeft = 0;
18257
-
18258
+
18258
18259
  this.vDomScrollPosLeft = 0;
18259
18260
  this.vDomScrollPosRight = 0;
18260
-
18261
+
18261
18262
  this.vDomPadLeft = 0;
18262
18263
  this.vDomPadRight = 0;
18263
-
18264
+
18264
18265
  this.fitDataColAvg = 0;
18265
-
18266
+
18266
18267
  this.window = 200; //pixel margin to make column visible before it is shown on screen
18267
-
18268
+
18268
18269
  this.initialized = false;
18269
-
18270
+
18270
18271
  this.columns = [];
18271
18272
  }
18272
-
18273
+
18273
18274
  initialize(){
18274
18275
  this.compatabilityCheck();
18275
18276
  }
18276
-
18277
+
18277
18278
  compatabilityCheck(){
18278
18279
  var columns = this.options("columns"),
18279
18280
  frozen = false,
18280
18281
  ok = true;
18281
-
18282
+
18282
18283
  if(this.options("layout") == "fitDataTable"){
18283
- console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode");
18284
+ console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode");
18284
18285
  ok = false;
18285
18286
  }
18286
-
18287
+
18287
18288
  if(this.options("responsiveLayout")){
18288
- console.warn("Horizontal Vitrual DOM is not compatible with responsive columns");
18289
+ console.warn("Horizontal Virtual DOM is not compatible with responsive columns");
18289
18290
  ok = false;
18290
18291
  }
18291
-
18292
+
18292
18293
  if(this.options("rtl")){
18293
- console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction");
18294
+ console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction");
18294
18295
  ok = false;
18295
18296
  }
18296
-
18297
+
18297
18298
  if(columns){
18298
18299
  frozen = columns.find((col) => {
18299
18300
  return col.frozen;
18300
18301
  });
18301
-
18302
+
18302
18303
  if(frozen){
18303
- console.warn("Horizontal Vitrual DOM is not compatible with frozen columns");
18304
+ console.warn("Horizontal Virtual DOM is not compatible with frozen columns");
18304
18305
  ok = false;
18305
18306
  }
18306
18307
  }
18307
-
18308
+
18308
18309
  // if(!ok){
18309
18310
  // options.virtualDomHoz = false;
18310
18311
  // }
18311
-
18312
+
18312
18313
  return ok;
18313
18314
  }
18314
-
18315
+
18315
18316
  //////////////////////////////////////
18316
18317
  ///////// Public Functions ///////////
18317
18318
  //////////////////////////////////////
18318
-
18319
+
18319
18320
  renderColumns(row, force){
18320
18321
  this.dataChange();
18321
18322
  }
18322
-
18323
+
18323
18324
  scrollColumns(left, dir){
18324
18325
  if(this.scrollLeft != left){
18325
18326
  this.scrollLeft = left;
18326
-
18327
+
18327
18328
  this.scroll(left - (this.vDomScrollPosLeft + this.window));
18328
18329
  }
18329
18330
  }
18330
-
18331
- rerenderColumns(update, blockRedraw){
18331
+
18332
+ rerenderColumns(update, blockRedraw){
18332
18333
  var old = {
18333
18334
  cols:this.columns,
18334
18335
  leftCol:this.leftCol,
18335
18336
  rightCol:this.rightCol,
18336
18337
  };
18337
-
18338
+
18338
18339
  if(update && !this.initialized){
18339
18340
  return;
18340
18341
  }
18341
-
18342
+
18342
18343
  this.clear();
18343
-
18344
+
18344
18345
  this.scrollLeft = this.elementVertical.scrollLeft;
18345
-
18346
+
18346
18347
  this.vDomScrollPosLeft = this.scrollLeft - this.window;
18347
18348
  this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;
18348
-
18349
+
18349
18350
  var colPos = 0;
18350
-
18351
+
18351
18352
  this.table.columnManager.columnsByIndex.forEach((column) => {
18352
18353
  var config = {};
18353
-
18354
+
18354
18355
  if(column.visible){
18355
18356
  var width = column.getWidth();
18356
-
18357
+
18357
18358
  config.leftPos = colPos;
18358
18359
  config.rightPos = colPos + width;
18359
-
18360
+
18360
18361
  config.width = width;
18361
-
18362
+
18362
18363
  if (this.options("layout") === "fitData") {
18363
18364
  config.fitDataCheck = true;
18364
18365
  }
18365
-
18366
+
18366
18367
  if((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){
18367
- //column is visible
18368
-
18369
- if(this.leftCol == -1){
18370
- this.leftCol = this.columns.length;
18371
- this.vDomPadLeft = colPos;
18372
- }
18373
-
18374
- this.rightCol = this.columns.length;
18375
- }else {
18376
- // column is hidden
18377
- if(this.leftCol !== -1){
18378
- this.vDomPadRight += width;
18379
- }
18380
- }
18381
-
18382
- this.columns.push(column);
18383
-
18384
- column.modules.vdomHoz = config;
18385
-
18386
- colPos += width;
18387
- }
18388
- });
18389
-
18368
+ //column is visible
18369
+
18370
+ if(this.leftCol == -1){
18371
+ this.leftCol = this.columns.length;
18372
+ this.vDomPadLeft = colPos;
18373
+ }
18374
+
18375
+ this.rightCol = this.columns.length;
18376
+ }else {
18377
+ // column is hidden
18378
+ if(this.leftCol !== -1){
18379
+ this.vDomPadRight += width;
18380
+ }
18381
+ }
18382
+
18383
+ this.columns.push(column);
18384
+
18385
+ column.modules.vdomHoz = config;
18386
+
18387
+ colPos += width;
18388
+ }
18389
+ });
18390
+
18390
18391
  this.tableElement.style.paddingLeft = this.vDomPadLeft + "px";
18391
18392
  this.tableElement.style.paddingRight = this.vDomPadRight + "px";
18392
-
18393
+
18393
18394
  this.initialized = true;
18394
-
18395
+
18395
18396
  if(!blockRedraw){
18396
18397
  if(!update || this.reinitChanged(old)){
18397
- this.renitializeRows();
18398
+ this.reinitializeRows();
18398
18399
  }
18399
18400
  }
18400
-
18401
+
18401
18402
  this.elementVertical.scrollLeft = this.scrollLeft;
18402
18403
  }
18403
-
18404
+
18404
18405
  renderRowCells(row){
18405
18406
  if(this.initialized){
18406
18407
  this.initializeRow(row);
@@ -18411,88 +18412,88 @@ class VirtualDomHorizontal extends Renderer{
18411
18412
  });
18412
18413
  }
18413
18414
  }
18414
-
18415
+
18415
18416
  rerenderRowCells(row, force){
18416
18417
  this.reinitializeRow(row, force);
18417
18418
  }
18418
-
18419
+
18419
18420
  reinitializeColumnWidths(columns){
18420
18421
  for(let i = this.leftCol; i <= this.rightCol; i++){
18421
18422
  this.columns[i].reinitializeWidth();
18422
18423
  }
18423
18424
  }
18424
-
18425
+
18425
18426
  //////////////////////////////////////
18426
18427
  //////// Internal Rendering //////////
18427
18428
  //////////////////////////////////////
18428
-
18429
+
18429
18430
  deinitialize(){
18430
18431
  this.initialized = false;
18431
18432
  }
18432
-
18433
+
18433
18434
  clear(){
18434
18435
  this.columns = [];
18435
-
18436
+
18436
18437
  this.leftCol = -1;
18437
18438
  this.rightCol = 0;
18438
-
18439
+
18439
18440
  this.vDomScrollPosLeft = 0;
18440
18441
  this.vDomScrollPosRight = 0;
18441
18442
  this.vDomPadLeft = 0;
18442
18443
  this.vDomPadRight = 0;
18443
18444
  }
18444
-
18445
+
18445
18446
  dataChange(){
18446
18447
  var change = false,
18447
18448
  collsWidth = 0,
18448
18449
  colEnd = 0,
18449
18450
  row, rowEl;
18450
-
18451
+
18451
18452
  if(this.options("layout") === "fitData"){
18452
18453
  this.table.columnManager.columnsByIndex.forEach((column) => {
18453
18454
  if(!column.definition.width && column.visible){
18454
18455
  change = true;
18455
18456
  }
18456
18457
  });
18457
-
18458
+
18458
18459
  if(change){
18459
18460
  if(change && this.table.rowManager.getDisplayRows().length){
18460
-
18461
+
18461
18462
  this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;
18462
-
18463
+
18463
18464
  var row = this.chain("rows-sample", [1], [], () => {
18464
18465
  return this.table.rowManager.getDisplayRows()[0];
18465
18466
  })[0];
18466
-
18467
+
18467
18468
  if(row){
18468
-
18469
+
18469
18470
  rowEl = row.getElement();
18470
-
18471
+
18471
18472
  row.generateCells();
18472
-
18473
+
18473
18474
  this.tableElement.appendChild(rowEl);
18474
-
18475
+
18475
18476
  for(var colEnd = 0; colEnd < row.cells.length; colEnd++){
18476
18477
  let cell = row.cells[colEnd];
18477
18478
  rowEl.appendChild(cell.getElement());
18478
-
18479
+
18479
18480
  cell.column.reinitializeWidth();
18480
-
18481
+
18481
18482
  collsWidth += cell.column.getWidth();
18482
-
18483
+
18483
18484
  if(collsWidth > this.vDomScrollPosRight){
18484
18485
  break;
18485
18486
  }
18486
18487
  }
18487
-
18488
+
18488
18489
  rowEl.parentNode.removeChild(rowEl);
18489
-
18490
+
18490
18491
  this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));
18491
-
18492
+
18492
18493
  for(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){
18493
18494
  this.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);
18494
18495
  }
18495
-
18496
+
18496
18497
  this.rerenderColumns(false, true);
18497
18498
  }
18498
18499
  }
@@ -18504,34 +18505,34 @@ class VirtualDomHorizontal extends Renderer{
18504
18505
  }
18505
18506
  }
18506
18507
  }
18507
-
18508
+
18508
18509
  reinitChanged(old){
18509
18510
  var match = true;
18510
-
18511
+
18511
18512
  if(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){
18512
18513
  return true;
18513
18514
  }
18514
-
18515
+
18515
18516
  old.cols.forEach((col, i) => {
18516
18517
  if(col !== this.columns[i]){
18517
18518
  match = false;
18518
18519
  }
18519
18520
  });
18520
-
18521
+
18521
18522
  return !match;
18522
18523
  }
18523
-
18524
- renitializeRows(){
18524
+
18525
+ reinitializeRows(){
18525
18526
  var rows = this.table.rowManager.getVisibleRows();
18526
18527
  rows.forEach((row) => {
18527
18528
  this.reinitializeRow(row, true);
18528
18529
  });
18529
18530
  }
18530
-
18531
+
18531
18532
  scroll(diff){
18532
18533
  this.vDomScrollPosLeft += diff;
18533
18534
  this.vDomScrollPosRight += diff;
18534
-
18535
+
18535
18536
  if(diff > (this.elementVertical.clientWidth * .8)){
18536
18537
  this.rerenderColumns();
18537
18538
  }else {
@@ -18546,24 +18547,23 @@ class VirtualDomHorizontal extends Renderer{
18546
18547
  }
18547
18548
  }
18548
18549
  }
18549
-
18550
+
18550
18551
  colPositionAdjust (start, end, diff){
18551
18552
  for(let i = start; i < end; i++){
18552
18553
  let column = this.columns[i];
18553
-
18554
+
18554
18555
  column.modules.vdomHoz.leftPos += diff;
18555
18556
  column.modules.vdomHoz.rightPos += diff;
18556
18557
  }
18557
18558
  }
18558
-
18559
+
18559
18560
  addColRight(){
18560
18561
  var column = this.columns[this.rightCol + 1],
18561
18562
  rows;
18562
-
18563
+
18563
18564
  if(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){
18564
-
18565
18565
  rows = this.table.rowManager.getVisibleRows();
18566
-
18566
+
18567
18567
  rows.forEach((row) => {
18568
18568
  if(row.type !== "group"){
18569
18569
  var cell = row.getCell(column);
@@ -18571,30 +18571,30 @@ class VirtualDomHorizontal extends Renderer{
18571
18571
  cell.cellRendered();
18572
18572
  }
18573
18573
  });
18574
-
18574
+
18575
18575
  this.fitDataColActualWidthCheck(column);
18576
-
18576
+
18577
18577
  this.rightCol++;
18578
-
18578
+
18579
18579
  if(this.rightCol >= (this.columns.length - 1)){
18580
18580
  this.vDomPadRight = 0;
18581
18581
  }else {
18582
18582
  this.vDomPadRight -= column.getWidth();
18583
18583
  }
18584
-
18584
+
18585
18585
  this.tableElement.style.paddingRight = this.vDomPadRight + "px";
18586
-
18586
+
18587
18587
  this.addColRight();
18588
18588
  }
18589
18589
  }
18590
-
18590
+
18591
18591
  addColLeft(){
18592
18592
  var column = this.columns[this.leftCol - 1],
18593
18593
  rows;
18594
-
18594
+
18595
18595
  if(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){
18596
18596
  var rows = this.table.rowManager.getVisibleRows();
18597
-
18597
+
18598
18598
  rows.forEach((row) => {
18599
18599
  if(row.type !== "group"){
18600
18600
  var cell = row.getCell(column);
@@ -18602,119 +18602,125 @@ class VirtualDomHorizontal extends Renderer{
18602
18602
  cell.cellRendered();
18603
18603
  }
18604
18604
  });
18605
-
18605
+
18606
18606
  this.fitDataColActualWidthCheck(column);
18607
-
18607
+
18608
18608
  if(!this.leftCol){
18609
18609
  this.vDomPadLeft = 0;
18610
18610
  }else {
18611
18611
  this.vDomPadLeft -= column.getWidth();
18612
18612
  }
18613
-
18613
+
18614
18614
  this.tableElement.style.paddingLeft = this.vDomPadLeft + "px";
18615
-
18615
+
18616
18616
  this.leftCol--;
18617
-
18617
+
18618
18618
  this.addColLeft();
18619
18619
  }
18620
18620
  }
18621
-
18621
+
18622
18622
  removeColRight(column){
18623
18623
  var column = this.columns[this.rightCol],
18624
18624
  rows;
18625
-
18625
+
18626
18626
  if(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){
18627
18627
  rows = this.table.rowManager.getVisibleRows();
18628
-
18628
+
18629
18629
  column.modules.vdomHoz.visible = false;
18630
-
18630
+
18631
18631
  rows.forEach((row) => {
18632
18632
  if(row.type !== "group"){
18633
18633
  var cell = row.getCell(column);
18634
18634
  row.getElement().removeChild(cell.getElement());
18635
18635
  }
18636
18636
  });
18637
-
18637
+
18638
18638
  this.vDomPadRight += column.getWidth();
18639
18639
  this.tableElement.style.paddingRight = this.vDomPadRight + "px";
18640
-
18640
+
18641
18641
  this.rightCol --;
18642
-
18642
+
18643
18643
  this.removeColRight();
18644
18644
  }
18645
18645
  }
18646
-
18646
+
18647
18647
  removeColLeft(){
18648
18648
  var column = this.columns[this.leftCol],
18649
18649
  rows;
18650
-
18651
- if(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){
18652
-
18650
+
18651
+ if(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){
18653
18652
  rows = this.table.rowManager.getVisibleRows();
18654
-
18653
+
18655
18654
  rows.forEach((row) => {
18655
+ var cell, el;
18656
+
18656
18657
  if(row.type !== "group"){
18657
- var cell = row.getCell(column);
18658
- if(cell.parentNode){
18659
- row.getElement().removeChild(cell.getElement());
18658
+ cell = row.getCell(column);
18659
+
18660
+ if(cell){
18661
+ el = cell.getElement();
18662
+
18663
+ if(el.parentNode){
18664
+ row.getElement().removeChild(el);
18665
+ }
18660
18666
  }
18661
18667
  }
18662
18668
  });
18663
-
18669
+
18664
18670
  this.vDomPadLeft += column.getWidth();
18665
18671
  this.tableElement.style.paddingLeft = this.vDomPadLeft + "px";
18666
-
18672
+
18667
18673
  this.leftCol ++;
18668
-
18674
+
18669
18675
  this.removeColLeft();
18670
18676
  }
18671
18677
  }
18672
-
18678
+
18673
18679
  fitDataColActualWidthCheck(column){
18674
18680
  var newWidth, widthDiff;
18675
-
18681
+
18676
18682
  if(column.modules.vdomHoz.fitDataCheck){
18677
18683
  column.reinitializeWidth();
18678
-
18684
+
18679
18685
  newWidth = column.getWidth();
18680
18686
  widthDiff = newWidth - column.modules.vdomHoz.width;
18681
-
18687
+
18682
18688
  if(widthDiff){
18683
18689
  column.modules.vdomHoz.rightPos += widthDiff;
18684
18690
  column.modules.vdomHoz.width = newWidth;
18685
18691
  this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff);
18686
18692
  }
18687
-
18693
+
18688
18694
  column.modules.vdomHoz.fitDataCheck = false;
18689
18695
  }
18690
18696
  };
18691
-
18697
+
18692
18698
  initializeRow(row){
18693
18699
  if(row.type !== "group"){
18694
18700
  row.modules.vdomHoz = {
18695
18701
  leftCol:this.leftCol,
18696
18702
  rightCol:this.rightCol,
18697
18703
  };
18698
-
18704
+
18699
18705
  for(let i = this.leftCol; i <= this.rightCol; i++){
18700
18706
  let column = this.columns[i];
18701
-
18707
+
18702
18708
  if(column && column.visible){
18703
18709
  let cell = row.getCell(column);
18704
-
18710
+
18705
18711
  row.getElement().appendChild(cell.getElement());
18706
18712
  cell.cellRendered();
18707
18713
  }
18708
18714
  }
18709
18715
  }
18710
18716
  }
18711
-
18717
+
18712
18718
  reinitializeRow(row, force){
18713
18719
  if(row.type !== "group"){
18714
18720
  if(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){
18715
18721
  var rowEl = row.getElement();
18716
18722
  while(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);
18717
-
18723
+
18718
18724
  this.initializeRow(row);
18719
18725
  }
18720
18726
  }
@@ -21196,18 +21202,31 @@ class InteractionManager extends CoreFeature {
21196
21202
  };
21197
21203
 
21198
21204
  this.pseudoTrackers = {
21199
- "row":null,
21200
- "cell":null,
21201
- "group":null,
21202
- "column":null,
21205
+ "row":{
21206
+ subscriber:null,
21207
+ target:null,
21208
+ },
21209
+ "cell":{
21210
+ subscriber:null,
21211
+ target:null,
21212
+ },
21213
+ "group":{
21214
+ subscriber:null,
21215
+ target:null,
21216
+ },
21217
+ "column":{
21218
+ subscriber:null,
21219
+ target:null,
21220
+ },
21203
21221
  };
21222
+
21223
+ this.pseudoTracking = false;
21204
21224
  }
21205
21225
 
21206
21226
  initialize(){
21207
21227
  this.el = this.table.element;
21208
21228
  this.buildListenerMap();
21209
21229
  this.bindSubscriptionWatchers();
21210
- this.bindPseudoEvents();
21211
21230
  }
21212
21231
 
21213
21232
  buildListenerMap(){
@@ -21225,21 +21244,23 @@ class InteractionManager extends CoreFeature {
21225
21244
 
21226
21245
  bindPseudoEvents(){
21227
21246
  Object.keys(this.pseudoTrackers).forEach((key) => {
21228
- this.subscribe(key + "-mouseover", this.pseudoMouseEnter.bind(this, key));
21229
- // this.subscribe(key + "-mouseout", this.pseudoMouseLeave.bind(this, key));
21247
+ this.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);
21248
+ this.subscribe(key + "-mouseover", this.pseudoTrackers[key].subscriber);
21230
21249
  });
21250
+
21251
+ this.pseudoTracking = true;
21231
21252
  }
21232
21253
 
21233
21254
  pseudoMouseEnter(key, e, target){
21234
- if(this.pseudoTrackers[key] !== target){
21255
+ if(this.pseudoTrackers[key].target !== target){
21235
21256
 
21236
- if(this.pseudoTrackers[key]){
21257
+ if(this.pseudoTrackers[key].target){
21237
21258
  this.dispatch(key + "-mouseleave", e, target);
21238
21259
  }
21239
21260
 
21240
21261
  this.pseudoMouseLeave(key, e);
21241
21262
 
21242
- this.pseudoTrackers[key] = target;
21263
+ this.pseudoTrackers[key].target = target;
21243
21264
 
21244
21265
  this.dispatch(key + "-mouseenter", e, target);
21245
21266
  }
@@ -21259,12 +21280,12 @@ class InteractionManager extends CoreFeature {
21259
21280
 
21260
21281
 
21261
21282
  leaveList.forEach((key) => {
21262
- var target = this.pseudoTrackers[key];
21283
+ var target = this.pseudoTrackers[key].target;
21263
21284
 
21264
- if(this.pseudoTrackers[key]){
21285
+ if(this.pseudoTrackers[key].target){
21265
21286
  this.dispatch(key + "-mouseleave", e, target);
21266
21287
 
21267
- this.pseudoTrackers[key] = null;
21288
+ this.pseudoTrackers[key].target = null;
21268
21289
  }
21269
21290
  });
21270
21291
  }
@@ -21289,7 +21310,7 @@ class InteractionManager extends CoreFeature {
21289
21310
  var listener = this.listeners[key].components,
21290
21311
  index = listener.indexOf(component),
21291
21312
  changed = false;
21292
-
21313
+
21293
21314
  if(added){
21294
21315
  if(index === -1){
21295
21316
  listener.push(component);
@@ -21303,6 +21324,10 @@ class InteractionManager extends CoreFeature {
21303
21324
  }
21304
21325
  }
21305
21326
  }
21327
+
21328
+ if((key === "mouseenter" || key === "mouseleave") && !this.pseudoTracking){
21329
+ this.bindPseudoEvents();
21330
+ }
21306
21331
 
21307
21332
  if(changed){
21308
21333
  this.updateEventListeners();
@@ -21336,7 +21361,7 @@ class InteractionManager extends CoreFeature {
21336
21361
 
21337
21362
  this.triggerEvents(type, e, targets);
21338
21363
 
21339
- if((type == "mouseover" || type == "mouseleave") && !Object.keys(targets).length){
21364
+ if(this.pseudoTracking && (type == "mouseover" || type == "mouseleave") && !Object.keys(targets).length){
21340
21365
  this.pseudoMouseLeave("none", e);
21341
21366
  }
21342
21367
  }
@@ -21544,7 +21569,7 @@ class DataLoader extends CoreFeature{
21544
21569
  data = JSON.parse(data);
21545
21570
  }
21546
21571
 
21547
- if(this.confirm("data-loading", data, params, config, silent)){
21572
+ if(this.confirm("data-loading", [data, params, config, silent])){
21548
21573
  this.loading = true;
21549
21574
 
21550
21575
  if(!silent){