tabulator-tables 5.4.2 → 5.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/.babelrc.json +3 -3
  2. package/.editorconfig +6 -6
  3. package/.eslintignore +3 -3
  4. package/.eslintrc.js +28 -28
  5. package/.github/ISSUE_TEMPLATE/bug_report.md +58 -58
  6. package/.github/ISSUE_TEMPLATE/documentation.md +14 -14
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +24 -24
  8. package/.github/ISSUE_TEMPLATE/question.md +12 -12
  9. package/.github/workflows/bad-files-check.yml +39 -39
  10. package/.github/workflows/lint-and-test.yml +30 -30
  11. package/CODE_OF_CONDUCT.md +46 -46
  12. package/CONTRIBUTING.md +22 -22
  13. package/LICENSE +20 -20
  14. package/README.md +76 -76
  15. package/bower.json +40 -40
  16. package/build/Bundler.js +185 -185
  17. package/build/rollup.js +6 -6
  18. package/dist/css/tabulator.css +1 -5
  19. package/dist/css/tabulator.css.map +1 -1
  20. package/dist/css/tabulator.min.css +1 -1
  21. package/dist/css/tabulator.min.css.map +1 -1
  22. package/dist/css/tabulator_bootstrap3.css +1 -5
  23. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  24. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  25. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  26. package/dist/css/tabulator_bootstrap4.css +1 -5
  27. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  28. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  29. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  30. package/dist/css/tabulator_bootstrap5.css +1 -5
  31. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  32. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  33. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  34. package/dist/css/tabulator_bulma.css +1 -5
  35. package/dist/css/tabulator_bulma.css.map +1 -1
  36. package/dist/css/tabulator_bulma.min.css +1 -1
  37. package/dist/css/tabulator_bulma.min.css.map +1 -1
  38. package/dist/css/tabulator_materialize.css +1 -5
  39. package/dist/css/tabulator_materialize.css.map +1 -1
  40. package/dist/css/tabulator_materialize.min.css +1 -1
  41. package/dist/css/tabulator_materialize.min.css.map +1 -1
  42. package/dist/css/tabulator_midnight.css +1 -5
  43. package/dist/css/tabulator_midnight.css.map +1 -1
  44. package/dist/css/tabulator_midnight.min.css +1 -1
  45. package/dist/css/tabulator_midnight.min.css.map +1 -1
  46. package/dist/css/tabulator_modern.css +1 -5
  47. package/dist/css/tabulator_modern.css.map +1 -1
  48. package/dist/css/tabulator_modern.min.css +1 -1
  49. package/dist/css/tabulator_modern.min.css.map +1 -1
  50. package/dist/css/tabulator_semanticui.css +103 -107
  51. package/dist/css/tabulator_semanticui.css.map +1 -1
  52. package/dist/css/tabulator_semanticui.min.css +1 -1
  53. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  54. package/dist/css/tabulator_simple.css +1 -5
  55. package/dist/css/tabulator_simple.css.map +1 -1
  56. package/dist/css/tabulator_simple.min.css +1 -1
  57. package/dist/css/tabulator_simple.min.css.map +1 -1
  58. package/dist/css/tabulator_site.css +1 -5
  59. package/dist/css/tabulator_site.css.map +1 -1
  60. package/dist/css/tabulator_site.min.css +1 -1
  61. package/dist/css/tabulator_site.min.css.map +1 -1
  62. package/dist/js/jquery_wrapper.js +55 -55
  63. package/dist/js/tabulator.js +25847 -25653
  64. package/dist/js/tabulator.js.map +1 -1
  65. package/dist/js/tabulator.min.js +2 -2
  66. package/dist/js/tabulator.min.js.map +1 -1
  67. package/dist/js/tabulator_esm.js +25926 -25732
  68. package/dist/js/tabulator_esm.js.map +1 -1
  69. package/dist/js/tabulator_esm.min.js +2 -2
  70. package/dist/js/tabulator_esm.min.js.map +1 -1
  71. package/package.json +65 -65
  72. package/src/js/builds/esm.js +14 -14
  73. package/src/js/builds/jquery_wrapper.js +55 -55
  74. package/src/js/core/ColumnManager.js +730 -730
  75. package/src/js/core/CoreFeature.js +138 -138
  76. package/src/js/core/FooterManager.js +101 -101
  77. package/src/js/core/Module.js +141 -141
  78. package/src/js/core/RowManager.js +1112 -1082
  79. package/src/js/core/Tabulator.js +895 -893
  80. package/src/js/core/TabulatorFull.js +10 -10
  81. package/src/js/core/cell/Cell.js +295 -295
  82. package/src/js/core/cell/CellComponent.js +76 -76
  83. package/src/js/core/column/Column.js +949 -949
  84. package/src/js/core/column/ColumnComponent.js +152 -152
  85. package/src/js/core/column/defaults/options.js +17 -17
  86. package/src/js/core/defaults/options.js +65 -65
  87. package/src/js/core/modules/core.js +2 -2
  88. package/src/js/core/modules/optional.js +34 -34
  89. package/src/js/core/rendering/Renderer.js +203 -203
  90. package/src/js/core/rendering/renderers/BasicHorizontal.js +19 -19
  91. package/src/js/core/rendering/renderers/BasicVertical.js +79 -78
  92. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +577 -577
  93. package/src/js/core/rendering/renderers/VirtualDomVertical.js +579 -579
  94. package/src/js/core/row/PseudoRow.js +44 -44
  95. package/src/js/core/row/Row.js +457 -457
  96. package/src/js/core/row/RowComponent.js +93 -93
  97. package/src/js/core/tools/Alert.js +61 -61
  98. package/src/js/core/tools/ComponentFunctionBinder.js +32 -32
  99. package/src/js/core/tools/DataLoader.js +119 -119
  100. package/src/js/core/tools/DeprecationAdvisor.js +46 -46
  101. package/src/js/core/tools/ExternalEventBus.js +104 -104
  102. package/src/js/core/tools/Helpers.js +46 -46
  103. package/src/js/core/tools/InteractionMonitor.js +321 -321
  104. package/src/js/core/tools/InternalEventBus.js +161 -161
  105. package/src/js/core/tools/ModuleBinder.js +104 -104
  106. package/src/js/core/tools/OptionsList.js +44 -40
  107. package/src/js/core/tools/Popup.js +304 -304
  108. package/src/js/core/tools/TableRegistry.js +61 -61
  109. package/src/js/modules/Accessor/Accessor.js +115 -115
  110. package/src/js/modules/Ajax/Ajax.js +143 -143
  111. package/src/js/modules/Ajax/defaults/config.js +2 -2
  112. package/src/js/modules/Ajax/defaults/contentTypeFormatters.js +44 -44
  113. package/src/js/modules/Ajax/defaults/loaderPromise.js +86 -86
  114. package/src/js/modules/Ajax/defaults/urlGenerator.js +43 -43
  115. package/src/js/modules/Clipboard/Clipboard.js +279 -279
  116. package/src/js/modules/Clipboard/defaults/pasteActions.js +10 -10
  117. package/src/js/modules/Clipboard/defaults/pasteParsers.js +74 -74
  118. package/src/js/modules/ColumnCalcs/CalcComponent.js +47 -47
  119. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +581 -568
  120. package/src/js/modules/ColumnCalcs/defaults/calculations.js +85 -85
  121. package/src/js/modules/Comms/Comms.js +51 -51
  122. package/src/js/modules/DataTree/DataTree.js +603 -603
  123. package/src/js/modules/Download/Download.js +148 -148
  124. package/src/js/modules/Download/defaults/downloaders/csv.js +61 -61
  125. package/src/js/modules/Download/defaults/downloaders/html.js +4 -4
  126. package/src/js/modules/Download/defaults/downloaders/json.js +33 -33
  127. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +31 -31
  128. package/src/js/modules/Download/defaults/downloaders/pdf.js +111 -111
  129. package/src/js/modules/Download/defaults/downloaders/xlsx.js +98 -98
  130. package/src/js/modules/Download/defaults/downloaders.js +14 -14
  131. package/src/js/modules/Edit/Edit.js +735 -736
  132. package/src/js/modules/Edit/List.js +1037 -1033
  133. package/src/js/modules/Edit/defaults/editors/autocomplete.js +11 -11
  134. package/src/js/modules/Edit/defaults/editors/date.js +138 -110
  135. package/src/js/modules/Edit/defaults/editors/datetime.js +125 -97
  136. package/src/js/modules/Edit/defaults/editors/input.js +76 -74
  137. package/src/js/modules/Edit/defaults/editors/list.js +6 -6
  138. package/src/js/modules/Edit/defaults/editors/number.js +109 -107
  139. package/src/js/modules/Edit/defaults/editors/progress.js +126 -126
  140. package/src/js/modules/Edit/defaults/editors/range.js +80 -78
  141. package/src/js/modules/Edit/defaults/editors/select.js +9 -9
  142. package/src/js/modules/Edit/defaults/editors/star.js +145 -145
  143. package/src/js/modules/Edit/defaults/editors/textarea.js +122 -120
  144. package/src/js/modules/Edit/defaults/editors/tickCross.js +94 -96
  145. package/src/js/modules/Edit/defaults/editors/time.js +126 -98
  146. package/src/js/modules/Edit/defaults/editors.js +28 -28
  147. package/src/js/modules/Edit/inputMask.js +73 -73
  148. package/src/js/modules/Export/Export.js +623 -617
  149. package/src/js/modules/Export/ExportColumn.js +10 -10
  150. package/src/js/modules/Export/ExportRow.js +9 -9
  151. package/src/js/modules/Filter/Filter.js +892 -889
  152. package/src/js/modules/Filter/defaults/filters.js +107 -107
  153. package/src/js/modules/Format/Format.js +212 -212
  154. package/src/js/modules/Format/defaults/formatters/buttonCross.js +2 -2
  155. package/src/js/modules/Format/defaults/formatters/buttonTick.js +2 -2
  156. package/src/js/modules/Format/defaults/formatters/color.js +3 -3
  157. package/src/js/modules/Format/defaults/formatters/datetime.js +36 -36
  158. package/src/js/modules/Format/defaults/formatters/datetimediff.js +40 -40
  159. package/src/js/modules/Format/defaults/formatters/handle.js +3 -3
  160. package/src/js/modules/Format/defaults/formatters/html.js +2 -2
  161. package/src/js/modules/Format/defaults/formatters/image.js +39 -39
  162. package/src/js/modules/Format/defaults/formatters/link.js +77 -77
  163. package/src/js/modules/Format/defaults/formatters/lookup.js +9 -9
  164. package/src/js/modules/Format/defaults/formatters/money.js +36 -36
  165. package/src/js/modules/Format/defaults/formatters/plaintext.js +2 -2
  166. package/src/js/modules/Format/defaults/formatters/progress.js +132 -132
  167. package/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +43 -43
  168. package/src/js/modules/Format/defaults/formatters/rowSelection.js +59 -59
  169. package/src/js/modules/Format/defaults/formatters/rownum.js +9 -9
  170. package/src/js/modules/Format/defaults/formatters/star.js +37 -37
  171. package/src/js/modules/Format/defaults/formatters/textarea.js +3 -3
  172. package/src/js/modules/Format/defaults/formatters/tickCross.js +21 -21
  173. package/src/js/modules/Format/defaults/formatters/traffic.js +46 -46
  174. package/src/js/modules/Format/defaults/formatters.js +42 -42
  175. package/src/js/modules/FrozenColumns/FrozenColumns.js +299 -299
  176. package/src/js/modules/FrozenRows/FrozenRows.js +169 -159
  177. package/src/js/modules/GroupRows/Group.js +597 -595
  178. package/src/js/modules/GroupRows/GroupComponent.js +66 -66
  179. package/src/js/modules/GroupRows/GroupRows.js +639 -623
  180. package/src/js/modules/History/History.js +171 -171
  181. package/src/js/modules/History/defaults/redoers.js +24 -24
  182. package/src/js/modules/History/defaults/undoers.js +24 -24
  183. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +181 -181
  184. package/src/js/modules/Import/Import.js +193 -193
  185. package/src/js/modules/Import/defaults/importers/array.js +4 -4
  186. package/src/js/modules/Import/defaults/importers/csv.js +62 -62
  187. package/src/js/modules/Import/defaults/importers/json.js +7 -7
  188. package/src/js/modules/Import/defaults/importers.js +8 -8
  189. package/src/js/modules/Interaction/Interaction.js +325 -325
  190. package/src/js/modules/Keybindings/Keybindings.js +172 -172
  191. package/src/js/modules/Keybindings/defaults/actions.js +118 -118
  192. package/src/js/modules/Keybindings/defaults/bindings.js +12 -12
  193. package/src/js/modules/Layout/Layout.js +49 -49
  194. package/src/js/modules/Layout/defaults/modes/fitColumns.js +171 -171
  195. package/src/js/modules/Layout/defaults/modes/fitData.js +9 -9
  196. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +9 -9
  197. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +39 -39
  198. package/src/js/modules/Layout/defaults/modes.js +11 -11
  199. package/src/js/modules/Localize/Localize.js +185 -194
  200. package/src/js/modules/Localize/defaults/langs.js +36 -36
  201. package/src/js/modules/Menu/Menu.js +302 -302
  202. package/src/js/modules/MoveColumns/MoveColumns.js +299 -299
  203. package/src/js/modules/MoveRows/MoveRows.js +635 -635
  204. package/src/js/modules/Mutator/Mutator.js +161 -161
  205. package/src/js/modules/Page/Page.js +881 -881
  206. package/src/js/modules/Page/defaults/pageCounters/pages.js +32 -32
  207. package/src/js/modules/Page/defaults/pageCounters/rows.js +39 -39
  208. package/src/js/modules/Page/defaults/pageCounters.js +7 -7
  209. package/src/js/modules/Persistence/Persistence.js +458 -458
  210. package/src/js/modules/Persistence/defaults/readers.js +29 -29
  211. package/src/js/modules/Persistence/defaults/writers.js +12 -12
  212. package/src/js/modules/Popup/Popup.js +231 -231
  213. package/src/js/modules/Print/Print.js +137 -124
  214. package/src/js/modules/ReactiveData/ReactiveData.js +408 -408
  215. package/src/js/modules/ResizeColumns/ResizeColumns.js +309 -309
  216. package/src/js/modules/ResizeRows/ResizeRows.js +111 -111
  217. package/src/js/modules/ResizeTable/ResizeTable.js +159 -159
  218. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +345 -345
  219. package/src/js/modules/SelectRow/SelectRow.js +446 -436
  220. package/src/js/modules/Sort/Sort.js +470 -470
  221. package/src/js/modules/Sort/defaults/sorters/alphanum.js +43 -43
  222. package/src/js/modules/Sort/defaults/sorters/array.js +53 -53
  223. package/src/js/modules/Sort/defaults/sorters/boolean.js +6 -6
  224. package/src/js/modules/Sort/defaults/sorters/date.js +9 -9
  225. package/src/js/modules/Sort/defaults/sorters/datetime.js +43 -43
  226. package/src/js/modules/Sort/defaults/sorters/exists.js +6 -6
  227. package/src/js/modules/Sort/defaults/sorters/number.js +39 -39
  228. package/src/js/modules/Sort/defaults/sorters/string.js +33 -33
  229. package/src/js/modules/Sort/defaults/sorters/time.js +9 -9
  230. package/src/js/modules/Sort/defaults/sorters.js +20 -20
  231. package/src/js/modules/Tooltip/Tooltip.js +130 -130
  232. package/src/js/modules/Validate/Validate.js +305 -305
  233. package/src/js/modules/Validate/defaults/validators.js +138 -138
  234. package/src/scss/tabulator.scss +1464 -1466
  235. package/src/scss/themes/bootstrap/functions4.scss +118 -118
  236. package/src/scss/themes/bootstrap/functions5.scss +302 -302
  237. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +284 -284
  238. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +544 -544
  239. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +574 -574
  240. package/src/scss/themes/bootstrap/variables3.scss +870 -870
  241. package/src/scss/themes/bootstrap/variables4.scss +930 -930
  242. package/src/scss/themes/bootstrap/variables5.scss +1641 -1641
  243. package/src/scss/themes/bulma/tabulator_bulma.scss +252 -252
  244. package/src/scss/themes/bulma/variables.scss +197 -197
  245. package/src/scss/themes/materialize/tabulator_materialize.scss +265 -265
  246. package/src/scss/themes/materialize/variables.scss +70 -70
  247. package/src/scss/themes/semanticui/tabulator_semanticui.scss +561 -561
  248. package/src/scss/themes/semanticui/variables.scss +839 -839
  249. package/src/scss/themes/semanticui/variables_table.scss +247 -247
  250. package/src/scss/themes/tabulator_midnight.scss +158 -158
  251. package/src/scss/themes/tabulator_modern.scss +231 -231
  252. package/src/scss/themes/tabulator_simple.scss +102 -102
  253. package/src/scss/themes/tabulator_site.scss +189 -189
@@ -1,299 +1,299 @@
1
- import Module from '../../core/Module.js';
2
- import Helpers from '../../core/tools/Helpers.js';
3
-
4
- class MoveColumns extends Module{
5
-
6
- constructor(table){
7
- super(table);
8
-
9
- this.placeholderElement = this.createPlaceholderElement();
10
- this.hoverElement = false; //floating column header element
11
- this.checkTimeout = false; //click check timeout holder
12
- this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click
13
- this.moving = false; //currently moving column
14
- this.toCol = false; //destination column
15
- this.toColAfter = false; //position of moving column relative to the destination column
16
- this.startX = 0; //starting position within header element
17
- this.autoScrollMargin = 40; //auto scroll on edge when within margin
18
- this.autoScrollStep = 5; //auto scroll distance in pixels
19
- this.autoScrollTimeout = false; //auto scroll timeout
20
- this.touchMove = false;
21
-
22
- this.moveHover = this.moveHover.bind(this);
23
- this.endMove = this.endMove.bind(this);
24
-
25
- this.registerTableOption("movableColumns", false); //enable movable columns
26
- }
27
-
28
- createPlaceholderElement(){
29
- var el = document.createElement("div");
30
-
31
- el.classList.add("tabulator-col");
32
- el.classList.add("tabulator-col-placeholder");
33
-
34
- return el;
35
- }
36
-
37
- initialize(){
38
- if(this.table.options.movableColumns){
39
- this.subscribe("column-init", this.initializeColumn.bind(this));
40
- }
41
- }
42
-
43
- initializeColumn(column){
44
- var self = this,
45
- config = {},
46
- colEl;
47
-
48
- if(!column.modules.frozen && !column.isGroup){
49
- colEl = column.getElement();
50
-
51
- config.mousemove = function(e){
52
- if(column.parent === self.moving.parent){
53
- if((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){
54
- if(self.toCol !== column || !self.toColAfter){
55
- colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);
56
- self.moveColumn(column, true);
57
- }
58
- }else{
59
- if(self.toCol !== column || self.toColAfter){
60
- colEl.parentNode.insertBefore(self.placeholderElement, colEl);
61
- self.moveColumn(column, false);
62
- }
63
- }
64
- }
65
- }.bind(self);
66
-
67
- colEl.addEventListener("mousedown", function(e){
68
- self.touchMove = false;
69
- if(e.which === 1){
70
- self.checkTimeout = setTimeout(function(){
71
- self.startMove(e, column);
72
- }, self.checkPeriod);
73
- }
74
- });
75
-
76
- colEl.addEventListener("mouseup", function(e){
77
- if(e.which === 1){
78
- if(self.checkTimeout){
79
- clearTimeout(self.checkTimeout);
80
- }
81
- }
82
- });
83
-
84
- self.bindTouchEvents(column);
85
- }
86
-
87
- column.modules.moveColumn = config;
88
- }
89
-
90
- bindTouchEvents(column){
91
- var colEl = column.getElement(),
92
- startXMove = false, //shifting center position of the cell
93
- nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;
94
-
95
- colEl.addEventListener("touchstart", (e) => {
96
- this.checkTimeout = setTimeout(() => {
97
- this.touchMove = true;
98
- nextCol = column.nextColumn();
99
- nextColWidth = nextCol ? nextCol.getWidth()/2 : 0;
100
- prevCol = column.prevColumn();
101
- prevColWidth = prevCol ? prevCol.getWidth()/2 : 0;
102
- nextColWidthLast = 0;
103
- prevColWidthLast = 0;
104
- startXMove = false;
105
-
106
- this.startMove(e, column);
107
- }, this.checkPeriod);
108
- }, {passive: true});
109
-
110
- colEl.addEventListener("touchmove", (e) => {
111
- var diff, moveToCol;
112
-
113
- if(this.moving){
114
- this.moveHover(e);
115
-
116
- if(!startXMove){
117
- startXMove = e.touches[0].pageX;
118
- }
119
-
120
- diff = e.touches[0].pageX - startXMove;
121
-
122
- if(diff > 0){
123
- if(nextCol && diff - nextColWidthLast > nextColWidth){
124
- moveToCol = nextCol;
125
-
126
- if(moveToCol !== column){
127
- startXMove = e.touches[0].pageX;
128
- moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);
129
- this.moveColumn(moveToCol, true);
130
- }
131
- }
132
- }else{
133
- if(prevCol && -diff - prevColWidthLast > prevColWidth){
134
- moveToCol = prevCol;
135
-
136
- if(moveToCol !== column){
137
- startXMove = e.touches[0].pageX;
138
- moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());
139
- this.moveColumn(moveToCol, false);
140
- }
141
- }
142
- }
143
-
144
- if(moveToCol){
145
- nextCol = moveToCol.nextColumn();
146
- nextColWidthLast = nextColWidth;
147
- nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
148
- prevCol = moveToCol.prevColumn();
149
- prevColWidthLast = prevColWidth;
150
- prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
151
- }
152
- }
153
- }, {passive: true});
154
-
155
- colEl.addEventListener("touchend", (e) => {
156
- if(this.checkTimeout){
157
- clearTimeout(this.checkTimeout);
158
- }
159
- if(this.moving){
160
- this.endMove(e);
161
- }
162
- });
163
- }
164
-
165
- startMove(e, column){
166
- var element = column.getElement(),
167
- headerElement = this.table.columnManager.getContentsElement(),
168
- headersElement = this.table.columnManager.getHeadersElement();
169
-
170
- this.moving = column;
171
- this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;
172
-
173
- this.table.element.classList.add("tabulator-block-select");
174
-
175
- //create placeholder
176
- this.placeholderElement.style.width = column.getWidth() + "px";
177
- this.placeholderElement.style.height = column.getHeight() + "px";
178
-
179
- element.parentNode.insertBefore(this.placeholderElement, element);
180
- element.parentNode.removeChild(element);
181
-
182
- //create hover element
183
- this.hoverElement = element.cloneNode(true);
184
- this.hoverElement.classList.add("tabulator-moving");
185
-
186
- headerElement.appendChild(this.hoverElement);
187
-
188
- this.hoverElement.style.left = "0";
189
- this.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + "px";
190
-
191
- if(!this.touchMove){
192
- this._bindMouseMove();
193
-
194
- document.body.addEventListener("mousemove", this.moveHover);
195
- document.body.addEventListener("mouseup", this.endMove);
196
- }
197
-
198
- this.moveHover(e);
199
- }
200
-
201
- _bindMouseMove(){
202
- this.table.columnManager.columnsByIndex.forEach(function(column){
203
- if(column.modules.moveColumn.mousemove){
204
- column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove);
205
- }
206
- });
207
- }
208
-
209
- _unbindMouseMove(){
210
- this.table.columnManager.columnsByIndex.forEach(function(column){
211
- if(column.modules.moveColumn.mousemove){
212
- column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove);
213
- }
214
- });
215
- }
216
-
217
- moveColumn(column, after){
218
- var movingCells = this.moving.getCells();
219
-
220
- this.toCol = column;
221
- this.toColAfter = after;
222
-
223
- if(after){
224
- column.getCells().forEach(function(cell, i){
225
- var cellEl = cell.getElement(true);
226
-
227
- if(cellEl.parentNode && movingCells[i]){
228
- cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
229
- }
230
- });
231
- }else{
232
- column.getCells().forEach(function(cell, i){
233
- var cellEl = cell.getElement(true);
234
-
235
- if(cellEl.parentNode && movingCells[i]){
236
- cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
237
- }
238
- });
239
- }
240
- }
241
-
242
- endMove(e){
243
- if(e.which === 1 || this.touchMove){
244
- this._unbindMouseMove();
245
-
246
- this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
247
- this.placeholderElement.parentNode.removeChild(this.placeholderElement);
248
- this.hoverElement.parentNode.removeChild(this.hoverElement);
249
-
250
- this.table.element.classList.remove("tabulator-block-select");
251
-
252
- if(this.toCol){
253
- this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);
254
- }
255
-
256
- this.moving = false;
257
- this.toCol = false;
258
- this.toColAfter = false;
259
-
260
- if(!this.touchMove){
261
- document.body.removeEventListener("mousemove", this.moveHover);
262
- document.body.removeEventListener("mouseup", this.endMove);
263
- }
264
- }
265
- }
266
-
267
- moveHover(e){
268
- var columnHolder = this.table.columnManager.getContentsElement(),
269
- scrollLeft = columnHolder.scrollLeft,
270
- xPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,
271
- scrollPos;
272
-
273
- this.hoverElement.style.left = (xPos - this.startX) + "px";
274
-
275
- if(xPos - scrollLeft < this.autoScrollMargin){
276
- if(!this.autoScrollTimeout){
277
- this.autoScrollTimeout = setTimeout(() => {
278
- scrollPos = Math.max(0,scrollLeft-5);
279
- this.table.rowManager.getElement().scrollLeft = scrollPos;
280
- this.autoScrollTimeout = false;
281
- }, 1);
282
- }
283
- }
284
-
285
- if(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){
286
- if(!this.autoScrollTimeout){
287
- this.autoScrollTimeout = setTimeout(() => {
288
- scrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);
289
- this.table.rowManager.getElement().scrollLeft = scrollPos;
290
- this.autoScrollTimeout = false;
291
- }, 1);
292
- }
293
- }
294
- }
295
- }
296
-
297
- MoveColumns.moduleName = "moveColumn";
298
-
299
- export default MoveColumns;
1
+ import Module from '../../core/Module.js';
2
+ import Helpers from '../../core/tools/Helpers.js';
3
+
4
+ class MoveColumns extends Module{
5
+
6
+ constructor(table){
7
+ super(table);
8
+
9
+ this.placeholderElement = this.createPlaceholderElement();
10
+ this.hoverElement = false; //floating column header element
11
+ this.checkTimeout = false; //click check timeout holder
12
+ this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click
13
+ this.moving = false; //currently moving column
14
+ this.toCol = false; //destination column
15
+ this.toColAfter = false; //position of moving column relative to the destination column
16
+ this.startX = 0; //starting position within header element
17
+ this.autoScrollMargin = 40; //auto scroll on edge when within margin
18
+ this.autoScrollStep = 5; //auto scroll distance in pixels
19
+ this.autoScrollTimeout = false; //auto scroll timeout
20
+ this.touchMove = false;
21
+
22
+ this.moveHover = this.moveHover.bind(this);
23
+ this.endMove = this.endMove.bind(this);
24
+
25
+ this.registerTableOption("movableColumns", false); //enable movable columns
26
+ }
27
+
28
+ createPlaceholderElement(){
29
+ var el = document.createElement("div");
30
+
31
+ el.classList.add("tabulator-col");
32
+ el.classList.add("tabulator-col-placeholder");
33
+
34
+ return el;
35
+ }
36
+
37
+ initialize(){
38
+ if(this.table.options.movableColumns){
39
+ this.subscribe("column-init", this.initializeColumn.bind(this));
40
+ }
41
+ }
42
+
43
+ initializeColumn(column){
44
+ var self = this,
45
+ config = {},
46
+ colEl;
47
+
48
+ if(!column.modules.frozen && !column.isGroup){
49
+ colEl = column.getElement();
50
+
51
+ config.mousemove = function(e){
52
+ if(column.parent === self.moving.parent){
53
+ if((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){
54
+ if(self.toCol !== column || !self.toColAfter){
55
+ colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);
56
+ self.moveColumn(column, true);
57
+ }
58
+ }else{
59
+ if(self.toCol !== column || self.toColAfter){
60
+ colEl.parentNode.insertBefore(self.placeholderElement, colEl);
61
+ self.moveColumn(column, false);
62
+ }
63
+ }
64
+ }
65
+ }.bind(self);
66
+
67
+ colEl.addEventListener("mousedown", function(e){
68
+ self.touchMove = false;
69
+ if(e.which === 1){
70
+ self.checkTimeout = setTimeout(function(){
71
+ self.startMove(e, column);
72
+ }, self.checkPeriod);
73
+ }
74
+ });
75
+
76
+ colEl.addEventListener("mouseup", function(e){
77
+ if(e.which === 1){
78
+ if(self.checkTimeout){
79
+ clearTimeout(self.checkTimeout);
80
+ }
81
+ }
82
+ });
83
+
84
+ self.bindTouchEvents(column);
85
+ }
86
+
87
+ column.modules.moveColumn = config;
88
+ }
89
+
90
+ bindTouchEvents(column){
91
+ var colEl = column.getElement(),
92
+ startXMove = false, //shifting center position of the cell
93
+ nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;
94
+
95
+ colEl.addEventListener("touchstart", (e) => {
96
+ this.checkTimeout = setTimeout(() => {
97
+ this.touchMove = true;
98
+ nextCol = column.nextColumn();
99
+ nextColWidth = nextCol ? nextCol.getWidth()/2 : 0;
100
+ prevCol = column.prevColumn();
101
+ prevColWidth = prevCol ? prevCol.getWidth()/2 : 0;
102
+ nextColWidthLast = 0;
103
+ prevColWidthLast = 0;
104
+ startXMove = false;
105
+
106
+ this.startMove(e, column);
107
+ }, this.checkPeriod);
108
+ }, {passive: true});
109
+
110
+ colEl.addEventListener("touchmove", (e) => {
111
+ var diff, moveToCol;
112
+
113
+ if(this.moving){
114
+ this.moveHover(e);
115
+
116
+ if(!startXMove){
117
+ startXMove = e.touches[0].pageX;
118
+ }
119
+
120
+ diff = e.touches[0].pageX - startXMove;
121
+
122
+ if(diff > 0){
123
+ if(nextCol && diff - nextColWidthLast > nextColWidth){
124
+ moveToCol = nextCol;
125
+
126
+ if(moveToCol !== column){
127
+ startXMove = e.touches[0].pageX;
128
+ moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);
129
+ this.moveColumn(moveToCol, true);
130
+ }
131
+ }
132
+ }else{
133
+ if(prevCol && -diff - prevColWidthLast > prevColWidth){
134
+ moveToCol = prevCol;
135
+
136
+ if(moveToCol !== column){
137
+ startXMove = e.touches[0].pageX;
138
+ moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());
139
+ this.moveColumn(moveToCol, false);
140
+ }
141
+ }
142
+ }
143
+
144
+ if(moveToCol){
145
+ nextCol = moveToCol.nextColumn();
146
+ nextColWidthLast = nextColWidth;
147
+ nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;
148
+ prevCol = moveToCol.prevColumn();
149
+ prevColWidthLast = prevColWidth;
150
+ prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;
151
+ }
152
+ }
153
+ }, {passive: true});
154
+
155
+ colEl.addEventListener("touchend", (e) => {
156
+ if(this.checkTimeout){
157
+ clearTimeout(this.checkTimeout);
158
+ }
159
+ if(this.moving){
160
+ this.endMove(e);
161
+ }
162
+ });
163
+ }
164
+
165
+ startMove(e, column){
166
+ var element = column.getElement(),
167
+ headerElement = this.table.columnManager.getContentsElement(),
168
+ headersElement = this.table.columnManager.getHeadersElement();
169
+
170
+ this.moving = column;
171
+ this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;
172
+
173
+ this.table.element.classList.add("tabulator-block-select");
174
+
175
+ //create placeholder
176
+ this.placeholderElement.style.width = column.getWidth() + "px";
177
+ this.placeholderElement.style.height = column.getHeight() + "px";
178
+
179
+ element.parentNode.insertBefore(this.placeholderElement, element);
180
+ element.parentNode.removeChild(element);
181
+
182
+ //create hover element
183
+ this.hoverElement = element.cloneNode(true);
184
+ this.hoverElement.classList.add("tabulator-moving");
185
+
186
+ headerElement.appendChild(this.hoverElement);
187
+
188
+ this.hoverElement.style.left = "0";
189
+ this.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + "px";
190
+
191
+ if(!this.touchMove){
192
+ this._bindMouseMove();
193
+
194
+ document.body.addEventListener("mousemove", this.moveHover);
195
+ document.body.addEventListener("mouseup", this.endMove);
196
+ }
197
+
198
+ this.moveHover(e);
199
+ }
200
+
201
+ _bindMouseMove(){
202
+ this.table.columnManager.columnsByIndex.forEach(function(column){
203
+ if(column.modules.moveColumn.mousemove){
204
+ column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove);
205
+ }
206
+ });
207
+ }
208
+
209
+ _unbindMouseMove(){
210
+ this.table.columnManager.columnsByIndex.forEach(function(column){
211
+ if(column.modules.moveColumn.mousemove){
212
+ column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove);
213
+ }
214
+ });
215
+ }
216
+
217
+ moveColumn(column, after){
218
+ var movingCells = this.moving.getCells();
219
+
220
+ this.toCol = column;
221
+ this.toColAfter = after;
222
+
223
+ if(after){
224
+ column.getCells().forEach(function(cell, i){
225
+ var cellEl = cell.getElement(true);
226
+
227
+ if(cellEl.parentNode && movingCells[i]){
228
+ cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
229
+ }
230
+ });
231
+ }else{
232
+ column.getCells().forEach(function(cell, i){
233
+ var cellEl = cell.getElement(true);
234
+
235
+ if(cellEl.parentNode && movingCells[i]){
236
+ cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
237
+ }
238
+ });
239
+ }
240
+ }
241
+
242
+ endMove(e){
243
+ if(e.which === 1 || this.touchMove){
244
+ this._unbindMouseMove();
245
+
246
+ this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
247
+ this.placeholderElement.parentNode.removeChild(this.placeholderElement);
248
+ this.hoverElement.parentNode.removeChild(this.hoverElement);
249
+
250
+ this.table.element.classList.remove("tabulator-block-select");
251
+
252
+ if(this.toCol){
253
+ this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);
254
+ }
255
+
256
+ this.moving = false;
257
+ this.toCol = false;
258
+ this.toColAfter = false;
259
+
260
+ if(!this.touchMove){
261
+ document.body.removeEventListener("mousemove", this.moveHover);
262
+ document.body.removeEventListener("mouseup", this.endMove);
263
+ }
264
+ }
265
+ }
266
+
267
+ moveHover(e){
268
+ var columnHolder = this.table.columnManager.getContentsElement(),
269
+ scrollLeft = columnHolder.scrollLeft,
270
+ xPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,
271
+ scrollPos;
272
+
273
+ this.hoverElement.style.left = (xPos - this.startX) + "px";
274
+
275
+ if(xPos - scrollLeft < this.autoScrollMargin){
276
+ if(!this.autoScrollTimeout){
277
+ this.autoScrollTimeout = setTimeout(() => {
278
+ scrollPos = Math.max(0,scrollLeft-5);
279
+ this.table.rowManager.getElement().scrollLeft = scrollPos;
280
+ this.autoScrollTimeout = false;
281
+ }, 1);
282
+ }
283
+ }
284
+
285
+ if(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){
286
+ if(!this.autoScrollTimeout){
287
+ this.autoScrollTimeout = setTimeout(() => {
288
+ scrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);
289
+ this.table.rowManager.getElement().scrollLeft = scrollPos;
290
+ this.autoScrollTimeout = false;
291
+ }, 1);
292
+ }
293
+ }
294
+ }
295
+ }
296
+
297
+ MoveColumns.moduleName = "moveColumn";
298
+
299
+ export default MoveColumns;