tabulator-tables 5.2.1 → 5.2.4

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 (71) hide show
  1. package/bower.json +1 -1
  2. package/dist/css/tabulator.css +1 -1
  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 +1 -1
  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 +1 -1
  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 +17 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +137 -80
  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 +110 -63
  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 +2 -0
  57. package/src/js/core/rendering/Renderer.js +2 -0
  58. package/src/js/core/tools/DataLoader.js +3 -3
  59. package/src/js/modules/DataTree/DataTree.js +17 -0
  60. package/src/js/modules/Edit/List.js +3 -3
  61. package/src/js/modules/Filter/Filter.js +1 -1
  62. package/src/js/modules/FrozenColumns/FrozenColumns.js +33 -41
  63. package/src/js/modules/GroupRows/GroupRows.js +4 -0
  64. package/src/js/modules/MoveColumns/MoveColumns.js +1 -1
  65. package/src/js/modules/Persistence/Persistence.js +1 -0
  66. package/src/js/modules/ResizeColumns/ResizeColumns.js +38 -7
  67. package/src/js/modules/Sort/Sort.js +1 -1
  68. package/src/js/modules/Sort/defaults/sorters/datetime.js +1 -1
  69. package/src/js/modules/Validate/Validate.js +3 -3
  70. package/src/scss/tabulator.scss +1 -1
  71. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +20 -0
@@ -1,4 +1,4 @@
1
- /* Tabulator v5.2.1 (c) Oliver Folkerd 2022 */
1
+ /* Tabulator v5.2.4 (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
  //////////////////////////////////////////
@@ -4138,11 +4138,24 @@ class DataTree extends Module{
4138
4138
  this.subscribe("edit-cancelled", this.cellValueChanged.bind(this));
4139
4139
  this.subscribe("column-moving-rows", this.columnMoving.bind(this));
4140
4140
  this.subscribe("table-built", this.initializeElementField.bind(this));
4141
+ this.subscribe("table-redrawing", this.tableRedrawing.bind(this));
4141
4142
 
4142
4143
  this.registerDisplayHandler(this.getRows.bind(this), 30);
4143
4144
  }
4144
4145
  }
4145
4146
 
4147
+ tableRedrawing(force){
4148
+ var rows;
4149
+
4150
+ if(force){
4151
+ rows = this.table.rowManager.getRows();
4152
+
4153
+ rows.forEach((row) => {
4154
+ this.reinitializeRowChildren(row);
4155
+ });
4156
+ }
4157
+ }
4158
+
4146
4159
  initializeElementField(){
4147
4160
  var firstCol = this.table.columnManager.getFirstVisibleColumn();
4148
4161
 
@@ -4435,6 +4448,10 @@ class DataTree extends Module{
4435
4448
  return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;
4436
4449
  }
4437
4450
 
4451
+ getTreeParentRoot(row){
4452
+ return row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;
4453
+ }
4454
+
4438
4455
  getFilteredTreeChildren(row){
4439
4456
  var config = row.modules.dataTree,
4440
4457
  output = [], children;
@@ -6019,7 +6036,7 @@ class Edit{
6019
6036
  values = this._ajaxRequest(this.params.valuesURL, this.input.value);
6020
6037
  }else {
6021
6038
  if(typeof this.params.valuesLookup === "function"){
6022
- values = this.params.valuesLookup(cell, this.input.value);
6039
+ values = this.params.valuesLookup(this.cell, this.input.value);
6023
6040
  }else if(this.params.valuesLookup){
6024
6041
  values = this._uniqueColumnValues(this.params.valuesLookupField);
6025
6042
  }
@@ -6533,7 +6550,7 @@ class Edit{
6533
6550
  this.actions.success(output);
6534
6551
 
6535
6552
  if(this.isFilter){
6536
- this.initialValues = output;
6553
+ this.initialValues = output && !Array.isArray[output] ? [output] : output;
6537
6554
  }
6538
6555
  }
6539
6556
 
@@ -8934,7 +8951,7 @@ class Filter extends Module{
8934
8951
  refreshFilter(){
8935
8952
  if(this.tableInitialized){
8936
8953
  if(this.table.options.filterMode === "remote"){
8937
- this.reloadData();
8954
+ this.reloadData(null, false, false);
8938
8955
  }else {
8939
8956
  this.refreshData(true);
8940
8957
  }
@@ -10130,7 +10147,6 @@ class FrozenColumns extends Module{
10130
10147
  this.rightPadding = 0;
10131
10148
  this.initializationMode = "left";
10132
10149
  this.active = false;
10133
- this.scrollEndTimer = false;
10134
10150
  this.blocked = true;
10135
10151
 
10136
10152
  this.registerColumnOption("frozen");
@@ -10159,10 +10175,10 @@ class FrozenColumns extends Module{
10159
10175
  this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this));
10160
10176
  this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this));
10161
10177
  this.subscribe("columns-loading", this.reset.bind(this));
10162
-
10178
+
10163
10179
  this.subscribe("column-add", this.reinitializeColumns.bind(this));
10164
10180
  this.subscribe("column-delete", this.reinitializeColumns.bind(this));
10165
-
10181
+
10166
10182
  this.subscribe("table-redraw", this.layout.bind(this));
10167
10183
  this.subscribe("layout-refreshing", this.blockLayout.bind(this));
10168
10184
  this.subscribe("layout-refreshed", this.unblockLayout.bind(this));
@@ -10179,10 +10195,10 @@ class FrozenColumns extends Module{
10179
10195
  layoutCell(cell){
10180
10196
  this.layoutElement(cell.element, cell.column);
10181
10197
  }
10182
-
10198
+
10183
10199
  reinitializeColumns(){
10184
10200
  this.reset();
10185
-
10201
+
10186
10202
  this.table.columnManager.columnsByIndex.forEach((column) => {
10187
10203
  this.initializeColumn(column);
10188
10204
  });
@@ -10227,24 +10243,15 @@ class FrozenColumns extends Module{
10227
10243
 
10228
10244
  //quick layout to smooth horizontal scrolling
10229
10245
  scrollHorizontal(){
10230
- var rows;
10231
10246
 
10232
- if(this.active){
10233
- clearTimeout(this.scrollEndTimer);
10234
-
10235
- rows = this.table.rowManager.getVisibleRows();
10236
-
10247
+ if(this.active){
10237
10248
  this.calcMargins(true);
10238
10249
 
10239
10250
  this.layoutColumnPosition();
10240
10251
 
10241
10252
  this.layoutCalcRows();
10242
10253
 
10243
- rows.forEach((row) => {
10244
- if(row.type === "row"){
10245
- this.layoutRow(row);
10246
- }
10247
- });
10254
+ this.reinitializeRows();
10248
10255
  }
10249
10256
  }
10250
10257
 
@@ -10256,7 +10263,7 @@ class FrozenColumns extends Module{
10256
10263
  this.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + "px";
10257
10264
  this.table.rowManager.tableElement.style.marginRight = this.rightMargin;
10258
10265
  }
10259
-
10266
+
10260
10267
  //calculate right frozen columns
10261
10268
  this.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;
10262
10269
  }
@@ -10303,10 +10310,11 @@ class FrozenColumns extends Module{
10303
10310
 
10304
10311
  this.table.columnManager.headersElement.style.marginLeft = this.leftMargin;
10305
10312
  this.table.columnManager.element.style.paddingRight = this.rightMargin;
10306
-
10313
+
10307
10314
  this.leftColumns.forEach((column, i) => {
10308
- column.modules.frozen.margin = (leftMargin + this.table.columnManager.scrollLeft) + "px";
10309
-
10315
+ column.modules.frozen.marginValue = leftMargin + this.table.columnManager.scrollLeft;
10316
+ column.modules.frozen.margin = column.modules.frozen.marginValue + "px";
10317
+
10310
10318
  if(column.visible){
10311
10319
  leftMargin += column.getWidth();
10312
10320
  }
@@ -10339,12 +10347,13 @@ class FrozenColumns extends Module{
10339
10347
  });
10340
10348
 
10341
10349
  this.rightColumns.forEach((column, i) => {
10342
-
10350
+
10343
10351
  if(column.visible){
10344
10352
  rightMargin += column.getWidth();
10345
10353
  }
10346
-
10347
- column.modules.frozen.margin = (this.rightPadding - rightMargin) + "px";
10354
+
10355
+ column.modules.frozen.marginValue = this.rightPadding - rightMargin;
10356
+ column.modules.frozen.margin = column.modules.frozen.marginValue + "px";
10348
10357
 
10349
10358
  if(i == this.rightColumns.length - 1){
10350
10359
  column.modules.frozen.edge = true;
@@ -10372,36 +10381,35 @@ class FrozenColumns extends Module{
10372
10381
  }
10373
10382
 
10374
10383
  //layout columns appropriately
10375
- layout(){
10376
- var visibleRows = [],
10377
- otherRows = [];
10378
-
10384
+ layout(){
10379
10385
  if(this.active && !this.blocked){
10380
10386
  //calculate row padding
10381
10387
  this.calcMargins();
10382
-
10388
+
10383
10389
  //calculate left columns
10384
10390
  this.layoutColumnPosition();
10385
10391
 
10386
- visibleRows = this.table.rowManager.getVisibleRows();
10387
- otherRows = this.table.rowManager.getDisplayRows().filter(row => !visibleRows.includes(row));
10388
-
10389
- otherRows.forEach((row) =>{
10390
- row.deinitialize();
10391
- });
10392
-
10393
- visibleRows.forEach((row) =>{
10394
- if(row.type === "row"){
10395
- this.layoutRow(row);
10396
- }
10397
- });
10392
+ this.reinitializeRows();
10398
10393
 
10399
10394
  this.layoutCalcRows();
10400
-
10401
-
10402
10395
  }
10403
10396
  }
10404
10397
 
10398
+ reinitializeRows(){
10399
+ var visibleRows = this.table.rowManager.getVisibleRows();
10400
+ var otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));
10401
+
10402
+ otherRows.forEach((row) =>{
10403
+ row.deinitialize();
10404
+ });
10405
+
10406
+ visibleRows.forEach((row) =>{
10407
+ if(row.type === "row"){
10408
+ this.layoutRow(row);
10409
+ }
10410
+ });
10411
+ }
10412
+
10405
10413
  layoutRow(row){
10406
10414
  // console.trace("row")
10407
10415
  var rowEl = row.getElement();
@@ -11682,6 +11690,10 @@ class GroupRows extends Module{
11682
11690
  getRowGroup(row){
11683
11691
  var match = false;
11684
11692
 
11693
+ if(this.options("dataTree")){
11694
+ row = this.table.modules.dataTree.getTreeParentRoot(row);
11695
+ }
11696
+
11685
11697
  this.groupList.forEach((group) => {
11686
11698
  var result = group.getRowGroup(row);
11687
11699
 
@@ -13417,7 +13429,7 @@ class MoveColumns extends Module{
13417
13429
  config = {},
13418
13430
  colEl;
13419
13431
 
13420
- if(!column.modules.frozen){
13432
+ if(!column.modules.frozen && !column.isGroup){
13421
13433
  colEl = column.getElement();
13422
13434
 
13423
13435
  config.mousemove = function(e){
@@ -15880,6 +15892,7 @@ class Persistence extends Module{
15880
15892
  if(this.config.columns === true || this.config.columns == undefined){
15881
15893
  keys = Object.keys(colDef);
15882
15894
  keys.push("width");
15895
+ keys.push("visible");
15883
15896
  }else {
15884
15897
  keys = this.config.columns;
15885
15898
  }
@@ -16600,6 +16613,7 @@ class ResizeColumns extends Module{
16600
16613
 
16601
16614
  this.subscribe("column-hide", this.deInitializeColumn.bind(this));
16602
16615
  this.subscribe("column-show", this.columnLayoutUpdated.bind(this));
16616
+ this.subscribe("column-width", this.columnWidthUpdated.bind(this));
16603
16617
 
16604
16618
  this.subscribe("column-delete", this.deInitializeComponent.bind(this));
16605
16619
  this.subscribe("column-height", this.resizeHandle.bind(this));
@@ -16634,14 +16648,38 @@ class ResizeColumns extends Module{
16634
16648
  }
16635
16649
  }
16636
16650
 
16651
+ columnWidthUpdated(column){
16652
+ if(column.modules.frozen){
16653
+ if(this.table.modules.frozenColumns.leftColumns.includes(column)){
16654
+ this.table.modules.frozenColumns.leftColumns.forEach((col) => {
16655
+ this.reinitializeColumn(col);
16656
+ });
16657
+ }else if(this.table.modules.frozenColumns.rightColumns.includes(column)){
16658
+ this.table.modules.frozenColumns.rightColumns.forEach((col) => {
16659
+ this.reinitializeColumn(col);
16660
+ });
16661
+ }
16662
+ }
16663
+ }
16664
+
16637
16665
  reinitializeColumn(column){
16666
+ var frozenOffset = column.modules.frozen ? (column.modules.frozen.marginValue + column.getWidth() + "px") : false;
16667
+
16638
16668
  column.cells.forEach((cell) => {
16639
16669
  if(cell.modules.resize && cell.modules.resize.handleEl){
16670
+ if(frozenOffset){
16671
+ cell.modules.resize.handleEl.style.left = frozenOffset;
16672
+ }
16673
+
16640
16674
  cell.element.after(cell.modules.resize.handleEl);
16641
16675
  }
16642
16676
  });
16643
16677
 
16644
16678
  if(column.modules.resize && column.modules.resize.handleEl){
16679
+ if(frozenOffset){
16680
+ column.modules.resize.handleEl.style.left = frozenOffset;
16681
+ }
16682
+
16645
16683
  column.element.after(column.modules.resize.handleEl);
16646
16684
  }
16647
16685
  }
@@ -16661,7 +16699,7 @@ class ResizeColumns extends Module{
16661
16699
 
16662
16700
  if((mode === true || mode == type) && this._checkResizability(nearestColumn)){
16663
16701
 
16664
- var handle = document.createElement('div');
16702
+ var handle = document.createElement('span');
16665
16703
  handle.className = "tabulator-col-resize-handle";
16666
16704
 
16667
16705
  handle.addEventListener("click", function(e){
@@ -16690,6 +16728,11 @@ class ResizeColumns extends Module{
16690
16728
  }
16691
16729
  });
16692
16730
 
16731
+ if(column.modules.frozen){
16732
+ handle.style.position = "absolute";
16733
+ handle.style.left = column.modules.frozen.marginValue + column.getWidth() + "px";
16734
+ }
16735
+
16693
16736
  config.handleEl = handle;
16694
16737
 
16695
16738
  if(element.parentNode){
@@ -16740,27 +16783,27 @@ class ResizeColumns extends Module{
16740
16783
  startDiff = x - self.startX,
16741
16784
  moveDiff = x - self.latestX,
16742
16785
  blockedBefore, blockedAfter;
16743
-
16786
+
16744
16787
  self.latestX = x;
16745
16788
 
16746
16789
  if(self.table.rtl){
16747
16790
  startDiff = -startDiff;
16748
16791
  moveDiff = -moveDiff;
16749
16792
  }
16750
-
16793
+
16751
16794
  blockedBefore = column.width == column.minWidth || column.width == column.maxWidth;
16752
-
16795
+
16753
16796
  column.setWidth(self.startWidth + startDiff);
16754
-
16797
+
16755
16798
  blockedAfter = column.width == column.minWidth || column.width == column.maxWidth;
16756
-
16799
+
16757
16800
  if(moveDiff < 0){
16758
16801
  self.nextColumn = self.initialNextColumn;
16759
16802
  }
16760
16803
 
16761
16804
  if(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){
16762
16805
  let colWidth = self.nextColumn.getWidth();
16763
-
16806
+
16764
16807
  if(moveDiff > 0){
16765
16808
  if(colWidth <= self.nextColumn.minWidth){
16766
16809
  self.nextColumn = self.nextColumn.nextColumn();
@@ -17928,7 +17971,7 @@ function datetime$1(a, b, aRow, bRow, column, dir, params){
17928
17971
  if(DT.isDateTime(b)){
17929
17972
  b = b;
17930
17973
  }else if(format === "iso"){
17931
- a = DT.fromISO(String(b));
17974
+ b = DT.fromISO(String(b));
17932
17975
  }else {
17933
17976
  b = DT.fromFormat(String(b), format);
17934
17977
  }
@@ -18301,7 +18344,7 @@ class Sort extends Module{
18301
18344
 
18302
18345
  refreshSort(){
18303
18346
  if(this.table.options.sortMode === "remote"){
18304
- this.reloadData();
18347
+ this.reloadData(null, false, false);
18305
18348
  }else {
18306
18349
  this.refreshData(true);
18307
18350
  }
@@ -18874,7 +18917,7 @@ class Validate extends Module{
18874
18917
  var invalid = [];
18875
18918
 
18876
18919
  column.cells.forEach((cell) => {
18877
- if(!this.cellValidate(cell)){
18920
+ if(this.cellValidate(cell) !== true){
18878
18921
  invalid.push(cell.getComponent());
18879
18922
  }
18880
18923
  });
@@ -18890,7 +18933,7 @@ class Validate extends Module{
18890
18933
  var invalid = [];
18891
18934
 
18892
18935
  row.cells.forEach((cell) => {
18893
- if(!this.cellValidate(cell)){
18936
+ if(this.cellValidate(cell) !== true){
18894
18937
  invalid.push(cell.getComponent());
18895
18938
  }
18896
18939
  });
@@ -19417,6 +19460,8 @@ class Renderer extends CoreFeature{
19417
19460
  this.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;
19418
19461
  }
19419
19462
 
19463
+ case "top":
19464
+ this.elementVertical.scrollTop = rowEl.offsetTop;
19420
19465
  break;
19421
19466
  }
19422
19467
 
@@ -22168,7 +22213,9 @@ class RowManager extends CoreFeature{
22168
22213
  this.redrawBlockRenderInPosition = true;
22169
22214
  }
22170
22215
  }else {
22216
+ this.dispatchExternal("renderStarted");
22171
22217
  this.renderer.rerenderRows(callback);
22218
+ this.dispatchExternal("renderComplete");
22172
22219
  }
22173
22220
  }
22174
22221
 
@@ -22848,7 +22895,7 @@ class DataLoader extends CoreFeature{
22848
22895
 
22849
22896
  initialize(){}
22850
22897
 
22851
- load(data, params, config, replace, silent){
22898
+ load(data, params, config, replace, silent, columnsChanged){
22852
22899
  var requestNo = ++this.requestOrder;
22853
22900
 
22854
22901
  this.dispatchExternal("dataLoading", data);
@@ -22884,7 +22931,7 @@ class DataLoader extends CoreFeature{
22884
22931
 
22885
22932
  if(rowData !== false){
22886
22933
  this.dispatchExternal("dataLoaded", rowData);
22887
- this.table.rowManager.setData(rowData, replace, !replace);
22934
+ this.table.rowManager.setData(rowData, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged);
22888
22935
  }
22889
22936
  }else {
22890
22937
  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");
@@ -22911,7 +22958,7 @@ class DataLoader extends CoreFeature{
22911
22958
  data = [];
22912
22959
  }
22913
22960
 
22914
- this.table.rowManager.setData(data, replace, !replace);
22961
+ this.table.rowManager.setData(data, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged);
22915
22962
  return Promise.resolve();
22916
22963
  }
22917
22964
  }