tabulator-tables 5.4.2 → 5.4.3

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 (66) hide show
  1. package/dist/css/tabulator.css +1 -0
  2. package/dist/css/tabulator.css.map +1 -1
  3. package/dist/css/tabulator.min.css +1 -1
  4. package/dist/css/tabulator.min.css.map +1 -1
  5. package/dist/css/tabulator_bootstrap3.css +1 -0
  6. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  7. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  8. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  9. package/dist/css/tabulator_bootstrap4.css +1 -0
  10. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  11. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  12. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  13. package/dist/css/tabulator_bootstrap5.css +1 -0
  14. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  15. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  16. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  17. package/dist/css/tabulator_bulma.css +1 -0
  18. package/dist/css/tabulator_bulma.css.map +1 -1
  19. package/dist/css/tabulator_bulma.min.css +1 -1
  20. package/dist/css/tabulator_bulma.min.css.map +1 -1
  21. package/dist/css/tabulator_materialize.css +1 -0
  22. package/dist/css/tabulator_materialize.css.map +1 -1
  23. package/dist/css/tabulator_materialize.min.css +1 -1
  24. package/dist/css/tabulator_materialize.min.css.map +1 -1
  25. package/dist/css/tabulator_midnight.css +1 -0
  26. package/dist/css/tabulator_midnight.css.map +1 -1
  27. package/dist/css/tabulator_midnight.min.css +1 -1
  28. package/dist/css/tabulator_midnight.min.css.map +1 -1
  29. package/dist/css/tabulator_modern.css +1 -0
  30. package/dist/css/tabulator_modern.css.map +1 -1
  31. package/dist/css/tabulator_modern.min.css +1 -1
  32. package/dist/css/tabulator_modern.min.css.map +1 -1
  33. package/dist/css/tabulator_semanticui.css +1 -0
  34. package/dist/css/tabulator_semanticui.css.map +1 -1
  35. package/dist/css/tabulator_semanticui.min.css +1 -1
  36. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  37. package/dist/css/tabulator_simple.css +1 -0
  38. package/dist/css/tabulator_simple.css.map +1 -1
  39. package/dist/css/tabulator_simple.min.css +1 -1
  40. package/dist/css/tabulator_simple.min.css.map +1 -1
  41. package/dist/css/tabulator_site.css +1 -0
  42. package/dist/css/tabulator_site.css.map +1 -1
  43. package/dist/css/tabulator_site.min.css +1 -1
  44. package/dist/css/tabulator_site.min.css.map +1 -1
  45. package/dist/js/tabulator.js +280 -222
  46. package/dist/js/tabulator.js.map +1 -1
  47. package/dist/js/tabulator.min.js +2 -2
  48. package/dist/js/tabulator.min.js.map +1 -1
  49. package/dist/js/tabulator_esm.js +280 -222
  50. package/dist/js/tabulator_esm.js.map +1 -1
  51. package/dist/js/tabulator_esm.min.js +2 -2
  52. package/dist/js/tabulator_esm.min.js.map +1 -1
  53. package/package.json +1 -1
  54. package/src/js/core/RowManager.js +49 -30
  55. package/src/js/core/Tabulator.js +7 -8
  56. package/src/js/core/tools/Popup.js +1 -1
  57. package/src/js/modules/Edit/List.js +1 -1
  58. package/src/js/modules/Edit/inputMask.js +1 -1
  59. package/src/js/modules/Export/Export.js +151 -145
  60. package/src/js/modules/Filter/Filter.js +11 -8
  61. package/src/js/modules/GroupRows/Group.js +10 -7
  62. package/src/js/modules/GroupRows/GroupRows.js +23 -7
  63. package/src/js/modules/Localize/Localize.js +0 -9
  64. package/src/js/modules/Print/Print.js +15 -2
  65. package/src/js/modules/SelectRow/SelectRow.js +10 -2
  66. package/src/scss/tabulator.scss +1 -0
@@ -182,11 +182,6 @@ class Filter extends Module{
182
182
  var def = column.definition;
183
183
 
184
184
  if(def.headerFilter){
185
-
186
- if(typeof def.headerFilterPlaceholder !== "undefined" && def.field){
187
- this.module("localize").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);
188
- }
189
-
190
185
  this.initializeColumn(column);
191
186
  }
192
187
  }
@@ -298,13 +293,17 @@ class Filter extends Module{
298
293
  var self = this,
299
294
  success = column.modules.filter.success,
300
295
  field = column.getField(),
301
- filterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;
296
+ filterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback;
302
297
 
303
298
  column.modules.filter.value = initialValue;
304
299
 
305
300
  //handle aborted edit
306
301
  function cancel(){}
307
302
 
303
+ function onRendered(callback){
304
+ onRenderedCallback = callback;
305
+ }
306
+
308
307
  if(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){
309
308
  column.contentElement.removeChild(column.modules.filter.headerElement.parentNode);
310
309
  }
@@ -389,7 +388,7 @@ class Filter extends Module{
389
388
 
390
389
  params = typeof params === "function" ? params.call(self.table, cellWrapper) : params;
391
390
 
392
- editorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);
391
+ editorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params);
393
392
 
394
393
  if(!editorElement){
395
394
  console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false");
@@ -403,7 +402,7 @@ class Filter extends Module{
403
402
 
404
403
  //set Placeholder Text
405
404
  self.langBind("headerFilters|columns|" + column.definition.field, function(value){
406
- editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.langText("headerFilters|default"));
405
+ editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : (column.definition.headerFilterPlaceholder || self.langText("headerFilters|default")));
407
406
  });
408
407
 
409
408
  //focus on element on click
@@ -485,6 +484,10 @@ class Filter extends Module{
485
484
  if(!reinitialize){
486
485
  self.headerFilterColumns.push(column);
487
486
  }
487
+
488
+ if(onRenderedCallback){
489
+ onRenderedCallback();
490
+ }
488
491
  }
489
492
  }else{
490
493
  console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title);
@@ -71,7 +71,7 @@ class Group{
71
71
  this.arrowElement = document.createElement("div");
72
72
  this.arrowElement.classList.add("tabulator-group-toggle");
73
73
  this.arrowElement.appendChild(arrow);
74
-
74
+
75
75
  //setup movable rows
76
76
  if(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")){
77
77
  this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
@@ -209,19 +209,22 @@ class Group{
209
209
  this.parent.removeGroup(this);
210
210
  }else{
211
211
  this.groupManager.removeGroup(this);
212
- }
212
+ }
213
213
 
214
214
  this.groupManager.updateGroupRows(true);
215
+
215
216
  }else{
216
217
 
217
218
  if(el.parentNode){
218
219
  el.parentNode.removeChild(el);
219
220
  }
220
-
221
- this.generateGroupHeaderContents();
222
-
223
- if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){
224
- this.groupManager.table.modules.columnCalcs.recalcGroup(this);
221
+
222
+ if(!this.groupManager.blockRedraw){
223
+ this.generateGroupHeaderContents();
224
+
225
+ if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){
226
+ this.groupManager.table.modules.columnCalcs.recalcGroup(this);
227
+ }
225
228
  }
226
229
 
227
230
  }
@@ -15,6 +15,8 @@ class GroupRows extends Module{
15
15
  this.groups = {}; //hold row groups
16
16
 
17
17
  this.displayHandler = this.getRows.bind(this);
18
+
19
+ this.blockRedraw = false;
18
20
 
19
21
  //register table options
20
22
  this.registerTableOption("groupBy", false); //enable table grouping and set field to group by
@@ -43,6 +45,10 @@ class GroupRows extends Module{
43
45
 
44
46
  //initialize group configuration
45
47
  initialize(){
48
+ this.subscribe("table-destroy", this._blockRedrawing.bind(this));
49
+ this.subscribe("rows-wipe", this._blockRedrawing.bind(this));
50
+ this.subscribe("rows-wiped", this._restore_redrawing.bind(this));
51
+
46
52
  if(this.table.options.groupBy){
47
53
  if(this.table.options.groupUpdateOnCellEdit){
48
54
  this.subscribe("cell-value-updated", this.cellUpdated.bind(this));
@@ -69,6 +75,14 @@ class GroupRows extends Module{
69
75
  }
70
76
  }
71
77
 
78
+ _blockRedrawing(){
79
+ this.blockRedraw = true;
80
+ }
81
+
82
+ _restore_redrawing(){
83
+ this.blockRedraw = false;
84
+ }
85
+
72
86
  configureGroupSetup(){
73
87
  if(this.table.options.groupBy){
74
88
  var groupBy = this.table.options.groupBy,
@@ -555,13 +569,15 @@ class GroupRows extends Module{
555
569
 
556
570
  updateGroupRows(force){
557
571
  var output = [];
558
-
559
- this.groupList.forEach((group) => {
560
- output = output.concat(group.getHeadersAndRows());
561
- });
562
-
563
- if(force){
564
- this.refreshData(true, this.displayHandler);
572
+
573
+ if(!this.blockRedraw){
574
+ this.groupList.forEach((group) => {
575
+ output = output.concat(group.getHeadersAndRows());
576
+ });
577
+
578
+ if(force){
579
+ this.refreshData(true);
580
+ }
565
581
  }
566
582
 
567
583
  return output;
@@ -41,15 +41,6 @@ class Localize extends Module{
41
41
  this.langList.default.headerFilters.default = placeholder;
42
42
  }
43
43
 
44
- //set header filter placeholder by column
45
- setHeaderFilterColumnPlaceholder(column, placeholder){
46
- this.langList.default.headerFilters.columns[column] = placeholder;
47
-
48
- if(this.lang && !this.lang.headerFilters.columns[column]){
49
- this.lang.headerFilters.columns[column] = placeholder;
50
- }
51
- }
52
-
53
44
  //setup a lang description object
54
45
  installLang(locale, lang){
55
46
  if(this.langList[locale]){
@@ -7,6 +7,8 @@ class Print extends Module{
7
7
 
8
8
  this.element = false;
9
9
  this.manualBlock = false;
10
+ this.beforeprintEventHandler = null;
11
+ this.afterprintEventHandler = null;
10
12
 
11
13
  this.registerTableOption("printAsHtml", false); //enable print as html
12
14
  this.registerTableOption("printFormatter", false); //printing page formatter
@@ -22,13 +24,24 @@ class Print extends Module{
22
24
 
23
25
  initialize(){
24
26
  if(this.table.options.printAsHtml){
25
- window.addEventListener("beforeprint", this.replaceTable.bind(this));
26
- window.addEventListener("afterprint", this.cleanup.bind(this));
27
+ this.beforeprintEventHandler = this.replaceTable.bind(this);
28
+ this.afterprintEventHandler = this.cleanup.bind(this);
29
+
30
+ window.addEventListener("beforeprint", this.beforeprintEventHandler );
31
+ window.addEventListener("afterprint", this.afterprintEventHandler);
32
+ this.subscribe("table-destroy", this.destroy.bind(this));
27
33
  }
28
34
 
29
35
  this.registerTableFunction("print", this.printFullscreen.bind(this));
30
36
  }
31
37
 
38
+ destroy(){
39
+ if(this.table.options.printAsHtml){
40
+ window.removeEventListener( "beforeprint", this.beforeprintEventHandler );
41
+ window.removeEventListener( "afterprint", this.afterprintEventHandler );
42
+ }
43
+ }
44
+
32
45
  ///////////////////////////////////
33
46
  ///////// Table Functions /////////
34
47
  ///////////////////////////////////
@@ -79,7 +79,7 @@ class SelectRow extends Module{
79
79
  row.modules.select = {selected:false};
80
80
 
81
81
  //set row selection class
82
- if(self.table.options.selectableCheck.call(this.table, row.getComponent())){
82
+ if(self.checkRowSelectability(row)){
83
83
  element.classList.add("tabulator-selectable");
84
84
  element.classList.remove("tabulator-unselectable");
85
85
 
@@ -190,10 +190,18 @@ class SelectRow extends Module{
190
190
  this.lastClickedRow = row;
191
191
  }
192
192
  }
193
+
194
+ checkRowSelectability(row){
195
+ if(row.type === "row"){
196
+ return this.table.options.selectableCheck.call(this.table, row.getComponent());
197
+ }
198
+
199
+ return false;
200
+ }
193
201
 
194
202
  //toggle row selection
195
203
  toggleRow(row){
196
- if(this.table.options.selectableCheck.call(this.table, row.getComponent())){
204
+ if(this.checkRowSelectability(row)){
197
205
  if(row.modules.select && row.modules.select.selected){
198
206
  this._deselectRow(row);
199
207
  }else{
@@ -412,6 +412,7 @@ $footerActiveColor:#d00 !default; //footer bottom active text color
412
412
  box-sizing:border-box;
413
413
  display: flex;
414
414
  align-items:center;
415
+ justify-content: center;
415
416
 
416
417
  &[tabulator-render-mode="virtual"]{
417
418
  min-height:100%;