tabulator-tables 5.4.3 → 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 +0 -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 +0 -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 +0 -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 +0 -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 +0 -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 +0 -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 +0 -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 +0 -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 +102 -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 +0 -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 +0 -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 -25711
  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 -25790
  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 -1101
  79. package/src/js/core/Tabulator.js +895 -892
  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 -623
  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 -892
  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 -598
  178. package/src/js/modules/GroupRows/GroupComponent.js +66 -66
  179. package/src/js/modules/GroupRows/GroupRows.js +639 -639
  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 -185
  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 -137
  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 -444
  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 -1467
  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,300 +1,300 @@
1
- import Module from '../../core/Module.js';
2
-
3
- class FrozenColumns extends Module{
4
-
5
- constructor(table){
6
- super(table);
7
-
8
- this.leftColumns = [];
9
- this.rightColumns = [];
10
- this.initializationMode = "left";
11
- this.active = false;
12
- this.blocked = true;
13
-
14
- this.registerColumnOption("frozen");
15
- }
16
-
17
- //reset initial state
18
- reset(){
19
- this.initializationMode = "left";
20
- this.leftColumns = [];
21
- this.rightColumns = [];
22
- this.active = false;
23
- }
24
-
25
- initialize(){
26
- this.subscribe("cell-layout", this.layoutCell.bind(this));
27
- this.subscribe("column-init", this.initializeColumn.bind(this));
28
- this.subscribe("column-width", this.layout.bind(this));
29
- this.subscribe("row-layout-after", this.layoutRow.bind(this));
30
- this.subscribe("table-layout", this.layout.bind(this));
31
- this.subscribe("columns-loading", this.reset.bind(this));
32
-
33
- this.subscribe("column-add", this.reinitializeColumns.bind(this));
34
- this.subscribe("column-delete", this.reinitializeColumns.bind(this));
35
-
36
- this.subscribe("table-redraw", this.layout.bind(this));
37
- this.subscribe("layout-refreshing", this.blockLayout.bind(this));
38
- this.subscribe("layout-refreshed", this.unblockLayout.bind(this));
39
- this.subscribe("scrollbar-vertical", this.adjustForScrollbar.bind(this));
40
- }
41
-
42
- blockLayout(){
43
- this.blocked = true;
44
- }
45
-
46
- unblockLayout(){
47
- this.blocked = false;
48
- }
49
-
50
- layoutCell(cell){
51
- this.layoutElement(cell.element, cell.column);
52
- }
53
-
54
- reinitializeColumns(){
55
- this.reset();
56
-
57
- this.table.columnManager.columnsByIndex.forEach((column) => {
58
- this.initializeColumn(column);
59
- });
60
- }
61
-
62
- //initialize specific column
63
- initializeColumn(column){
64
- var config = {margin:0, edge:false};
65
-
66
- if(!column.isGroup){
67
-
68
- if(this.frozenCheck(column)){
69
-
70
- config.position = this.initializationMode;
71
-
72
- if(this.initializationMode == "left"){
73
- this.leftColumns.push(column);
74
- }else{
75
- this.rightColumns.unshift(column);
76
- }
77
-
78
- this.active = true;
79
-
80
- column.modules.frozen = config;
81
- }else{
82
- this.initializationMode = "right";
83
- }
84
- }
85
- }
86
-
87
- frozenCheck(column){
88
- if(column.parent.isGroup && column.definition.frozen){
89
- console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups");
90
- }
91
-
92
- if(column.parent.isGroup){
93
- return this.frozenCheck(column.parent);
94
- }else{
95
- return column.definition.frozen;
96
- }
97
- }
98
-
99
- //layout calculation rows
100
- layoutCalcRows(){
101
- if(this.table.modExists("columnCalcs")){
102
- if(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){
103
- this.layoutRow(this.table.modules.columnCalcs.topRow);
104
- }
105
-
106
- if(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){
107
- this.layoutRow(this.table.modules.columnCalcs.botRow);
108
- }
109
-
110
- if(this.table.modExists("groupRows")){
111
- this.layoutGroupCalcs(this.table.modules.groupRows.getGroups());
112
- }
113
- }
114
- }
115
-
116
- layoutGroupCalcs(groups){
117
- groups.forEach((group) => {
118
- if(group.calcs.top){
119
- this.layoutRow(group.calcs.top);
120
- }
121
-
122
- if(group.calcs.bottom){
123
- this.layoutRow(group.calcs.bottom);
124
- }
125
-
126
- if(group.groupList && group.groupList.length){
127
- this.layoutGroupCalcs(group.groupList);
128
- }
129
- });
130
- }
131
-
132
- //calculate column positions and layout headers
133
- layoutColumnPosition(allCells){
134
- var leftParents = [];
135
-
136
- var leftMargin = 0;
137
- var rightMargin = 0;
138
-
139
- this.leftColumns.forEach((column, i) => {
140
- column.modules.frozen.marginValue = leftMargin;
141
- column.modules.frozen.margin = column.modules.frozen.marginValue + "px";
142
-
143
- if(column.visible){
144
- leftMargin += column.getWidth();
145
- }
146
-
147
- if(i == this.leftColumns.length - 1){
148
- column.modules.frozen.edge = true;
149
- }else{
150
- column.modules.frozen.edge = false;
151
- }
152
-
153
- if(column.parent.isGroup){
154
- var parentEl = this.getColGroupParentElement(column);
155
- if(!leftParents.includes(parentEl)){
156
- this.layoutElement(parentEl, column);
157
- leftParents.push(parentEl);
158
- }
159
-
160
- if(column.modules.frozen.edge){
161
- parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position);
162
- }
163
- }else{
164
- this.layoutElement(column.getElement(), column);
165
- }
166
-
167
- if(allCells){
168
- column.cells.forEach((cell) => {
169
- this.layoutElement(cell.getElement(true), column);
170
- });
171
- }
172
- });
173
-
174
- this.rightColumns.forEach((column, i) => {
175
-
176
- column.modules.frozen.marginValue = rightMargin;
177
- column.modules.frozen.margin = column.modules.frozen.marginValue + "px";
178
-
179
- if(column.visible){
180
- rightMargin += column.getWidth();
181
- }
182
-
183
- if(i == this.rightColumns.length - 1){
184
- column.modules.frozen.edge = true;
185
- }else{
186
- column.modules.frozen.edge = false;
187
- }
188
-
189
- if(column.parent.isGroup){
190
- this.layoutElement(this.getColGroupParentElement(column), column);
191
- }else{
192
- this.layoutElement(column.getElement(), column);
193
- }
194
-
195
- if(allCells){
196
- column.cells.forEach((cell) => {
197
- this.layoutElement(cell.getElement(true), column);
198
- });
199
- }
200
- });
201
- }
202
-
203
- getColGroupParentElement(column){
204
- return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();
205
- }
206
-
207
- //layout columns appropriately
208
- layout(){
209
- if(this.active && !this.blocked){
210
-
211
- //calculate left columns
212
- this.layoutColumnPosition();
213
-
214
- this.reinitializeRows();
215
-
216
- this.layoutCalcRows();
217
- }
218
- }
219
-
220
- reinitializeRows(){
221
- var visibleRows = this.table.rowManager.getVisibleRows(true);
222
- var otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));
223
-
224
- otherRows.forEach((row) =>{
225
- row.deinitialize();
226
- });
227
-
228
- visibleRows.forEach((row) =>{
229
- if(row.type === "row"){
230
- this.layoutRow(row);
231
- }
232
- });
233
- }
234
-
235
- layoutRow(row){
236
- if(this.table.options.layout === "fitDataFill" && this.rightColumns.length){
237
- this.table.rowManager.getTableElement().style.minWidth = "calc(100% - " + this.rightMargin + ")";
238
- }
239
-
240
- this.leftColumns.forEach((column) => {
241
- var cell = row.getCell(column);
242
-
243
- if(cell){
244
- this.layoutElement(cell.getElement(true), column);
245
- }
246
- });
247
-
248
- this.rightColumns.forEach((column) => {
249
- var cell = row.getCell(column);
250
-
251
- if(cell){
252
- this.layoutElement(cell.getElement(true), column);
253
- }
254
- });
255
- }
256
-
257
- layoutElement(element, column){
258
- var position;
259
-
260
- if(column.modules.frozen){
261
- element.style.position = "sticky";
262
-
263
- if(this.table.rtl){
264
- position = column.modules.frozen.position === "left" ? "right" : "left";
265
- }else{
266
- position = column.modules.frozen.position;
267
- }
268
-
269
- element.style[position] = column.modules.frozen.margin;
270
-
271
- element.classList.add("tabulator-frozen");
272
-
273
- if(column.modules.frozen.edge){
274
- element.classList.add("tabulator-frozen-" + column.modules.frozen.position);
275
- }
276
- }
277
- }
278
-
279
- adjustForScrollbar(width){
280
- if(this.rightColumns.length){
281
- this.table.columnManager.getContentsElement().style.width = "calc(100% - " + width + "px)";
282
- }
283
- }
284
-
285
- _calcSpace(columns, index){
286
- var width = 0;
287
-
288
- for (let i = 0; i < index; i++){
289
- if(columns[i].visible){
290
- width += columns[i].getWidth();
291
- }
292
- }
293
-
294
- return width;
295
- }
296
- }
297
-
298
- FrozenColumns.moduleName = "frozenColumns";
299
-
1
+ import Module from '../../core/Module.js';
2
+
3
+ class FrozenColumns extends Module{
4
+
5
+ constructor(table){
6
+ super(table);
7
+
8
+ this.leftColumns = [];
9
+ this.rightColumns = [];
10
+ this.initializationMode = "left";
11
+ this.active = false;
12
+ this.blocked = true;
13
+
14
+ this.registerColumnOption("frozen");
15
+ }
16
+
17
+ //reset initial state
18
+ reset(){
19
+ this.initializationMode = "left";
20
+ this.leftColumns = [];
21
+ this.rightColumns = [];
22
+ this.active = false;
23
+ }
24
+
25
+ initialize(){
26
+ this.subscribe("cell-layout", this.layoutCell.bind(this));
27
+ this.subscribe("column-init", this.initializeColumn.bind(this));
28
+ this.subscribe("column-width", this.layout.bind(this));
29
+ this.subscribe("row-layout-after", this.layoutRow.bind(this));
30
+ this.subscribe("table-layout", this.layout.bind(this));
31
+ this.subscribe("columns-loading", this.reset.bind(this));
32
+
33
+ this.subscribe("column-add", this.reinitializeColumns.bind(this));
34
+ this.subscribe("column-delete", this.reinitializeColumns.bind(this));
35
+
36
+ this.subscribe("table-redraw", this.layout.bind(this));
37
+ this.subscribe("layout-refreshing", this.blockLayout.bind(this));
38
+ this.subscribe("layout-refreshed", this.unblockLayout.bind(this));
39
+ this.subscribe("scrollbar-vertical", this.adjustForScrollbar.bind(this));
40
+ }
41
+
42
+ blockLayout(){
43
+ this.blocked = true;
44
+ }
45
+
46
+ unblockLayout(){
47
+ this.blocked = false;
48
+ }
49
+
50
+ layoutCell(cell){
51
+ this.layoutElement(cell.element, cell.column);
52
+ }
53
+
54
+ reinitializeColumns(){
55
+ this.reset();
56
+
57
+ this.table.columnManager.columnsByIndex.forEach((column) => {
58
+ this.initializeColumn(column);
59
+ });
60
+ }
61
+
62
+ //initialize specific column
63
+ initializeColumn(column){
64
+ var config = {margin:0, edge:false};
65
+
66
+ if(!column.isGroup){
67
+
68
+ if(this.frozenCheck(column)){
69
+
70
+ config.position = this.initializationMode;
71
+
72
+ if(this.initializationMode == "left"){
73
+ this.leftColumns.push(column);
74
+ }else{
75
+ this.rightColumns.unshift(column);
76
+ }
77
+
78
+ this.active = true;
79
+
80
+ column.modules.frozen = config;
81
+ }else{
82
+ this.initializationMode = "right";
83
+ }
84
+ }
85
+ }
86
+
87
+ frozenCheck(column){
88
+ if(column.parent.isGroup && column.definition.frozen){
89
+ console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups");
90
+ }
91
+
92
+ if(column.parent.isGroup){
93
+ return this.frozenCheck(column.parent);
94
+ }else{
95
+ return column.definition.frozen;
96
+ }
97
+ }
98
+
99
+ //layout calculation rows
100
+ layoutCalcRows(){
101
+ if(this.table.modExists("columnCalcs")){
102
+ if(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){
103
+ this.layoutRow(this.table.modules.columnCalcs.topRow);
104
+ }
105
+
106
+ if(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){
107
+ this.layoutRow(this.table.modules.columnCalcs.botRow);
108
+ }
109
+
110
+ if(this.table.modExists("groupRows")){
111
+ this.layoutGroupCalcs(this.table.modules.groupRows.getGroups());
112
+ }
113
+ }
114
+ }
115
+
116
+ layoutGroupCalcs(groups){
117
+ groups.forEach((group) => {
118
+ if(group.calcs.top){
119
+ this.layoutRow(group.calcs.top);
120
+ }
121
+
122
+ if(group.calcs.bottom){
123
+ this.layoutRow(group.calcs.bottom);
124
+ }
125
+
126
+ if(group.groupList && group.groupList.length){
127
+ this.layoutGroupCalcs(group.groupList);
128
+ }
129
+ });
130
+ }
131
+
132
+ //calculate column positions and layout headers
133
+ layoutColumnPosition(allCells){
134
+ var leftParents = [];
135
+
136
+ var leftMargin = 0;
137
+ var rightMargin = 0;
138
+
139
+ this.leftColumns.forEach((column, i) => {
140
+ column.modules.frozen.marginValue = leftMargin;
141
+ column.modules.frozen.margin = column.modules.frozen.marginValue + "px";
142
+
143
+ if(column.visible){
144
+ leftMargin += column.getWidth();
145
+ }
146
+
147
+ if(i == this.leftColumns.length - 1){
148
+ column.modules.frozen.edge = true;
149
+ }else{
150
+ column.modules.frozen.edge = false;
151
+ }
152
+
153
+ if(column.parent.isGroup){
154
+ var parentEl = this.getColGroupParentElement(column);
155
+ if(!leftParents.includes(parentEl)){
156
+ this.layoutElement(parentEl, column);
157
+ leftParents.push(parentEl);
158
+ }
159
+
160
+ if(column.modules.frozen.edge){
161
+ parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position);
162
+ }
163
+ }else{
164
+ this.layoutElement(column.getElement(), column);
165
+ }
166
+
167
+ if(allCells){
168
+ column.cells.forEach((cell) => {
169
+ this.layoutElement(cell.getElement(true), column);
170
+ });
171
+ }
172
+ });
173
+
174
+ this.rightColumns.forEach((column, i) => {
175
+
176
+ column.modules.frozen.marginValue = rightMargin;
177
+ column.modules.frozen.margin = column.modules.frozen.marginValue + "px";
178
+
179
+ if(column.visible){
180
+ rightMargin += column.getWidth();
181
+ }
182
+
183
+ if(i == this.rightColumns.length - 1){
184
+ column.modules.frozen.edge = true;
185
+ }else{
186
+ column.modules.frozen.edge = false;
187
+ }
188
+
189
+ if(column.parent.isGroup){
190
+ this.layoutElement(this.getColGroupParentElement(column), column);
191
+ }else{
192
+ this.layoutElement(column.getElement(), column);
193
+ }
194
+
195
+ if(allCells){
196
+ column.cells.forEach((cell) => {
197
+ this.layoutElement(cell.getElement(true), column);
198
+ });
199
+ }
200
+ });
201
+ }
202
+
203
+ getColGroupParentElement(column){
204
+ return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();
205
+ }
206
+
207
+ //layout columns appropriately
208
+ layout(){
209
+ if(this.active && !this.blocked){
210
+
211
+ //calculate left columns
212
+ this.layoutColumnPosition();
213
+
214
+ this.reinitializeRows();
215
+
216
+ this.layoutCalcRows();
217
+ }
218
+ }
219
+
220
+ reinitializeRows(){
221
+ var visibleRows = this.table.rowManager.getVisibleRows(true);
222
+ var otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));
223
+
224
+ otherRows.forEach((row) =>{
225
+ row.deinitialize();
226
+ });
227
+
228
+ visibleRows.forEach((row) =>{
229
+ if(row.type === "row"){
230
+ this.layoutRow(row);
231
+ }
232
+ });
233
+ }
234
+
235
+ layoutRow(row){
236
+ if(this.table.options.layout === "fitDataFill" && this.rightColumns.length){
237
+ this.table.rowManager.getTableElement().style.minWidth = "calc(100% - " + this.rightMargin + ")";
238
+ }
239
+
240
+ this.leftColumns.forEach((column) => {
241
+ var cell = row.getCell(column);
242
+
243
+ if(cell){
244
+ this.layoutElement(cell.getElement(true), column);
245
+ }
246
+ });
247
+
248
+ this.rightColumns.forEach((column) => {
249
+ var cell = row.getCell(column);
250
+
251
+ if(cell){
252
+ this.layoutElement(cell.getElement(true), column);
253
+ }
254
+ });
255
+ }
256
+
257
+ layoutElement(element, column){
258
+ var position;
259
+
260
+ if(column.modules.frozen){
261
+ element.style.position = "sticky";
262
+
263
+ if(this.table.rtl){
264
+ position = column.modules.frozen.position === "left" ? "right" : "left";
265
+ }else{
266
+ position = column.modules.frozen.position;
267
+ }
268
+
269
+ element.style[position] = column.modules.frozen.margin;
270
+
271
+ element.classList.add("tabulator-frozen");
272
+
273
+ if(column.modules.frozen.edge){
274
+ element.classList.add("tabulator-frozen-" + column.modules.frozen.position);
275
+ }
276
+ }
277
+ }
278
+
279
+ adjustForScrollbar(width){
280
+ if(this.rightColumns.length){
281
+ this.table.columnManager.getContentsElement().style.width = "calc(100% - " + width + "px)";
282
+ }
283
+ }
284
+
285
+ _calcSpace(columns, index){
286
+ var width = 0;
287
+
288
+ for (let i = 0; i < index; i++){
289
+ if(columns[i].visible){
290
+ width += columns[i].getWidth();
291
+ }
292
+ }
293
+
294
+ return width;
295
+ }
296
+ }
297
+
298
+ FrozenColumns.moduleName = "frozenColumns";
299
+
300
300
  export default FrozenColumns;