tabulator-tables 5.2.7 → 5.3.0

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 (214) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.js +28 -0
  3. package/.github/workflows/bad-files-check.yml +39 -0
  4. package/.github/workflows/lint-and-test.yml +31 -0
  5. package/README.md +3 -3
  6. package/bower.json +1 -1
  7. package/build/Bundler.js +77 -77
  8. package/dist/css/tabulator.css +12 -7
  9. package/dist/css/tabulator.css.map +1 -1
  10. package/dist/css/tabulator.min.css +1 -1
  11. package/dist/css/tabulator.min.css.map +1 -1
  12. package/dist/css/tabulator_bootstrap3.css +12 -7
  13. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  14. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  15. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  16. package/dist/css/tabulator_bootstrap4.css +12 -7
  17. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  18. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  19. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  20. package/dist/css/tabulator_bootstrap5.css +12 -7
  21. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  22. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  23. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  24. package/dist/css/tabulator_bulma.css +12 -7
  25. package/dist/css/tabulator_bulma.css.map +1 -1
  26. package/dist/css/tabulator_bulma.min.css +1 -1
  27. package/dist/css/tabulator_bulma.min.css.map +1 -1
  28. package/dist/css/tabulator_materialize.css +12 -7
  29. package/dist/css/tabulator_materialize.css.map +1 -1
  30. package/dist/css/tabulator_materialize.min.css +1 -1
  31. package/dist/css/tabulator_materialize.min.css.map +1 -1
  32. package/dist/css/tabulator_midnight.css +12 -7
  33. package/dist/css/tabulator_midnight.css.map +1 -1
  34. package/dist/css/tabulator_midnight.min.css +1 -1
  35. package/dist/css/tabulator_midnight.min.css.map +1 -1
  36. package/dist/css/tabulator_modern.css +12 -7
  37. package/dist/css/tabulator_modern.css.map +1 -1
  38. package/dist/css/tabulator_modern.min.css +1 -1
  39. package/dist/css/tabulator_modern.min.css.map +1 -1
  40. package/dist/css/tabulator_semanticui.css +12 -7
  41. package/dist/css/tabulator_semanticui.css.map +1 -1
  42. package/dist/css/tabulator_semanticui.min.css +1 -1
  43. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  44. package/dist/css/tabulator_simple.css +12 -7
  45. package/dist/css/tabulator_simple.css.map +1 -1
  46. package/dist/css/tabulator_simple.min.css +1 -1
  47. package/dist/css/tabulator_simple.min.css.map +1 -1
  48. package/dist/css/tabulator_site.css +12 -7
  49. package/dist/css/tabulator_site.css.map +1 -1
  50. package/dist/css/tabulator_site.min.css +1 -1
  51. package/dist/css/tabulator_site.min.css.map +1 -1
  52. package/dist/js/jquery_wrapper.js +37 -37
  53. package/dist/js/tabulator.js +1388 -683
  54. package/dist/js/tabulator.js.map +1 -1
  55. package/dist/js/tabulator.min.js +2 -2
  56. package/dist/js/tabulator.min.js.map +1 -1
  57. package/dist/js/tabulator_esm.js +4135 -3470
  58. package/dist/js/tabulator_esm.js.map +1 -1
  59. package/dist/js/tabulator_esm.min.js +2 -2
  60. package/dist/js/tabulator_esm.min.js.map +1 -1
  61. package/package.json +4 -1
  62. package/src/js/builds/jquery_wrapper.js +37 -37
  63. package/src/js/core/ColumnManager.js +259 -231
  64. package/src/js/core/CoreFeature.js +16 -2
  65. package/src/js/core/FooterManager.js +10 -10
  66. package/src/js/core/Module.js +8 -8
  67. package/src/js/core/RowManager.js +79 -88
  68. package/src/js/core/Tabulator.js +86 -72
  69. package/src/js/core/TabulatorFull.js +1 -1
  70. package/src/js/core/cell/Cell.js +15 -16
  71. package/src/js/core/cell/CellComponent.js +2 -2
  72. package/src/js/core/column/Column.js +55 -66
  73. package/src/js/core/column/ColumnComponent.js +4 -4
  74. package/src/js/core/column/defaults/options.js +1 -1
  75. package/src/js/core/defaults/options.js +4 -2
  76. package/src/js/core/rendering/Renderer.js +19 -19
  77. package/src/js/core/rendering/renderers/BasicHorizontal.js +1 -2
  78. package/src/js/core/rendering/renderers/BasicVertical.js +1 -1
  79. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +42 -58
  80. package/src/js/core/rendering/renderers/VirtualDomVertical.js +31 -22
  81. package/src/js/core/row/Row.js +32 -8
  82. package/src/js/core/row/RowComponent.js +8 -4
  83. package/src/js/core/tools/Alert.js +44 -45
  84. package/src/js/core/tools/ComponentFunctionBinder.js +4 -2
  85. package/src/js/core/tools/DataLoader.js +3 -3
  86. package/src/js/core/tools/DeprecationAdvisor.js +47 -0
  87. package/src/js/core/tools/ExternalEventBus.js +5 -5
  88. package/src/js/core/tools/InteractionMonitor.js +31 -32
  89. package/src/js/core/tools/InternalEventBus.js +5 -5
  90. package/src/js/core/tools/ModuleBinder.js +6 -6
  91. package/src/js/core/tools/OptionsList.js +4 -4
  92. package/src/js/core/tools/Popup.js +211 -202
  93. package/src/js/modules/Accessor/Accessor.js +16 -16
  94. package/src/js/modules/Accessor/defaults/accessors.js +1 -1
  95. package/src/js/modules/Ajax/Ajax.js +7 -7
  96. package/src/js/modules/Ajax/defaults/loaderPromise.js +19 -19
  97. package/src/js/modules/Ajax/defaults/urlGenerator.js +1 -1
  98. package/src/js/modules/Clipboard/Clipboard.js +23 -23
  99. package/src/js/modules/Clipboard/defaults/pasteParsers.js +0 -2
  100. package/src/js/modules/ColumnCalcs/CalcComponent.js +2 -2
  101. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +54 -50
  102. package/src/js/modules/ColumnCalcs/defaults/calculations.js +1 -1
  103. package/src/js/modules/DataTree/DataTree.js +19 -14
  104. package/src/js/modules/Download/Download.js +15 -8
  105. package/src/js/modules/Download/defaults/downloaders/csv.js +28 -28
  106. package/src/js/modules/Download/defaults/downloaders/html.js +2 -2
  107. package/src/js/modules/Download/defaults/downloaders/json.js +14 -14
  108. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +1 -1
  109. package/src/js/modules/Download/defaults/downloaders/pdf.js +17 -19
  110. package/src/js/modules/Download/defaults/downloaders/xlsx.js +2 -2
  111. package/src/js/modules/Edit/Edit.js +219 -201
  112. package/src/js/modules/Edit/List.js +1026 -1006
  113. package/src/js/modules/Edit/defaults/editors/autocomplete.js +3 -3
  114. package/src/js/modules/Edit/defaults/editors/date.js +110 -0
  115. package/src/js/modules/Edit/defaults/editors/datetime.js +97 -0
  116. package/src/js/modules/Edit/defaults/editors/input.js +7 -7
  117. package/src/js/modules/Edit/defaults/editors/list.js +2 -2
  118. package/src/js/modules/Edit/defaults/editors/number.js +12 -12
  119. package/src/js/modules/Edit/defaults/editors/progress.js +11 -11
  120. package/src/js/modules/Edit/defaults/editors/range.js +5 -5
  121. package/src/js/modules/Edit/defaults/editors/select.js +3 -3
  122. package/src/js/modules/Edit/defaults/editors/star.js +9 -9
  123. package/src/js/modules/Edit/defaults/editors/textarea.js +97 -92
  124. package/src/js/modules/Edit/defaults/editors/tickCross.js +1 -3
  125. package/src/js/modules/Edit/defaults/editors/time.js +98 -0
  126. package/src/js/modules/Edit/defaults/editors.js +8 -2
  127. package/src/js/modules/Edit/inputMask.js +19 -26
  128. package/src/js/modules/Export/Export.js +69 -65
  129. package/src/js/modules/Filter/Filter.js +85 -95
  130. package/src/js/modules/Format/Format.js +24 -26
  131. package/src/js/modules/Format/defaults/formatters/buttonCross.js +1 -1
  132. package/src/js/modules/Format/defaults/formatters/buttonTick.js +1 -1
  133. package/src/js/modules/Format/defaults/formatters/color.js +1 -1
  134. package/src/js/modules/Format/defaults/formatters/datetime.js +7 -7
  135. package/src/js/modules/Format/defaults/formatters/datetimediff.js +7 -7
  136. package/src/js/modules/Format/defaults/formatters/handle.js +1 -1
  137. package/src/js/modules/Format/defaults/formatters/html.js +1 -1
  138. package/src/js/modules/Format/defaults/formatters/image.js +9 -9
  139. package/src/js/modules/Format/defaults/formatters/link.js +10 -10
  140. package/src/js/modules/Format/defaults/formatters/lookup.js +1 -1
  141. package/src/js/modules/Format/defaults/formatters/money.js +1 -1
  142. package/src/js/modules/Format/defaults/formatters/plaintext.js +1 -1
  143. package/src/js/modules/Format/defaults/formatters/progress.js +41 -42
  144. package/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +3 -3
  145. package/src/js/modules/Format/defaults/formatters/rowSelection.js +1 -1
  146. package/src/js/modules/Format/defaults/formatters/rownum.js +9 -2
  147. package/src/js/modules/Format/defaults/formatters/star.js +1 -1
  148. package/src/js/modules/Format/defaults/formatters/textarea.js +1 -1
  149. package/src/js/modules/Format/defaults/formatters/tickCross.js +1 -1
  150. package/src/js/modules/Format/defaults/formatters/traffic.js +14 -14
  151. package/src/js/modules/FrozenColumns/FrozenColumns.js +6 -8
  152. package/src/js/modules/FrozenRows/FrozenRows.js +37 -7
  153. package/src/js/modules/GroupRows/Group.js +3 -3
  154. package/src/js/modules/GroupRows/GroupComponent.js +2 -2
  155. package/src/js/modules/GroupRows/GroupRows.js +12 -11
  156. package/src/js/modules/History/History.js +2 -2
  157. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +3 -6
  158. package/src/js/modules/Import/Import.js +158 -159
  159. package/src/js/modules/Import/defaults/importers/array.js +5 -0
  160. package/src/js/modules/Import/defaults/importers/csv.js +49 -49
  161. package/src/js/modules/Import/defaults/importers/json.js +6 -6
  162. package/src/js/modules/Import/defaults/importers.js +2 -0
  163. package/src/js/modules/Interaction/Interaction.js +39 -40
  164. package/src/js/modules/Keybindings/Keybindings.js +14 -14
  165. package/src/js/modules/Keybindings/defaults/actions.js +1 -2
  166. package/src/js/modules/Layout/Layout.js +4 -5
  167. package/src/js/modules/Layout/defaults/modes/fitColumns.js +9 -10
  168. package/src/js/modules/Layout/defaults/modes/fitData.js +6 -4
  169. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +2 -2
  170. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +2 -2
  171. package/src/js/modules/Localize/Localize.js +7 -7
  172. package/src/js/modules/Menu/Menu.js +8 -11
  173. package/src/js/modules/MoveColumns/MoveColumns.js +3 -6
  174. package/src/js/modules/MoveRows/MoveRows.js +30 -36
  175. package/src/js/modules/Mutator/Mutator.js +9 -9
  176. package/src/js/modules/Page/Page.js +73 -80
  177. package/src/js/modules/Page/defaults/pageCounters/pages.js +2 -2
  178. package/src/js/modules/Page/defaults/pageCounters/rows.js +1 -1
  179. package/src/js/modules/Persistence/Persistence.js +40 -44
  180. package/src/js/modules/Persistence/defaults/readers.js +1 -1
  181. package/src/js/modules/Popup/Popup.js +4 -5
  182. package/src/js/modules/Print/Print.js +2 -2
  183. package/src/js/modules/ReactiveData/ReactiveData.js +178 -115
  184. package/src/js/modules/ResizeColumns/ResizeColumns.js +3 -3
  185. package/src/js/modules/ResizeRows/ResizeRows.js +1 -1
  186. package/src/js/modules/ResizeTable/ResizeTable.js +77 -46
  187. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +0 -3
  188. package/src/js/modules/SelectRow/SelectRow.js +26 -28
  189. package/src/js/modules/Sort/Sort.js +110 -79
  190. package/src/js/modules/Sort/defaults/sorters/alphanum.js +1 -1
  191. package/src/js/modules/Sort/defaults/sorters/array.js +24 -28
  192. package/src/js/modules/Sort/defaults/sorters/boolean.js +1 -1
  193. package/src/js/modules/Sort/defaults/sorters/date.js +1 -1
  194. package/src/js/modules/Sort/defaults/sorters/datetime.js +13 -13
  195. package/src/js/modules/Sort/defaults/sorters/exists.js +1 -1
  196. package/src/js/modules/Sort/defaults/sorters/number.js +1 -1
  197. package/src/js/modules/Sort/defaults/sorters/string.js +7 -7
  198. package/src/js/modules/Sort/defaults/sorters/time.js +1 -1
  199. package/src/js/modules/Tooltip/Tooltip.js +5 -7
  200. package/src/js/modules/Validate/Validate.js +10 -13
  201. package/src/js/modules/Validate/defaults/validators.js +8 -3
  202. package/src/scss/tabulator.scss +28 -17
  203. package/src/scss/themes/bootstrap/functions4.scss +1 -1
  204. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +8 -8
  205. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +8 -8
  206. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +8 -8
  207. package/src/scss/themes/bulma/tabulator_bulma.scss +7 -7
  208. package/src/scss/themes/materialize/tabulator_materialize.scss +6 -6
  209. package/src/scss/themes/materialize/variables.scss +1 -1
  210. package/src/scss/themes/semanticui/tabulator_semanticui.scss +7 -7
  211. package/src/scss/themes/tabulator_midnight.scss +7 -7
  212. package/src/scss/themes/tabulator_modern.scss +14 -14
  213. package/src/scss/themes/tabulator_simple.scss +8 -8
  214. package/src/scss/themes/tabulator_site.scss +15 -15
@@ -0,0 +1,98 @@
1
+ //input element
2
+ export default function(cell, onRendered, success, cancel, editorParams){
3
+ var inputFormat = editorParams.format,
4
+ DT = inputFormat ? (window.DateTime || luxon.DateTime) : null,
5
+ newDatetime;
6
+
7
+ //create and style input
8
+ var cellValue = cell.getValue(),
9
+ input = document.createElement("input");
10
+
11
+ input.type = "time";
12
+ input.style.padding = "4px";
13
+ input.style.width = "100%";
14
+ input.style.boxSizing = "border-box";
15
+
16
+ if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){
17
+ for (let key in editorParams.elementAttributes){
18
+ if(key.charAt(0) == "+"){
19
+ key = key.slice(1);
20
+ input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
21
+ }else{
22
+ input.setAttribute(key, editorParams.elementAttributes[key]);
23
+ }
24
+ }
25
+ }
26
+
27
+ cellValue = typeof cellValue !== "undefined" ? cellValue : "";
28
+
29
+ if(inputFormat){
30
+ if(DT){
31
+ if(DT.isDateTime(cellValue)){
32
+ newDatetime = cellValue;
33
+ }else if(inputFormat === "iso"){
34
+ newDatetime = DT.fromISO(String(cellValue));
35
+ }else{
36
+ newDatetime = DT.fromFormat(String(cellValue), inputFormat);
37
+ }
38
+
39
+ cellValue = newDatetime.toFormat("hh:mm");
40
+
41
+ }else{
42
+ console.error("Editor Error - 'date' editor 'inputFormat' param is dependant on luxon.js");
43
+ }
44
+ }
45
+
46
+ input.value = cellValue;
47
+
48
+ onRendered(function(){
49
+ input.focus({preventScroll: true});
50
+ input.style.height = "100%";
51
+
52
+ if(editorParams.selectContents){
53
+ input.select();
54
+ }
55
+ });
56
+
57
+ function onChange(e){
58
+ var value = input.value;
59
+
60
+ if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){
61
+
62
+ if(value && inputFormat){
63
+ value = DT.fromFormat(String(value), "hh:mm").toFormat(inputFormat);
64
+ }
65
+
66
+ if(success(value)){
67
+ cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
68
+ }
69
+ }else{
70
+ cancel();
71
+ }
72
+ }
73
+
74
+ //submit new value on blur or change
75
+ input.addEventListener("change", onChange);
76
+ input.addEventListener("blur", onChange);
77
+
78
+ //submit new value on enter
79
+ input.addEventListener("keydown", function(e){
80
+ switch(e.keyCode){
81
+ // case 9:
82
+ case 13:
83
+ onChange(e);
84
+ break;
85
+
86
+ case 27:
87
+ cancel();
88
+ break;
89
+
90
+ case 35:
91
+ case 36:
92
+ e.stopPropagation();
93
+ break;
94
+ }
95
+ });
96
+
97
+ return input;
98
+ }
@@ -2,6 +2,9 @@ import input from './editors/input.js';
2
2
  import textarea from './editors/textarea.js';
3
3
  import number from './editors/number.js';
4
4
  import range from './editors/range.js';
5
+ import date from './editors/date.js';
6
+ import time from './editors/time.js';
7
+ import datetime from './editors/datetime.js';
5
8
  import select from './editors/select.js';
6
9
  import list from './editors/list.js';
7
10
  import autocomplete from './editors/autocomplete.js';
@@ -12,8 +15,11 @@ import tickCross from './editors/tickCross.js';
12
15
  export default {
13
16
  input:input,
14
17
  textarea:textarea,
15
- number:number,
16
- range:range,
18
+ number:number,
19
+ range:range,
20
+ date:date,
21
+ time:time,
22
+ datetime:datetime,
17
23
  select:select,
18
24
  list:list,
19
25
  autocomplete:autocomplete,
@@ -2,8 +2,7 @@ export default function maskInput(el, options){
2
2
  var mask = options.mask,
3
3
  maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A",
4
4
  maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9",
5
- maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*",
6
- success = false;
5
+ maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*";
7
6
 
8
7
  function fillSymbols(index){
9
8
  var symbol = mask[index];
@@ -21,42 +20,36 @@ export default function maskInput(el, options){
21
20
  if(index >= mask.length){
22
21
  e.preventDefault();
23
22
  e.stopPropagation();
24
- success = false;
25
23
  return false;
26
24
  }else{
27
25
  switch(mask[index]){
28
26
  case maskLetter:
29
- if(char.toUpperCase() == char.toLowerCase()){
30
- e.preventDefault();
31
- e.stopPropagation();
32
- success = false;
33
- return false;
34
- }
35
- break;
27
+ if(char.toUpperCase() == char.toLowerCase()){
28
+ e.preventDefault();
29
+ e.stopPropagation();
30
+ return false;
31
+ }
32
+ break;
36
33
 
37
34
  case maskNumber:
38
- if(isNaN(char)){
39
- e.preventDefault();
40
- e.stopPropagation();
41
- success = false;
42
- return false;
43
- }
44
- break;
35
+ if(isNaN(char)){
36
+ e.preventDefault();
37
+ e.stopPropagation();
38
+ return false;
39
+ }
40
+ break;
45
41
 
46
42
  case maskWildcard:
47
- break;
43
+ break;
48
44
 
49
45
  default:
50
- if(char !== mask[index]){
51
- e.preventDefault();
52
- e.stopPropagation();
53
- success = false;
54
- return false;
55
- }
46
+ if(char !== mask[index]){
47
+ e.preventDefault();
48
+ e.stopPropagation();
49
+ return false;
50
+ }
56
51
  }
57
52
  }
58
-
59
- success = true;
60
53
  }
61
54
 
62
55
  return;
@@ -12,7 +12,7 @@ class Export extends Module{
12
12
  this.cloneTableStyle = true;
13
13
  this.colVisProp = "";
14
14
 
15
- this.registerTableOption("htmlOutputConfig", false); //html outypu config
15
+ this.registerTableOption("htmlOutputConfig", false); //html output config
16
16
 
17
17
  this.registerColumnOption("htmlOutput");
18
18
  this.registerColumnOption("titleHtmlOutput");
@@ -42,10 +42,10 @@ class Export extends Module{
42
42
  return headers.concat(body);
43
43
  }
44
44
 
45
- genereateTable(config, style, range, colVisProp){
45
+ generateTable(config, style, range, colVisProp){
46
46
  var list = this.generateExportList(config, style, range, colVisProp);
47
47
 
48
- return this.genereateTableElement(list);
48
+ return this.generateTableElement(list);
49
49
  }
50
50
 
51
51
  rowLookup(range){
@@ -63,24 +63,24 @@ class Export extends Module{
63
63
  switch(range){
64
64
  case true:
65
65
  case "visible":
66
- rows = this.table.rowManager.getVisibleRows(false, true);
67
- break;
66
+ rows = this.table.rowManager.getVisibleRows(false, true);
67
+ break;
68
68
 
69
69
  case "all":
70
- rows = this.table.rowManager.rows;
71
- break;
70
+ rows = this.table.rowManager.rows;
71
+ break;
72
72
 
73
73
  case "selected":
74
- rows = this.table.modules.selectRow.selectedRows;
75
- break;
74
+ rows = this.table.modules.selectRow.selectedRows;
75
+ break;
76
76
 
77
77
  case "active":
78
78
  default:
79
- if(this.table.options.pagination){
80
- rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);
81
- }else{
82
- rows = this.table.rowManager.getDisplayRows();
83
- }
79
+ if(this.table.options.pagination){
80
+ rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);
81
+ }else{
82
+ rows = this.table.rowManager.getDisplayRows();
83
+ }
84
84
  }
85
85
  }
86
86
 
@@ -148,7 +148,13 @@ class Export extends Module{
148
148
  }
149
149
 
150
150
  columnVisCheck(column){
151
- return column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));
151
+ var visProp = column.definition[this.colVisProp];
152
+
153
+ if(typeof visProp === "function"){
154
+ visProp = visProp.call(this.table, column.getComponent());
155
+ }
156
+
157
+ return visProp !== false && (column.visible || (!column.visible && visProp));
152
158
  }
153
159
 
154
160
  headersToExportRows(columns){
@@ -192,7 +198,7 @@ class Export extends Module{
192
198
  }
193
199
  }
194
200
 
195
- //calculate maximum header debth
201
+ //calculate maximum header depth
196
202
  columns.forEach(function(column){
197
203
  if(column.depth > headerDepth){
198
204
  headerDepth = column.depth;
@@ -245,16 +251,13 @@ class Export extends Module{
245
251
  rows = rows.filter((row) => {
246
252
  switch(row.type){
247
253
  case "group":
248
- return this.config.rowGroups !== false;
249
- break;
254
+ return this.config.rowGroups !== false;
250
255
 
251
256
  case "calc":
252
- return this.config.columnCalcs !== false;
253
- break;
257
+ return this.config.columnCalcs !== false;
254
258
 
255
259
  case "row":
256
- return !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);
257
- break;
260
+ return !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);
258
261
  }
259
262
 
260
263
  return true;
@@ -267,20 +270,20 @@ class Export extends Module{
267
270
 
268
271
  switch(row.type){
269
272
  case "group":
270
- indent = row.level;
271
- exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));
272
- break;
273
+ indent = row.level;
274
+ exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));
275
+ break;
273
276
 
274
277
  case "calc" :
275
278
  case "row" :
276
- columns.forEach((col) => {
277
- exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));
278
- });
279
+ columns.forEach((col) => {
280
+ exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));
281
+ });
279
282
 
280
- if(this.table.options.dataTree && this.config.dataTree !== false){
281
- indent = row.modules.dataTree.index;
282
- }
283
- break;
283
+ if(this.table.options.dataTree && this.config.dataTree !== false){
284
+ indent = row.modules.dataTree.index;
285
+ }
286
+ break;
284
287
  }
285
288
 
286
289
  exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));
@@ -289,7 +292,7 @@ class Export extends Module{
289
292
  return exportRows;
290
293
  }
291
294
 
292
- genereateTableElement(list){
295
+ generateTableElement(list){
293
296
  var table = document.createElement("table"),
294
297
  headerEl = document.createElement("thead"),
295
298
  bodyEl = document.createElement("tbody"),
@@ -320,24 +323,27 @@ class Export extends Module{
320
323
  }
321
324
 
322
325
  list.forEach((row, i) => {
326
+ let rowEl;
327
+
323
328
  switch(row.type){
324
329
  case "header":
325
- headerEl.appendChild(this.genereateHeaderElement(row, setup, styles));
326
- break;
330
+ headerEl.appendChild(this.generateHeaderElement(row, setup, styles));
331
+ break;
327
332
 
328
333
  case "group":
329
- bodyEl.appendChild(this.genereateGroupElement(row, setup, styles));
330
- break;
334
+ bodyEl.appendChild(this.generateGroupElement(row, setup, styles));
335
+ break;
331
336
 
332
337
  case "calc":
333
- bodyEl.appendChild(this.genereateCalcElement(row, setup, styles));
334
- break;
338
+ bodyEl.appendChild(this.generateCalcElement(row, setup, styles));
339
+ break;
335
340
 
336
341
  case "row":
337
- let rowEl = this.genereateRowElement(row, setup, styles);
338
- this.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
339
- bodyEl.appendChild(rowEl);
340
- break;
342
+ rowEl = this.generateRowElement(row, setup, styles);
343
+
344
+ this.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
345
+ bodyEl.appendChild(rowEl);
346
+ break;
341
347
  }
342
348
  });
343
349
 
@@ -373,7 +379,7 @@ class Export extends Module{
373
379
  return styles;
374
380
  }
375
381
 
376
- genereateHeaderElement(row, setup, styles){
382
+ generateHeaderElement(row, setup, styles){
377
383
  var rowEl = document.createElement("tr");
378
384
 
379
385
  row.columns.forEach((column) => {
@@ -416,7 +422,7 @@ class Export extends Module{
416
422
  return rowEl;
417
423
  }
418
424
 
419
- genereateGroupElement(row, setup, styles){
425
+ generateGroupElement(row, setup, styles){
420
426
 
421
427
  var rowEl = document.createElement("tr"),
422
428
  cellEl = document.createElement("td"),
@@ -427,9 +433,7 @@ class Export extends Module{
427
433
  if(setup.groupHeader && setup.groupHeader[row.indent]){
428
434
  group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
429
435
  }else{
430
- if(setup.groupHeader === false){
431
- group.value = group.value;
432
- }else{
436
+ if(setup.groupHeader !== false){
433
437
  group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
434
438
  }
435
439
  }
@@ -452,8 +456,8 @@ class Export extends Module{
452
456
  return rowEl;
453
457
  }
454
458
 
455
- genereateCalcElement(row, setup, styles){
456
- var rowEl = this.genereateRowElement(row, setup, styles);
459
+ generateCalcElement(row, setup, styles){
460
+ var rowEl = this.generateRowElement(row, setup, styles);
457
461
 
458
462
  rowEl.classList.add("tabulator-print-table-calcs");
459
463
  this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
@@ -461,17 +465,18 @@ class Export extends Module{
461
465
  return rowEl;
462
466
  }
463
467
 
464
- genereateRowElement(row, setup, styles){
468
+ generateRowElement(row, setup, styles){
465
469
  var rowEl = document.createElement("tr");
466
470
 
467
471
  rowEl.classList.add("tabulator-print-table-row");
468
472
 
469
- row.columns.forEach((col) => {
473
+ row.columns.forEach((col, i) => {
470
474
  if(col){
471
475
  var cellEl = document.createElement("td"),
472
476
  column = col.component._column,
473
477
  index = this.table.columnManager.findColumnIndex(column),
474
- value = col.value;
478
+ value = col.value,
479
+ cellStyle;
475
480
 
476
481
  var cellWrapper = {
477
482
  modules:{},
@@ -510,15 +515,12 @@ class Export extends Module{
510
515
  }else{
511
516
  switch(typeof value){
512
517
  case "object":
513
- value = value !== null ? JSON.stringify(value) : "";
514
- break;
518
+ value = value !== null ? JSON.stringify(value) : "";
519
+ break;
515
520
 
516
521
  case "undefined":
517
- value = "";
518
- break;
519
-
520
- default:
521
- value = value;
522
+ value = "";
523
+ break;
522
524
  }
523
525
  }
524
526
 
@@ -528,8 +530,10 @@ class Export extends Module{
528
530
  cellEl.innerHTML = value;
529
531
  }
530
532
 
531
- if(styles.styleCells[index] || styles.firstCell){
532
- this.mapElementStyles(styles.styleCells[index] || styles.firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "text-align"]);
533
+ cellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;
534
+
535
+ if(cellStyle){
536
+ this.mapElementStyles(cellStyle, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "text-align"]);
533
537
 
534
538
  if(column.definition.align){
535
539
  cellEl.style.textAlign = column.definition.align;
@@ -562,10 +566,10 @@ class Export extends Module{
562
566
  return rowEl;
563
567
  }
564
568
 
565
- genereateHTMLTable(list){
569
+ generateHTMLTable(list){
566
570
  var holder = document.createElement("div");
567
571
 
568
- holder.appendChild(this.genereateTableElement(list));
572
+ holder.appendChild(this.generateTableElement(list));
569
573
 
570
574
  return holder.innerHTML;
571
575
  }
@@ -573,7 +577,7 @@ class Export extends Module{
573
577
  getHtml(visible, style, config, colVisProp){
574
578
  var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput");
575
579
 
576
- return this.genereateHTMLTable(list);
580
+ return this.generateHTMLTable(list);
577
581
  }
578
582
 
579
583
  mapElementStyles(from, to, props){