tabulator-tables 5.2.7 → 5.3.2

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 +1551 -793
  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 +4300 -3581
  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 +270 -232
  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 +139 -156
  68. package/src/js/core/Tabulator.js +88 -74
  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 +81 -68
  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 +41 -39
  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 +55 -51
  102. package/src/js/modules/ColumnCalcs/defaults/calculations.js +1 -1
  103. package/src/js/modules/DataTree/DataTree.js +24 -15
  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 +88 -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 +7 -7
  154. package/src/js/modules/GroupRows/GroupComponent.js +2 -2
  155. package/src/js/modules/GroupRows/GroupRows.js +34 -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 +42 -43
  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 +13 -16
  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 +3 -5
  188. package/src/js/modules/SelectRow/SelectRow.js +26 -28
  189. package/src/js/modules/Sort/Sort.js +113 -85
  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
@@ -1,12 +1,12 @@
1
1
  import CellComponent from '../../../../core/cell/CellComponent.js';
2
2
 
3
- export default function(cell, formatterParams, onRendered){ //progress bar
3
+ export default function(cell, formatterParams = {}, onRendered){ //progress bar
4
4
  var value = this.sanitizeHTML(cell.getValue()) || 0,
5
5
  element = cell.getElement(),
6
- max = formatterParams && formatterParams.max ? formatterParams.max : 100,
7
- min = formatterParams && formatterParams.min ? formatterParams.min : 0,
8
- legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center",
9
- percent, percentValue, color, legend, legendColor, top, left, right, bottom;
6
+ max = formatterParams.max ? formatterParams.max : 100,
7
+ min = formatterParams.min ? formatterParams.min : 0,
8
+ legendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : "center",
9
+ percent, percentValue, color, legend, legendColor;
10
10
 
11
11
  //make sure value is in range
12
12
  percentValue = parseFloat(value) <= max ? parseFloat(value) : max;
@@ -19,60 +19,60 @@ export default function(cell, formatterParams, onRendered){ //progress bar
19
19
  //set bar color
20
20
  switch(typeof formatterParams.color){
21
21
  case "string":
22
- color = formatterParams.color;
23
- break;
22
+ color = formatterParams.color;
23
+ break;
24
24
  case "function":
25
- color = formatterParams.color(value);
26
- break;
27
- case "object":
28
- if(Array.isArray(formatterParams.color)){
29
- var unit = 100 / formatterParams.color.length;
30
- var index = Math.floor(percentValue / unit);
31
-
32
- index = Math.min(index, formatterParams.color.length - 1);
33
- index = Math.max(index, 0);
34
- color = formatterParams.color[index];
25
+ color = formatterParams.color(value);
35
26
  break;
36
- }
27
+ case "object":
28
+ if(Array.isArray(formatterParams.color)){
29
+ let unit = 100 / formatterParams.color.length;
30
+ let index = Math.floor(percentValue / unit);
31
+
32
+ index = Math.min(index, formatterParams.color.length - 1);
33
+ index = Math.max(index, 0);
34
+ color = formatterParams.color[index];
35
+ break;
36
+ }
37
37
  default:
38
- color = "#2DC214";
38
+ color = "#2DC214";
39
39
  }
40
40
 
41
41
  //generate legend
42
42
  switch(typeof formatterParams.legend){
43
43
  case "string":
44
- legend = formatterParams.legend;
45
- break;
44
+ legend = formatterParams.legend;
45
+ break;
46
46
  case "function":
47
- legend = formatterParams.legend(value);
48
- break;
47
+ legend = formatterParams.legend(value);
48
+ break;
49
49
  case "boolean":
50
- legend = value;
51
- break;
50
+ legend = value;
51
+ break;
52
52
  default:
53
- legend = false;
53
+ legend = false;
54
54
  }
55
55
 
56
56
  //set legend color
57
57
  switch(typeof formatterParams.legendColor){
58
58
  case "string":
59
- legendColor = formatterParams.legendColor;
60
- break;
59
+ legendColor = formatterParams.legendColor;
60
+ break;
61
61
  case "function":
62
- legendColor = formatterParams.legendColor(value);
63
- break;
62
+ legendColor = formatterParams.legendColor(value);
63
+ break;
64
64
  case "object":
65
- if(Array.isArray(formatterParams.legendColor)){
66
- var unit = 100 / formatterParams.legendColor.length;
67
- var index = Math.floor(percentValue / unit);
68
-
69
- index = Math.min(index, formatterParams.legendColor.length - 1);
70
- index = Math.max(index, 0);
71
- legendColor = formatterParams.legendColor[index];
72
- }
73
- break;
65
+ if(Array.isArray(formatterParams.legendColor)){
66
+ let unit = 100 / formatterParams.legendColor.length;
67
+ let index = Math.floor(percentValue / unit);
68
+
69
+ index = Math.min(index, formatterParams.legendColor.length - 1);
70
+ index = Math.max(index, 0);
71
+ legendColor = formatterParams.legendColor[index];
72
+ }
73
+ break;
74
74
  default:
75
- legendColor = "#000";
75
+ legendColor = "#000";
76
76
  }
77
77
 
78
78
  element.style.minWidth = "30px";
@@ -82,7 +82,6 @@ export default function(cell, formatterParams, onRendered){ //progress bar
82
82
 
83
83
  var barEl = document.createElement("div");
84
84
  barEl.style.display = "inline-block";
85
- barEl.style.position = "absolute";
86
85
  barEl.style.width = percentValue + "%";
87
86
  barEl.style.backgroundColor = color;
88
87
  barEl.style.height = "100%";
@@ -131,4 +130,4 @@ export default function(cell, formatterParams, onRendered){ //progress bar
131
130
  });
132
131
 
133
132
  return "";
134
- };
133
+ }
@@ -1,6 +1,5 @@
1
1
  export default function(cell, formatterParams, onRendered){
2
- var open = false,
3
- el = document.createElement("div"),
2
+ var el = document.createElement("div"),
4
3
  config = cell.getRow()._row.modules.responsiveLayout;
5
4
 
6
5
  el.classList.add("tabulator-responsive-collapse-toggle");
@@ -28,9 +27,10 @@ export default function(cell, formatterParams, onRendered){
28
27
  el.addEventListener("click", function(e){
29
28
  e.stopImmediatePropagation();
30
29
  toggleList(!config.open);
30
+ cell.getTable().rowManager.adjustTableSize();
31
31
  });
32
32
 
33
33
  toggleList(config.open);
34
34
 
35
35
  return el;
36
- };
36
+ }
@@ -57,4 +57,4 @@ export default function(cell, formatterParams, onRendered){
57
57
  }
58
58
 
59
59
  return checkbox;
60
- };
60
+ }
@@ -1,3 +1,10 @@
1
1
  export default function(cell, formatterParams, onRendered){
2
- return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1 || "";
3
- };
2
+ var content = document.createElement("span");
3
+ var row = cell.getRow();
4
+
5
+ row.watchPosition((position) => {
6
+ content.innerText = position;
7
+ });
8
+
9
+ return content;
10
+ }
@@ -35,4 +35,4 @@ export default function(cell, formatterParams, onRendered){
35
35
  element.setAttribute("aria-label", value);
36
36
 
37
37
  return stars;
38
- };
38
+ }
@@ -1,4 +1,4 @@
1
1
  export default function(cell, formatterParams, onRendered){
2
2
  cell.getElement().style.whiteSpace = "pre-wrap";
3
3
  return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
4
- };
4
+ }
@@ -19,4 +19,4 @@ export default function(cell, formatterParams, onRendered){
19
19
  return cross || "";
20
20
  }
21
21
  }
22
- };
22
+ }
@@ -24,24 +24,24 @@ export default function(cell, formatterParams, onRendered){
24
24
  //set color
25
25
  switch(typeof colors){
26
26
  case "string":
27
- color = colors;
28
- break;
27
+ color = colors;
28
+ break;
29
29
  case "function":
30
- color = colors(value);
31
- break;
32
- case "object":
33
- if(Array.isArray(colors)){
34
- var unit = 100 / colors.length;
35
- var index = Math.floor(percentValue / unit);
36
-
37
- index = Math.min(index, colors.length - 1);
38
- index = Math.max(index, 0);
39
- color = colors[index];
30
+ color = colors(value);
40
31
  break;
41
- }
32
+ case "object":
33
+ if(Array.isArray(colors)){
34
+ var unit = 100 / colors.length;
35
+ var index = Math.floor(percentValue / unit);
36
+
37
+ index = Math.min(index, colors.length - 1);
38
+ index = Math.max(index, 0);
39
+ color = colors[index];
40
+ break;
41
+ }
42
42
  }
43
43
 
44
44
  el.style.backgroundColor = color;
45
45
 
46
46
  return el;
47
- };
47
+ }
@@ -58,7 +58,7 @@ class FrozenColumns extends Module{
58
58
  }
59
59
 
60
60
  layoutCell(cell){
61
- this.layoutElement(cell.element, cell.column)
61
+ this.layoutElement(cell.element, cell.column);
62
62
  }
63
63
 
64
64
  reinitializeColumns(){
@@ -107,9 +107,7 @@ class FrozenColumns extends Module{
107
107
  }
108
108
 
109
109
  //quick layout to smooth horizontal scrolling
110
- scrollHorizontal(){
111
- var rows;
112
-
110
+ scrollHorizontal(){
113
111
  if(this.active){
114
112
  this.calcMargins(true);
115
113
 
@@ -146,7 +144,7 @@ class FrozenColumns extends Module{
146
144
  }
147
145
 
148
146
  if(this.table.modExists("groupRows")){
149
- this.layoutGroupCalcs(this.table.modules.groupRows.getGroups())
147
+ this.layoutGroupCalcs(this.table.modules.groupRows.getGroups());
150
148
  }
151
149
  }
152
150
  }
@@ -162,7 +160,7 @@ class FrozenColumns extends Module{
162
160
  }
163
161
 
164
162
  if(group.groupList && group.groupList.length){
165
- this.layoutGroupCalcs(group.groupList && group.groupList);
163
+ this.layoutGroupCalcs(group.groupList);
166
164
  }
167
165
  });
168
166
  }
@@ -262,9 +260,9 @@ class FrozenColumns extends Module{
262
260
  }
263
261
 
264
262
  reinitializeRows(){
265
- var visibleRows = this.table.rowManager.getVisibleRows();
263
+ var visibleRows = this.table.rowManager.getVisibleRows(true);
266
264
  var otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));
267
-
265
+
268
266
  otherRows.forEach((row) =>{
269
267
  row.deinitialize();
270
268
  });
@@ -12,6 +12,10 @@ class FrozenRows extends Module{
12
12
  this.registerComponentFunction("row", "freeze", this.freezeRow.bind(this));
13
13
  this.registerComponentFunction("row", "unfreeze", this.unfreezeRow.bind(this));
14
14
  this.registerComponentFunction("row", "isFrozen", this.isRowFrozen.bind(this));
15
+
16
+ //register table options
17
+ this.registerTableOption("frozenRowsField", "id"); //field to choose frozen rows by
18
+ this.registerTableOption("frozenRows", false); //holder for frozen row identifiers
15
19
  }
16
20
 
17
21
  initialize(){
@@ -26,6 +30,36 @@ class FrozenRows extends Module{
26
30
  this.subscribe("rows-visible", this.visibleRows.bind(this));
27
31
 
28
32
  this.registerDisplayHandler(this.getRows.bind(this), 10);
33
+
34
+ if(this.table.options.frozenRows){
35
+ this.subscribe("data-processed", this.initializeRows.bind(this));
36
+ this.subscribe("row-added", this.initializeRow.bind(this));
37
+ }
38
+ }
39
+
40
+ initializeRows(){
41
+ this.table.rowManager.getRows().forEach((row) => {
42
+ this.initializeRow(row);
43
+ });
44
+ }
45
+
46
+ initializeRow(row){
47
+ var frozenRows = this.table.options.frozenRows,
48
+ rowType = typeof frozenRows;
49
+
50
+ if(rowType === "number"){
51
+ if(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){
52
+ this.freezeRow(row);
53
+ }
54
+ }else if(rowType === "function"){
55
+ if(frozenRows.call(this.table, row.getComponent())){
56
+ this.freezeRow(row);
57
+ }
58
+ }else if(Array.isArray(frozenRows)){
59
+ if(frozenRows.includes(row.data[this.options("frozenRowsField")])){
60
+ this.freezeRow(row);
61
+ }
62
+ }
29
63
  }
30
64
 
31
65
  isRowFrozen(row){
@@ -47,9 +81,7 @@ class FrozenRows extends Module{
47
81
 
48
82
  //filter frozen rows out of display data
49
83
  getRows(rows){
50
- var self = this,
51
- frozen = [],
52
- output = rows.slice(0);
84
+ var output = rows.slice(0);
53
85
 
54
86
  this.rows.forEach(function(row){
55
87
  var index = output.indexOf(row);
@@ -72,7 +104,7 @@ class FrozenRows extends Module{
72
104
 
73
105
  this.rows.push(row);
74
106
 
75
- this.refreshData(false, "display")
107
+ this.refreshData(false, "display");
76
108
 
77
109
  this.styleRows();
78
110
 
@@ -82,8 +114,6 @@ class FrozenRows extends Module{
82
114
  }
83
115
 
84
116
  unfreezeRow(row){
85
- var index = this.rows.indexOf(row);
86
-
87
117
  if(row.modules.frozen){
88
118
 
89
119
  row.modules.frozen = false;
@@ -92,7 +122,7 @@ class FrozenRows extends Module{
92
122
 
93
123
  this.table.rowManager.adjustTableSize();
94
124
 
95
- this.refreshData(false, "display")
125
+ this.refreshData(false, "display");
96
126
 
97
127
  if(this.rows.length){
98
128
  this.styleRows();
@@ -178,7 +178,7 @@ class Group{
178
178
 
179
179
  getRowIndex(row){}
180
180
 
181
- //update row data to match grouping contraints
181
+ //update row data to match grouping constraints
182
182
  conformRowData(data){
183
183
  if(this.field){
184
184
  data[this.field] = this.key;
@@ -358,7 +358,7 @@ class Group{
358
358
  hide(){
359
359
  this.visible = false;
360
360
 
361
- if(this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination){
361
+ if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){
362
362
 
363
363
  this.element.classList.remove("tabulator-group-visible");
364
364
 
@@ -381,7 +381,7 @@ class Group{
381
381
 
382
382
  this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
383
383
 
384
- this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
384
+ this.groupManager.checkBasicModeGroupHeaderWidth();
385
385
 
386
386
  }else{
387
387
  this.groupManager.updateGroupRows(true);
@@ -393,7 +393,7 @@ class Group{
393
393
  show(){
394
394
  this.visible = true;
395
395
 
396
- if(this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination){
396
+ if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){
397
397
 
398
398
  this.element.classList.add("tabulator-group-visible");
399
399
 
@@ -422,7 +422,7 @@ class Group{
422
422
 
423
423
  this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());
424
424
 
425
- this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();
425
+ this.groupManager.checkBasicModeGroupHeaderWidth();
426
426
  }else{
427
427
  this.groupManager.updateGroupRows(true);
428
428
  }
@@ -474,11 +474,11 @@ class Group{
474
474
  return output;
475
475
  }
476
476
 
477
- getRows(compoment){
477
+ getRows(component){
478
478
  var output = [];
479
479
 
480
480
  this.rows.forEach(function(row){
481
- output.push(compoment ? row.getComponent() : row);
481
+ output.push(component ? row.getComponent() : row);
482
482
  });
483
483
 
484
484
  return output;
@@ -9,10 +9,10 @@ class GroupComponent {
9
9
  if (typeof target[name] !== "undefined") {
10
10
  return target[name];
11
11
  }else{
12
- return target._group.groupManager.table.componentFunctionBinder.handle("row", target._group, name)
12
+ return target._group.groupManager.table.componentFunctionBinder.handle("row", target._group, name);
13
13
  }
14
14
  }
15
- })
15
+ });
16
16
  }
17
17
 
18
18
  getKey(){
@@ -1,6 +1,5 @@
1
1
  import Module from '../../core/Module.js';
2
2
 
3
- import GroupComponent from './GroupComponent.js';
4
3
  import Group from './Group.js';
5
4
 
6
5
  class GroupRows extends Module{
@@ -46,7 +45,6 @@ class GroupRows extends Module{
46
45
  //initialize group configuration
47
46
  initialize(){
48
47
  if(this.table.options.groupBy){
49
-
50
48
  if(this.table.options.groupUpdateOnCellEdit){
51
49
  this.subscribe("cell-value-updated", this.cellUpdated.bind(this));
52
50
  this.subscribe("row-data-changed", this.reassignRowToGroup.bind(this), 0);
@@ -95,7 +93,7 @@ class GroupRows extends Module{
95
93
 
96
94
  this.groupIDLookups = [];
97
95
 
98
- if(Array.isArray(groupBy) || groupBy){
96
+ if(Array.isArray(groupBy)){
99
97
  if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both"){
100
98
  this.table.modules.columnCalcs.removeCalcs();
101
99
  }
@@ -161,6 +159,9 @@ class GroupRows extends Module{
161
159
  if(groupHeader){
162
160
  this.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];
163
161
  }
162
+ }else{
163
+ this.groupList = [];
164
+ this.groups = {};
164
165
  }
165
166
  }
166
167
 
@@ -225,12 +226,13 @@ class GroupRows extends Module{
225
226
 
226
227
  setGroupBy(groups){
227
228
  this.table.options.groupBy = groups;
229
+
228
230
  if(!this.initialized){
229
231
  this.initialize();
230
- }else{
231
- this.configureGroupSetup();
232
232
  }
233
233
 
234
+ this.configureGroupSetup();
235
+
234
236
  this.refreshData();
235
237
 
236
238
  this.trackChanges();
@@ -277,7 +279,7 @@ class GroupRows extends Module{
277
279
  // get grouped table data in the same format as getData()
278
280
  userGetGroupedData(){
279
281
  return this.table.options.groupBy ?
280
- this.getGroupedData() : this.getData()
282
+ this.getGroupedData() : this.getData();
281
283
  }
282
284
 
283
285
 
@@ -425,7 +427,7 @@ class GroupRows extends Module{
425
427
  }
426
428
  });
427
429
 
428
- return groupListData
430
+ return groupListData;
429
431
  }
430
432
 
431
433
  getGroupedData(){
@@ -515,10 +517,10 @@ class GroupRows extends Module{
515
517
  var oldRowGroup = row.modules.group,
516
518
  oldGroupPath = oldRowGroup.getPath(),
517
519
  newGroupPath = this.getExpectedPath(row),
518
- samePath = true;
520
+ samePath;
519
521
 
520
522
  // figure out if new group path is the same as old group path
521
- var samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {
523
+ samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {
522
524
  return element === newGroupPath[index];
523
525
  });
524
526
 
@@ -542,8 +544,7 @@ class GroupRows extends Module{
542
544
  }
543
545
 
544
546
  updateGroupRows(force){
545
- var output = [],
546
- oldRowCount;
547
+ var output = [];
547
548
 
548
549
  this.groupList.forEach((group) => {
549
550
  output = output.concat(group.getHeadersAndRows());
@@ -582,6 +583,28 @@ class GroupRows extends Module{
582
583
  }
583
584
  }
584
585
  }
586
+
587
+ checkBasicModeGroupHeaderWidth(){
588
+ var element = this.table.rowManager.tableElement,
589
+ onlyGroupHeaders = true;
590
+
591
+ this.table.rowManager.getDisplayRows().forEach((row, index) =>{
592
+ this.table.rowManager.styleRow(row, index);
593
+ element.appendChild(row.getElement());
594
+ row.initialize(true);
595
+
596
+ if(row.type !== "group"){
597
+ onlyGroupHeaders = false;
598
+ }
599
+ });
600
+
601
+ if(onlyGroupHeaders){
602
+ element.style.minWidth = this.table.columnManager.getWidth() + "px";
603
+ }else{
604
+ element.style.minWidth = "";
605
+ }
606
+ }
607
+
585
608
  }
586
609
 
587
610
  GroupRows.moduleName = "groupRows";
@@ -34,7 +34,7 @@ class History extends Module{
34
34
  }
35
35
 
36
36
  rowMoved(from, to, after){
37
- this.action("rowMove", from, {posFrom:this.table.rowManager.getRowPosition(from), posTo:this.table.rowManager.getRowPosition(to), to:to, after:after});
37
+ this.action("rowMove", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after});
38
38
  }
39
39
 
40
40
  rowAdded(row, data, pos, index){
@@ -46,7 +46,7 @@ class History extends Module{
46
46
 
47
47
  if(this.table.options.groupBy){
48
48
 
49
- rows = row.getComponent().getGroup().rows
49
+ rows = row.getComponent().getGroup()._getSelf().rows;
50
50
  index = rows.indexOf(row);
51
51
 
52
52
  if(index){
@@ -1,5 +1,4 @@
1
1
  import Module from '../../core/Module.js';
2
- import Column from '../../core/column/Column.js';
3
2
 
4
3
  class HtmlTableImport extends Module{
5
4
 
@@ -27,11 +26,9 @@ class HtmlTableImport extends Module{
27
26
  parseTable(){
28
27
  var element = this.table.originalElement,
29
28
  options = this.table.options,
30
- columns = options.columns,
31
29
  headers = element.getElementsByTagName("th"),
32
30
  rows = element.getElementsByTagName("tbody")[0],
33
- data = [],
34
- newTable;
31
+ data = [];
35
32
 
36
33
  this.hasIndex = false;
37
34
 
@@ -54,7 +51,7 @@ class HtmlTableImport extends Module{
54
51
  cells = row.getElementsByTagName("td"),
55
52
  item = {};
56
53
 
57
- //create index if the dont exist in table
54
+ //create index if the don't exist in table
58
55
  if(!this.hasIndex){
59
56
  item[options.index] = index;
60
57
  }
@@ -127,7 +124,7 @@ class HtmlTableImport extends Module{
127
124
  var header = headers[index],
128
125
  exists = false,
129
126
  col = this._findCol(header.textContent),
130
- width, attributes;
127
+ width;
131
128
 
132
129
  if(col){
133
130
  exists = true;