tabulator-tables 6.5.0 → 6.5.1

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