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,587 @@
1
+ import Renderer from '../Renderer.js';
2
+
3
+ export default class VirtualDomHorizontal extends Renderer{
4
+ constructor(table){
5
+ super(table);
6
+
7
+ this.leftCol = 0;
8
+ this.rightCol = 0;
9
+ this.scrollLeft = 0;
10
+
11
+ this.vDomScrollPosLeft = 0;
12
+ this.vDomScrollPosRight = 0;
13
+
14
+ this.vDomPadLeft = 0;
15
+ this.vDomPadRight = 0;
16
+
17
+ this.fitDataColAvg = 0;
18
+
19
+ this.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen
20
+
21
+ this.visibleRows = null;
22
+
23
+ this.initialized = false;
24
+ this.isFitData = false;
25
+
26
+ this.columns = [];
27
+ }
28
+
29
+ initialize(){
30
+ this.compatibilityCheck();
31
+ this.layoutCheck();
32
+ this.vertScrollListen();
33
+ }
34
+
35
+ compatibilityCheck(){
36
+ if(this.options("layout") == "fitDataTable"){
37
+ console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode");
38
+ }
39
+
40
+ if(this.options("responsiveLayout")){
41
+ console.warn("Horizontal Virtual DOM is not compatible with responsive columns");
42
+ }
43
+
44
+ if(this.options("rtl")){
45
+ console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction");
46
+ }
47
+ }
48
+
49
+ layoutCheck(){
50
+ this.isFitData = this.options("layout").startsWith('fitData');
51
+ }
52
+
53
+ vertScrollListen(){
54
+ this.subscribe("scroll-vertical", this.clearVisRowCache.bind(this));
55
+ this.subscribe("data-refreshed", this.clearVisRowCache.bind(this));
56
+ }
57
+
58
+ clearVisRowCache(){
59
+ this.visibleRows = null;
60
+ }
61
+
62
+ //////////////////////////////////////
63
+ ///////// Public Functions ///////////
64
+ //////////////////////////////////////
65
+
66
+ renderColumns(row, force){
67
+ this.dataChange();
68
+ }
69
+
70
+
71
+ scrollColumns(left, dir){
72
+ if(this.scrollLeft != left){
73
+ this.scrollLeft = left;
74
+
75
+ this.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));
76
+ }
77
+ }
78
+
79
+ calcWindowBuffer(){
80
+ var buffer = this.elementVertical.clientWidth;
81
+
82
+ this.table.columnManager.columnsByIndex.forEach((column) => {
83
+ if(column.visible){
84
+ var width = column.getWidth();
85
+
86
+ if(width > buffer){
87
+ buffer = width;
88
+ }
89
+ }
90
+ });
91
+
92
+ this.windowBuffer = buffer * 2;
93
+ }
94
+
95
+ rerenderColumns(update, blockRedraw){
96
+ var old = {
97
+ cols:this.columns,
98
+ leftCol:this.leftCol,
99
+ rightCol:this.rightCol,
100
+ },
101
+ colPos = 0;
102
+
103
+ if(update && !this.initialized){
104
+ return;
105
+ }
106
+
107
+ this.clear();
108
+
109
+ this.calcWindowBuffer();
110
+
111
+ this.scrollLeft = this.elementVertical.scrollLeft;
112
+
113
+ this.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;
114
+ this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;
115
+
116
+ this.table.columnManager.columnsByIndex.forEach((column) => {
117
+ var config = {},
118
+ width;
119
+
120
+ if(column.visible){
121
+ if(!column.modules.frozen){
122
+ width = column.getWidth();
123
+
124
+ config.leftPos = colPos;
125
+ config.rightPos = colPos + width;
126
+
127
+ config.width = width;
128
+
129
+ if (this.isFitData) {
130
+ config.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;
131
+ }
132
+
133
+ if((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){
134
+ //column is visible
135
+
136
+ if(this.leftCol == -1){
137
+ this.leftCol = this.columns.length;
138
+ this.vDomPadLeft = colPos;
139
+ }
140
+
141
+ this.rightCol = this.columns.length;
142
+ }else{
143
+ // column is hidden
144
+ if(this.leftCol !== -1){
145
+ this.vDomPadRight += width;
146
+ }
147
+ }
148
+
149
+ this.columns.push(column);
150
+
151
+ column.modules.vdomHoz = config;
152
+
153
+ colPos += width;
154
+ }
155
+ }
156
+ });
157
+
158
+ this.tableElement.style.paddingLeft = this.vDomPadLeft + "px";
159
+ this.tableElement.style.paddingRight = this.vDomPadRight + "px";
160
+
161
+ this.initialized = true;
162
+
163
+ if(!blockRedraw){
164
+ if(!update || this.reinitChanged(old)){
165
+ this.reinitializeRows();
166
+ }
167
+ }
168
+
169
+ this.elementVertical.scrollLeft = this.scrollLeft;
170
+ }
171
+
172
+ renderRowCells(row){
173
+ if(this.initialized){
174
+ this.initializeRow(row);
175
+ }else{
176
+ const rowFrag = document.createDocumentFragment();
177
+ row.cells.forEach((cell) => {
178
+ rowFrag.appendChild(cell.getElement());
179
+ });
180
+ row.element.appendChild(rowFrag);
181
+
182
+ row.cells.forEach((cell) => {
183
+ cell.cellRendered();
184
+ });
185
+ }
186
+ }
187
+
188
+ rerenderRowCells(row, force){
189
+ this.reinitializeRow(row, force);
190
+ }
191
+
192
+ reinitializeColumnWidths(columns){
193
+ for(let i = this.leftCol; i <= this.rightCol; i++){
194
+ let col = this.columns[i];
195
+
196
+ if(col){
197
+ col.reinitializeWidth();
198
+ }
199
+ }
200
+ }
201
+
202
+ //////////////////////////////////////
203
+ //////// Internal Rendering //////////
204
+ //////////////////////////////////////
205
+
206
+ deinitialize(){
207
+ this.initialized = false;
208
+ }
209
+
210
+ clear(){
211
+ this.columns = [];
212
+
213
+ this.leftCol = -1;
214
+ this.rightCol = 0;
215
+
216
+ this.vDomScrollPosLeft = 0;
217
+ this.vDomScrollPosRight = 0;
218
+ this.vDomPadLeft = 0;
219
+ this.vDomPadRight = 0;
220
+ }
221
+
222
+ dataChange(){
223
+ var change = false,
224
+ row, rowEl;
225
+
226
+ if(this.isFitData){
227
+ this.table.columnManager.columnsByIndex.forEach((column) => {
228
+ if(!column.definition.width && column.visible){
229
+ change = true;
230
+ }
231
+ });
232
+
233
+ if(change && this.table.rowManager.getDisplayRows().length){
234
+ this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;
235
+
236
+ row = this.chain("rows-sample", [1], [], () => {
237
+ return this.table.rowManager.getDisplayRows();
238
+ })[0];
239
+
240
+ if(row){
241
+ rowEl = row.getElement();
242
+
243
+ row.generateCells();
244
+
245
+ this.tableElement.appendChild(rowEl);
246
+
247
+ for(let colEnd = 0; colEnd < row.cells.length; colEnd++){
248
+ let cell = row.cells[colEnd];
249
+ rowEl.appendChild(cell.getElement());
250
+
251
+ cell.column.reinitializeWidth();
252
+ }
253
+
254
+ rowEl.parentNode.removeChild(rowEl);
255
+
256
+ this.rerenderColumns(false, true);
257
+ }
258
+ }
259
+ }else{
260
+ if(this.options("layout") === "fitColumns"){
261
+ this.layoutRefresh();
262
+ this.rerenderColumns(false, true);
263
+ }
264
+ }
265
+ }
266
+
267
+ reinitChanged(old){
268
+ var match = true;
269
+
270
+ if(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){
271
+ return true;
272
+ }
273
+
274
+ old.cols.forEach((col, i) => {
275
+ if(col !== this.columns[i]){
276
+ match = false;
277
+ }
278
+ });
279
+
280
+ return !match;
281
+ }
282
+
283
+ reinitializeRows(){
284
+ var visibleRows = this.getVisibleRows(),
285
+ otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));
286
+
287
+ visibleRows.forEach((row) => {
288
+ this.reinitializeRow(row, true);
289
+ });
290
+
291
+ otherRows.forEach((row) =>{
292
+ row.deinitialize();
293
+ });
294
+ }
295
+
296
+ getVisibleRows(){
297
+ if (!this.visibleRows){
298
+ this.visibleRows = this.table.rowManager.getVisibleRows();
299
+ }
300
+
301
+ return this.visibleRows;
302
+ }
303
+
304
+ scroll(diff){
305
+ this.vDomScrollPosLeft += diff;
306
+ this.vDomScrollPosRight += diff;
307
+
308
+ if(Math.abs(diff) > (this.windowBuffer / 2)){
309
+ this.rerenderColumns();
310
+ }else{
311
+ if(diff > 0){
312
+ //scroll right
313
+ this.addColRight();
314
+ this.removeColLeft();
315
+ }else{
316
+ //scroll left
317
+ this.addColLeft();
318
+ this.removeColRight();
319
+ }
320
+ }
321
+ }
322
+
323
+ colPositionAdjust (start, end, diff){
324
+ for(let i = start; i < end; i++){
325
+ let column = this.columns[i];
326
+
327
+ column.modules.vdomHoz.leftPos += diff;
328
+ column.modules.vdomHoz.rightPos += diff;
329
+ }
330
+ }
331
+
332
+ addColRight(){
333
+ var changes = false,
334
+ working = true;
335
+
336
+ while(working){
337
+
338
+ let column = this.columns[this.rightCol + 1];
339
+
340
+ if(column){
341
+ if(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){
342
+ changes = true;
343
+
344
+ this.getVisibleRows().forEach((row) => {
345
+ if(row.type !== "group"){
346
+ var cell = row.getCell(column);
347
+ row.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling);
348
+ cell.cellRendered();
349
+ }
350
+ });
351
+
352
+ this.fitDataColActualWidthCheck(column);
353
+
354
+ this.rightCol++; // Don't move this below the >= check below
355
+
356
+ this.getVisibleRows().forEach((row) => {
357
+ if(row.type !== "group"){
358
+ row.modules.vdomHoz.rightCol = this.rightCol;
359
+ }
360
+ });
361
+
362
+ if(this.rightCol >= (this.columns.length - 1)){
363
+ this.vDomPadRight = 0;
364
+ }else{
365
+ this.vDomPadRight -= column.getWidth();
366
+ }
367
+ }else{
368
+ working = false;
369
+ }
370
+ }else{
371
+ working = false;
372
+ }
373
+ }
374
+
375
+ if(changes){
376
+ this.tableElement.style.paddingRight = this.vDomPadRight + "px";
377
+ }
378
+ }
379
+
380
+ addColLeft(){
381
+ var changes = false,
382
+ working = true;
383
+
384
+ while(working){
385
+ let column = this.columns[this.leftCol - 1];
386
+
387
+ if(column){
388
+ if(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){
389
+ changes = true;
390
+
391
+ this.getVisibleRows().forEach((row) => {
392
+ if(row.type !== "group"){
393
+ var cell = row.getCell(column);
394
+ row.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement());
395
+ cell.cellRendered();
396
+ }
397
+ });
398
+
399
+ this.leftCol--; // don't move this below the <= check below
400
+
401
+ this.getVisibleRows().forEach((row) => {
402
+ if(row.type !== "group"){
403
+ row.modules.vdomHoz.leftCol = this.leftCol;
404
+ }
405
+ });
406
+
407
+ if(this.leftCol <= 0){ // replicating logic in addColRight
408
+ this.vDomPadLeft = 0;
409
+ }else{
410
+ this.vDomPadLeft -= column.getWidth();
411
+ }
412
+
413
+ let diff = this.fitDataColActualWidthCheck(column);
414
+
415
+ if(diff){
416
+ this.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;
417
+ this.vDomPadRight -= diff;
418
+ }
419
+
420
+ }else{
421
+ working = false;
422
+ }
423
+ }else{
424
+ working = false;
425
+ }
426
+ }
427
+
428
+ if(changes){
429
+ this.tableElement.style.paddingLeft = this.vDomPadLeft + "px";
430
+ }
431
+ }
432
+
433
+ removeColRight(){
434
+ var changes = false,
435
+ working = true;
436
+
437
+ while(working){
438
+ let column = this.columns[this.rightCol];
439
+
440
+ if(column){
441
+ if(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){
442
+ changes = true;
443
+
444
+ this.getVisibleRows().forEach((row) => {
445
+ if(row.type !== "group"){
446
+ var cell = row.getCell(column);
447
+
448
+ try {
449
+ row.getElement().removeChild(cell.getElement());
450
+ } catch (ex) {
451
+ console.warn("Could not removeColRight", ex.message);
452
+ }
453
+ }
454
+ });
455
+
456
+ this.vDomPadRight += column.getWidth();
457
+ this.rightCol --;
458
+
459
+ this.getVisibleRows().forEach((row) => {
460
+ if(row.type !== "group"){
461
+ row.modules.vdomHoz.rightCol = this.rightCol;
462
+ }
463
+ });
464
+ }else{
465
+ working = false;
466
+ }
467
+ }else{
468
+ working = false;
469
+ }
470
+ }
471
+
472
+ if(changes){
473
+ this.tableElement.style.paddingRight = this.vDomPadRight + "px";
474
+ }
475
+ }
476
+
477
+ removeColLeft(){
478
+ var changes = false,
479
+ working = true;
480
+
481
+ while(working){
482
+ let column = this.columns[this.leftCol];
483
+
484
+ if(column){
485
+ if(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){
486
+ changes = true;
487
+
488
+ this.getVisibleRows().forEach((row) => {
489
+ if(row.type !== "group"){
490
+ var cell = row.getCell(column);
491
+
492
+ try {
493
+ row.getElement().removeChild(cell.getElement());
494
+ } catch (ex) {
495
+ console.warn("Could not removeColLeft", ex.message);
496
+ }
497
+ }
498
+ });
499
+
500
+ this.vDomPadLeft += column.getWidth();
501
+ this.leftCol ++;
502
+
503
+ this.getVisibleRows().forEach((row) => {
504
+ if(row.type !== "group"){
505
+ row.modules.vdomHoz.leftCol = this.leftCol;
506
+ }
507
+ });
508
+ }else{
509
+ working = false;
510
+ }
511
+ }else{
512
+ working = false;
513
+ }
514
+ }
515
+
516
+ if(changes){
517
+ this.tableElement.style.paddingLeft = this.vDomPadLeft + "px";
518
+ }
519
+ }
520
+
521
+ fitDataColActualWidthCheck(column){
522
+ var newWidth, widthDiff;
523
+
524
+ if(column.modules.vdomHoz.fitDataCheck){
525
+ column.reinitializeWidth();
526
+
527
+ newWidth = column.getWidth();
528
+ widthDiff = newWidth - column.modules.vdomHoz.width;
529
+
530
+ if(widthDiff){
531
+ column.modules.vdomHoz.rightPos += widthDiff;
532
+ column.modules.vdomHoz.width = newWidth;
533
+ this.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);
534
+ }
535
+
536
+ column.modules.vdomHoz.fitDataCheck = false;
537
+ }
538
+
539
+ return widthDiff;
540
+ }
541
+
542
+ initializeRow(row){
543
+ if(row.type !== "group"){
544
+ row.modules.vdomHoz = {
545
+ leftCol:this.leftCol,
546
+ rightCol:this.rightCol,
547
+ };
548
+
549
+ if(this.table.modules.frozenColumns){
550
+ this.table.modules.frozenColumns.leftColumns.forEach((column) => {
551
+ this.appendCell(row, column);
552
+ });
553
+ }
554
+
555
+ for(let i = this.leftCol; i <= this.rightCol; i++){
556
+ this.appendCell(row, this.columns[i]);
557
+ }
558
+
559
+ if(this.table.modules.frozenColumns){
560
+ this.table.modules.frozenColumns.rightColumns.forEach((column) => {
561
+ this.appendCell(row, column);
562
+ });
563
+ }
564
+ }
565
+ }
566
+
567
+ appendCell(row, column){
568
+ if(column && column.visible){
569
+ let cell = row.getCell(column);
570
+
571
+ row.getElement().appendChild(cell.getElement());
572
+ cell.cellRendered();
573
+ }
574
+ }
575
+
576
+ reinitializeRow(row, force){
577
+ if(row.type !== "group"){
578
+ if(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){
579
+
580
+ var rowEl = row.getElement();
581
+ while(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);
582
+
583
+ this.initializeRow(row);
584
+ }
585
+ }
586
+ }
587
+ }