tabulator-tables 5.6.0 → 6.0.0

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 (168) hide show
  1. package/bower.json +1 -1
  2. package/build/{Bundler.js → Bundler.mjs} +8 -6
  3. package/build/rollup.mjs +9 -0
  4. package/dist/css/tabulator.css +67 -5
  5. package/dist/css/tabulator.css.map +1 -1
  6. package/dist/css/tabulator.min.css +1 -1
  7. package/dist/css/tabulator.min.css.map +1 -1
  8. package/dist/css/tabulator_bootstrap3.css +77 -5
  9. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  10. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  11. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  12. package/dist/css/tabulator_bootstrap4.css +83 -5
  13. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  14. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  15. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  16. package/dist/css/tabulator_bootstrap5.css +83 -5
  17. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  18. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  19. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  20. package/dist/css/tabulator_bulma.css +89 -5
  21. package/dist/css/tabulator_bulma.css.map +1 -1
  22. package/dist/css/tabulator_bulma.min.css +1 -1
  23. package/dist/css/tabulator_bulma.min.css.map +1 -1
  24. package/dist/css/tabulator_materialize.css +82 -5
  25. package/dist/css/tabulator_materialize.css.map +1 -1
  26. package/dist/css/tabulator_materialize.min.css +1 -1
  27. package/dist/css/tabulator_materialize.min.css.map +1 -1
  28. package/dist/css/tabulator_midnight.css +77 -5
  29. package/dist/css/tabulator_midnight.css.map +1 -1
  30. package/dist/css/tabulator_midnight.min.css +1 -1
  31. package/dist/css/tabulator_midnight.min.css.map +1 -1
  32. package/dist/css/tabulator_modern.css +87 -5
  33. package/dist/css/tabulator_modern.css.map +1 -1
  34. package/dist/css/tabulator_modern.min.css +1 -1
  35. package/dist/css/tabulator_modern.min.css.map +1 -1
  36. package/dist/css/tabulator_semanticui.css +79 -5
  37. package/dist/css/tabulator_semanticui.css.map +1 -1
  38. package/dist/css/tabulator_semanticui.min.css +1 -1
  39. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  40. package/dist/css/tabulator_simple.css +80 -5
  41. package/dist/css/tabulator_simple.css.map +1 -1
  42. package/dist/css/tabulator_simple.min.css +1 -1
  43. package/dist/css/tabulator_simple.min.css.map +1 -1
  44. package/dist/css/tabulator_site.css +90 -5
  45. package/dist/css/tabulator_site.css.map +1 -1
  46. package/dist/css/tabulator_site.min.css +1 -1
  47. package/dist/css/tabulator_site.min.css.map +1 -1
  48. package/dist/js/tabulator.js +3865 -2755
  49. package/dist/js/tabulator.js.map +1 -1
  50. package/dist/js/tabulator.min.js +2 -2
  51. package/dist/js/tabulator.min.js.map +1 -1
  52. package/dist/js/tabulator_esm.js +3857 -2745
  53. package/dist/js/tabulator_esm.js.map +1 -1
  54. package/dist/js/tabulator_esm.min.js +2 -2
  55. package/dist/js/tabulator_esm.min.js.map +1 -1
  56. package/package.json +17 -17
  57. package/src/js/builds/esm.js +2 -0
  58. package/src/js/core/ColumnManager.js +15 -0
  59. package/src/js/core/Module.js +2 -4
  60. package/src/js/core/RowManager.js +4 -6
  61. package/src/js/core/Tabulator.js +36 -23
  62. package/src/js/core/TabulatorFull.js +15 -5
  63. package/src/js/core/cell/Cell.js +4 -0
  64. package/src/js/core/column/Column.js +231 -216
  65. package/src/js/core/column/ColumnComponent.js +1 -3
  66. package/src/js/core/defaults/options.js +1 -0
  67. package/src/js/core/modules/optional.js +2 -1
  68. package/src/js/core/row/Row.js +23 -11
  69. package/src/js/core/tools/DataLoader.js +1 -1
  70. package/src/js/core/tools/ModuleBinder.js +123 -75
  71. package/src/js/core/tools/TableRegistry.js +58 -55
  72. package/src/js/modules/Accessor/Accessor.js +7 -8
  73. package/src/js/modules/Accessor/defaults/accessors.js +5 -1
  74. package/src/js/modules/Ajax/Ajax.js +10 -12
  75. package/src/js/modules/Clipboard/Clipboard.js +10 -10
  76. package/src/js/modules/Clipboard/defaults/pasteActions.js +0 -43
  77. package/src/js/modules/Clipboard/defaults/pasteParsers.js +0 -55
  78. package/src/js/modules/Clipboard/extensions/extensions.js +9 -0
  79. package/src/js/modules/Clipboard/extensions/keybindings/actions.js +9 -0
  80. package/src/js/modules/Clipboard/extensions/keybindings/bindings.js +3 -0
  81. package/src/js/modules/ColumnCalcs/CalcComponent.js +2 -4
  82. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +16 -18
  83. package/src/js/modules/Comms/Comms.js +5 -8
  84. package/src/js/modules/DataTree/DataTree.js +11 -11
  85. package/src/js/modules/Download/Download.js +9 -11
  86. package/src/js/modules/Edit/Edit.js +63 -21
  87. package/src/js/modules/Edit/List.js +12 -12
  88. package/src/js/modules/Edit/defaults/editors/datetime.js +1 -1
  89. package/src/js/modules/Edit/defaults/editors/time.js +1 -1
  90. package/src/js/modules/Edit/defaults/editors.js +0 -4
  91. package/src/js/modules/Export/Export.js +70 -62
  92. package/src/js/modules/Export/ExportColumn.js +2 -4
  93. package/src/js/modules/Export/ExportRow.js +2 -4
  94. package/src/js/modules/Export/defaults/columnLookups.js +3 -0
  95. package/src/js/modules/Export/defaults/rowLookups.js +18 -0
  96. package/src/js/modules/Filter/Filter.js +7 -9
  97. package/src/js/modules/Format/Format.js +7 -9
  98. package/src/js/modules/Format/defaults/formatters.js +0 -4
  99. package/src/js/modules/FrozenColumns/FrozenColumns.js +9 -6
  100. package/src/js/modules/FrozenRows/FrozenRows.js +4 -6
  101. package/src/js/modules/GroupRows/Group.js +2 -4
  102. package/src/js/modules/GroupRows/GroupComponent.js +2 -4
  103. package/src/js/modules/GroupRows/GroupRows.js +4 -6
  104. package/src/js/modules/History/History.js +10 -10
  105. package/src/js/modules/History/extensions/extensions.js +9 -0
  106. package/src/js/modules/History/extensions/keybindings/actions.js +27 -0
  107. package/src/js/modules/History/extensions/keybindings/bindings.js +4 -0
  108. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +4 -6
  109. package/src/js/modules/Import/Import.js +7 -9
  110. package/src/js/modules/Import/defaults/importers/array.js +2 -4
  111. package/src/js/modules/Import/defaults/importers/csv.js +2 -4
  112. package/src/js/modules/Interaction/Interaction.js +4 -6
  113. package/src/js/modules/Keybindings/Keybindings.js +8 -10
  114. package/src/js/modules/Keybindings/defaults/actions.js +5 -71
  115. package/src/js/modules/Keybindings/defaults/bindings.js +0 -16
  116. package/src/js/modules/Layout/Layout.js +7 -9
  117. package/src/js/modules/Localize/Localize.js +7 -9
  118. package/src/js/modules/Menu/Menu.js +7 -9
  119. package/src/js/modules/MoveColumns/MoveColumns.js +6 -8
  120. package/src/js/modules/MoveRows/MoveRows.js +13 -45
  121. package/src/js/modules/MoveRows/defaults/receivers.js +30 -0
  122. package/src/js/modules/MoveRows/defaults/senders.js +5 -0
  123. package/src/js/modules/Mutator/Mutator.js +7 -9
  124. package/src/js/modules/Page/Page.js +7 -9
  125. package/src/js/modules/Persistence/Persistence.js +10 -12
  126. package/src/js/modules/Popup/Popup.js +4 -8
  127. package/src/js/modules/Print/Print.js +4 -6
  128. package/src/js/modules/ReactiveData/ReactiveData.js +4 -9
  129. package/src/js/modules/ResizeColumns/ResizeColumns.js +91 -53
  130. package/src/js/modules/ResizeRows/ResizeRows.js +41 -8
  131. package/src/js/modules/ResizeTable/ResizeTable.js +4 -6
  132. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +15 -9
  133. package/src/js/modules/ResponsiveLayout/extensions/extensions.js +9 -0
  134. package/src/js/modules/SelectRange/Range.js +40 -21
  135. package/src/js/modules/SelectRange/RangeComponent.js +2 -4
  136. package/src/js/modules/SelectRange/SelectRange.js +88 -43
  137. package/src/js/modules/SelectRange/extensions/clipboard/pasteActions.js +45 -0
  138. package/src/js/modules/SelectRange/extensions/clipboard/pasteParsers.js +57 -0
  139. package/src/js/modules/SelectRange/extensions/export/columnLookups.js +11 -0
  140. package/src/js/modules/SelectRange/extensions/export/rowLookups.js +5 -0
  141. package/src/js/modules/SelectRange/extensions/extensions.js +21 -0
  142. package/src/js/modules/SelectRange/extensions/keybindings/actions.js +38 -0
  143. package/src/js/modules/SelectRange/extensions/keybindings/bindings.js +14 -0
  144. package/src/js/modules/SelectRow/SelectRow.js +12 -12
  145. package/src/js/modules/SelectRow/extensions/extensions.js +9 -0
  146. package/src/js/modules/Sort/Sort.js +16 -13
  147. package/src/js/modules/Spreadsheet/GridCalculator.js +64 -0
  148. package/src/js/modules/Spreadsheet/Sheet.js +243 -0
  149. package/src/js/modules/Spreadsheet/SheetComponent.js +59 -0
  150. package/src/js/modules/Spreadsheet/Spreadsheet.js +309 -0
  151. package/src/js/modules/Tooltip/Tooltip.js +6 -8
  152. package/src/js/modules/Validate/Validate.js +7 -9
  153. package/src/scss/tabulator.scss +86 -10
  154. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +14 -0
  155. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +18 -0
  156. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +18 -0
  157. package/src/scss/themes/bulma/tabulator_bulma.scss +24 -0
  158. package/src/scss/themes/materialize/tabulator_materialize.scss +18 -0
  159. package/src/scss/themes/semanticui/tabulator_semanticui.scss +14 -0
  160. package/src/scss/themes/tabulator_midnight.scss +34 -21
  161. package/src/scss/themes/tabulator_modern.scss +23 -0
  162. package/src/scss/themes/tabulator_simple.scss +15 -0
  163. package/src/scss/themes/tabulator_site.scss +25 -0
  164. package/build/rollup.js +0 -6
  165. package/src/js/modules/Edit/defaults/editors/autocomplete.js +0 -12
  166. package/src/js/modules/Edit/defaults/editors/select.js +0 -10
  167. /package/src/js/modules/{Format/defaults → ResponsiveLayout/extensions}/formatters/responsiveCollapse.js +0 -0
  168. /package/src/js/modules/{Format/defaults → SelectRow/extensions}/formatters/rowSelection.js +0 -0
@@ -1,7 +1,9 @@
1
1
  import Module from '../../core/Module.js';
2
2
 
3
- class ResizeColumns extends Module{
4
-
3
+ export default class ResizeColumns extends Module{
4
+
5
+ static moduleName = "resizeColumns";
6
+
5
7
  constructor(table){
6
8
  super(table);
7
9
 
@@ -16,6 +18,7 @@ class ResizeColumns extends Module{
16
18
  this.initialized = false;
17
19
  this.registerColumnOption("resizable", true);
18
20
  this.registerTableOption("resizableColumnFit", false);
21
+ this.registerTableOption("resizableColumnGuide", false);
19
22
  }
20
23
 
21
24
  initialize(){
@@ -163,7 +166,7 @@ class ResizeColumns extends Module{
163
166
 
164
167
  if(oldWidth !== nearestColumn.getWidth()){
165
168
  self.dispatch("column-resized", nearestColumn);
166
- self.table.externalEvents.dispatch("columnResized", nearestColumn.getComponent());
169
+ self.dispatchExternal("columnResized", nearestColumn.getComponent());
167
170
  }
168
171
  });
169
172
 
@@ -208,60 +211,99 @@ class ResizeColumns extends Module{
208
211
  }
209
212
  }
210
213
 
214
+ resize(e, column){
215
+ var x = typeof e.clientX === "undefined" ? e.touches[0].clientX : e.clientX,
216
+ startDiff = x - this.startX,
217
+ moveDiff = x - this.latestX,
218
+ blockedBefore, blockedAfter;
219
+
220
+ this.latestX = x;
221
+
222
+ if(this.table.rtl){
223
+ startDiff = -startDiff;
224
+ moveDiff = -moveDiff;
225
+ }
226
+
227
+ blockedBefore = column.width == column.minWidth || column.width == column.maxWidth;
228
+
229
+ column.setWidth(this.startWidth + startDiff);
230
+
231
+ blockedAfter = column.width == column.minWidth || column.width == column.maxWidth;
232
+
233
+ if(moveDiff < 0){
234
+ this.nextColumn = this.initialNextColumn;
235
+ }
236
+
237
+ if(this.table.options.resizableColumnFit && this.nextColumn && !(blockedBefore && blockedAfter)){
238
+ let colWidth = this.nextColumn.getWidth();
239
+
240
+ if(moveDiff > 0){
241
+ if(colWidth <= this.nextColumn.minWidth){
242
+ this.nextColumn = this.nextColumn.nextColumn();
243
+ }
244
+ }
245
+
246
+ if(this.nextColumn){
247
+ this.nextColumn.setWidth(this.nextColumn.getWidth() - moveDiff);
248
+ }
249
+ }
250
+
251
+ this.table.columnManager.rerenderColumns(true);
252
+
253
+ if(!this.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){
254
+ column.checkCellHeights();
255
+ }
256
+ }
257
+
258
+ calcGuidePosition(e, column, handle) {
259
+ var mouseX = typeof e.clientX === "undefined" ? e.touches[0].clientX : e.clientX,
260
+ handleX = handle.getBoundingClientRect().x - this.table.element.getBoundingClientRect().x,
261
+ tableX = this.table.element.getBoundingClientRect().x,
262
+ columnX = column.element.getBoundingClientRect().left - tableX,
263
+ mouseDiff = mouseX - this.startX,
264
+ pos = Math.max(handleX + mouseDiff, columnX + column.minWidth);
265
+
266
+ if(column.maxWidth){
267
+ pos = Math.min(pos, columnX + column.maxWidth);
268
+ }
269
+
270
+ return pos;
271
+ }
272
+
211
273
  _checkResizability(column){
212
274
  return column.definition.resizable;
213
275
  }
214
276
 
215
277
  _mouseDown(e, column, handle){
216
- var self = this;
217
-
278
+ var self = this,
279
+ guideEl;
280
+
281
+ this.dispatchExternal("columnResizing", column.getComponent());
282
+
283
+ if(self.table.options.resizableColumnGuide){
284
+ guideEl = document.createElement("span");
285
+ guideEl.classList.add('tabulator-col-resize-guide');
286
+ self.table.element.appendChild(guideEl);
287
+ setTimeout(() => {
288
+ guideEl.style.left = self.calcGuidePosition(e, column, handle) + "px";
289
+ });
290
+ }
291
+
218
292
  self.table.element.classList.add("tabulator-block-select");
219
-
293
+
220
294
  function mouseMove(e){
221
- var x = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX,
222
- startDiff = x - self.startX,
223
- moveDiff = x - self.latestX,
224
- blockedBefore, blockedAfter;
225
-
226
- self.latestX = x;
227
-
228
- if(self.table.rtl){
229
- startDiff = -startDiff;
230
- moveDiff = -moveDiff;
231
- }
232
-
233
- blockedBefore = column.width == column.minWidth || column.width == column.maxWidth;
234
-
235
- column.setWidth(self.startWidth + startDiff);
236
-
237
- blockedAfter = column.width == column.minWidth || column.width == column.maxWidth;
238
-
239
- if(moveDiff < 0){
240
- self.nextColumn = self.initialNextColumn;
241
- }
242
-
243
- if(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){
244
- let colWidth = self.nextColumn.getWidth();
245
-
246
- if(moveDiff > 0){
247
- if(colWidth <= self.nextColumn.minWidth){
248
- self.nextColumn = self.nextColumn.nextColumn();
249
- }
250
- }
251
-
252
- if(self.nextColumn){
253
- self.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);
254
- }
255
- }
256
-
257
- self.table.columnManager.rerenderColumns(true);
258
-
259
- if(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){
260
- column.checkCellHeights();
295
+ if(self.table.options.resizableColumnGuide){
296
+ guideEl.style.left = self.calcGuidePosition(e, column, handle) + "px";
297
+ }else{
298
+ self.resize(e, column);
261
299
  }
262
300
  }
263
301
 
264
302
  function mouseUp(e){
303
+ if(self.table.options.resizableColumnGuide){
304
+ self.resize(e, column);
305
+ guideEl.remove();
306
+ }
265
307
 
266
308
  //block editor from taking action while resizing is taking place
267
309
  if(self.startColumn.modules.edit){
@@ -284,7 +326,7 @@ class ResizeColumns extends Module{
284
326
  self.table.columnManager.verticalAlignHeaders();
285
327
 
286
328
  self.dispatch("column-resized", column);
287
- self.table.externalEvents.dispatch("columnResized", column.getComponent());
329
+ self.dispatchExternal("columnResized", column.getComponent());
288
330
  }
289
331
  }
290
332
 
@@ -295,7 +337,7 @@ class ResizeColumns extends Module{
295
337
  self.startColumn.modules.edit.blocked = true;
296
338
  }
297
339
 
298
- self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX;
340
+ self.startX = typeof e.clientX === "undefined" ? e.touches[0].clientX : e.clientX;
299
341
  self.latestX = self.startX;
300
342
  self.startWidth = column.getWidth();
301
343
 
@@ -304,8 +346,4 @@ class ResizeColumns extends Module{
304
346
  handle.addEventListener("touchmove", mouseMove, {passive: true});
305
347
  handle.addEventListener("touchend", mouseUp);
306
348
  }
307
- }
308
-
309
- ResizeColumns.moduleName = "resizeColumns";
310
-
311
- export default ResizeColumns;
349
+ }
@@ -1,6 +1,8 @@
1
1
  import Module from '../../core/Module.js';
2
2
 
3
- class ResizeRows extends Module{
3
+ export default class ResizeRows extends Module{
4
+
5
+ static moduleName = "resizeRows";
4
6
 
5
7
  constructor(table){
6
8
  super(table);
@@ -12,6 +14,7 @@ class ResizeRows extends Module{
12
14
  this.prevHandle = null;
13
15
 
14
16
  this.registerTableOption("resizableRows", false); //resizable rows
17
+ this.registerTableOption("resizableRowGuide", false);
15
18
  }
16
19
 
17
20
  initialize(){
@@ -62,16 +65,50 @@ class ResizeRows extends Module{
62
65
  rowEl.appendChild(prevHandle);
63
66
  }
64
67
 
68
+ resize(e, row) {
69
+ row.setHeight(this.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - this.startY));
70
+ }
71
+
72
+ calcGuidePosition(e, row, handle) {
73
+ var mouseY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY,
74
+ handleY = handle.getBoundingClientRect().y - this.table.element.getBoundingClientRect().y,
75
+ tableY = this.table.element.getBoundingClientRect().y,
76
+ rowY = row.element.getBoundingClientRect().top - tableY,
77
+ mouseDiff = mouseY - this.startY;
78
+
79
+ return Math.max(handleY + mouseDiff, rowY);
80
+ }
81
+
65
82
  _mouseDown(e, row, handle){
66
- var self = this;
83
+ var self = this,
84
+ guideEl;
85
+
86
+ self.dispatchExternal("rowResizing", row.getComponent());
87
+
88
+ if(self.table.options.resizableRowGuide){
89
+ guideEl = document.createElement("span");
90
+ guideEl.classList.add('tabulator-row-resize-guide');
91
+ self.table.element.appendChild(guideEl);
92
+ setTimeout(() => {
93
+ guideEl.style.top = self.calcGuidePosition(e, row, handle) + "px";
94
+ });
95
+ }
67
96
 
68
97
  self.table.element.classList.add("tabulator-block-select");
69
98
 
70
99
  function mouseMove(e){
71
- row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY));
100
+ if(self.table.options.resizableRowGuide){
101
+ guideEl.style.top = self.calcGuidePosition(e, row, handle) + "px";
102
+ }else{
103
+ self.resize(e, row);
104
+ }
72
105
  }
73
106
 
74
107
  function mouseUp(e){
108
+ if(self.table.options.resizableRowGuide){
109
+ self.resize(e, row);
110
+ guideEl.remove();
111
+ }
75
112
 
76
113
  // //block editor from taking action while resizing is taking place
77
114
  // if(self.startColumn.modules.edit){
@@ -105,8 +142,4 @@ class ResizeRows extends Module{
105
142
  handle.addEventListener("touchmove", mouseMove, {passive: true});
106
143
  handle.addEventListener("touchend", mouseUp);
107
144
  }
108
- }
109
-
110
- ResizeRows.moduleName = "resizeRows";
111
-
112
- export default ResizeRows;
145
+ }
@@ -1,6 +1,8 @@
1
1
  import Module from '../../core/Module.js';
2
2
 
3
- class ResizeTable extends Module{
3
+ export default class ResizeTable extends Module{
4
+
5
+ static moduleName = "resizeTable";
4
6
 
5
7
  constructor(table){
6
8
  super(table);
@@ -153,8 +155,4 @@ class ResizeTable extends Module{
153
155
  this.containerObserver.unobserve(this.table.element.parentNode);
154
156
  }
155
157
  }
156
- }
157
-
158
- ResizeTable.moduleName = "resizeTable";
159
-
160
- export default ResizeTable;
158
+ }
@@ -1,6 +1,10 @@
1
1
  import Module from '../../core/Module.js';
2
+ import extensions from './extensions/extensions.js';
2
3
 
3
- class ResponsiveLayout extends Module{
4
+ export default class ResponsiveLayout extends Module{
5
+
6
+ static moduleName = "responsiveLayout";
7
+ static moduleExtensions = extensions;
4
8
 
5
9
  constructor(table){
6
10
  super(table);
@@ -58,6 +62,10 @@ class ResponsiveLayout extends Module{
58
62
  this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;
59
63
  this.hiddenColumns = [];
60
64
 
65
+ if(this.collapseFormatter){
66
+ this.collapseFormatter = this.collapseFormatter.bind(this.table);
67
+ }
68
+
61
69
  //determine level of responsivity for each column
62
70
  this.table.columnManager.columnsByIndex.forEach((column, i) => {
63
71
  if(column.modules.responsive){
@@ -249,6 +257,7 @@ class ResponsiveLayout extends Module{
249
257
  if(contents){
250
258
  el.appendChild(contents);
251
259
  }
260
+ row.calcHeight(true);
252
261
  }
253
262
  }
254
263
 
@@ -314,7 +323,7 @@ class ResponsiveLayout extends Module{
314
323
  formatCollapsedData(data){
315
324
  var list = document.createElement("table");
316
325
 
317
- data.forEach(function(item){
326
+ data.forEach((item) => {
318
327
  var row = document.createElement("tr");
319
328
  var titleData = document.createElement("td");
320
329
  var valueData = document.createElement("td");
@@ -322,7 +331,8 @@ class ResponsiveLayout extends Module{
322
331
 
323
332
  var titleHighlight = document.createElement("strong");
324
333
  titleData.appendChild(titleHighlight);
325
- this.langBind("columns|" + item.field, function(text){
334
+
335
+ this.modules.localize.bind("columns|" + item.field, function(text){
326
336
  titleHighlight.innerHTML = text || item.title;
327
337
  });
328
338
 
@@ -337,12 +347,8 @@ class ResponsiveLayout extends Module{
337
347
  row.appendChild(titleData);
338
348
  row.appendChild(valueData);
339
349
  list.appendChild(row);
340
- }, this);
350
+ });
341
351
 
342
352
  return Object.keys(data).length ? list : "";
343
353
  }
344
- }
345
-
346
- ResponsiveLayout.moduleName = "responsiveLayout";
347
-
348
- export default ResponsiveLayout;
354
+ }
@@ -0,0 +1,9 @@
1
+ import responsiveCollapse from './formatters/responsiveCollapse.js';
2
+
3
+ export default {
4
+ format:{
5
+ formatters:{
6
+ responsiveCollapse:responsiveCollapse,
7
+ }
8
+ }
9
+ };
@@ -1,7 +1,7 @@
1
1
  import CoreFeature from '../../core/CoreFeature.js';
2
2
  import RangeComponent from "./RangeComponent";
3
3
 
4
- class Range extends CoreFeature{
4
+ export default class Range extends CoreFeature{
5
5
  constructor(table, rangeManager, start, end) {
6
6
  super(table);
7
7
 
@@ -22,6 +22,13 @@ class Range extends CoreFeature{
22
22
  this.table = table;
23
23
  this.start = {row:0, col:0};
24
24
  this.end = {row:0, col:0};
25
+
26
+ if(this.rangeManager.rowHeader){
27
+ this.left = 1;
28
+ this.right = 1;
29
+ this.start.col = 1;
30
+ this.end.col = 1;
31
+ }
25
32
 
26
33
  this.initElement();
27
34
 
@@ -81,14 +88,14 @@ class Range extends CoreFeature{
81
88
 
82
89
  if (element.type === "column") {
83
90
  if(this.rangeManager.columnSelection){
84
- this.setStart(0, element.getPosition() - 2);
91
+ this.setStart(0, element.getPosition() - 1);
85
92
  }
86
93
  }else{
87
94
  row = element.row.position - 1;
88
- col = element.column.getPosition() - 2;
95
+ col = element.column.getPosition() - 1;
89
96
 
90
97
  if (element.column === this.rangeManager.rowHeader) {
91
- this.setStart(row, 0);
98
+ this.setStart(row, 1);
92
99
  } else {
93
100
  this.setStart(row, col);
94
101
  }
@@ -102,18 +109,18 @@ class Range extends CoreFeature{
102
109
  if (element.type === "column") {
103
110
  if(this.rangeManager.columnSelection){
104
111
  if (this.rangeManager.selecting === "column") {
105
- this.setEnd(rowsCount - 1, element.getPosition() - 2);
112
+ this.setEnd(rowsCount - 1, element.getPosition() - 1);
106
113
  } else if (this.rangeManager.selecting === "cell") {
107
- this.setEnd(0, element.getPosition() - 2);
114
+ this.setEnd(0, element.getPosition() - 1);
108
115
  }
109
116
  }
110
117
  }else{
111
118
  row = element.row.position - 1;
112
- col = element.column.getPosition() - 2;
119
+ col = element.column.getPosition() - 1;
113
120
  isRowHeader = element.column === this.rangeManager.rowHeader;
114
121
 
115
122
  if (this.rangeManager.selecting === "row") {
116
- this.setEnd(row, this._getTableColumns().length - 2);
123
+ this.setEnd(row, this._getTableColumns().length - 1);
117
124
  } else if (this.rangeManager.selecting !== "row" && isRowHeader) {
118
125
  this.setEnd(row, 0);
119
126
  } else if (this.rangeManager.selecting === "column") {
@@ -145,7 +152,7 @@ class Range extends CoreFeature{
145
152
  }
146
153
 
147
154
  _getTableRows() {
148
- return this.table.rowManager.getDisplayRows();
155
+ return this.table.rowManager.getDisplayRows().filter(row=> row.type === "row");
149
156
  }
150
157
 
151
158
  ///////////////////////////////////
@@ -157,7 +164,11 @@ class Range extends CoreFeature{
157
164
  _vDomBottom = this.table.rowManager.renderer.vDomBottom,
158
165
  _vDomLeft = this.table.columnManager.renderer.leftCol,
159
166
  _vDomRight = this.table.columnManager.renderer.rightCol,
160
- top, bottom, left, right, topLeftCell, bottomRightCell;
167
+ top, bottom, left, right, topLeftCell, bottomRightCell, topLeftCellEl, bottomRightCellEl, topLeftRowEl, bottomRightRowEl;
168
+
169
+ if(this.table.options.renderHorizontal === "virtual" && this.rangeManager.rowHeader) {
170
+ _vDomRight += 1;
171
+ }
161
172
 
162
173
  if (_vDomTop == null) {
163
174
  _vDomTop = 0;
@@ -183,23 +194,33 @@ class Range extends CoreFeature{
183
194
 
184
195
  topLeftCell = this.rangeManager.getCell(top, left);
185
196
  bottomRightCell = this.rangeManager.getCell(bottom, right);
197
+ topLeftCellEl = topLeftCell.getElement();
198
+ bottomRightCellEl = bottomRightCell.getElement();
199
+ topLeftRowEl = topLeftCell.row.getElement();
200
+ bottomRightRowEl = bottomRightCell.row.getElement();
186
201
 
187
202
  this.element.classList.add("tabulator-range-active");
188
203
  // this.element.classList.toggle("tabulator-range-active", this === this.rangeManager.activeRange);
204
+
205
+ if(this.table.rtl){
206
+ this.element.style.right = topLeftRowEl.offsetWidth - topLeftCellEl.offsetLeft - topLeftCellEl.offsetWidth + "px";
207
+ this.element.style.width = topLeftCellEl.offsetLeft + topLeftCellEl.offsetWidth - bottomRightCellEl.offsetLeft + "px";
208
+ }else{
209
+ this.element.style.left = topLeftRowEl.offsetLeft + topLeftCellEl.offsetLeft + "px";
210
+ this.element.style.width = bottomRightCellEl.offsetLeft + bottomRightCellEl.offsetWidth - topLeftCellEl.offsetLeft + "px";
211
+ }
189
212
 
190
- this.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + "px";
191
- this.element.style.top = topLeftCell.row.getElement().offsetTop + "px";
192
- this.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + "px";
193
- this.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + "px";
213
+ this.element.style.top = topLeftRowEl.offsetTop + "px";
214
+ this.element.style.height = bottomRightRowEl.offsetTop + bottomRightRowEl.offsetHeight - topLeftRowEl.offsetTop + "px";
194
215
  }
195
216
  }
196
217
 
197
218
  atTopLeft(cell) {
198
- return cell.row.position - 1 === this.top && cell.column.getPosition() - 2 === this.left;
219
+ return cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left;
199
220
  }
200
221
 
201
222
  atBottomRight(cell) {
202
- return cell.row.position - 1 === this.bottom && cell.column.getPosition() - 2 === this.right;
223
+ return cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right;
203
224
  }
204
225
 
205
226
  occupies(cell) {
@@ -211,7 +232,7 @@ class Range extends CoreFeature{
211
232
  }
212
233
 
213
234
  occupiesColumn(col) {
214
- return this.left <= col.getPosition() - 2 && col.getPosition() - 2 <= this.right;
235
+ return this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right;
215
236
  }
216
237
 
217
238
  overlaps(left, top, right, bottom) {
@@ -280,7 +301,7 @@ class Range extends CoreFeature{
280
301
  }
281
302
 
282
303
  getColumns() {
283
- return this._getTableColumns().slice(this.left + 1, this.right + 2);
304
+ return this._getTableColumns().slice(this.left, this.right + 1);
284
305
  }
285
306
 
286
307
  clearValues(){
@@ -342,6 +363,4 @@ class Range extends CoreFeature{
342
363
 
343
364
  return !this.destroyed;
344
365
  }
345
- }
346
-
347
- export default Range;
366
+ }
@@ -1,4 +1,4 @@
1
- class RangeComponent {
1
+ export default class RangeComponent {
2
2
  constructor(range) {
3
3
  this._range = range;
4
4
 
@@ -88,6 +88,4 @@ class RangeComponent {
88
88
  this._range.destroy(true);
89
89
  }
90
90
  }
91
- }
92
-
93
- export default RangeComponent;
91
+ }