tabulator-tables 5.5.0 → 5.5.1

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 (72) hide show
  1. package/bower.json +1 -1
  2. package/build/Bundler.js +7 -3
  3. package/dist/css/tabulator.css +5 -0
  4. package/dist/css/tabulator.css.map +1 -1
  5. package/dist/css/tabulator.min.css +1 -1
  6. package/dist/css/tabulator.min.css.map +1 -1
  7. package/dist/css/tabulator_bootstrap3.css +5 -0
  8. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  9. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  10. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  11. package/dist/css/tabulator_bootstrap4.css +5 -0
  12. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  13. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  14. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  15. package/dist/css/tabulator_bootstrap5.css +5 -0
  16. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  17. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  18. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  19. package/dist/css/tabulator_bulma.css +5 -0
  20. package/dist/css/tabulator_bulma.css.map +1 -1
  21. package/dist/css/tabulator_bulma.min.css +1 -1
  22. package/dist/css/tabulator_bulma.min.css.map +1 -1
  23. package/dist/css/tabulator_materialize.css +20 -15
  24. package/dist/css/tabulator_materialize.css.map +1 -1
  25. package/dist/css/tabulator_materialize.min.css +1 -1
  26. package/dist/css/tabulator_materialize.min.css.map +1 -1
  27. package/dist/css/tabulator_midnight.css +5 -0
  28. package/dist/css/tabulator_midnight.css.map +1 -1
  29. package/dist/css/tabulator_midnight.min.css +1 -1
  30. package/dist/css/tabulator_midnight.min.css.map +1 -1
  31. package/dist/css/tabulator_modern.css +5 -0
  32. package/dist/css/tabulator_modern.css.map +1 -1
  33. package/dist/css/tabulator_modern.min.css +1 -1
  34. package/dist/css/tabulator_modern.min.css.map +1 -1
  35. package/dist/css/tabulator_semanticui.css +7 -2
  36. package/dist/css/tabulator_semanticui.css.map +1 -1
  37. package/dist/css/tabulator_semanticui.min.css +1 -1
  38. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  39. package/dist/css/tabulator_simple.css +5 -0
  40. package/dist/css/tabulator_simple.css.map +1 -1
  41. package/dist/css/tabulator_simple.min.css +1 -1
  42. package/dist/css/tabulator_simple.min.css.map +1 -1
  43. package/dist/css/tabulator_site.css +5 -0
  44. package/dist/css/tabulator_site.css.map +1 -1
  45. package/dist/css/tabulator_site.min.css +1 -1
  46. package/dist/css/tabulator_site.min.css.map +1 -1
  47. package/dist/js/jquery_wrapper.js +10 -2
  48. package/dist/js/tabulator.js +155 -90
  49. package/dist/js/tabulator.js.map +1 -1
  50. package/dist/js/tabulator.min.js +2 -2
  51. package/dist/js/tabulator.min.js.map +1 -1
  52. package/dist/js/tabulator_esm.js +155 -90
  53. package/dist/js/tabulator_esm.js.map +1 -1
  54. package/dist/js/tabulator_esm.min.js +2 -2
  55. package/dist/js/tabulator_esm.min.js.map +1 -1
  56. package/package.json +3 -2
  57. package/src/js/builds/jquery_wrapper.js +10 -2
  58. package/src/js/core/RowManager.js +2 -0
  59. package/src/js/core/rendering/renderers/BasicHorizontal.js +9 -7
  60. package/src/js/core/rendering/renderers/BasicVertical.js +43 -25
  61. package/src/js/core/rendering/renderers/VirtualDomVertical.js +6 -3
  62. package/src/js/core/row/Row.js +9 -3
  63. package/src/js/core/tools/DataLoader.js +44 -36
  64. package/src/js/modules/DataTree/DataTree.js +4 -1
  65. package/src/js/modules/GroupRows/Group.js +27 -10
  66. package/src/js/modules/History/defaults/redoers.js +4 -2
  67. package/src/js/modules/History/defaults/undoers.js +6 -2
  68. package/src/scss/tabulator.scss +5 -0
  69. package/src/scss/themes/materialize/tabulator_materialize.scss +2 -2
  70. package/src/scss/themes/materialize/variables.scss +1 -1
  71. package/src/scss/themes/semanticui/tabulator_semanticui.scss +1 -1
  72. package/src/scss/themes/semanticui/variables_table.scss +1 -1
@@ -1,4 +1,4 @@
1
- /* Tabulator v5.5.0 (c) Oliver Folkerd 2023 */
1
+ /* Tabulator v5.5.1 (c) Oliver Folkerd 2023 */
2
2
  class CoreFeature{
3
3
 
4
4
  constructor(table){
@@ -3112,7 +3112,7 @@ class Row extends CoreFeature{
3112
3112
  }
3113
3113
 
3114
3114
  //functions to setup on first render
3115
- initialize(force){
3115
+ initialize(force, inFragment){
3116
3116
  this.create();
3117
3117
 
3118
3118
  if(!this.initialized || force){
@@ -3127,7 +3127,7 @@ class Row extends CoreFeature{
3127
3127
 
3128
3128
  this.initialized = true;
3129
3129
 
3130
- this.table.columnManager.renderer.renderRowCells(this);
3130
+ this.table.columnManager.renderer.renderRowCells(this, inFragment);
3131
3131
 
3132
3132
  if(force){
3133
3133
  this.normalizeHeight();
@@ -3141,9 +3141,15 @@ class Row extends CoreFeature{
3141
3141
 
3142
3142
  this.dispatch("row-layout-after", this);
3143
3143
  }else {
3144
- this.table.columnManager.renderer.rerenderRowCells(this);
3144
+ this.table.columnManager.renderer.rerenderRowCells(this, inFragment);
3145
3145
  }
3146
3146
  }
3147
+
3148
+ rendered(){
3149
+ this.cells.forEach((cell) => {
3150
+ cell.cellRendered();
3151
+ });
3152
+ }
3147
3153
 
3148
3154
  reinitializeHeight(){
3149
3155
  this.heightInitialized = false;
@@ -4231,6 +4237,9 @@ class DataTree extends Module{
4231
4237
  this.branchEl = options.dataTreeBranchElement;
4232
4238
  }
4233
4239
  }
4240
+ }else {
4241
+ this.branchEl = document.createElement("div");
4242
+ this.branchEl.classList.add("tabulator-data-tree-branch-empty");
4234
4243
  }
4235
4244
 
4236
4245
  if(options.dataTreeCollapseElement){
@@ -4734,7 +4743,7 @@ class DataTree extends Module{
4734
4743
  var config = row.modules.dataTree,
4735
4744
  output = [];
4736
4745
 
4737
- if(config.children){
4746
+ if(config && config.children){
4738
4747
 
4739
4748
  if(!Array.isArray(config.children)){
4740
4749
  config.children = this.generateChildren(row);
@@ -11434,7 +11443,7 @@ class Group{
11434
11443
  this.arrowElement = document.createElement("div");
11435
11444
  this.arrowElement.classList.add("tabulator-group-toggle");
11436
11445
  this.arrowElement.appendChild(arrow);
11437
-
11446
+
11438
11447
  //setup movable rows
11439
11448
  if(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")){
11440
11449
  this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
@@ -11457,9 +11466,15 @@ class Group{
11457
11466
  toggleElement = this.groupManager.table.options.groupToggleElement == "arrow" ? this.arrowElement : this.element;
11458
11467
 
11459
11468
  toggleElement.addEventListener("click", (e) => {
11460
- e.stopPropagation();
11461
- e.stopImmediatePropagation();
11462
- this.toggleVisibility();
11469
+ if(this.groupManager.table.options.groupToggleElement === "arrow"){
11470
+ e.stopPropagation();
11471
+ e.stopImmediatePropagation();
11472
+ }
11473
+
11474
+ //allow click event to propagate before toggling visibility
11475
+ setTimeout(() => {
11476
+ this.toggleVisibility();
11477
+ });
11463
11478
  });
11464
11479
  }
11465
11480
  }
@@ -11580,7 +11595,7 @@ class Group{
11580
11595
  if(el.parentNode){
11581
11596
  el.parentNode.removeChild(el);
11582
11597
  }
11583
-
11598
+
11584
11599
  if(!this.groupManager.blockRedraw){
11585
11600
  this.generateGroupHeaderContents();
11586
11601
 
@@ -11705,6 +11720,7 @@ class Group{
11705
11720
  }
11706
11721
  return count;
11707
11722
  }
11723
+
11708
11724
 
11709
11725
  toggleVisibility(){
11710
11726
  if(this.visible){
@@ -11829,12 +11845,18 @@ class Group{
11829
11845
  return output;
11830
11846
  }
11831
11847
 
11832
- getRows(component){
11848
+ getRows(component, includeChildren){
11833
11849
  var output = [];
11834
11850
 
11835
- this.rows.forEach(function(row){
11836
- output.push(component ? row.getComponent() : row);
11837
- });
11851
+ if(includeChildren && this.groupList.length){
11852
+ this.groupList.forEach((group) => {
11853
+ output = output.concat(group.getRows(component, includeChildren));
11854
+ });
11855
+ }else {
11856
+ this.rows.forEach(function(row){
11857
+ output.push(component ? row.getComponent() : row);
11858
+ });
11859
+ }
11838
11860
 
11839
11861
  return output;
11840
11862
  }
@@ -11842,7 +11864,9 @@ class Group{
11842
11864
  generateGroupHeaderContents(){
11843
11865
  var data = [];
11844
11866
 
11845
- this.rows.forEach(function(row){
11867
+ var rows = this.getRows(false, true);
11868
+
11869
+ rows.forEach(function(row){
11846
11870
  data.push(row.getData());
11847
11871
  });
11848
11872
 
@@ -11947,6 +11971,8 @@ class Group{
11947
11971
  clearCellHeight(){}
11948
11972
 
11949
11973
  deinitializeHeight(){}
11974
+
11975
+ rendered(){}
11950
11976
 
11951
11977
  //////////////// Object Generation /////////////////
11952
11978
  getComponent(){
@@ -12613,8 +12639,12 @@ var defaultUndoers = {
12613
12639
  },
12614
12640
 
12615
12641
  rowMove: function(action){
12616
- this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);
12617
- this.table.rowManager.redraw();
12642
+ var after = (action.data.posFrom - action.data.posTo) > 0;
12643
+
12644
+ this.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after);
12645
+
12646
+ this.table.rowManager.regenerateRowPositions();
12647
+ this.table.rowManager.reRenderInPosition();
12618
12648
  },
12619
12649
  };
12620
12650
 
@@ -12639,8 +12669,10 @@ var defaultRedoers = {
12639
12669
  },
12640
12670
 
12641
12671
  rowMove: function(action){
12642
- this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);
12643
- this.table.rowManager.redraw();
12672
+ this.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after);
12673
+
12674
+ this.table.rowManager.regenerateRowPositions();
12675
+ this.table.rowManager.reRenderInPosition();
12644
12676
  },
12645
12677
  };
12646
12678
 
@@ -20550,19 +20582,21 @@ class BasicHorizontal extends Renderer{
20550
20582
  constructor(table){
20551
20583
  super(table);
20552
20584
  }
20553
-
20554
- renderRowCells(row) {
20585
+
20586
+ renderRowCells(row, inFragment) {
20555
20587
  const rowFrag = document.createDocumentFragment();
20556
20588
  row.cells.forEach((cell) => {
20557
20589
  rowFrag.appendChild(cell.getElement());
20558
20590
  });
20559
20591
  row.element.appendChild(rowFrag);
20560
-
20561
- row.cells.forEach((cell) => {
20562
- cell.cellRendered();
20563
- });
20592
+
20593
+ if(!inFragment){
20594
+ row.cells.forEach((cell) => {
20595
+ cell.cellRendered();
20596
+ });
20597
+ }
20564
20598
  }
20565
-
20599
+
20566
20600
  reinitializeColumnWidths(columns){
20567
20601
  columns.forEach(function(column){
20568
20602
  column.reinitializeWidth();
@@ -21891,82 +21925,100 @@ class ColumnManager extends CoreFeature {
21891
21925
  class BasicVertical extends Renderer{
21892
21926
  constructor(table){
21893
21927
  super(table);
21894
-
21928
+
21895
21929
  this.verticalFillMode = "fill";
21896
-
21930
+
21897
21931
  this.scrollTop = 0;
21898
21932
  this.scrollLeft = 0;
21899
-
21933
+
21900
21934
  this.scrollTop = 0;
21901
21935
  this.scrollLeft = 0;
21902
21936
  }
21903
-
21937
+
21904
21938
  clearRows(){
21905
21939
  var element = this.tableElement;
21906
-
21940
+
21907
21941
  // element.children.detach();
21908
21942
  while(element.firstChild) element.removeChild(element.firstChild);
21909
-
21943
+
21910
21944
  element.scrollTop = 0;
21911
21945
  element.scrollLeft = 0;
21912
-
21946
+
21913
21947
  element.style.minWidth = "";
21914
21948
  element.style.minHeight = "";
21915
21949
  element.style.display = "";
21916
21950
  element.style.visibility = "";
21917
21951
  }
21918
-
21952
+
21919
21953
  renderRows() {
21920
21954
  var element = this.tableElement,
21921
21955
  onlyGroupHeaders = true,
21922
- tableFrag = document.createDocumentFragment();
21923
-
21924
- this.rows().forEach((row, index) => {
21956
+ tableFrag = document.createDocumentFragment(),
21957
+ rows = this.rows();
21958
+
21959
+ rows.forEach((row, index) => {
21925
21960
  this.styleRow(row, index);
21926
- row.initialize(true);
21927
-
21961
+ row.initialize(false, true);
21962
+
21928
21963
  if (row.type !== "group") {
21929
21964
  onlyGroupHeaders = false;
21930
21965
  }
21931
-
21966
+
21932
21967
  tableFrag.appendChild(row.getElement());
21933
21968
  });
21969
+
21934
21970
  element.appendChild(tableFrag);
21935
-
21971
+
21972
+ rows.forEach((row) => {
21973
+ row.rendered();
21974
+
21975
+ if(!row.heightInitialized) {
21976
+ row.calcHeight(true);
21977
+ }
21978
+ });
21979
+
21980
+ rows.forEach((row) => {
21981
+ if(!row.heightInitialized) {
21982
+ row.setCellHeight();
21983
+ }
21984
+ });
21985
+
21986
+
21987
+
21936
21988
  if(onlyGroupHeaders){
21937
21989
  element.style.minWidth = this.table.columnManager.getWidth() + "px";
21938
21990
  }else {
21939
21991
  element.style.minWidth = "";
21940
21992
  }
21941
21993
  }
21942
-
21943
-
21994
+
21995
+
21944
21996
  rerenderRows(callback){
21945
21997
  this.clearRows();
21946
-
21998
+
21947
21999
  if(callback){
21948
22000
  callback();
21949
22001
  }
21950
-
22002
+
21951
22003
  this.renderRows();
21952
22004
  }
21953
-
22005
+
21954
22006
  scrollToRowNearestTop(row){
21955
22007
  var rowTop = Helpers.elOffset(row.getElement()).top;
21956
-
22008
+
21957
22009
  return !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));
21958
22010
  }
21959
-
22011
+
21960
22012
  scrollToRow(row){
21961
22013
  var rowEl = row.getElement();
21962
-
22014
+
21963
22015
  this.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;
21964
22016
  }
21965
-
22017
+
21966
22018
  visibleRows(includingBuffer){
21967
22019
  return this.rows();
21968
22020
  }
21969
-
22021
+
21970
22022
  }
21971
22023
 
21972
22024
  class VirtualDomVertical extends Renderer{
@@ -22255,13 +22307,14 @@ class VirtualDomVertical extends Renderer{
22255
22307
  rowFragment = document.createDocumentFragment();
22256
22308
 
22257
22309
  i = 0;
22310
+
22258
22311
  while ((i < rowsToRender) && this.vDomBottom < rowsCount -1) {
22259
22312
  index = this.vDomBottom + 1,
22260
22313
  row = rows[index];
22261
22314
 
22262
22315
  this.styleRow(row, index);
22263
22316
 
22264
- row.initialize();
22317
+ row.initialize(false, true);
22265
22318
  if(!row.heightInitialized && !this.table.options.rowHeight){
22266
22319
  row.clearCellHeight();
22267
22320
  }
@@ -22275,21 +22328,23 @@ class VirtualDomVertical extends Renderer{
22275
22328
  if(!renderedRows.length){
22276
22329
  break;
22277
22330
  }
22331
+
22278
22332
  element.appendChild(rowFragment);
22279
22333
 
22280
22334
  // NOTE: The next 3 loops are separate on purpose
22281
22335
  // This is to batch up the dom writes and reads which drastically improves performance
22336
+
22282
22337
  renderedRows.forEach((row) => {
22338
+ row.rendered();
22339
+
22283
22340
  if(!row.heightInitialized) {
22284
22341
  row.calcHeight(true);
22285
-
22286
22342
  }
22287
22343
  });
22288
22344
 
22289
22345
  renderedRows.forEach((row) => {
22290
22346
  if(!row.heightInitialized) {
22291
22347
  row.setCellHeight();
22292
-
22293
22348
  }
22294
22349
  });
22295
22350
 
@@ -23582,6 +23637,8 @@ class RowManager extends CoreFeature{
23582
23637
 
23583
23638
  this.getElement().appendChild(this.placeholder);
23584
23639
  this._positionPlaceholder();
23640
+
23641
+ this.adjustTableSize();
23585
23642
  }
23586
23643
  }
23587
23644
 
@@ -24179,58 +24236,66 @@ class ComponentFunctionBinder{
24179
24236
  class DataLoader extends CoreFeature{
24180
24237
  constructor(table){
24181
24238
  super(table);
24182
-
24239
+
24183
24240
  this.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request
24184
24241
  this.loading = false;
24185
24242
  }
24186
-
24243
+
24187
24244
  initialize(){}
24188
-
24245
+
24189
24246
  load(data, params, config, replace, silent, columnsChanged){
24190
24247
  var requestNo = ++this.requestOrder;
24191
24248
 
24249
+ if(this.table.destroyed){
24250
+ return Promise.resolve();
24251
+ }
24252
+
24192
24253
  this.dispatchExternal("dataLoading", data);
24193
-
24254
+
24194
24255
  //parse json data to array
24195
24256
  if (data && (data.indexOf("{") == 0 || data.indexOf("[") == 0)){
24196
24257
  data = JSON.parse(data);
24197
24258
  }
24198
-
24259
+
24199
24260
  if(this.confirm("data-loading", [data, params, config, silent])){
24200
24261
  this.loading = true;
24201
-
24262
+
24202
24263
  if(!silent){
24203
24264
  this.alertLoader();
24204
24265
  }
24205
-
24266
+
24206
24267
  //get params for request
24207
24268
  params = this.chain("data-params", [data, config, silent], params || {}, params || {});
24208
-
24269
+
24209
24270
  params = this.mapParams(params, this.table.options.dataSendParams);
24210
-
24271
+
24211
24272
  var result = this.chain("data-load", [data, params, config, silent], false, Promise.resolve([]));
24212
24273
 
24213
24274
  return result.then((response) => {
24214
- if(!Array.isArray(response) && typeof response == "object"){
24215
- response = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));
24216
- }
24217
-
24218
- var rowData = this.chain("data-loaded", response, null, response);
24219
-
24220
- if(requestNo == this.requestOrder){
24221
- this.clearAlert();
24222
-
24223
- if(rowData !== false){
24224
- this.dispatchExternal("dataLoaded", rowData);
24225
- this.table.rowManager.setData(rowData, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged);
24275
+ if(!this.table.destroyed){
24276
+ if(!Array.isArray(response) && typeof response == "object"){
24277
+ response = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));
24278
+ }
24279
+
24280
+ var rowData = this.chain("data-loaded", response, null, response);
24281
+
24282
+ if(requestNo == this.requestOrder){
24283
+ this.clearAlert();
24284
+
24285
+ if(rowData !== false){
24286
+ this.dispatchExternal("dataLoaded", rowData);
24287
+ this.table.rowManager.setData(rowData, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged);
24288
+ }
24289
+ }else {
24290
+ console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made");
24226
24291
  }
24227
24292
  }else {
24228
- console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made");
24293
+ console.warn("Data Load Response Blocked - Table has been destroyed");
24229
24294
  }
24230
24295
  }).catch((error) => {
24231
24296
  console.error("Data Load Error: ", error);
24232
24297
  this.dispatchExternal("dataLoadError", error);
24233
-
24298
+
24234
24299
  if(!silent){
24235
24300
  this.alertError();
24236
24301
  }
@@ -24244,52 +24309,52 @@ class DataLoader extends CoreFeature{
24244
24309
  });
24245
24310
  }else {
24246
24311
  this.dispatchExternal("dataLoaded", data);
24247
-
24312
+
24248
24313
  if(!data){
24249
24314
  data = [];
24250
24315
  }
24251
-
24316
+
24252
24317
  this.table.rowManager.setData(data, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged);
24253
24318
  return Promise.resolve();
24254
24319
  }
24255
24320
  }
24256
-
24321
+
24257
24322
  mapParams(params, map){
24258
24323
  var output = {};
24259
-
24324
+
24260
24325
  for(let key in params){
24261
24326
  output[map.hasOwnProperty(key) ? map[key] : key] = params[key];
24262
24327
  }
24263
-
24328
+
24264
24329
  return output;
24265
24330
  }
24266
-
24331
+
24267
24332
  objectInvert(obj){
24268
24333
  var output = {};
24269
-
24334
+
24270
24335
  for(let key in obj){
24271
24336
  output[obj[key]] = key;
24272
24337
  }
24273
-
24338
+
24274
24339
  return output;
24275
24340
  }
24276
-
24341
+
24277
24342
  blockActiveLoad(){
24278
24343
  this.requestOrder++;
24279
24344
  }
24280
-
24345
+
24281
24346
  alertLoader(){
24282
24347
  var shouldLoad = typeof this.table.options.dataLoader === "function" ? this.table.options.dataLoader() : this.table.options.dataLoader;
24283
-
24348
+
24284
24349
  if(shouldLoad){
24285
24350
  this.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText("data|loading"));
24286
24351
  }
24287
24352
  }
24288
-
24353
+
24289
24354
  alertError(){
24290
24355
  this.table.alertManager.alert(this.table.options.dataLoaderError || this.langText("data|error"), "error");
24291
24356
  }
24292
-
24357
+
24293
24358
  clearAlert(){
24294
24359
  this.table.alertManager.clear();
24295
24360
  }