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,14 @@
1
1
  import Module from "../../core/Module.js";
2
2
  import Range from "./Range.js";
3
+ import extensions from './extensions/extensions.js';
3
4
 
4
- class SelectRange extends Module {
5
+
6
+ export default class SelectRange extends Module {
7
+
8
+ static moduleName = "selectRange";
9
+ static moduleInitOrder = 1;
10
+ static moduleExtensions = extensions;
11
+
5
12
  constructor(table) {
6
13
  super(table);
7
14
 
@@ -25,11 +32,11 @@ class SelectRange extends Module {
25
32
  this.registerTableOption("selectableRangeRows", false); //enable selectable range
26
33
  this.registerTableOption("selectableRangeClearCells", false); //allow clearing of active range
27
34
  this.registerTableOption("selectableRangeClearCellsValue", undefined); //value for cleared active range
28
-
35
+
29
36
  this.registerTableFunction("getRangesData", this.getRangesData.bind(this));
30
37
  this.registerTableFunction("getRanges", this.getRanges.bind(this));
31
38
  this.registerTableFunction("addRange", this.addRangeFromComponent.bind(this));
32
-
39
+
33
40
  this.registerComponentFunction("cell", "getRanges", this.cellGetRanges.bind(this));
34
41
  this.registerComponentFunction("row", "getRanges", this.rowGetRanges.bind(this));
35
42
  this.registerComponentFunction("column", "getRanges", this.colGetRanges.bind(this));
@@ -40,9 +47,8 @@ class SelectRange extends Module {
40
47
  ///////////////////////////////////
41
48
 
42
49
  initialize() {
43
- if (this.options("selectableRange")) {
50
+ if (this.options("selectableRange")) {
44
51
  if(!this.options("selectableRows")){
45
-
46
52
  this.maxRanges = this.options("selectableRange");
47
53
 
48
54
  this.initializeTable();
@@ -50,6 +56,14 @@ class SelectRange extends Module {
50
56
  }else{
51
57
  console.warn("SelectRange functionality cannot be used in conjunction with row selection");
52
58
  }
59
+
60
+ if(this.options('columns').findIndex((column) => column.frozen) > 0) {
61
+ console.warn("Having frozen column in arbitrary position with selectRange option may result in unpredictable behavior.");
62
+ }
63
+
64
+ if(this.options('columns').filter((column) => column.frozen) > 1) {
65
+ console.warn("Having multiple frozen columns with selectRange option may result in unpredictable behavior.");
66
+ }
53
67
  }
54
68
  }
55
69
 
@@ -88,7 +102,7 @@ class SelectRange extends Module {
88
102
  this.subscribe("column-height", this.layoutChange.bind(this));
89
103
  this.subscribe("column-resized", this.layoutChange.bind(this));
90
104
  this.subscribe("columns-loaded", this.updateHeaderColumn.bind(this));
91
-
105
+
92
106
  this.subscribe("cell-height", this.layoutChange.bind(this));
93
107
  this.subscribe("cell-rendered", this.renderCell.bind(this));
94
108
  this.subscribe("cell-mousedown", this.handleCellMouseDown.bind(this));
@@ -97,7 +111,7 @@ class SelectRange extends Module {
97
111
  this.subscribe("cell-editing", this.handleEditingCell.bind(this));
98
112
 
99
113
  this.subscribe("page-changed", this.redraw.bind(this));
100
-
114
+
101
115
  this.subscribe("scroll-vertical", this.layoutChange.bind(this));
102
116
  this.subscribe("scroll-horizontal", this.layoutChange.bind(this));
103
117
 
@@ -123,7 +137,7 @@ class SelectRange extends Module {
123
137
 
124
138
  initializeColumn(column) {
125
139
  if(this.columnSelection && column.definition.headerSort && this.options("headerSortClickElement") !== "icon"){
126
- console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior");
140
+ console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'.");
127
141
  }
128
142
 
129
143
  if (column.modules.edit) {
@@ -134,6 +148,8 @@ class SelectRange extends Module {
134
148
  }
135
149
 
136
150
  updateHeaderColumn(){
151
+ var frozenCols;
152
+
137
153
  if(this.rowSelection){
138
154
  this.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0];
139
155
 
@@ -149,6 +165,15 @@ class SelectRange extends Module {
149
165
  }
150
166
  }
151
167
  }
168
+
169
+ //warn if invalid frozen column configuration detected
170
+ if(this.table.modules.frozenColumns && this.table.modules.frozenColumns.active){
171
+ frozenCols = this.table.modules.frozenColumns.getFrozenColumns();
172
+
173
+ if(frozenCols.length > 1 || (frozenCols.length === 1 && frozenCols[0] !== this.rowHeader)){
174
+ console.warn("Using frozen columns that are not the range header in combination with the selectRange option may result in unpredictable behavior");
175
+ }
176
+ }
152
177
  }
153
178
 
154
179
  ///////////////////////////////////
@@ -214,12 +239,12 @@ class SelectRange extends Module {
214
239
  if (this.table.modules.edit && this.table.modules.edit.currentCell) {
215
240
  return;
216
241
  }
217
-
242
+
218
243
  this.table.modules.edit.editCell(this.getActiveCell());
219
244
 
220
245
  e.preventDefault();
221
246
  }
222
-
247
+
223
248
  if ((e.key === "Backspace" || e.key === "Delete") && this.options("selectableRangeClearCells")) {
224
249
  if(this.activeRange){
225
250
  this.activeRange.clearValues();
@@ -346,7 +371,7 @@ class SelectRange extends Module {
346
371
  finishEditingCell() {
347
372
  this.blockKeydown = true;
348
373
  this.table.rowManager.element.focus();
349
-
374
+
350
375
  setTimeout(() => {
351
376
  this.blockKeydown = false;
352
377
  }, 10);
@@ -422,7 +447,7 @@ class SelectRange extends Module {
422
447
  nextCol = Math.max(nextCol - 1, 0);
423
448
  break;
424
449
  case "right":
425
- nextCol = Math.min(nextCol + 1, this.getTableColumns().length - 2);
450
+ nextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1);
426
451
  break;
427
452
  case "up":
428
453
  nextRow = Math.max(nextRow - 1, 0);
@@ -516,13 +541,14 @@ class SelectRange extends Module {
516
541
  findJumpCellLeft(rowPos, colPos){
517
542
  var row = this.getRowByRangePos(rowPos),
518
543
  cells = row.cells.filter((cell) => cell.column.visible),
519
- isStartingCellEmpty = !cells[colPos + 1].getValue(),
544
+ isStartingCellEmpty = !cells[colPos].getValue(),
520
545
  isLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false,
521
546
  jumpCol = colPos,
522
- nextCell = this.findJumpCell(cells.slice(0, colPos), true, isStartingCellEmpty, isLeftOfStartingCellEmpty);
547
+ targetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos),
548
+ nextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty);
523
549
 
524
550
  if(nextCell){
525
- jumpCol = nextCell.column.getPosition() - 2;
551
+ jumpCol = nextCell.column.getPosition() - 1;
526
552
  }
527
553
 
528
554
  return jumpCol;
@@ -531,13 +557,13 @@ class SelectRange extends Module {
531
557
  findJumpCellRight(rowPos, colPos){
532
558
  var row = this.getRowByRangePos(rowPos),
533
559
  cells = row.cells.filter((cell) => cell.column.visible),
534
- isStartingCellEmpty = !cells[colPos + 1].getValue(),
535
- isRightOfStartingCellEmpty = cells[colPos + 2] ? !cells[colPos + 2].getValue() : false,
560
+ isStartingCellEmpty = !cells[colPos].getValue(),
561
+ isRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false,
536
562
  jumpCol = colPos,
537
- nextCell = this.findJumpCell(cells.slice(colPos + 2, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);
563
+ nextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);
538
564
 
539
565
  if(nextCell){
540
- jumpCol = nextCell.column.getPosition() - 2;
566
+ jumpCol = nextCell.column.getPosition() - 1;
541
567
  }
542
568
 
543
569
  return jumpCol;
@@ -588,8 +614,13 @@ class SelectRange extends Module {
588
614
  range = this.resetRanges();
589
615
  this.selecting = "all";
590
616
 
591
- const topLeftCell = this.getCell(0, 0);
592
- const bottomRightCell = this.getCell(-1, -1);
617
+ var topLeftCell, bottomRightCell = this.getCell(-1, -1);
618
+
619
+ if(this.rowHeader){
620
+ topLeftCell = this.getCell(0, 1);
621
+ }else{
622
+ topLeftCell = this.getCell(0, 0);
623
+ }
593
624
 
594
625
  range.setBounds(topLeftCell, bottomRightCell);
595
626
  return;
@@ -613,8 +644,7 @@ class SelectRange extends Module {
613
644
 
614
645
  autoScroll(range, row, column) {
615
646
  var tableHolder = this.table.rowManager.element,
616
- rowHeader = this.rowHeader.getElement(),
617
- rect, view, withinHorizontalView, withinVerticalView;
647
+ rowHeader, rect, view, withinHorizontalView, withinVerticalView;
618
648
 
619
649
  if (typeof row === 'undefined') {
620
650
  row = this.getRowByRangePos(range.end.row).getElement();
@@ -624,6 +654,10 @@ class SelectRange extends Module {
624
654
  column = this.getColumnByRangePos(range.end.col).getElement();
625
655
  }
626
656
 
657
+ if (this.rowHeader) {
658
+ rowHeader = this.rowHeader.getElement();
659
+ }
660
+
627
661
  rect = {
628
662
  left: column.offsetLeft,
629
663
  right: column.offsetLeft + column.offsetWidth,
@@ -632,19 +666,26 @@ class SelectRange extends Module {
632
666
  };
633
667
 
634
668
  view = {
635
- left: tableHolder.scrollLeft + rowHeader.offsetWidth,
669
+ left: tableHolder.scrollLeft,
636
670
  right: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth),
637
671
  top: tableHolder.scrollTop,
638
672
  bottom: tableHolder.scrollTop + tableHolder.offsetHeight - this.table.rowManager.scrollbarWidth,
639
673
  };
640
674
 
675
+ if (rowHeader) {
676
+ view.left += rowHeader.offsetWidth;
677
+ }
678
+
641
679
  withinHorizontalView = view.left < rect.left && rect.left < view.right && view.left < rect.right && rect.right < view.right;
642
680
 
643
681
  withinVerticalView = view.top < rect.top && rect.top < view.bottom && view.top < rect.bottom && rect.bottom < view.bottom;
644
682
 
645
683
  if (!withinHorizontalView) {
646
684
  if (rect.left < view.left) {
647
- tableHolder.scrollLeft = rect.left - rowHeader.offsetWidth;
685
+ tableHolder.scrollLeft = rect.left;
686
+ if (rowHeader) {
687
+ tableHolder.scrollLeft -= rowHeader.offsetWidth;
688
+ }
648
689
  } else if (rect.right > view.right) {
649
690
  tableHolder.scrollLeft = rect.right - tableHolder.clientWidth;
650
691
  }
@@ -732,7 +773,7 @@ class SelectRange extends Module {
732
773
  }
733
774
 
734
775
  layoutRanges() {
735
- var activeCell;
776
+ var activeCell, activeCellEl, activeRowEl;
736
777
 
737
778
  if (!this.table.initialized) {
738
779
  return;
@@ -743,11 +784,19 @@ class SelectRange extends Module {
743
784
  if (!activeCell) {
744
785
  return;
745
786
  }
746
-
747
- this.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + "px";
748
- this.activeRangeCellElement.style.top = activeCell.row.getElement().offsetTop + "px";
749
- this.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + "px";
750
- this.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + "px";
787
+
788
+ activeCellEl = activeCell.getElement();
789
+ activeRowEl = activeCell.row.getElement();
790
+
791
+ if(this.table.rtl){
792
+ this.activeRangeCellElement.style.right = activeRowEl.offsetWidth - activeCellEl.offsetLeft - activeCellEl.offsetWidth + "px";
793
+ }else{
794
+ this.activeRangeCellElement.style.left = activeRowEl.offsetLeft + activeCellEl.offsetLeft + "px";
795
+ }
796
+
797
+ this.activeRangeCellElement.style.top = activeRowEl.offsetTop + "px";
798
+ this.activeRangeCellElement.style.width = activeCellEl.offsetWidth + "px";
799
+ this.activeRangeCellElement.style.height = activeRowEl.offsetHeight + "px";
751
800
 
752
801
  this.ranges.forEach((range) => range.layout());
753
802
 
@@ -763,8 +812,7 @@ class SelectRange extends Module {
763
812
  var row;
764
813
 
765
814
  if (colIdx < 0) {
766
- colIdx = this.getTableColumns().length + colIdx - 1;
767
-
815
+ colIdx = this.getTableColumns().length + colIdx;
768
816
  if (colIdx < 0) {
769
817
  return null;
770
818
  }
@@ -776,7 +824,7 @@ class SelectRange extends Module {
776
824
 
777
825
  row = this.table.rowManager.getRowFromPosition(rowIdx + 1);
778
826
 
779
- return row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx + 1] : null;
827
+ return row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null;
780
828
  }
781
829
 
782
830
 
@@ -789,11 +837,11 @@ class SelectRange extends Module {
789
837
  }
790
838
 
791
839
  getColumnByRangePos(pos) {
792
- return this.getTableColumns()[pos + 1];
840
+ return this.getTableColumns()[pos];
793
841
  }
794
842
 
795
843
  getTableRows() {
796
- return this.table.rowManager.getDisplayRows();
844
+ return this.table.rowManager.getDisplayRows().filter(row=> row.type === "row");
797
845
  }
798
846
 
799
847
  getTableColumns() {
@@ -817,7 +865,7 @@ class SelectRange extends Module {
817
865
  }
818
866
 
819
867
  resetRanges() {
820
- var range, cell;
868
+ var range, cell, visibleCells;
821
869
 
822
870
  this.ranges.forEach((range) => range.destroy());
823
871
  this.ranges = [];
@@ -825,7 +873,8 @@ class SelectRange extends Module {
825
873
  range = this.addRange();
826
874
 
827
875
  if(this.table.rowManager.activeRows.length){
828
- cell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0];
876
+ visibleCells = this.table.rowManager.activeRows[0].cells.filter((cell) => cell.column.visible);
877
+ cell = visibleCells[this.rowHeader ? 1 : 0];
829
878
 
830
879
  if(cell){
831
880
  range.setBounds(cell);
@@ -848,8 +897,4 @@ class SelectRange extends Module {
848
897
  selectedColumns(component) {
849
898
  return component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns();
850
899
  }
851
- }
852
-
853
- SelectRange.moduleName = "selectRange";
854
-
855
- export default SelectRange;
900
+ }
@@ -0,0 +1,45 @@
1
+ export default {
2
+ range:function(data){
3
+ var rows = [],
4
+ range = this.table.modules.selectRange.activeRange,
5
+ singleCell = false,
6
+ bounds, startCell, startRow, rowWidth, dataLength;
7
+
8
+ dataLength = data.length;
9
+
10
+ if(range){
11
+ bounds = range.getBounds();
12
+ startCell = bounds.start;
13
+
14
+ if(bounds.start === bounds.end){
15
+ singleCell = true;
16
+ }
17
+
18
+ if(startCell){
19
+ rows = this.table.rowManager.activeRows.slice();
20
+ startRow = rows.indexOf(startCell.row);
21
+
22
+ if(singleCell){
23
+ rowWidth = data.length;
24
+ }else{
25
+ rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;
26
+ }
27
+
28
+
29
+ if(startRow >-1){
30
+ this.table.blockRedraw();
31
+
32
+ rows = rows.slice(startRow, startRow + rowWidth);
33
+
34
+ rows.forEach((row, i) => {
35
+ row.updateData(data[i % dataLength]);
36
+ });
37
+
38
+ this.table.restoreRedraw();
39
+ }
40
+ }
41
+ }
42
+
43
+ return rows;
44
+ }
45
+ };
@@ -0,0 +1,57 @@
1
+ export default {
2
+ range:function(clipboard){
3
+ var data = [],
4
+ rows = [],
5
+ range = this.table.modules.selectRange.activeRange,
6
+ singleCell = false,
7
+ bounds, startCell, colWidth, columnMap, startCol;
8
+
9
+ if(range){
10
+ bounds = range.getBounds();
11
+ startCell = bounds.start;
12
+
13
+ if(bounds.start === bounds.end){
14
+ singleCell = true;
15
+ }
16
+
17
+ if(startCell){
18
+ //get data from clipboard into array of columns and rows.
19
+ clipboard = clipboard.split("\n");
20
+
21
+ clipboard.forEach(function(row){
22
+ data.push(row.split("\t"));
23
+ });
24
+
25
+ if(data.length){
26
+ columnMap = this.table.columnManager.getVisibleColumnsByIndex();
27
+ startCol = columnMap.indexOf(startCell.column);
28
+
29
+ if(startCol > -1){
30
+ if(singleCell){
31
+ colWidth = data[0].length;
32
+ }else{
33
+ colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;
34
+ }
35
+
36
+ columnMap = columnMap.slice(startCol, startCol + colWidth);
37
+
38
+ data.forEach((item) => {
39
+ var row = {};
40
+ var itemLength = item.length;
41
+
42
+ columnMap.forEach(function(col, i){
43
+ row[col.field] = item[i % itemLength];
44
+ });
45
+
46
+ rows.push(row);
47
+ });
48
+
49
+ return rows;
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ return false;
56
+ }
57
+ };
@@ -0,0 +1,11 @@
1
+ export default {
2
+ range:function(){
3
+ var columns = this.modules.selectRange.selectedColumns();
4
+
5
+ if(this.columnManager.rowHeader){
6
+ columns.unshift(this.columnManager.rowHeader);
7
+ }
8
+
9
+ return columns;
10
+ },
11
+ };
@@ -0,0 +1,5 @@
1
+ export default {
2
+ range:function(){
3
+ return this.modules.selectRange.selectedRows();
4
+ },
5
+ };
@@ -0,0 +1,21 @@
1
+ import bindings from './keybindings/bindings.js';
2
+ import actions from './keybindings/actions.js';
3
+ import pasteActions from './clipboard/pasteActions.js';
4
+ import pasteParsers from './clipboard/pasteParsers.js';
5
+ import columnLookups from './export/columnLookups.js';
6
+ import rowLookups from './export/rowLookups.js';
7
+
8
+ export default {
9
+ keybindings:{
10
+ bindings:bindings,
11
+ actions:actions
12
+ },
13
+ clipboard:{
14
+ pasteActions:pasteActions,
15
+ pasteParsers:pasteParsers
16
+ },
17
+ export:{
18
+ columnLookups:columnLookups,
19
+ rowLookups:rowLookups,
20
+ }
21
+ };
@@ -0,0 +1,38 @@
1
+ export default {
2
+ rangeJumpLeft: function(e){
3
+ this.dispatch("keybinding-nav-range", e, "left", true, false);
4
+ },
5
+ rangeJumpRight: function(e){
6
+ this.dispatch("keybinding-nav-range", e, "right", true, false);
7
+ },
8
+ rangeJumpUp: function(e){
9
+ this.dispatch("keybinding-nav-range", e, "up", true, false);
10
+ },
11
+ rangeJumpDown: function(e){
12
+ this.dispatch("keybinding-nav-range", e, "down", true, false);
13
+ },
14
+ rangeExpandLeft: function(e){
15
+ this.dispatch("keybinding-nav-range", e, "left", false, true);
16
+ },
17
+ rangeExpandRight: function(e){
18
+ this.dispatch("keybinding-nav-range", e, "right", false, true);
19
+ },
20
+ rangeExpandUp: function(e){
21
+ this.dispatch("keybinding-nav-range", e, "up", false, true);
22
+ },
23
+ rangeExpandDown: function(e){
24
+ this.dispatch("keybinding-nav-range", e, "down", false, true);
25
+ },
26
+ rangeExpandJumpLeft: function(e){
27
+ this.dispatch("keybinding-nav-range", e, "left", true, true);
28
+ },
29
+ rangeExpandJumpRight: function(e){
30
+ this.dispatch("keybinding-nav-range", e, "right", true, true);
31
+ },
32
+ rangeExpandJumpUp: function(e){
33
+ this.dispatch("keybinding-nav-range", e, "up", true, true);
34
+ },
35
+ rangeExpandJumpDown: function(e){
36
+ this.dispatch("keybinding-nav-range", e, "down", true, true);
37
+ },
38
+ };
@@ -0,0 +1,14 @@
1
+ export default {
2
+ rangeJumpUp:["ctrl + 38", "meta + 38"],
3
+ rangeJumpDown:["ctrl + 40", "meta + 40"],
4
+ rangeJumpLeft:["ctrl + 37", "meta + 37"],
5
+ rangeJumpRight:["ctrl + 39", "meta + 39"],
6
+ rangeExpandUp:"shift + 38",
7
+ rangeExpandDown:"shift + 40",
8
+ rangeExpandLeft:"shift + 37",
9
+ rangeExpandRight:"shift + 39",
10
+ rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"],
11
+ rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"],
12
+ rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"],
13
+ rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"],
14
+ };
@@ -1,6 +1,10 @@
1
1
  import Module from '../../core/Module.js';
2
+ import extensions from './extensions/extensions.js';
2
3
 
3
- class SelectRow extends Module{
4
+ export default class SelectRow extends Module{
5
+
6
+ static moduleName = "selectRow";
7
+ static moduleExtensions = extensions;
4
8
 
5
9
  constructor(table){
6
10
  super(table);
@@ -51,11 +55,11 @@ class SelectRow extends Module{
51
55
  }
52
56
 
53
57
  deprecatedOptionsCheck(){
54
- this.deprecationCheck("selectable", "selectableRows", true);
55
- this.deprecationCheck("selectableRollingSelection", "selectableRowsRollingSelection", true);
56
- this.deprecationCheck("selectableRangeMode", "selectableRowsRangeMode", true);
57
- this.deprecationCheck("selectablePersistence", "selectableRowsPersistence", true);
58
- this.deprecationCheck("selectableCheck", "selectableRowsCheck", true);
58
+ // this.deprecationCheck("selectable", "selectableRows", true);
59
+ // this.deprecationCheck("selectableRollingSelection", "selectableRowsRollingSelection", true);
60
+ // this.deprecationCheck("selectableRangeMode", "selectableRowsRangeMode", true);
61
+ // this.deprecationCheck("selectablePersistence", "selectableRowsPersistence", true);
62
+ // this.deprecationCheck("selectableCheck", "selectableRowsCheck", true);
59
63
  }
60
64
 
61
65
  rowRetrieve(type, prevValue){
@@ -476,7 +480,7 @@ class SelectRow extends Module{
476
480
  }
477
481
 
478
482
  childRowSelection(row, select){
479
- var children = this.table.modules.dataTree.getChildren(row, true);
483
+ var children = this.table.modules.dataTree.getChildren(row, true, true);
480
484
 
481
485
  if(select){
482
486
  for(let child of children){
@@ -488,8 +492,4 @@ class SelectRow extends Module{
488
492
  }
489
493
  }
490
494
  }
491
- }
492
-
493
- SelectRow.moduleName = "selectRow";
494
-
495
- export default SelectRow;
495
+ }
@@ -0,0 +1,9 @@
1
+ import rowSelection from './formatters/rowSelection.js';
2
+
3
+ export default {
4
+ format:{
5
+ formatters:{
6
+ rowSelection:rowSelection,
7
+ }
8
+ }
9
+ };
@@ -2,7 +2,12 @@ import Module from '../../core/Module.js';
2
2
 
3
3
  import defaultSorters from './defaults/sorters.js';
4
4
 
5
- class Sort extends Module{
5
+ export default class Sort extends Module{
6
+
7
+ static moduleName = "sort";
8
+
9
+ //load defaults
10
+ static sorters = defaultSorters;
6
11
 
7
12
  constructor(table){
8
13
  super(table);
@@ -333,7 +338,7 @@ class Sort extends Module{
333
338
  }
334
339
 
335
340
  //work through sort list sorting data
336
- sort(data){
341
+ sort(data, sortOnly){
337
342
  var self = this,
338
343
  sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,
339
344
  sortListActual = [],
@@ -343,7 +348,9 @@ class Sort extends Module{
343
348
  this.dispatchExternal("dataSorting", self.getSort());
344
349
  }
345
350
 
346
- self.clearColumnHeaders();
351
+ if(!sortOnly) {
352
+ self.clearColumnHeaders();
353
+ }
347
354
 
348
355
  if(this.table.options.sortMode !== "remote"){
349
356
 
@@ -366,7 +373,9 @@ class Sort extends Module{
366
373
  sortListActual.push(item);
367
374
  }
368
375
 
369
- self.setColumnHeader(item.column, item.dir);
376
+ if(!sortOnly) {
377
+ self.setColumnHeader(item.column, item.dir);
378
+ }
370
379
  }
371
380
  });
372
381
 
@@ -375,11 +384,12 @@ class Sort extends Module{
375
384
  self._sortItems(data, sortListActual);
376
385
  }
377
386
 
378
- }else{
387
+ }else if(!sortOnly) {
379
388
  sortList.forEach(function(item, i){
380
389
  self.setColumnHeader(item.column, item.dir);
381
390
  });
382
391
  }
392
+
383
393
 
384
394
  if(this.subscribedExternal("dataSorted")){
385
395
  data.forEach((row) => {
@@ -467,11 +477,4 @@ class Sort extends Module{
467
477
 
468
478
  return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
469
479
  }
470
- }
471
-
472
- Sort.moduleName = "sort";
473
-
474
- //load defaults
475
- Sort.sorters = defaultSorters;
476
-
477
- export default Sort;
480
+ }