tabulator-tables 6.5.0 → 6.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/dist/js/tabulator.js +1 -1
  2. package/dist/js/tabulator.min.js +1 -1
  3. package/dist/js/tabulator_esm.js +1 -1
  4. package/dist/js/tabulator_esm.min.js +1 -1
  5. package/dist/js/tabulator_esm.min.mjs +1 -1
  6. package/dist/js/tabulator_esm.mjs +1 -1
  7. package/package.json +2 -1
  8. package/src/js/builds/esm.js +16 -0
  9. package/src/js/builds/jquery_wrapper.js +63 -0
  10. package/src/js/builds/usd.js +1 -0
  11. package/src/js/core/ColumnManager.js +789 -0
  12. package/src/js/core/CoreFeature.js +140 -0
  13. package/src/js/core/FooterManager.js +102 -0
  14. package/src/js/core/Module.js +140 -0
  15. package/src/js/core/RowManager.js +1140 -0
  16. package/src/js/core/Tabulator.js +928 -0
  17. package/src/js/core/TabulatorFull.js +21 -0
  18. package/src/js/core/cell/Cell.js +299 -0
  19. package/src/js/core/cell/CellComponent.js +79 -0
  20. package/src/js/core/column/Column.js +978 -0
  21. package/src/js/core/column/ColumnComponent.js +151 -0
  22. package/src/js/core/column/defaults/options.js +18 -0
  23. package/src/js/core/defaults/options.js +66 -0
  24. package/src/js/core/modules/core.js +3 -0
  25. package/src/js/core/modules/optional.js +37 -0
  26. package/src/js/core/rendering/Renderer.js +204 -0
  27. package/src/js/core/rendering/renderers/BasicHorizontal.js +27 -0
  28. package/src/js/core/rendering/renderers/BasicVertical.js +103 -0
  29. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +587 -0
  30. package/src/js/core/rendering/renderers/VirtualDomVertical.js +642 -0
  31. package/src/js/core/row/PseudoRow.js +47 -0
  32. package/src/js/core/row/Row.js +487 -0
  33. package/src/js/core/row/RowComponent.js +94 -0
  34. package/src/js/core/tools/Alert.js +66 -0
  35. package/src/js/core/tools/ComponentFunctionBinder.js +32 -0
  36. package/src/js/core/tools/DataLoader.js +128 -0
  37. package/src/js/core/tools/DependencyRegistry.js +82 -0
  38. package/src/js/core/tools/DeprecationAdvisor.js +51 -0
  39. package/src/js/core/tools/ExternalEventBus.js +105 -0
  40. package/src/js/core/tools/Helpers.js +66 -0
  41. package/src/js/core/tools/InteractionMonitor.js +329 -0
  42. package/src/js/core/tools/InternalEventBus.js +162 -0
  43. package/src/js/core/tools/ModuleBinder.js +153 -0
  44. package/src/js/core/tools/OptionsList.js +45 -0
  45. package/src/js/core/tools/Popup.js +317 -0
  46. package/src/js/core/tools/TableRegistry.js +65 -0
  47. package/src/js/modules/Accessor/Accessor.js +115 -0
  48. package/src/js/modules/Accessor/defaults/accessors.js +5 -0
  49. package/src/js/modules/Ajax/Ajax.js +142 -0
  50. package/src/js/modules/Ajax/defaults/config.js +3 -0
  51. package/src/js/modules/Ajax/defaults/contentTypeFormatters.js +45 -0
  52. package/src/js/modules/Ajax/defaults/loaderPromise.js +87 -0
  53. package/src/js/modules/Ajax/defaults/urlGenerator.js +44 -0
  54. package/src/js/modules/Clipboard/Clipboard.js +282 -0
  55. package/src/js/modules/Clipboard/defaults/pasteActions.js +11 -0
  56. package/src/js/modules/Clipboard/defaults/pasteParsers.js +75 -0
  57. package/src/js/modules/Clipboard/extensions/extensions.js +9 -0
  58. package/src/js/modules/Clipboard/extensions/keybindings/actions.js +9 -0
  59. package/src/js/modules/Clipboard/extensions/keybindings/bindings.js +3 -0
  60. package/src/js/modules/ColumnCalcs/CalcComponent.js +46 -0
  61. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +586 -0
  62. package/src/js/modules/ColumnCalcs/defaults/calculations.js +93 -0
  63. package/src/js/modules/Comms/Comms.js +49 -0
  64. package/src/js/modules/DataTree/DataTree.js +620 -0
  65. package/src/js/modules/Download/Download.js +146 -0
  66. package/src/js/modules/Download/defaults/downloaders/csv.js +61 -0
  67. package/src/js/modules/Download/defaults/downloaders/html.js +5 -0
  68. package/src/js/modules/Download/defaults/downloaders/json.js +34 -0
  69. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +32 -0
  70. package/src/js/modules/Download/defaults/downloaders/pdf.js +113 -0
  71. package/src/js/modules/Download/defaults/downloaders/xlsx.js +103 -0
  72. package/src/js/modules/Download/defaults/downloaders.js +15 -0
  73. package/src/js/modules/Edit/Edit.js +845 -0
  74. package/src/js/modules/Edit/List.js +1060 -0
  75. package/src/js/modules/Edit/defaults/editors/adaptable.js +37 -0
  76. package/src/js/modules/Edit/defaults/editors/date.js +144 -0
  77. package/src/js/modules/Edit/defaults/editors/datetime.js +131 -0
  78. package/src/js/modules/Edit/defaults/editors/input.js +77 -0
  79. package/src/js/modules/Edit/defaults/editors/list.js +7 -0
  80. package/src/js/modules/Edit/defaults/editors/number.js +110 -0
  81. package/src/js/modules/Edit/defaults/editors/progress.js +127 -0
  82. package/src/js/modules/Edit/defaults/editors/range.js +81 -0
  83. package/src/js/modules/Edit/defaults/editors/star.js +146 -0
  84. package/src/js/modules/Edit/defaults/editors/textarea.js +123 -0
  85. package/src/js/modules/Edit/defaults/editors/tickCross.js +95 -0
  86. package/src/js/modules/Edit/defaults/editors/time.js +132 -0
  87. package/src/js/modules/Edit/defaults/editors.js +27 -0
  88. package/src/js/modules/Edit/inputMask.js +74 -0
  89. package/src/js/modules/Export/Export.js +654 -0
  90. package/src/js/modules/Export/ExportColumn.js +9 -0
  91. package/src/js/modules/Export/ExportRow.js +8 -0
  92. package/src/js/modules/Export/defaults/columnLookups.js +3 -0
  93. package/src/js/modules/Export/defaults/rowLookups.js +18 -0
  94. package/src/js/modules/Filter/Filter.js +902 -0
  95. package/src/js/modules/Filter/defaults/filters.js +215 -0
  96. package/src/js/modules/Format/Format.js +200 -0
  97. package/src/js/modules/Format/defaults/formatters/adaptable.js +32 -0
  98. package/src/js/modules/Format/defaults/formatters/array.js +30 -0
  99. package/src/js/modules/Format/defaults/formatters/buttonCross.js +3 -0
  100. package/src/js/modules/Format/defaults/formatters/buttonTick.js +3 -0
  101. package/src/js/modules/Format/defaults/formatters/color.js +4 -0
  102. package/src/js/modules/Format/defaults/formatters/datetime.js +39 -0
  103. package/src/js/modules/Format/defaults/formatters/datetimediff.js +43 -0
  104. package/src/js/modules/Format/defaults/formatters/handle.js +4 -0
  105. package/src/js/modules/Format/defaults/formatters/html.js +3 -0
  106. package/src/js/modules/Format/defaults/formatters/image.js +40 -0
  107. package/src/js/modules/Format/defaults/formatters/json.js +12 -0
  108. package/src/js/modules/Format/defaults/formatters/link.js +82 -0
  109. package/src/js/modules/Format/defaults/formatters/lookup.js +10 -0
  110. package/src/js/modules/Format/defaults/formatters/money.js +44 -0
  111. package/src/js/modules/Format/defaults/formatters/plaintext.js +3 -0
  112. package/src/js/modules/Format/defaults/formatters/progress.js +133 -0
  113. package/src/js/modules/Format/defaults/formatters/rownum.js +14 -0
  114. package/src/js/modules/Format/defaults/formatters/star.js +38 -0
  115. package/src/js/modules/Format/defaults/formatters/textarea.js +4 -0
  116. package/src/js/modules/Format/defaults/formatters/tickCross.js +22 -0
  117. package/src/js/modules/Format/defaults/formatters/toggle.js +48 -0
  118. package/src/js/modules/Format/defaults/formatters/traffic.js +47 -0
  119. package/src/js/modules/Format/defaults/formatters.js +47 -0
  120. package/src/js/modules/FrozenColumns/FrozenColumns.js +302 -0
  121. package/src/js/modules/FrozenRows/FrozenRows.js +175 -0
  122. package/src/js/modules/GroupRows/Group.js +615 -0
  123. package/src/js/modules/GroupRows/GroupComponent.js +69 -0
  124. package/src/js/modules/GroupRows/GroupRows.js +636 -0
  125. package/src/js/modules/History/History.js +172 -0
  126. package/src/js/modules/History/defaults/redoers.js +31 -0
  127. package/src/js/modules/History/defaults/undoers.js +33 -0
  128. package/src/js/modules/History/extensions/extensions.js +9 -0
  129. package/src/js/modules/History/extensions/keybindings/actions.js +27 -0
  130. package/src/js/modules/History/extensions/keybindings/bindings.js +4 -0
  131. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +180 -0
  132. package/src/js/modules/Import/Import.js +303 -0
  133. package/src/js/modules/Import/defaults/importers/array.js +3 -0
  134. package/src/js/modules/Import/defaults/importers/csv.js +61 -0
  135. package/src/js/modules/Import/defaults/importers/json.js +8 -0
  136. package/src/js/modules/Import/defaults/importers/xlsx.js +7 -0
  137. package/src/js/modules/Import/defaults/importers.js +11 -0
  138. package/src/js/modules/Interaction/Interaction.js +339 -0
  139. package/src/js/modules/Keybindings/Keybindings.js +198 -0
  140. package/src/js/modules/Keybindings/defaults/actions.js +90 -0
  141. package/src/js/modules/Keybindings/defaults/bindings.js +12 -0
  142. package/src/js/modules/Layout/Layout.js +66 -0
  143. package/src/js/modules/Layout/defaults/modes/fitColumns.js +171 -0
  144. package/src/js/modules/Layout/defaults/modes/fitData.js +10 -0
  145. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +10 -0
  146. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +40 -0
  147. package/src/js/modules/Layout/defaults/modes.js +12 -0
  148. package/src/js/modules/Localize/Localize.js +184 -0
  149. package/src/js/modules/Localize/defaults/langs.js +37 -0
  150. package/src/js/modules/Menu/Menu.js +302 -0
  151. package/src/js/modules/MoveColumns/MoveColumns.js +311 -0
  152. package/src/js/modules/MoveRows/MoveRows.js +604 -0
  153. package/src/js/modules/MoveRows/defaults/receivers.js +30 -0
  154. package/src/js/modules/MoveRows/defaults/senders.js +5 -0
  155. package/src/js/modules/Mutator/Mutator.js +164 -0
  156. package/src/js/modules/Mutator/defaults/mutators.js +1 -0
  157. package/src/js/modules/Page/Page.js +891 -0
  158. package/src/js/modules/Page/defaults/pageCounters/pages.js +33 -0
  159. package/src/js/modules/Page/defaults/pageCounters/rows.js +40 -0
  160. package/src/js/modules/Page/defaults/pageCounters.js +8 -0
  161. package/src/js/modules/Persistence/Persistence.js +473 -0
  162. package/src/js/modules/Persistence/defaults/readers.js +29 -0
  163. package/src/js/modules/Persistence/defaults/writers.js +13 -0
  164. package/src/js/modules/Popup/Popup.js +227 -0
  165. package/src/js/modules/Print/Print.js +136 -0
  166. package/src/js/modules/ReactiveData/ReactiveData.js +416 -0
  167. package/src/js/modules/ResizeColumns/ResizeColumns.js +365 -0
  168. package/src/js/modules/ResizeRows/ResizeRows.js +145 -0
  169. package/src/js/modules/ResizeTable/ResizeTable.js +158 -0
  170. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +354 -0
  171. package/src/js/modules/ResponsiveLayout/extensions/extensions.js +9 -0
  172. package/src/js/modules/ResponsiveLayout/extensions/formatters/responsiveCollapse.js +44 -0
  173. package/src/js/modules/SelectRange/Range.js +366 -0
  174. package/src/js/modules/SelectRange/RangeComponent.js +91 -0
  175. package/src/js/modules/SelectRange/SelectRange.js +993 -0
  176. package/src/js/modules/SelectRange/extensions/clipboard/pasteActions.js +45 -0
  177. package/src/js/modules/SelectRange/extensions/clipboard/pasteParsers.js +57 -0
  178. package/src/js/modules/SelectRange/extensions/export/columnLookups.js +11 -0
  179. package/src/js/modules/SelectRange/extensions/export/rowLookups.js +5 -0
  180. package/src/js/modules/SelectRange/extensions/extensions.js +21 -0
  181. package/src/js/modules/SelectRange/extensions/keybindings/actions.js +38 -0
  182. package/src/js/modules/SelectRange/extensions/keybindings/bindings.js +14 -0
  183. package/src/js/modules/SelectRow/SelectRow.js +499 -0
  184. package/src/js/modules/SelectRow/extensions/extensions.js +9 -0
  185. package/src/js/modules/SelectRow/extensions/formatters/rowSelection.js +60 -0
  186. package/src/js/modules/Sort/Sort.js +480 -0
  187. package/src/js/modules/Sort/defaults/sorters/alphanum.js +44 -0
  188. package/src/js/modules/Sort/defaults/sorters/array.js +82 -0
  189. package/src/js/modules/Sort/defaults/sorters/boolean.js +7 -0
  190. package/src/js/modules/Sort/defaults/sorters/date.js +10 -0
  191. package/src/js/modules/Sort/defaults/sorters/datetime.js +48 -0
  192. package/src/js/modules/Sort/defaults/sorters/exists.js +7 -0
  193. package/src/js/modules/Sort/defaults/sorters/number.js +40 -0
  194. package/src/js/modules/Sort/defaults/sorters/string.js +34 -0
  195. package/src/js/modules/Sort/defaults/sorters/time.js +10 -0
  196. package/src/js/modules/Sort/defaults/sorters.js +21 -0
  197. package/src/js/modules/Spreadsheet/GridCalculator.js +64 -0
  198. package/src/js/modules/Spreadsheet/Sheet.js +243 -0
  199. package/src/js/modules/Spreadsheet/SheetComponent.js +59 -0
  200. package/src/js/modules/Spreadsheet/Spreadsheet.js +309 -0
  201. package/src/js/modules/Tooltip/Tooltip.js +128 -0
  202. package/src/js/modules/Validate/Validate.js +303 -0
  203. package/src/js/modules/Validate/defaults/validators.js +150 -0
  204. package/src/scss/tabulator.scss +1693 -0
  205. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +302 -0
  206. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +589 -0
  207. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +979 -0
  208. package/src/scss/themes/bootstrap/variables3.scss +872 -0
  209. package/src/scss/themes/bootstrap/variables4.scss +1059 -0
  210. package/src/scss/themes/bootstrap/variables5.scss +1967 -0
  211. package/src/scss/themes/bulma/tabulator_bulma.scss +316 -0
  212. package/src/scss/themes/bulma/variables.scss +198 -0
  213. package/src/scss/themes/materialize/tabulator_materialize.scss +318 -0
  214. package/src/scss/themes/materialize/variables.scss +71 -0
  215. package/src/scss/themes/semanticui/tabulator_semanticui.scss +623 -0
  216. package/src/scss/themes/semanticui/variables.scss +843 -0
  217. package/src/scss/themes/semanticui/variables_table.scss +248 -0
  218. package/src/scss/themes/tabulator_midnight.scss +235 -0
  219. package/src/scss/themes/tabulator_modern.scss +308 -0
  220. package/src/scss/themes/tabulator_simple.scss +143 -0
  221. package/src/scss/themes/tabulator_site.scss +267 -0
  222. package/src/scss/themes/tabulator_site_dark.scss +496 -0
@@ -0,0 +1,604 @@
1
+ import Module from '../../core/Module.js';
2
+ import Helpers from '../../core/tools/Helpers.js';
3
+
4
+ import defaultSenders from './defaults/senders.js';
5
+ import defaultReceivers from './defaults/receivers.js';
6
+
7
+ export default class MoveRows extends Module{
8
+
9
+ static moduleName = "moveRow";
10
+
11
+ //load defaults
12
+ static senders = defaultSenders;
13
+ static receivers = defaultReceivers;
14
+
15
+ constructor(table){
16
+ super(table);
17
+
18
+ this.placeholderElement = this.createPlaceholderElement();
19
+ this.hoverElement = false; //floating row header element
20
+ this.checkTimeout = false; //click check timeout holder
21
+ this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click
22
+ this.moving = false; //currently moving row
23
+ this.toRow = false; //destination row
24
+ this.toRowAfter = false; //position of moving row relative to the destination row
25
+ this.hasHandle = false; //row has handle instead of fully movable row
26
+ this.startY = 0; //starting Y position within header element
27
+ this.startX = 0; //starting X position within header element
28
+
29
+ this.moveHover = this.moveHover.bind(this);
30
+ this.endMove = this.endMove.bind(this);
31
+ this.tableRowDropEvent = false;
32
+
33
+ this.touchMove = false;
34
+
35
+ this.connection = false;
36
+ this.connectionSelectorsTables = false;
37
+ this.connectionSelectorsElements = false;
38
+ this.connectionElements = [];
39
+ this.connections = [];
40
+
41
+ this.connectedTable = false;
42
+ this.connectedRow = false;
43
+
44
+ this.registerTableOption("movableRows", false); //enable movable rows
45
+ this.registerTableOption("movableRowsConnectedTables", false); //tables for movable rows to be connected to
46
+ this.registerTableOption("movableRowsConnectedElements", false); //other elements for movable rows to be connected to
47
+ this.registerTableOption("movableRowsSender", false);
48
+ this.registerTableOption("movableRowsReceiver", "insert");
49
+
50
+ this.registerColumnOption("rowHandle");
51
+ }
52
+
53
+ createPlaceholderElement(){
54
+ var el = document.createElement("div");
55
+
56
+ el.classList.add("tabulator-row");
57
+ el.classList.add("tabulator-row-placeholder");
58
+
59
+ return el;
60
+ }
61
+
62
+ initialize(){
63
+ if(this.table.options.movableRows){
64
+ this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;
65
+ this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;
66
+
67
+ this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;
68
+
69
+ this.subscribe("cell-init", this.initializeCell.bind(this));
70
+ this.subscribe("column-init", this.initializeColumn.bind(this));
71
+ this.subscribe("row-init", this.initializeRow.bind(this));
72
+ }
73
+ }
74
+
75
+ initializeGroupHeader(group){
76
+ var self = this,
77
+ config = {};
78
+
79
+ //inter table drag drop
80
+ config.mouseup = function(e){
81
+ self.tableRowDrop(e, group);
82
+ }.bind(self);
83
+
84
+ //same table drag drop
85
+ config.mousemove = function(e){
86
+ var rowEl;
87
+
88
+ if(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){
89
+ if(self.toRow !== group || !self.toRowAfter){
90
+ rowEl = group.getElement();
91
+ rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
92
+ self.moveRow(group, true);
93
+ }
94
+ }else{
95
+ if(self.toRow !== group || self.toRowAfter){
96
+ rowEl = group.getElement();
97
+ if(rowEl.previousSibling){
98
+ rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
99
+ self.moveRow(group, false);
100
+ }
101
+ }
102
+ }
103
+ }.bind(self);
104
+
105
+ group.modules.moveRow = config;
106
+ }
107
+
108
+ initializeRow(row){
109
+ var self = this,
110
+ config = {},
111
+ rowEl;
112
+
113
+ //inter table drag drop
114
+ config.mouseup = function(e){
115
+ self.tableRowDrop(e, row);
116
+ }.bind(self);
117
+
118
+ //same table drag drop
119
+ config.mousemove = function(e){
120
+ var rowEl = row.getElement();
121
+
122
+ if(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){
123
+ if(self.toRow !== row || !self.toRowAfter){
124
+ rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
125
+ self.moveRow(row, true);
126
+ }
127
+ }else{
128
+ if(self.toRow !== row || self.toRowAfter){
129
+ rowEl.parentNode.insertBefore(self.placeholderElement, rowEl);
130
+ self.moveRow(row, false);
131
+ }
132
+ }
133
+ }.bind(self);
134
+
135
+
136
+ if(!this.hasHandle){
137
+
138
+ rowEl = row.getElement();
139
+
140
+ rowEl.addEventListener("mousedown", function(e){
141
+ if(e.which === 1){
142
+ self.checkTimeout = setTimeout(function(){
143
+ self.startMove(e, row);
144
+ }, self.checkPeriod);
145
+ }
146
+ });
147
+
148
+ rowEl.addEventListener("mouseup", function(e){
149
+ if(e.which === 1){
150
+ if(self.checkTimeout){
151
+ clearTimeout(self.checkTimeout);
152
+ }
153
+ }
154
+ });
155
+
156
+ this.bindTouchEvents(row, row.getElement());
157
+ }
158
+
159
+ row.modules.moveRow = config;
160
+ }
161
+
162
+ initializeColumn(column){
163
+ if(column.definition.rowHandle && this.table.options.movableRows !== false){
164
+ this.hasHandle = true;
165
+ }
166
+ }
167
+
168
+ initializeCell(cell){
169
+ if(cell.column.definition.rowHandle && this.table.options.movableRows !== false){
170
+ var self = this,
171
+ cellEl = cell.getElement(true);
172
+
173
+ cellEl.addEventListener("mousedown", function(e){
174
+ if(e.which === 1){
175
+ self.checkTimeout = setTimeout(function(){
176
+ self.startMove(e, cell.row);
177
+ }, self.checkPeriod);
178
+ }
179
+ });
180
+
181
+ cellEl.addEventListener("mouseup", function(e){
182
+ if(e.which === 1){
183
+ if(self.checkTimeout){
184
+ clearTimeout(self.checkTimeout);
185
+ }
186
+ }
187
+ });
188
+
189
+ this.bindTouchEvents(cell.row, cellEl);
190
+ }
191
+ }
192
+
193
+ bindTouchEvents(row, element){
194
+ var startYMove = false, //shifting center position of the cell
195
+ nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;
196
+
197
+ element.addEventListener("touchstart", (e) => {
198
+ this.checkTimeout = setTimeout(() => {
199
+ this.touchMove = true;
200
+ nextRow = row.nextRow();
201
+ nextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;
202
+ prevRow = row.prevRow();
203
+ prevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;
204
+ nextRowHeightLast = 0;
205
+ prevRowHeightLast = 0;
206
+ startYMove = false;
207
+
208
+ this.startMove(e, row);
209
+ }, this.checkPeriod);
210
+ }, {passive: true});
211
+ this.moving, this.toRow, this.toRowAfter;
212
+ element.addEventListener("touchmove", (e) => {
213
+
214
+ var diff, moveToRow;
215
+
216
+ if(this.moving){
217
+ e.preventDefault();
218
+
219
+ this.moveHover(e);
220
+
221
+ if(!startYMove){
222
+ startYMove = e.touches[0].pageY;
223
+ }
224
+
225
+ diff = e.touches[0].pageY - startYMove;
226
+
227
+ if(diff > 0){
228
+ if(nextRow && diff - nextRowHeightLast > nextRowHeight){
229
+ moveToRow = nextRow;
230
+
231
+ if(moveToRow !== row){
232
+ startYMove = e.touches[0].pageY;
233
+ moveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);
234
+ this.moveRow(moveToRow, true);
235
+ }
236
+ }
237
+ }else{
238
+ if(prevRow && -diff - prevRowHeightLast > prevRowHeight){
239
+ moveToRow = prevRow;
240
+
241
+ if(moveToRow !== row){
242
+ startYMove = e.touches[0].pageY;
243
+ moveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());
244
+ this.moveRow(moveToRow, false);
245
+ }
246
+ }
247
+ }
248
+
249
+ if(moveToRow){
250
+ nextRow = moveToRow.nextRow();
251
+ nextRowHeightLast = nextRowHeight;
252
+ nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;
253
+ prevRow = moveToRow.prevRow();
254
+ prevRowHeightLast = prevRowHeight;
255
+ prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;
256
+ }
257
+ }
258
+ });
259
+
260
+ element.addEventListener("touchend", (e) => {
261
+ if(this.checkTimeout){
262
+ clearTimeout(this.checkTimeout);
263
+ }
264
+ if(this.moving){
265
+ this.endMove(e);
266
+ this.touchMove = false;
267
+ }
268
+ });
269
+ }
270
+
271
+ _bindMouseMove(){
272
+ this.table.rowManager.getDisplayRows().forEach((row) => {
273
+ if((row.type === "row" || row.type === "group") && row.modules.moveRow && row.modules.moveRow.mousemove){
274
+ row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove);
275
+ }
276
+ });
277
+ }
278
+
279
+ _unbindMouseMove(){
280
+ this.table.rowManager.getDisplayRows().forEach((row) => {
281
+ if((row.type === "row" || row.type === "group") && row.modules.moveRow && row.modules.moveRow.mousemove){
282
+ row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove);
283
+ }
284
+ });
285
+ }
286
+
287
+ startMove(e, row){
288
+ var element = row.getElement();
289
+
290
+ this.setStartPosition(e, row);
291
+
292
+ this.moving = row;
293
+
294
+ this.table.element.classList.add("tabulator-block-select");
295
+
296
+ //create placeholder
297
+ this.placeholderElement.style.width = row.getWidth() + "px";
298
+ this.placeholderElement.style.height = row.getHeight() + "px";
299
+
300
+ if(!this.connection){
301
+ element.parentNode.insertBefore(this.placeholderElement, element);
302
+ element.parentNode.removeChild(element);
303
+ }else{
304
+ this.table.element.classList.add("tabulator-movingrow-sending");
305
+ this.connectToTables(row);
306
+ }
307
+
308
+ //create hover element
309
+ this.hoverElement = element.cloneNode(true);
310
+ this.hoverElement.classList.add("tabulator-moving");
311
+
312
+ if(this.connection){
313
+ document.body.appendChild(this.hoverElement);
314
+ this.hoverElement.style.left = "0";
315
+ this.hoverElement.style.top = "0";
316
+ this.hoverElement.style.width = this.table.element.clientWidth + "px";
317
+ this.hoverElement.style.whiteSpace = "nowrap";
318
+ this.hoverElement.style.overflow = "hidden";
319
+ this.hoverElement.style.pointerEvents = "none";
320
+ }else{
321
+ this.table.rowManager.getTableElement().appendChild(this.hoverElement);
322
+
323
+ this.hoverElement.style.left = "0";
324
+ this.hoverElement.style.top = "0";
325
+
326
+ this._bindMouseMove();
327
+ }
328
+
329
+ document.body.addEventListener("mousemove", this.moveHover);
330
+ document.body.addEventListener("mouseup", this.endMove);
331
+
332
+ this.dispatchExternal("rowMoving", row.getComponent());
333
+
334
+ this.moveHover(e);
335
+ }
336
+
337
+ setStartPosition(e, row){
338
+ var pageX = this.touchMove ? e.touches[0].pageX : e.pageX,
339
+ pageY = this.touchMove ? e.touches[0].pageY : e.pageY,
340
+ element, position;
341
+
342
+ element = row.getElement();
343
+ if(this.connection){
344
+ position = element.getBoundingClientRect();
345
+
346
+ this.startX = position.left - pageX + window.pageXOffset;
347
+ this.startY = position.top - pageY + window.pageYOffset;
348
+ }else{
349
+ this.startY = (pageY - element.getBoundingClientRect().top);
350
+ }
351
+ }
352
+
353
+ endMove(e){
354
+ if(!e || e.which === 1 || this.touchMove){
355
+ this._unbindMouseMove();
356
+
357
+ if(!this.connection){
358
+ this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);
359
+ this.placeholderElement.parentNode.removeChild(this.placeholderElement);
360
+ }
361
+
362
+ this.hoverElement.parentNode.removeChild(this.hoverElement);
363
+
364
+ this.table.element.classList.remove("tabulator-block-select");
365
+
366
+ if(this.toRow){
367
+ this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);
368
+ }else{
369
+ this.dispatchExternal("rowMoveCancelled", this.moving.getComponent());
370
+ }
371
+
372
+ this.moving = false;
373
+ this.toRow = false;
374
+ this.toRowAfter = false;
375
+
376
+ document.body.removeEventListener("mousemove", this.moveHover);
377
+ document.body.removeEventListener("mouseup", this.endMove);
378
+
379
+ if(this.connection){
380
+ this.table.element.classList.remove("tabulator-movingrow-sending");
381
+ this.disconnectFromTables();
382
+ }
383
+ }
384
+ }
385
+
386
+ moveRow(row, after){
387
+ this.toRow = row;
388
+ this.toRowAfter = after;
389
+ }
390
+
391
+ moveHover(e){
392
+ if(this.connection){
393
+ this.moveHoverConnections.call(this, e);
394
+ }else{
395
+ this.moveHoverTable.call(this, e);
396
+ }
397
+ }
398
+
399
+ moveHoverTable(e){
400
+ var rowHolder = this.table.rowManager.getElement(),
401
+ scrollTop = rowHolder.scrollTop,
402
+ yPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop;
403
+
404
+ this.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + "px";
405
+ }
406
+
407
+ moveHoverConnections(e){
408
+ this.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + "px";
409
+ this.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + "px";
410
+ }
411
+
412
+ elementRowDrop(e, element, row){
413
+ this.dispatchExternal("movableRowsElementDrop", e, element, row ? row.getComponent() : false);
414
+ }
415
+
416
+ //establish connection with other tables
417
+ connectToTables(row){
418
+ var connectionTables;
419
+
420
+ if(this.connectionSelectorsTables){
421
+ connectionTables = this.commsConnections(this.connectionSelectorsTables);
422
+
423
+ this.dispatchExternal("movableRowsSendingStart", connectionTables);
424
+
425
+ this.commsSend(this.connectionSelectorsTables, "moveRow", "connect", {
426
+ row:row,
427
+ });
428
+ }
429
+
430
+ if(this.connectionSelectorsElements){
431
+
432
+ this.connectionElements = [];
433
+
434
+ if(!Array.isArray(this.connectionSelectorsElements)){
435
+ this.connectionSelectorsElements = [this.connectionSelectorsElements];
436
+ }
437
+
438
+ this.connectionSelectorsElements.forEach((query) => {
439
+ if(typeof query === "string"){
440
+ this.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));
441
+ }else{
442
+ this.connectionElements.push(query);
443
+ }
444
+ });
445
+
446
+ this.connectionElements.forEach((element) => {
447
+ var dropEvent = (e) => {
448
+ this.elementRowDrop(e, element, this.moving);
449
+ };
450
+
451
+ element.addEventListener("mouseup", dropEvent);
452
+ element.tabulatorElementDropEvent = dropEvent;
453
+
454
+ element.classList.add("tabulator-movingrow-receiving");
455
+ });
456
+ }
457
+ }
458
+
459
+ //disconnect from other tables
460
+ disconnectFromTables(){
461
+ var connectionTables;
462
+
463
+ if(this.connectionSelectorsTables){
464
+ connectionTables = this.commsConnections(this.connectionSelectorsTables);
465
+
466
+ this.dispatchExternal("movableRowsSendingStop", connectionTables);
467
+
468
+ this.commsSend(this.connectionSelectorsTables, "moveRow", "disconnect");
469
+ }
470
+
471
+ this.connectionElements.forEach((element) => {
472
+ element.classList.remove("tabulator-movingrow-receiving");
473
+ element.removeEventListener("mouseup", element.tabulatorElementDropEvent);
474
+ delete element.tabulatorElementDropEvent;
475
+ });
476
+ }
477
+
478
+ //accept incomming connection
479
+ connect(table, row){
480
+ if(!this.connectedTable){
481
+ this.connectedTable = table;
482
+ this.connectedRow = row;
483
+
484
+ this.table.element.classList.add("tabulator-movingrow-receiving");
485
+
486
+ this.table.rowManager.getDisplayRows().forEach((row) => {
487
+ if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){
488
+ row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup);
489
+ }
490
+ });
491
+
492
+ this.tableRowDropEvent = this.tableRowDrop.bind(this);
493
+
494
+ this.table.element.addEventListener("mouseup", this.tableRowDropEvent);
495
+
496
+ this.dispatchExternal("movableRowsReceivingStart", row, table);
497
+
498
+ return true;
499
+ }else{
500
+ console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable);
501
+ return false;
502
+ }
503
+ }
504
+
505
+ //close incoming connection
506
+ disconnect(table){
507
+ if(table === this.connectedTable){
508
+ this.connectedTable = false;
509
+ this.connectedRow = false;
510
+
511
+ this.table.element.classList.remove("tabulator-movingrow-receiving");
512
+
513
+ this.table.rowManager.getDisplayRows().forEach((row) =>{
514
+ if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){
515
+ row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup);
516
+ }
517
+ });
518
+
519
+ this.table.element.removeEventListener("mouseup", this.tableRowDropEvent);
520
+
521
+ this.dispatchExternal("movableRowsReceivingStop", table);
522
+ }else{
523
+ console.warn("Move Row Error - trying to disconnect from non connected table");
524
+ }
525
+ }
526
+
527
+ dropComplete(table, row, success){
528
+ var sender = false;
529
+
530
+ if(success){
531
+
532
+ switch(typeof this.table.options.movableRowsSender){
533
+ case "string":
534
+ sender = MoveRows.senders[this.table.options.movableRowsSender];
535
+ break;
536
+
537
+ case "function":
538
+ sender = this.table.options.movableRowsSender;
539
+ break;
540
+ }
541
+
542
+ if(sender){
543
+ sender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table);
544
+ }else{
545
+ if(this.table.options.movableRowsSender){
546
+ console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender);
547
+ }
548
+ }
549
+
550
+ this.dispatchExternal("movableRowsSent", this.moving.getComponent(), row ? row.getComponent() : undefined, table);
551
+ }else{
552
+ this.dispatchExternal("movableRowsSentFailed", this.moving.getComponent(), row ? row.getComponent() : undefined, table);
553
+ }
554
+
555
+ this.endMove();
556
+ }
557
+
558
+ tableRowDrop(e, row){
559
+ var receiver = false,
560
+ success = false;
561
+
562
+ e.stopImmediatePropagation();
563
+
564
+ switch(typeof this.table.options.movableRowsReceiver){
565
+ case "string":
566
+ receiver = MoveRows.receivers[this.table.options.movableRowsReceiver];
567
+ break;
568
+
569
+ case "function":
570
+ receiver = this.table.options.movableRowsReceiver;
571
+ break;
572
+ }
573
+
574
+ if(receiver){
575
+ success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
576
+ }else{
577
+ console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver);
578
+ }
579
+
580
+ if(success){
581
+ this.dispatchExternal("movableRowsReceived", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
582
+ }else{
583
+ this.dispatchExternal("movableRowsReceivedFailed", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);
584
+ }
585
+
586
+ this.commsSend(this.connectedTable, "moveRow", "dropcomplete", {
587
+ row:row,
588
+ success:success,
589
+ });
590
+ }
591
+
592
+ commsReceived(table, action, data){
593
+ switch(action){
594
+ case "connect":
595
+ return this.connect(table, data.row);
596
+
597
+ case "disconnect":
598
+ return this.disconnect(table);
599
+
600
+ case "dropcomplete":
601
+ return this.dropComplete(table, data.row, data.success);
602
+ }
603
+ }
604
+ }
@@ -0,0 +1,30 @@
1
+ export default{
2
+ insert:function(fromRow, toRow, fromTable){
3
+ this.table.addRow(fromRow.getData(), undefined, toRow);
4
+ return true;
5
+ },
6
+
7
+ add:function(fromRow, toRow, fromTable){
8
+ this.table.addRow(fromRow.getData());
9
+ return true;
10
+ },
11
+
12
+ update:function(fromRow, toRow, fromTable){
13
+ if(toRow){
14
+ toRow.update(fromRow.getData());
15
+ return true;
16
+ }
17
+
18
+ return false;
19
+ },
20
+
21
+ replace:function(fromRow, toRow, fromTable){
22
+ if(toRow){
23
+ this.table.addRow(fromRow.getData(), undefined, toRow);
24
+ toRow.delete();
25
+ return true;
26
+ }
27
+
28
+ return false;
29
+ },
30
+ };
@@ -0,0 +1,5 @@
1
+ export default {
2
+ delete:function(fromRow, toRow, toTable){
3
+ fromRow.delete();
4
+ }
5
+ };