tabulator-tables 5.4.2 → 5.4.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 (253) hide show
  1. package/.babelrc.json +3 -3
  2. package/.editorconfig +6 -6
  3. package/.eslintignore +3 -3
  4. package/.eslintrc.js +28 -28
  5. package/.github/ISSUE_TEMPLATE/bug_report.md +58 -58
  6. package/.github/ISSUE_TEMPLATE/documentation.md +14 -14
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +24 -24
  8. package/.github/ISSUE_TEMPLATE/question.md +12 -12
  9. package/.github/workflows/bad-files-check.yml +39 -39
  10. package/.github/workflows/lint-and-test.yml +30 -30
  11. package/CODE_OF_CONDUCT.md +46 -46
  12. package/CONTRIBUTING.md +22 -22
  13. package/LICENSE +20 -20
  14. package/README.md +76 -76
  15. package/bower.json +40 -40
  16. package/build/Bundler.js +185 -185
  17. package/build/rollup.js +6 -6
  18. package/dist/css/tabulator.css +1 -5
  19. package/dist/css/tabulator.css.map +1 -1
  20. package/dist/css/tabulator.min.css +1 -1
  21. package/dist/css/tabulator.min.css.map +1 -1
  22. package/dist/css/tabulator_bootstrap3.css +1 -5
  23. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  24. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  25. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  26. package/dist/css/tabulator_bootstrap4.css +1 -5
  27. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  28. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  29. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  30. package/dist/css/tabulator_bootstrap5.css +1 -5
  31. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  32. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  33. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  34. package/dist/css/tabulator_bulma.css +1 -5
  35. package/dist/css/tabulator_bulma.css.map +1 -1
  36. package/dist/css/tabulator_bulma.min.css +1 -1
  37. package/dist/css/tabulator_bulma.min.css.map +1 -1
  38. package/dist/css/tabulator_materialize.css +1 -5
  39. package/dist/css/tabulator_materialize.css.map +1 -1
  40. package/dist/css/tabulator_materialize.min.css +1 -1
  41. package/dist/css/tabulator_materialize.min.css.map +1 -1
  42. package/dist/css/tabulator_midnight.css +1 -5
  43. package/dist/css/tabulator_midnight.css.map +1 -1
  44. package/dist/css/tabulator_midnight.min.css +1 -1
  45. package/dist/css/tabulator_midnight.min.css.map +1 -1
  46. package/dist/css/tabulator_modern.css +1 -5
  47. package/dist/css/tabulator_modern.css.map +1 -1
  48. package/dist/css/tabulator_modern.min.css +1 -1
  49. package/dist/css/tabulator_modern.min.css.map +1 -1
  50. package/dist/css/tabulator_semanticui.css +103 -107
  51. package/dist/css/tabulator_semanticui.css.map +1 -1
  52. package/dist/css/tabulator_semanticui.min.css +1 -1
  53. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  54. package/dist/css/tabulator_simple.css +1 -5
  55. package/dist/css/tabulator_simple.css.map +1 -1
  56. package/dist/css/tabulator_simple.min.css +1 -1
  57. package/dist/css/tabulator_simple.min.css.map +1 -1
  58. package/dist/css/tabulator_site.css +1 -5
  59. package/dist/css/tabulator_site.css.map +1 -1
  60. package/dist/css/tabulator_site.min.css +1 -1
  61. package/dist/css/tabulator_site.min.css.map +1 -1
  62. package/dist/js/jquery_wrapper.js +55 -55
  63. package/dist/js/tabulator.js +25847 -25653
  64. package/dist/js/tabulator.js.map +1 -1
  65. package/dist/js/tabulator.min.js +2 -2
  66. package/dist/js/tabulator.min.js.map +1 -1
  67. package/dist/js/tabulator_esm.js +25926 -25732
  68. package/dist/js/tabulator_esm.js.map +1 -1
  69. package/dist/js/tabulator_esm.min.js +2 -2
  70. package/dist/js/tabulator_esm.min.js.map +1 -1
  71. package/package.json +65 -65
  72. package/src/js/builds/esm.js +14 -14
  73. package/src/js/builds/jquery_wrapper.js +55 -55
  74. package/src/js/core/ColumnManager.js +730 -730
  75. package/src/js/core/CoreFeature.js +138 -138
  76. package/src/js/core/FooterManager.js +101 -101
  77. package/src/js/core/Module.js +141 -141
  78. package/src/js/core/RowManager.js +1112 -1082
  79. package/src/js/core/Tabulator.js +895 -893
  80. package/src/js/core/TabulatorFull.js +10 -10
  81. package/src/js/core/cell/Cell.js +295 -295
  82. package/src/js/core/cell/CellComponent.js +76 -76
  83. package/src/js/core/column/Column.js +949 -949
  84. package/src/js/core/column/ColumnComponent.js +152 -152
  85. package/src/js/core/column/defaults/options.js +17 -17
  86. package/src/js/core/defaults/options.js +65 -65
  87. package/src/js/core/modules/core.js +2 -2
  88. package/src/js/core/modules/optional.js +34 -34
  89. package/src/js/core/rendering/Renderer.js +203 -203
  90. package/src/js/core/rendering/renderers/BasicHorizontal.js +19 -19
  91. package/src/js/core/rendering/renderers/BasicVertical.js +79 -78
  92. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +577 -577
  93. package/src/js/core/rendering/renderers/VirtualDomVertical.js +579 -579
  94. package/src/js/core/row/PseudoRow.js +44 -44
  95. package/src/js/core/row/Row.js +457 -457
  96. package/src/js/core/row/RowComponent.js +93 -93
  97. package/src/js/core/tools/Alert.js +61 -61
  98. package/src/js/core/tools/ComponentFunctionBinder.js +32 -32
  99. package/src/js/core/tools/DataLoader.js +119 -119
  100. package/src/js/core/tools/DeprecationAdvisor.js +46 -46
  101. package/src/js/core/tools/ExternalEventBus.js +104 -104
  102. package/src/js/core/tools/Helpers.js +46 -46
  103. package/src/js/core/tools/InteractionMonitor.js +321 -321
  104. package/src/js/core/tools/InternalEventBus.js +161 -161
  105. package/src/js/core/tools/ModuleBinder.js +104 -104
  106. package/src/js/core/tools/OptionsList.js +44 -40
  107. package/src/js/core/tools/Popup.js +304 -304
  108. package/src/js/core/tools/TableRegistry.js +61 -61
  109. package/src/js/modules/Accessor/Accessor.js +115 -115
  110. package/src/js/modules/Ajax/Ajax.js +143 -143
  111. package/src/js/modules/Ajax/defaults/config.js +2 -2
  112. package/src/js/modules/Ajax/defaults/contentTypeFormatters.js +44 -44
  113. package/src/js/modules/Ajax/defaults/loaderPromise.js +86 -86
  114. package/src/js/modules/Ajax/defaults/urlGenerator.js +43 -43
  115. package/src/js/modules/Clipboard/Clipboard.js +279 -279
  116. package/src/js/modules/Clipboard/defaults/pasteActions.js +10 -10
  117. package/src/js/modules/Clipboard/defaults/pasteParsers.js +74 -74
  118. package/src/js/modules/ColumnCalcs/CalcComponent.js +47 -47
  119. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +581 -568
  120. package/src/js/modules/ColumnCalcs/defaults/calculations.js +85 -85
  121. package/src/js/modules/Comms/Comms.js +51 -51
  122. package/src/js/modules/DataTree/DataTree.js +603 -603
  123. package/src/js/modules/Download/Download.js +148 -148
  124. package/src/js/modules/Download/defaults/downloaders/csv.js +61 -61
  125. package/src/js/modules/Download/defaults/downloaders/html.js +4 -4
  126. package/src/js/modules/Download/defaults/downloaders/json.js +33 -33
  127. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +31 -31
  128. package/src/js/modules/Download/defaults/downloaders/pdf.js +111 -111
  129. package/src/js/modules/Download/defaults/downloaders/xlsx.js +98 -98
  130. package/src/js/modules/Download/defaults/downloaders.js +14 -14
  131. package/src/js/modules/Edit/Edit.js +735 -736
  132. package/src/js/modules/Edit/List.js +1037 -1033
  133. package/src/js/modules/Edit/defaults/editors/autocomplete.js +11 -11
  134. package/src/js/modules/Edit/defaults/editors/date.js +138 -110
  135. package/src/js/modules/Edit/defaults/editors/datetime.js +125 -97
  136. package/src/js/modules/Edit/defaults/editors/input.js +76 -74
  137. package/src/js/modules/Edit/defaults/editors/list.js +6 -6
  138. package/src/js/modules/Edit/defaults/editors/number.js +109 -107
  139. package/src/js/modules/Edit/defaults/editors/progress.js +126 -126
  140. package/src/js/modules/Edit/defaults/editors/range.js +80 -78
  141. package/src/js/modules/Edit/defaults/editors/select.js +9 -9
  142. package/src/js/modules/Edit/defaults/editors/star.js +145 -145
  143. package/src/js/modules/Edit/defaults/editors/textarea.js +122 -120
  144. package/src/js/modules/Edit/defaults/editors/tickCross.js +94 -96
  145. package/src/js/modules/Edit/defaults/editors/time.js +126 -98
  146. package/src/js/modules/Edit/defaults/editors.js +28 -28
  147. package/src/js/modules/Edit/inputMask.js +73 -73
  148. package/src/js/modules/Export/Export.js +623 -617
  149. package/src/js/modules/Export/ExportColumn.js +10 -10
  150. package/src/js/modules/Export/ExportRow.js +9 -9
  151. package/src/js/modules/Filter/Filter.js +892 -889
  152. package/src/js/modules/Filter/defaults/filters.js +107 -107
  153. package/src/js/modules/Format/Format.js +212 -212
  154. package/src/js/modules/Format/defaults/formatters/buttonCross.js +2 -2
  155. package/src/js/modules/Format/defaults/formatters/buttonTick.js +2 -2
  156. package/src/js/modules/Format/defaults/formatters/color.js +3 -3
  157. package/src/js/modules/Format/defaults/formatters/datetime.js +36 -36
  158. package/src/js/modules/Format/defaults/formatters/datetimediff.js +40 -40
  159. package/src/js/modules/Format/defaults/formatters/handle.js +3 -3
  160. package/src/js/modules/Format/defaults/formatters/html.js +2 -2
  161. package/src/js/modules/Format/defaults/formatters/image.js +39 -39
  162. package/src/js/modules/Format/defaults/formatters/link.js +77 -77
  163. package/src/js/modules/Format/defaults/formatters/lookup.js +9 -9
  164. package/src/js/modules/Format/defaults/formatters/money.js +36 -36
  165. package/src/js/modules/Format/defaults/formatters/plaintext.js +2 -2
  166. package/src/js/modules/Format/defaults/formatters/progress.js +132 -132
  167. package/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +43 -43
  168. package/src/js/modules/Format/defaults/formatters/rowSelection.js +59 -59
  169. package/src/js/modules/Format/defaults/formatters/rownum.js +9 -9
  170. package/src/js/modules/Format/defaults/formatters/star.js +37 -37
  171. package/src/js/modules/Format/defaults/formatters/textarea.js +3 -3
  172. package/src/js/modules/Format/defaults/formatters/tickCross.js +21 -21
  173. package/src/js/modules/Format/defaults/formatters/traffic.js +46 -46
  174. package/src/js/modules/Format/defaults/formatters.js +42 -42
  175. package/src/js/modules/FrozenColumns/FrozenColumns.js +299 -299
  176. package/src/js/modules/FrozenRows/FrozenRows.js +169 -159
  177. package/src/js/modules/GroupRows/Group.js +597 -595
  178. package/src/js/modules/GroupRows/GroupComponent.js +66 -66
  179. package/src/js/modules/GroupRows/GroupRows.js +639 -623
  180. package/src/js/modules/History/History.js +171 -171
  181. package/src/js/modules/History/defaults/redoers.js +24 -24
  182. package/src/js/modules/History/defaults/undoers.js +24 -24
  183. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +181 -181
  184. package/src/js/modules/Import/Import.js +193 -193
  185. package/src/js/modules/Import/defaults/importers/array.js +4 -4
  186. package/src/js/modules/Import/defaults/importers/csv.js +62 -62
  187. package/src/js/modules/Import/defaults/importers/json.js +7 -7
  188. package/src/js/modules/Import/defaults/importers.js +8 -8
  189. package/src/js/modules/Interaction/Interaction.js +325 -325
  190. package/src/js/modules/Keybindings/Keybindings.js +172 -172
  191. package/src/js/modules/Keybindings/defaults/actions.js +118 -118
  192. package/src/js/modules/Keybindings/defaults/bindings.js +12 -12
  193. package/src/js/modules/Layout/Layout.js +49 -49
  194. package/src/js/modules/Layout/defaults/modes/fitColumns.js +171 -171
  195. package/src/js/modules/Layout/defaults/modes/fitData.js +9 -9
  196. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +9 -9
  197. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +39 -39
  198. package/src/js/modules/Layout/defaults/modes.js +11 -11
  199. package/src/js/modules/Localize/Localize.js +185 -194
  200. package/src/js/modules/Localize/defaults/langs.js +36 -36
  201. package/src/js/modules/Menu/Menu.js +302 -302
  202. package/src/js/modules/MoveColumns/MoveColumns.js +299 -299
  203. package/src/js/modules/MoveRows/MoveRows.js +635 -635
  204. package/src/js/modules/Mutator/Mutator.js +161 -161
  205. package/src/js/modules/Page/Page.js +881 -881
  206. package/src/js/modules/Page/defaults/pageCounters/pages.js +32 -32
  207. package/src/js/modules/Page/defaults/pageCounters/rows.js +39 -39
  208. package/src/js/modules/Page/defaults/pageCounters.js +7 -7
  209. package/src/js/modules/Persistence/Persistence.js +458 -458
  210. package/src/js/modules/Persistence/defaults/readers.js +29 -29
  211. package/src/js/modules/Persistence/defaults/writers.js +12 -12
  212. package/src/js/modules/Popup/Popup.js +231 -231
  213. package/src/js/modules/Print/Print.js +137 -124
  214. package/src/js/modules/ReactiveData/ReactiveData.js +408 -408
  215. package/src/js/modules/ResizeColumns/ResizeColumns.js +309 -309
  216. package/src/js/modules/ResizeRows/ResizeRows.js +111 -111
  217. package/src/js/modules/ResizeTable/ResizeTable.js +159 -159
  218. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +345 -345
  219. package/src/js/modules/SelectRow/SelectRow.js +446 -436
  220. package/src/js/modules/Sort/Sort.js +470 -470
  221. package/src/js/modules/Sort/defaults/sorters/alphanum.js +43 -43
  222. package/src/js/modules/Sort/defaults/sorters/array.js +53 -53
  223. package/src/js/modules/Sort/defaults/sorters/boolean.js +6 -6
  224. package/src/js/modules/Sort/defaults/sorters/date.js +9 -9
  225. package/src/js/modules/Sort/defaults/sorters/datetime.js +43 -43
  226. package/src/js/modules/Sort/defaults/sorters/exists.js +6 -6
  227. package/src/js/modules/Sort/defaults/sorters/number.js +39 -39
  228. package/src/js/modules/Sort/defaults/sorters/string.js +33 -33
  229. package/src/js/modules/Sort/defaults/sorters/time.js +9 -9
  230. package/src/js/modules/Sort/defaults/sorters.js +20 -20
  231. package/src/js/modules/Tooltip/Tooltip.js +130 -130
  232. package/src/js/modules/Validate/Validate.js +305 -305
  233. package/src/js/modules/Validate/defaults/validators.js +138 -138
  234. package/src/scss/tabulator.scss +1464 -1466
  235. package/src/scss/themes/bootstrap/functions4.scss +118 -118
  236. package/src/scss/themes/bootstrap/functions5.scss +302 -302
  237. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +284 -284
  238. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +544 -544
  239. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +574 -574
  240. package/src/scss/themes/bootstrap/variables3.scss +870 -870
  241. package/src/scss/themes/bootstrap/variables4.scss +930 -930
  242. package/src/scss/themes/bootstrap/variables5.scss +1641 -1641
  243. package/src/scss/themes/bulma/tabulator_bulma.scss +252 -252
  244. package/src/scss/themes/bulma/variables.scss +197 -197
  245. package/src/scss/themes/materialize/tabulator_materialize.scss +265 -265
  246. package/src/scss/themes/materialize/variables.scss +70 -70
  247. package/src/scss/themes/semanticui/tabulator_semanticui.scss +561 -561
  248. package/src/scss/themes/semanticui/variables.scss +839 -839
  249. package/src/scss/themes/semanticui/variables_table.scss +247 -247
  250. package/src/scss/themes/tabulator_midnight.scss +158 -158
  251. package/src/scss/themes/tabulator_modern.scss +231 -231
  252. package/src/scss/themes/tabulator_simple.scss +102 -102
  253. package/src/scss/themes/tabulator_site.scss +189 -189
@@ -1,596 +1,598 @@
1
- import Helpers from '../../core/tools/Helpers.js';
2
- import GroupComponent from './GroupComponent.js';
3
-
4
- //Group functions
5
- class Group{
6
-
7
- constructor(groupManager, parent, level, key, field, generator, oldGroup){
8
- this.groupManager = groupManager;
9
- this.parent = parent;
10
- this.key = key;
11
- this.level = level;
12
- this.field = field;
13
- this.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);
14
- this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;
15
- this.type = "group"; //type of element
16
- this.old = oldGroup;
17
- this.rows = [];
18
- this.groups = [];
19
- this.groupList = [];
20
- this.generator = generator;
21
- this.element = false;
22
- this.elementContents = false;
23
- this.height = 0;
24
- this.outerHeight = 0;
25
- this.initialized = false;
26
- this.calcs = {};
27
- this.initialized = false;
28
- this.modules = {};
29
- this.arrowElement = false;
30
-
31
- this.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]);
32
-
33
- this.component = null;
34
-
35
- this.createElements();
36
- this.addBindings();
37
-
38
- this.createValueGroups();
39
- }
40
-
41
- wipe(elementsOnly){
42
- if(!elementsOnly){
43
- if(this.groupList.length){
44
- this.groupList.forEach(function(group){
45
- group.wipe();
46
- });
47
- }else{
48
- this.rows.forEach((row) => {
49
- if(row.modules){
50
- delete row.modules.group;
51
- }
52
- });
53
- }
54
- }
55
-
56
- this.element = false;
57
- this.arrowElement = false;
58
- this.elementContents = false;
59
- }
60
-
61
- createElements(){
62
- var arrow = document.createElement("div");
63
- arrow.classList.add("tabulator-arrow");
64
-
65
- this.element = document.createElement("div");
66
- this.element.classList.add("tabulator-row");
67
- this.element.classList.add("tabulator-group");
68
- this.element.classList.add("tabulator-group-level-" + this.level);
69
- this.element.setAttribute("role", "rowgroup");
70
-
71
- this.arrowElement = document.createElement("div");
72
- this.arrowElement.classList.add("tabulator-group-toggle");
73
- this.arrowElement.appendChild(arrow);
74
-
75
- //setup movable rows
76
- if(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")){
77
- this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
78
- }
79
- }
80
-
81
- createValueGroups(){
82
- var level = this.level + 1;
83
- if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){
84
- this.groupManager.allowedValues[level].forEach((value) => {
85
- this._createGroup(value, level);
86
- });
87
- }
88
- }
89
-
90
- addBindings(){
91
- var toggleElement;
92
-
93
- if(this.groupManager.table.options.groupToggleElement){
94
- toggleElement = this.groupManager.table.options.groupToggleElement == "arrow" ? this.arrowElement : this.element;
95
-
96
- toggleElement.addEventListener("click", (e) => {
97
- e.stopPropagation();
98
- e.stopImmediatePropagation();
99
- this.toggleVisibility();
100
- });
101
- }
102
- }
103
-
104
- _createGroup(groupID, level){
105
- var groupKey = level + "_" + groupID;
106
- var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);
107
-
108
- this.groups[groupKey] = group;
109
- this.groupList.push(group);
110
- }
111
-
112
- _addRowToGroup(row){
113
-
114
- var level = this.level + 1;
115
-
116
- if(this.hasSubGroups){
117
- var groupID = this.groupManager.groupIDLookups[level].func(row.getData()),
118
- groupKey = level + "_" + groupID;
119
-
120
- if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){
121
- if(this.groups[groupKey]){
122
- this.groups[groupKey].addRow(row);
123
- }
124
- }else{
125
- if(!this.groups[groupKey]){
126
- this._createGroup(groupID, level);
127
- }
128
-
129
- this.groups[groupKey].addRow(row);
130
- }
131
- }
132
- }
133
-
134
- _addRow(row){
135
- this.rows.push(row);
136
- row.modules.group = this;
137
- }
138
-
139
- insertRow(row, to, after){
140
- var data = this.conformRowData({});
141
-
142
- row.updateData(data);
143
-
144
- var toIndex = this.rows.indexOf(to);
145
-
146
- if(toIndex > -1){
147
- if(after){
148
- this.rows.splice(toIndex+1, 0, row);
149
- }else{
150
- this.rows.splice(toIndex, 0, row);
151
- }
152
- }else{
153
- if(after){
154
- this.rows.push(row);
155
- }else{
156
- this.rows.unshift(row);
157
- }
158
- }
159
-
160
- row.modules.group = this;
161
-
162
- this.generateGroupHeaderContents();
163
-
164
- if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){
165
- this.groupManager.table.modules.columnCalcs.recalcGroup(this);
166
- }
167
-
168
- this.groupManager.updateGroupRows(true);
169
- }
170
-
171
- scrollHeader(left){
172
- if(this.arrowElement){
173
- this.arrowElement.style.marginLeft = left;
174
-
175
- this.groupList.forEach(function(child){
176
- child.scrollHeader(left);
177
- });
178
- }
179
- }
180
-
181
- getRowIndex(row){}
182
-
183
- //update row data to match grouping constraints
184
- conformRowData(data){
185
- if(this.field){
186
- data[this.field] = this.key;
187
- }else{
188
- console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function");
189
- }
190
-
191
- if(this.parent){
192
- data = this.parent.conformRowData(data);
193
- }
194
-
195
- return data;
196
- }
197
-
198
- removeRow(row){
199
- var index = this.rows.indexOf(row);
200
- var el = row.getElement();
201
-
202
-
203
- if(index > -1){
204
- this.rows.splice(index, 1);
205
- }
206
-
207
- if(!this.groupManager.table.options.groupValues && !this.rows.length){
208
- if(this.parent){
209
- this.parent.removeGroup(this);
210
- }else{
211
- this.groupManager.removeGroup(this);
212
- }
213
-
214
- this.groupManager.updateGroupRows(true);
215
- }else{
216
-
217
- if(el.parentNode){
218
- el.parentNode.removeChild(el);
219
- }
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);
225
- }
226
-
227
- }
228
- }
229
-
230
- removeGroup(group){
231
- var groupKey = group.level + "_" + group.key,
232
- index;
233
-
234
- if(this.groups[groupKey]){
235
- delete this.groups[groupKey];
236
-
237
- index = this.groupList.indexOf(group);
238
-
239
- if(index > -1){
240
- this.groupList.splice(index, 1);
241
- }
242
-
243
- if(!this.groupList.length){
244
- if(this.parent){
245
- this.parent.removeGroup(this);
246
- }else{
247
- this.groupManager.removeGroup(this);
248
- }
249
- }
250
- }
251
- }
252
-
253
- getHeadersAndRows(){
254
- var output = [];
255
-
256
- output.push(this);
257
-
258
- this._visSet();
259
-
260
-
261
- if(this.calcs.top){
262
- this.calcs.top.detachElement();
263
- this.calcs.top.deleteCells();
264
- }
265
-
266
- if(this.calcs.bottom){
267
- this.calcs.bottom.detachElement();
268
- this.calcs.bottom.deleteCells();
269
- }
270
-
271
-
272
-
273
- if(this.visible){
274
- if(this.groupList.length){
275
- this.groupList.forEach(function(group){
276
- output = output.concat(group.getHeadersAndRows());
277
- });
278
-
279
- }else{
280
- if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){
281
- this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
282
- output.push(this.calcs.top);
283
- }
284
-
285
- output = output.concat(this.rows);
286
-
287
- if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){
288
- this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
289
- output.push(this.calcs.bottom);
290
- }
291
- }
292
- }else{
293
- if(!this.groupList.length && this.groupManager.table.options.columnCalcs != "table"){
294
-
295
- if(this.groupManager.table.modExists("columnCalcs")){
296
- if(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){
297
- if(this.groupManager.table.options.groupClosedShowCalcs){
298
- this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
299
- output.push(this.calcs.top);
300
- }
301
- }
302
-
303
- if(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){
304
- if(this.groupManager.table.options.groupClosedShowCalcs){
305
- this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
306
- output.push(this.calcs.bottom);
307
- }
308
- }
309
- }
310
- }
311
-
312
- }
313
-
314
- return output;
315
- }
316
-
317
- getData(visible, transform){
318
- var output = [];
319
-
320
- this._visSet();
321
-
322
- if(!visible || (visible && this.visible)){
323
- this.rows.forEach((row) => {
324
- output.push(row.getData(transform || "data"));
325
- });
326
- }
327
-
328
- return output;
329
- }
330
-
331
- getRowCount(){
332
- var count = 0;
333
-
334
- if(this.groupList.length){
335
- this.groupList.forEach((group) => {
336
- count += group.getRowCount();
337
- });
338
- }else{
339
- count = this.rows.length;
340
- }
341
- return count;
342
- }
343
-
344
- toggleVisibility(){
345
- if(this.visible){
346
- this.hide();
347
- }else{
348
- this.show();
349
- }
350
- }
351
-
352
- hide(){
353
- this.visible = false;
354
-
355
- if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){
356
-
357
- this.element.classList.remove("tabulator-group-visible");
358
-
359
- if(this.groupList.length){
360
- this.groupList.forEach((group) => {
361
-
362
- var rows = group.getHeadersAndRows();
363
-
364
- rows.forEach((row) => {
365
- row.detachElement();
366
- });
367
- });
368
-
369
- }else{
370
- this.rows.forEach((row) => {
371
- var rowEl = row.getElement();
372
- rowEl.parentNode.removeChild(rowEl);
373
- });
374
- }
375
-
376
- this.groupManager.updateGroupRows(true);
377
-
378
- }else{
379
- this.groupManager.updateGroupRows(true);
380
- }
381
-
382
- this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), false);
383
- }
384
-
385
- show(){
386
- this.visible = true;
387
-
388
- if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){
389
-
390
- this.element.classList.add("tabulator-group-visible");
391
-
392
- var prev = this.generateElement();
393
-
394
- if(this.groupList.length){
395
- this.groupList.forEach((group) => {
396
- var rows = group.getHeadersAndRows();
397
-
398
- rows.forEach((row) => {
399
- var rowEl = row.getElement();
400
- prev.parentNode.insertBefore(rowEl, prev.nextSibling);
401
- row.initialize();
402
- prev = rowEl;
403
- });
404
- });
405
-
406
- }else{
407
- this.rows.forEach((row) => {
408
- var rowEl = row.getElement();
409
- prev.parentNode.insertBefore(rowEl, prev.nextSibling);
410
- row.initialize();
411
- prev = rowEl;
412
- });
413
- }
414
-
415
- this.groupManager.updateGroupRows(true);
416
- }else{
417
- this.groupManager.updateGroupRows(true);
418
- }
419
-
420
- this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), true);
421
- }
422
-
423
- _visSet(){
424
- var data = [];
425
-
426
- if(typeof this.visible == "function"){
427
-
428
- this.rows.forEach(function(row){
429
- data.push(row.getData());
430
- });
431
-
432
- this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());
433
- }
434
- }
435
-
436
- getRowGroup(row){
437
- var match = false;
438
- if(this.groupList.length){
439
- this.groupList.forEach(function(group){
440
- var result = group.getRowGroup(row);
441
-
442
- if(result){
443
- match = result;
444
- }
445
- });
446
- }else{
447
- if(this.rows.find(function(item){
448
- return item === row;
449
- })){
450
- match = this;
451
- }
452
- }
453
-
454
- return match;
455
- }
456
-
457
- getSubGroups(component){
458
- var output = [];
459
-
460
- this.groupList.forEach(function(child){
461
- output.push(component ? child.getComponent() : child);
462
- });
463
-
464
- return output;
465
- }
466
-
467
- getRows(component){
468
- var output = [];
469
-
470
- this.rows.forEach(function(row){
471
- output.push(component ? row.getComponent() : row);
472
- });
473
-
474
- return output;
475
- }
476
-
477
- generateGroupHeaderContents(){
478
- var data = [];
479
-
480
- this.rows.forEach(function(row){
481
- data.push(row.getData());
482
- });
483
-
484
- this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());
485
-
486
- while(this.element.firstChild) this.element.removeChild(this.element.firstChild);
487
-
488
- if(typeof this.elementContents === "string"){
489
- this.element.innerHTML = this.elementContents;
490
- }else{
491
- this.element.appendChild(this.elementContents);
492
- }
493
-
494
- this.element.insertBefore(this.arrowElement, this.element.firstChild);
495
- }
496
-
497
- getPath(path = []) {
498
- path.unshift(this.key);
499
- if(this.parent) {
500
- this.parent.getPath(path);
501
- }
502
- return path;
503
- }
504
-
505
- ////////////// Standard Row Functions //////////////
506
-
507
- getElement(){
508
- return this.elementContents ? this.element : this.generateElement();
509
- }
510
-
511
- generateElement(){
512
- this.addBindings = false;
513
-
514
- this._visSet();
515
-
516
- if(this.visible){
517
- this.element.classList.add("tabulator-group-visible");
518
- }else{
519
- this.element.classList.remove("tabulator-group-visible");
520
- }
521
-
522
- for(var i = 0; i < this.element.childNodes.length; ++i){
523
- this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);
524
- }
525
-
526
- this.generateGroupHeaderContents();
527
-
528
- // this.addBindings();
529
-
530
- return this.element;
531
- }
532
-
533
- detachElement(){
534
- if (this.element && this.element.parentNode){
535
- this.element.parentNode.removeChild(this.element);
536
- }
537
- }
538
-
539
- //normalize the height of elements in the row
540
- normalizeHeight(){
541
- this.setHeight(this.element.clientHeight);
542
- }
543
-
544
- initialize(force){
545
- if(!this.initialized || force){
546
- this.normalizeHeight();
547
- this.initialized = true;
548
- }
549
- }
550
-
551
- reinitialize(){
552
- this.initialized = false;
553
- this.height = 0;
554
-
555
- if(Helpers.elVisible(this.element)){
556
- this.initialize(true);
557
- }
558
- }
559
-
560
- setHeight(height){
561
- if(this.height != height){
562
- this.height = height;
563
- this.outerHeight = this.element.offsetHeight;
564
- }
565
- }
566
-
567
- //return rows outer height
568
- getHeight(){
569
- return this.outerHeight;
570
- }
571
-
572
- getGroup(){
573
- return this;
574
- }
575
-
576
- reinitializeHeight(){}
577
-
578
- calcHeight(){}
579
-
580
- setCellHeight(){}
581
-
582
- clearCellHeight(){}
583
-
584
- deinitializeHeight(){}
585
-
586
- //////////////// Object Generation /////////////////
587
- getComponent(){
588
- if(!this.component){
589
- this.component = new GroupComponent(this);
590
- }
591
-
592
- return this.component;
593
- }
594
- }
595
-
1
+ import Helpers from '../../core/tools/Helpers.js';
2
+ import GroupComponent from './GroupComponent.js';
3
+
4
+ //Group functions
5
+ class Group{
6
+
7
+ constructor(groupManager, parent, level, key, field, generator, oldGroup){
8
+ this.groupManager = groupManager;
9
+ this.parent = parent;
10
+ this.key = key;
11
+ this.level = level;
12
+ this.field = field;
13
+ this.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);
14
+ this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;
15
+ this.type = "group"; //type of element
16
+ this.old = oldGroup;
17
+ this.rows = [];
18
+ this.groups = [];
19
+ this.groupList = [];
20
+ this.generator = generator;
21
+ this.element = false;
22
+ this.elementContents = false;
23
+ this.height = 0;
24
+ this.outerHeight = 0;
25
+ this.initialized = false;
26
+ this.calcs = {};
27
+ this.initialized = false;
28
+ this.modules = {};
29
+ this.arrowElement = false;
30
+
31
+ this.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]);
32
+
33
+ this.component = null;
34
+
35
+ this.createElements();
36
+ this.addBindings();
37
+
38
+ this.createValueGroups();
39
+ }
40
+
41
+ wipe(elementsOnly){
42
+ if(!elementsOnly){
43
+ if(this.groupList.length){
44
+ this.groupList.forEach(function(group){
45
+ group.wipe();
46
+ });
47
+ }else{
48
+ this.rows.forEach((row) => {
49
+ if(row.modules){
50
+ delete row.modules.group;
51
+ }
52
+ });
53
+ }
54
+ }
55
+
56
+ this.element = false;
57
+ this.arrowElement = false;
58
+ this.elementContents = false;
59
+ }
60
+
61
+ createElements(){
62
+ var arrow = document.createElement("div");
63
+ arrow.classList.add("tabulator-arrow");
64
+
65
+ this.element = document.createElement("div");
66
+ this.element.classList.add("tabulator-row");
67
+ this.element.classList.add("tabulator-group");
68
+ this.element.classList.add("tabulator-group-level-" + this.level);
69
+ this.element.setAttribute("role", "rowgroup");
70
+
71
+ this.arrowElement = document.createElement("div");
72
+ this.arrowElement.classList.add("tabulator-group-toggle");
73
+ this.arrowElement.appendChild(arrow);
74
+
75
+ //setup movable rows
76
+ if(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")){
77
+ this.groupManager.table.modules.moveRow.initializeGroupHeader(this);
78
+ }
79
+ }
80
+
81
+ createValueGroups(){
82
+ var level = this.level + 1;
83
+ if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){
84
+ this.groupManager.allowedValues[level].forEach((value) => {
85
+ this._createGroup(value, level);
86
+ });
87
+ }
88
+ }
89
+
90
+ addBindings(){
91
+ var toggleElement;
92
+
93
+ if(this.groupManager.table.options.groupToggleElement){
94
+ toggleElement = this.groupManager.table.options.groupToggleElement == "arrow" ? this.arrowElement : this.element;
95
+
96
+ toggleElement.addEventListener("click", (e) => {
97
+ e.stopPropagation();
98
+ e.stopImmediatePropagation();
99
+ this.toggleVisibility();
100
+ });
101
+ }
102
+ }
103
+
104
+ _createGroup(groupID, level){
105
+ var groupKey = level + "_" + groupID;
106
+ var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);
107
+
108
+ this.groups[groupKey] = group;
109
+ this.groupList.push(group);
110
+ }
111
+
112
+ _addRowToGroup(row){
113
+
114
+ var level = this.level + 1;
115
+
116
+ if(this.hasSubGroups){
117
+ var groupID = this.groupManager.groupIDLookups[level].func(row.getData()),
118
+ groupKey = level + "_" + groupID;
119
+
120
+ if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){
121
+ if(this.groups[groupKey]){
122
+ this.groups[groupKey].addRow(row);
123
+ }
124
+ }else{
125
+ if(!this.groups[groupKey]){
126
+ this._createGroup(groupID, level);
127
+ }
128
+
129
+ this.groups[groupKey].addRow(row);
130
+ }
131
+ }
132
+ }
133
+
134
+ _addRow(row){
135
+ this.rows.push(row);
136
+ row.modules.group = this;
137
+ }
138
+
139
+ insertRow(row, to, after){
140
+ var data = this.conformRowData({});
141
+
142
+ row.updateData(data);
143
+
144
+ var toIndex = this.rows.indexOf(to);
145
+
146
+ if(toIndex > -1){
147
+ if(after){
148
+ this.rows.splice(toIndex+1, 0, row);
149
+ }else{
150
+ this.rows.splice(toIndex, 0, row);
151
+ }
152
+ }else{
153
+ if(after){
154
+ this.rows.push(row);
155
+ }else{
156
+ this.rows.unshift(row);
157
+ }
158
+ }
159
+
160
+ row.modules.group = this;
161
+
162
+ // this.generateGroupHeaderContents();
163
+
164
+ if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){
165
+ this.groupManager.table.modules.columnCalcs.recalcGroup(this);
166
+ }
167
+
168
+ this.groupManager.updateGroupRows(true);
169
+ }
170
+
171
+ scrollHeader(left){
172
+ if(this.arrowElement){
173
+ this.arrowElement.style.marginLeft = left;
174
+
175
+ this.groupList.forEach(function(child){
176
+ child.scrollHeader(left);
177
+ });
178
+ }
179
+ }
180
+
181
+ getRowIndex(row){}
182
+
183
+ //update row data to match grouping constraints
184
+ conformRowData(data){
185
+ if(this.field){
186
+ data[this.field] = this.key;
187
+ }else{
188
+ console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function");
189
+ }
190
+
191
+ if(this.parent){
192
+ data = this.parent.conformRowData(data);
193
+ }
194
+
195
+ return data;
196
+ }
197
+
198
+ removeRow(row){
199
+ var index = this.rows.indexOf(row);
200
+ var el = row.getElement();
201
+
202
+ if(index > -1){
203
+ this.rows.splice(index, 1);
204
+ }
205
+
206
+ if(!this.groupManager.table.options.groupValues && !this.rows.length){
207
+ if(this.parent){
208
+ this.parent.removeGroup(this);
209
+ }else{
210
+ this.groupManager.removeGroup(this);
211
+ }
212
+
213
+ this.groupManager.updateGroupRows(true);
214
+
215
+ }else{
216
+
217
+ if(el.parentNode){
218
+ el.parentNode.removeChild(el);
219
+ }
220
+
221
+ if(!this.groupManager.blockRedraw){
222
+ this.generateGroupHeaderContents();
223
+
224
+ if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){
225
+ this.groupManager.table.modules.columnCalcs.recalcGroup(this);
226
+ }
227
+ }
228
+
229
+ }
230
+ }
231
+
232
+ removeGroup(group){
233
+ var groupKey = group.level + "_" + group.key,
234
+ index;
235
+
236
+ if(this.groups[groupKey]){
237
+ delete this.groups[groupKey];
238
+
239
+ index = this.groupList.indexOf(group);
240
+
241
+ if(index > -1){
242
+ this.groupList.splice(index, 1);
243
+ }
244
+
245
+ if(!this.groupList.length){
246
+ if(this.parent){
247
+ this.parent.removeGroup(this);
248
+ }else{
249
+ this.groupManager.removeGroup(this);
250
+ }
251
+ }
252
+ }
253
+ }
254
+
255
+ getHeadersAndRows(){
256
+ var output = [];
257
+
258
+ output.push(this);
259
+
260
+ this._visSet();
261
+
262
+
263
+ if(this.calcs.top){
264
+ this.calcs.top.detachElement();
265
+ this.calcs.top.deleteCells();
266
+ }
267
+
268
+ if(this.calcs.bottom){
269
+ this.calcs.bottom.detachElement();
270
+ this.calcs.bottom.deleteCells();
271
+ }
272
+
273
+
274
+
275
+ if(this.visible){
276
+ if(this.groupList.length){
277
+ this.groupList.forEach(function(group){
278
+ output = output.concat(group.getHeadersAndRows());
279
+ });
280
+
281
+ }else{
282
+ if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){
283
+ this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
284
+ output.push(this.calcs.top);
285
+ }
286
+
287
+ output = output.concat(this.rows);
288
+
289
+ if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){
290
+ this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
291
+ output.push(this.calcs.bottom);
292
+ }
293
+ }
294
+ }else{
295
+ if(!this.groupList.length && this.groupManager.table.options.columnCalcs != "table"){
296
+
297
+ if(this.groupManager.table.modExists("columnCalcs")){
298
+ if(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){
299
+ if(this.groupManager.table.options.groupClosedShowCalcs){
300
+ this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);
301
+ output.push(this.calcs.top);
302
+ }
303
+ }
304
+
305
+ if(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){
306
+ if(this.groupManager.table.options.groupClosedShowCalcs){
307
+ this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);
308
+ output.push(this.calcs.bottom);
309
+ }
310
+ }
311
+ }
312
+ }
313
+
314
+ }
315
+
316
+ return output;
317
+ }
318
+
319
+ getData(visible, transform){
320
+ var output = [];
321
+
322
+ this._visSet();
323
+
324
+ if(!visible || (visible && this.visible)){
325
+ this.rows.forEach((row) => {
326
+ output.push(row.getData(transform || "data"));
327
+ });
328
+ }
329
+
330
+ return output;
331
+ }
332
+
333
+ getRowCount(){
334
+ var count = 0;
335
+
336
+ if(this.groupList.length){
337
+ this.groupList.forEach((group) => {
338
+ count += group.getRowCount();
339
+ });
340
+ }else{
341
+ count = this.rows.length;
342
+ }
343
+ return count;
344
+ }
345
+
346
+ toggleVisibility(){
347
+ if(this.visible){
348
+ this.hide();
349
+ }else{
350
+ this.show();
351
+ }
352
+ }
353
+
354
+ hide(){
355
+ this.visible = false;
356
+
357
+ if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){
358
+
359
+ this.element.classList.remove("tabulator-group-visible");
360
+
361
+ if(this.groupList.length){
362
+ this.groupList.forEach((group) => {
363
+
364
+ var rows = group.getHeadersAndRows();
365
+
366
+ rows.forEach((row) => {
367
+ row.detachElement();
368
+ });
369
+ });
370
+
371
+ }else{
372
+ this.rows.forEach((row) => {
373
+ var rowEl = row.getElement();
374
+ rowEl.parentNode.removeChild(rowEl);
375
+ });
376
+ }
377
+
378
+ this.groupManager.updateGroupRows(true);
379
+
380
+ }else{
381
+ this.groupManager.updateGroupRows(true);
382
+ }
383
+
384
+ this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), false);
385
+ }
386
+
387
+ show(){
388
+ this.visible = true;
389
+
390
+ if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){
391
+
392
+ this.element.classList.add("tabulator-group-visible");
393
+
394
+ var prev = this.generateElement();
395
+
396
+ if(this.groupList.length){
397
+ this.groupList.forEach((group) => {
398
+ var rows = group.getHeadersAndRows();
399
+
400
+ rows.forEach((row) => {
401
+ var rowEl = row.getElement();
402
+ prev.parentNode.insertBefore(rowEl, prev.nextSibling);
403
+ row.initialize();
404
+ prev = rowEl;
405
+ });
406
+ });
407
+
408
+ }else{
409
+ this.rows.forEach((row) => {
410
+ var rowEl = row.getElement();
411
+ prev.parentNode.insertBefore(rowEl, prev.nextSibling);
412
+ row.initialize();
413
+ prev = rowEl;
414
+ });
415
+ }
416
+
417
+ this.groupManager.updateGroupRows(true);
418
+ }else{
419
+ this.groupManager.updateGroupRows(true);
420
+ }
421
+
422
+ this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), true);
423
+ }
424
+
425
+ _visSet(){
426
+ var data = [];
427
+
428
+ if(typeof this.visible == "function"){
429
+
430
+ this.rows.forEach(function(row){
431
+ data.push(row.getData());
432
+ });
433
+
434
+ this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());
435
+ }
436
+ }
437
+
438
+ getRowGroup(row){
439
+ var match = false;
440
+ if(this.groupList.length){
441
+ this.groupList.forEach(function(group){
442
+ var result = group.getRowGroup(row);
443
+
444
+ if(result){
445
+ match = result;
446
+ }
447
+ });
448
+ }else{
449
+ if(this.rows.find(function(item){
450
+ return item === row;
451
+ })){
452
+ match = this;
453
+ }
454
+ }
455
+
456
+ return match;
457
+ }
458
+
459
+ getSubGroups(component){
460
+ var output = [];
461
+
462
+ this.groupList.forEach(function(child){
463
+ output.push(component ? child.getComponent() : child);
464
+ });
465
+
466
+ return output;
467
+ }
468
+
469
+ getRows(component){
470
+ var output = [];
471
+
472
+ this.rows.forEach(function(row){
473
+ output.push(component ? row.getComponent() : row);
474
+ });
475
+
476
+ return output;
477
+ }
478
+
479
+ generateGroupHeaderContents(){
480
+ var data = [];
481
+
482
+ this.rows.forEach(function(row){
483
+ data.push(row.getData());
484
+ });
485
+
486
+ this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());
487
+
488
+ while(this.element.firstChild) this.element.removeChild(this.element.firstChild);
489
+
490
+ if(typeof this.elementContents === "string"){
491
+ this.element.innerHTML = this.elementContents;
492
+ }else{
493
+ this.element.appendChild(this.elementContents);
494
+ }
495
+
496
+ this.element.insertBefore(this.arrowElement, this.element.firstChild);
497
+ }
498
+
499
+ getPath(path = []) {
500
+ path.unshift(this.key);
501
+ if(this.parent) {
502
+ this.parent.getPath(path);
503
+ }
504
+ return path;
505
+ }
506
+
507
+ ////////////// Standard Row Functions //////////////
508
+
509
+ getElement(){
510
+ return this.elementContents ? this.element : this.generateElement();
511
+ }
512
+
513
+ generateElement(){
514
+ this.addBindings = false;
515
+
516
+ this._visSet();
517
+
518
+ if(this.visible){
519
+ this.element.classList.add("tabulator-group-visible");
520
+ }else{
521
+ this.element.classList.remove("tabulator-group-visible");
522
+ }
523
+
524
+ for(var i = 0; i < this.element.childNodes.length; ++i){
525
+ this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);
526
+ }
527
+
528
+ this.generateGroupHeaderContents();
529
+
530
+ // this.addBindings();
531
+
532
+ return this.element;
533
+ }
534
+
535
+ detachElement(){
536
+ if (this.element && this.element.parentNode){
537
+ this.element.parentNode.removeChild(this.element);
538
+ }
539
+ }
540
+
541
+ //normalize the height of elements in the row
542
+ normalizeHeight(){
543
+ this.setHeight(this.element.clientHeight);
544
+ }
545
+
546
+ initialize(force){
547
+ if(!this.initialized || force){
548
+ this.normalizeHeight();
549
+ this.initialized = true;
550
+ }
551
+ }
552
+
553
+ reinitialize(){
554
+ this.initialized = false;
555
+ this.height = 0;
556
+
557
+ if(Helpers.elVisible(this.element)){
558
+ this.initialize(true);
559
+ }
560
+ }
561
+
562
+ setHeight(height){
563
+ if(this.height != height){
564
+ this.height = height;
565
+ this.outerHeight = this.element.offsetHeight;
566
+ }
567
+ }
568
+
569
+ //return rows outer height
570
+ getHeight(){
571
+ return this.outerHeight;
572
+ }
573
+
574
+ getGroup(){
575
+ return this;
576
+ }
577
+
578
+ reinitializeHeight(){}
579
+
580
+ calcHeight(){}
581
+
582
+ setCellHeight(){}
583
+
584
+ clearCellHeight(){}
585
+
586
+ deinitializeHeight(){}
587
+
588
+ //////////////// Object Generation /////////////////
589
+ getComponent(){
590
+ if(!this.component){
591
+ this.component = new GroupComponent(this);
592
+ }
593
+
594
+ return this.component;
595
+ }
596
+ }
597
+
596
598
  export default Group;