tabulator-tables 5.2.3 → 5.2.6

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 (76) hide show
  1. package/bower.json +1 -1
  2. package/dist/css/tabulator.css +4 -4
  3. package/dist/css/tabulator.css.map +1 -1
  4. package/dist/css/tabulator.min.css +1 -1
  5. package/dist/css/tabulator.min.css.map +1 -1
  6. package/dist/css/tabulator_bootstrap3.css +4 -4
  7. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  8. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  9. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  10. package/dist/css/tabulator_bootstrap4.css +4 -4
  11. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  12. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  13. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  14. package/dist/css/tabulator_bootstrap5.css +45 -36
  15. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  16. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  17. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  18. package/dist/css/tabulator_bulma.css +16 -4
  19. package/dist/css/tabulator_bulma.css.map +1 -1
  20. package/dist/css/tabulator_bulma.min.css +1 -1
  21. package/dist/css/tabulator_bulma.min.css.map +1 -1
  22. package/dist/css/tabulator_materialize.css +4 -4
  23. package/dist/css/tabulator_materialize.css.map +1 -1
  24. package/dist/css/tabulator_materialize.min.css +1 -1
  25. package/dist/css/tabulator_materialize.min.css.map +1 -1
  26. package/dist/css/tabulator_midnight.css +4 -4
  27. package/dist/css/tabulator_midnight.css.map +1 -1
  28. package/dist/css/tabulator_midnight.min.css +1 -1
  29. package/dist/css/tabulator_midnight.min.css.map +1 -1
  30. package/dist/css/tabulator_modern.css +4 -4
  31. package/dist/css/tabulator_modern.css.map +1 -1
  32. package/dist/css/tabulator_modern.min.css +1 -1
  33. package/dist/css/tabulator_modern.min.css.map +1 -1
  34. package/dist/css/tabulator_semanticui.css +4 -4
  35. package/dist/css/tabulator_semanticui.css.map +1 -1
  36. package/dist/css/tabulator_semanticui.min.css +1 -1
  37. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  38. package/dist/css/tabulator_simple.css +4 -4
  39. package/dist/css/tabulator_simple.css.map +1 -1
  40. package/dist/css/tabulator_simple.min.css +1 -1
  41. package/dist/css/tabulator_simple.min.css.map +1 -1
  42. package/dist/css/tabulator_site.css +4 -4
  43. package/dist/css/tabulator_site.css.map +1 -1
  44. package/dist/css/tabulator_site.min.css +1 -1
  45. package/dist/css/tabulator_site.min.css.map +1 -1
  46. package/dist/js/tabulator.js +99 -135
  47. package/dist/js/tabulator.js.map +1 -1
  48. package/dist/js/tabulator.min.js +2 -2
  49. package/dist/js/tabulator.min.js.map +1 -1
  50. package/dist/js/tabulator_esm.js +72 -109
  51. package/dist/js/tabulator_esm.js.map +1 -1
  52. package/dist/js/tabulator_esm.min.js +2 -2
  53. package/dist/js/tabulator_esm.min.js.map +1 -1
  54. package/package.json +1 -1
  55. package/src/js/core/CoreFeature.js +2 -2
  56. package/src/js/core/RowManager.js +1 -1
  57. package/src/js/core/cell/Cell.js +1 -2
  58. package/src/js/core/column/Column.js +1 -81
  59. package/src/js/core/rendering/Renderer.js +2 -0
  60. package/src/js/core/tools/DataLoader.js +3 -3
  61. package/src/js/core/tools/Popup.js +6 -0
  62. package/src/js/modules/DataTree/DataTree.js +4 -0
  63. package/src/js/modules/Download/defaults/downloaders/csv.js +2 -3
  64. package/src/js/modules/Download/defaults/downloaders/pdf.js +2 -3
  65. package/src/js/modules/Edit/List.js +3 -3
  66. package/src/js/modules/Export/Export.js +1 -2
  67. package/src/js/modules/Filter/Filter.js +1 -1
  68. package/src/js/modules/FrozenColumns/FrozenColumns.js +4 -2
  69. package/src/js/modules/GroupRows/GroupRows.js +4 -0
  70. package/src/js/modules/Interaction/Interaction.js +3 -3
  71. package/src/js/modules/Page/Page.js +1 -2
  72. package/src/js/modules/ResizeColumns/ResizeColumns.js +38 -7
  73. package/src/js/modules/Sort/Sort.js +2 -2
  74. package/src/scss/tabulator.scss +2 -2
  75. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +41 -32
  76. package/src/scss/themes/bulma/tabulator_bulma.scss +47 -32
@@ -1,4 +1,4 @@
1
- /* Tabulator v5.2.3 (c) Oliver Folkerd 2022 */
1
+ /* Tabulator v5.2.6 (c) Oliver Folkerd 2022 */
2
2
  class CoreFeature{
3
3
 
4
4
  constructor(table){
@@ -9,8 +9,8 @@ class CoreFeature{
9
9
  /////////////// DataLoad /////////////////
10
10
  //////////////////////////////////////////
11
11
 
12
- reloadData(data, silent){
13
- return this.table.dataLoader.load(data, undefined, undefined, undefined, silent);
12
+ reloadData(data, silent, columnsChanged){
13
+ return this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);
14
14
  }
15
15
 
16
16
  //////////////////////////////////////////
@@ -194,6 +194,8 @@ class Popup extends CoreFeature{
194
194
 
195
195
  this.blurEvent = this.hide.bind(this, false);
196
196
  this.escEvent = this._escapeCheck.bind(this);
197
+
198
+ this.destroyBinding = this.hide.bind(this, true);
197
199
  }
198
200
 
199
201
  _lookupContainer(){
@@ -311,6 +313,8 @@ class Popup extends CoreFeature{
311
313
  this._fitToScreen(x, y, parentEl, parentOffset, position);
312
314
 
313
315
  this.visible = true;
316
+
317
+ this.subscribe("table-destroy", this.destroyBinding);
314
318
 
315
319
  return this;
316
320
  }
@@ -406,6 +410,8 @@ class Popup extends CoreFeature{
406
410
  if(this.blurCallback && !silent){
407
411
  this.blurCallback();
408
412
  }
413
+
414
+ this.unsubscribe("table-destroy", this.destroyBinding);
409
415
  }
410
416
 
411
417
  return this;
@@ -1564,7 +1570,6 @@ class Cell extends CoreFeature{
1564
1570
  }
1565
1571
  break;
1566
1572
  case "undefined":
1567
- case "null":
1568
1573
  this.element.innerHTML = "";
1569
1574
  break;
1570
1575
  default:
@@ -2066,8 +2071,6 @@ class Column extends CoreFeature{
2066
2071
  }
2067
2072
  }
2068
2073
 
2069
- this.contentElement = this._bindEvents();
2070
-
2071
2074
  this.contentElement = this._buildColumnHeaderContent();
2072
2075
 
2073
2076
  this.element.appendChild(this.contentElement);
@@ -2081,83 +2084,6 @@ class Column extends CoreFeature{
2081
2084
  this.dispatch("column-init", this);
2082
2085
  }
2083
2086
 
2084
- _bindEvents(){
2085
- var def = this.definition,
2086
- dblTap, tapHold, tap;
2087
-
2088
- //setup header click event bindings
2089
- if(typeof(def.headerClick) == "function"){
2090
- this.element.addEventListener("click", (e) => {def.headerClick(e, this.getComponent());});
2091
- }
2092
-
2093
- if(typeof(def.headerDblClick) == "function"){
2094
- this.element.addEventListener("dblclick", (e) => {def.headerDblClick(e, this.getComponent());});
2095
- }
2096
-
2097
- if(typeof(def.headerContext) == "function"){
2098
- this.element.addEventListener("contextmenu", (e) => {def.headerContext(e, this.getComponent());});
2099
- }
2100
-
2101
- //setup header tap event bindings
2102
- if(typeof(def.headerTap) == "function"){
2103
- tap = false;
2104
-
2105
- this.element.addEventListener("touchstart", (e) => {
2106
- tap = true;
2107
- }, {passive: true});
2108
-
2109
- this.element.addEventListener("touchend", (e) => {
2110
- if(tap){
2111
- def.headerTap(e, this.getComponent());
2112
- }
2113
-
2114
- tap = false;
2115
- });
2116
- }
2117
-
2118
- if(typeof(def.headerDblTap) == "function"){
2119
- dblTap = null;
2120
-
2121
- this.element.addEventListener("touchend", (e) => {
2122
-
2123
- if(dblTap){
2124
- clearTimeout(dblTap);
2125
- dblTap = null;
2126
-
2127
- def.headerDblTap(e, this.getComponent());
2128
- }else {
2129
-
2130
- dblTap = setTimeout(() => {
2131
- clearTimeout(dblTap);
2132
- dblTap = null;
2133
- }, 300);
2134
- }
2135
-
2136
- });
2137
- }
2138
-
2139
- if(typeof(def.headerTapHold) == "function"){
2140
- tapHold = null;
2141
-
2142
- this.element.addEventListener("touchstart", (e) => {
2143
- clearTimeout(tapHold);
2144
-
2145
- tapHold = setTimeout(function(){
2146
- clearTimeout(tapHold);
2147
- tapHold = null;
2148
- tap = false;
2149
- def.headerTapHold(e, this.getComponent());
2150
- }, 1000);
2151
-
2152
- }, {passive: true});
2153
-
2154
- this.element.addEventListener("touchend", (e) => {
2155
- clearTimeout(tapHold);
2156
- tapHold = null;
2157
- });
2158
- }
2159
- }
2160
-
2161
2087
  //build header element for header
2162
2088
  _buildColumnHeader(){
2163
2089
  var def = this.definition,
@@ -2284,7 +2210,6 @@ class Column extends CoreFeature{
2284
2210
  }
2285
2211
  break;
2286
2212
  case "undefined":
2287
- case "null":
2288
2213
  el.innerHTML = "";
2289
2214
  break;
2290
2215
  default:
@@ -4448,6 +4373,10 @@ class DataTree extends Module{
4448
4373
  return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;
4449
4374
  }
4450
4375
 
4376
+ getTreeParentRoot(row){
4377
+ return row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;
4378
+ }
4379
+
4451
4380
  getFilteredTreeChildren(row){
4452
4381
  var config = row.modules.dataTree,
4453
4382
  output = [], children;
@@ -4646,11 +4575,10 @@ function csv(list, options, setFileContents){
4646
4575
 
4647
4576
  switch(typeof col.value){
4648
4577
  case "object":
4649
- col.value = JSON.stringify(col.value);
4578
+ col.value = col.value !== null ? JSON.stringify(col.value) : "";
4650
4579
  break;
4651
4580
 
4652
4581
  case "undefined":
4653
- case "null":
4654
4582
  col.value = "";
4655
4583
  break;
4656
4584
  }
@@ -4770,11 +4698,10 @@ function pdf(list, options, setFileContents){
4770
4698
  if(col){
4771
4699
  switch(typeof col.value){
4772
4700
  case "object":
4773
- col.value = JSON.stringify(col.value);
4701
+ col.value = col.value !== null ? JSON.stringify(col.value) : "";
4774
4702
  break;
4775
4703
 
4776
4704
  case "undefined":
4777
- case "null":
4778
4705
  col.value = "";
4779
4706
  break;
4780
4707
  }
@@ -5627,7 +5554,7 @@ class Edit{
5627
5554
  this.initialValues = this.params.multiselect ? initialValue : [initialValue];
5628
5555
 
5629
5556
  if(this.isFilter){
5630
- this.input.value = this.initialValues.join(",");
5557
+ this.input.value = this.initialValues ? this.initialValues.join(",") : "";
5631
5558
  this.headerFilterInitialListGen();
5632
5559
  }
5633
5560
  }
@@ -6032,7 +5959,7 @@ class Edit{
6032
5959
  values = this._ajaxRequest(this.params.valuesURL, this.input.value);
6033
5960
  }else {
6034
5961
  if(typeof this.params.valuesLookup === "function"){
6035
- values = this.params.valuesLookup(cell, this.input.value);
5962
+ values = this.params.valuesLookup(this.cell, this.input.value);
6036
5963
  }else if(this.params.valuesLookup){
6037
5964
  values = this._uniqueColumnValues(this.params.valuesLookupField);
6038
5965
  }
@@ -8184,11 +8111,10 @@ class Export extends Module{
8184
8111
  }else {
8185
8112
  switch(typeof value){
8186
8113
  case "object":
8187
- value = JSON.stringify(value);
8114
+ value = value !== null ? JSON.stringify(value) : "";
8188
8115
  break;
8189
8116
 
8190
8117
  case "undefined":
8191
- case "null":
8192
8118
  value = "";
8193
8119
  break;
8194
8120
 
@@ -8947,7 +8873,7 @@ class Filter extends Module{
8947
8873
  refreshFilter(){
8948
8874
  if(this.tableInitialized){
8949
8875
  if(this.table.options.filterMode === "remote"){
8950
- this.reloadData();
8876
+ this.reloadData(null, false, false);
8951
8877
  }else {
8952
8878
  this.refreshData(true);
8953
8879
  }
@@ -10308,7 +10234,8 @@ class FrozenColumns extends Module{
10308
10234
  this.table.columnManager.element.style.paddingRight = this.rightMargin;
10309
10235
 
10310
10236
  this.leftColumns.forEach((column, i) => {
10311
- column.modules.frozen.margin = (leftMargin + this.table.columnManager.scrollLeft) + "px";
10237
+ column.modules.frozen.marginValue = leftMargin + this.table.columnManager.scrollLeft;
10238
+ column.modules.frozen.margin = column.modules.frozen.marginValue + "px";
10312
10239
 
10313
10240
  if(column.visible){
10314
10241
  leftMargin += column.getWidth();
@@ -10347,7 +10274,8 @@ class FrozenColumns extends Module{
10347
10274
  rightMargin += column.getWidth();
10348
10275
  }
10349
10276
 
10350
- column.modules.frozen.margin = (this.rightPadding - rightMargin) + "px";
10277
+ column.modules.frozen.marginValue = this.rightPadding - rightMargin;
10278
+ column.modules.frozen.margin = column.modules.frozen.marginValue + "px";
10351
10279
 
10352
10280
  if(i == this.rightColumns.length - 1){
10353
10281
  column.modules.frozen.edge = true;
@@ -11684,6 +11612,10 @@ class GroupRows extends Module{
11684
11612
  getRowGroup(row){
11685
11613
  var match = false;
11686
11614
 
11615
+ if(this.options("dataTree")){
11616
+ row = this.table.modules.dataTree.getTreeParentRoot(row);
11617
+ }
11618
+
11687
11619
  this.groupList.forEach((group) => {
11688
11620
  var result = group.getRowGroup(row);
11689
11621
 
@@ -15140,7 +15072,6 @@ class Page extends Module{
15140
15072
  }
15141
15073
  break;
15142
15074
  case "undefined":
15143
- case "null":
15144
15075
  this.pageCounterElement.innerHTML = "";
15145
15076
  break;
15146
15077
  default:
@@ -16603,6 +16534,7 @@ class ResizeColumns extends Module{
16603
16534
 
16604
16535
  this.subscribe("column-hide", this.deInitializeColumn.bind(this));
16605
16536
  this.subscribe("column-show", this.columnLayoutUpdated.bind(this));
16537
+ this.subscribe("column-width", this.columnWidthUpdated.bind(this));
16606
16538
 
16607
16539
  this.subscribe("column-delete", this.deInitializeComponent.bind(this));
16608
16540
  this.subscribe("column-height", this.resizeHandle.bind(this));
@@ -16637,14 +16569,38 @@ class ResizeColumns extends Module{
16637
16569
  }
16638
16570
  }
16639
16571
 
16572
+ columnWidthUpdated(column){
16573
+ if(column.modules.frozen){
16574
+ if(this.table.modules.frozenColumns.leftColumns.includes(column)){
16575
+ this.table.modules.frozenColumns.leftColumns.forEach((col) => {
16576
+ this.reinitializeColumn(col);
16577
+ });
16578
+ }else if(this.table.modules.frozenColumns.rightColumns.includes(column)){
16579
+ this.table.modules.frozenColumns.rightColumns.forEach((col) => {
16580
+ this.reinitializeColumn(col);
16581
+ });
16582
+ }
16583
+ }
16584
+ }
16585
+
16640
16586
  reinitializeColumn(column){
16587
+ var frozenOffset = column.modules.frozen ? (column.modules.frozen.marginValue + column.getWidth() + "px") : false;
16588
+
16641
16589
  column.cells.forEach((cell) => {
16642
16590
  if(cell.modules.resize && cell.modules.resize.handleEl){
16591
+ if(frozenOffset){
16592
+ cell.modules.resize.handleEl.style.left = frozenOffset;
16593
+ }
16594
+
16643
16595
  cell.element.after(cell.modules.resize.handleEl);
16644
16596
  }
16645
16597
  });
16646
16598
 
16647
16599
  if(column.modules.resize && column.modules.resize.handleEl){
16600
+ if(frozenOffset){
16601
+ column.modules.resize.handleEl.style.left = frozenOffset;
16602
+ }
16603
+
16648
16604
  column.element.after(column.modules.resize.handleEl);
16649
16605
  }
16650
16606
  }
@@ -16693,9 +16649,14 @@ class ResizeColumns extends Module{
16693
16649
  }
16694
16650
  });
16695
16651
 
16652
+ if(column.modules.frozen){
16653
+ handle.style.position = "absolute";
16654
+ handle.style.left = column.modules.frozen.marginValue + column.getWidth() + "px";
16655
+ }
16656
+
16696
16657
  config.handleEl = handle;
16697
16658
 
16698
- if(element.parentNode){
16659
+ if(element.parentNode && column.visible){
16699
16660
  element.after(handle);
16700
16661
  }
16701
16662
  }
@@ -16743,27 +16704,27 @@ class ResizeColumns extends Module{
16743
16704
  startDiff = x - self.startX,
16744
16705
  moveDiff = x - self.latestX,
16745
16706
  blockedBefore, blockedAfter;
16746
-
16707
+
16747
16708
  self.latestX = x;
16748
16709
 
16749
16710
  if(self.table.rtl){
16750
16711
  startDiff = -startDiff;
16751
16712
  moveDiff = -moveDiff;
16752
16713
  }
16753
-
16714
+
16754
16715
  blockedBefore = column.width == column.minWidth || column.width == column.maxWidth;
16755
-
16716
+
16756
16717
  column.setWidth(self.startWidth + startDiff);
16757
-
16718
+
16758
16719
  blockedAfter = column.width == column.minWidth || column.width == column.maxWidth;
16759
-
16720
+
16760
16721
  if(moveDiff < 0){
16761
16722
  self.nextColumn = self.initialNextColumn;
16762
16723
  }
16763
16724
 
16764
16725
  if(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){
16765
16726
  let colWidth = self.nextColumn.getWidth();
16766
-
16727
+
16767
16728
  if(moveDiff > 0){
16768
16729
  if(colWidth <= self.nextColumn.minWidth){
16769
16730
  self.nextColumn = self.nextColumn.nextColumn();
@@ -18304,7 +18265,7 @@ class Sort extends Module{
18304
18265
 
18305
18266
  refreshSort(){
18306
18267
  if(this.table.options.sortMode === "remote"){
18307
- this.reloadData();
18268
+ this.reloadData(null, false, false);
18308
18269
  }else {
18309
18270
  this.refreshData(true);
18310
18271
  }
@@ -18477,7 +18438,7 @@ class Sort extends Module{
18477
18438
  //set the column header sort direction
18478
18439
  setColumnHeader(column, dir){
18479
18440
  column.modules.sort.dir = dir;
18480
- column.getElement().setAttribute("aria-sort", dir);
18441
+ column.getElement().setAttribute("aria-sort", dir === "asc" ? "ascending" : "descending");
18481
18442
  }
18482
18443
 
18483
18444
  //sort each item in sort list
@@ -19420,6 +19381,8 @@ class Renderer extends CoreFeature{
19420
19381
  this.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;
19421
19382
  }
19422
19383
 
19384
+ break;
19385
+
19423
19386
  case "top":
19424
19387
  this.elementVertical.scrollTop = rowEl.offsetTop;
19425
19388
  break;
@@ -21380,7 +21343,7 @@ class RowManager extends CoreFeature{
21380
21343
 
21381
21344
  el.classList.add("tabulator-tableholder");
21382
21345
  el.setAttribute("tabindex", 0);
21383
- el.setAttribute("role", "rowgroup");
21346
+ // el.setAttribute("role", "rowgroup");
21384
21347
 
21385
21348
  return el;
21386
21349
  }
@@ -22855,7 +22818,7 @@ class DataLoader extends CoreFeature{
22855
22818
 
22856
22819
  initialize(){}
22857
22820
 
22858
- load(data, params, config, replace, silent){
22821
+ load(data, params, config, replace, silent, columnsChanged){
22859
22822
  var requestNo = ++this.requestOrder;
22860
22823
 
22861
22824
  this.dispatchExternal("dataLoading", data);
@@ -22891,7 +22854,7 @@ class DataLoader extends CoreFeature{
22891
22854
 
22892
22855
  if(rowData !== false){
22893
22856
  this.dispatchExternal("dataLoaded", rowData);
22894
- this.table.rowManager.setData(rowData, replace, !replace);
22857
+ this.table.rowManager.setData(rowData, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged);
22895
22858
  }
22896
22859
  }else {
22897
22860
  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");
@@ -22918,7 +22881,7 @@ class DataLoader extends CoreFeature{
22918
22881
  data = [];
22919
22882
  }
22920
22883
 
22921
- this.table.rowManager.setData(data, replace, !replace);
22884
+ this.table.rowManager.setData(data, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged);
22922
22885
  return Promise.resolve();
22923
22886
  }
22924
22887
  }