tabulator-tables 5.2.6 → 5.3.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 (216) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.js +28 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -0
  4. package/.github/workflows/bad-files-check.yml +39 -0
  5. package/.github/workflows/lint-and-test.yml +31 -0
  6. package/README.md +18 -6
  7. package/bower.json +1 -1
  8. package/build/Bundler.js +77 -77
  9. package/dist/css/tabulator.css +12 -7
  10. package/dist/css/tabulator.css.map +1 -1
  11. package/dist/css/tabulator.min.css +1 -1
  12. package/dist/css/tabulator.min.css.map +1 -1
  13. package/dist/css/tabulator_bootstrap3.css +12 -7
  14. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  15. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  16. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  17. package/dist/css/tabulator_bootstrap4.css +12 -7
  18. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  19. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  20. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  21. package/dist/css/tabulator_bootstrap5.css +51 -46
  22. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  23. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  24. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  25. package/dist/css/tabulator_bulma.css +12 -7
  26. package/dist/css/tabulator_bulma.css.map +1 -1
  27. package/dist/css/tabulator_bulma.min.css +1 -1
  28. package/dist/css/tabulator_bulma.min.css.map +1 -1
  29. package/dist/css/tabulator_materialize.css +12 -7
  30. package/dist/css/tabulator_materialize.css.map +1 -1
  31. package/dist/css/tabulator_materialize.min.css +1 -1
  32. package/dist/css/tabulator_materialize.min.css.map +1 -1
  33. package/dist/css/tabulator_midnight.css +12 -7
  34. package/dist/css/tabulator_midnight.css.map +1 -1
  35. package/dist/css/tabulator_midnight.min.css +1 -1
  36. package/dist/css/tabulator_midnight.min.css.map +1 -1
  37. package/dist/css/tabulator_modern.css +12 -7
  38. package/dist/css/tabulator_modern.css.map +1 -1
  39. package/dist/css/tabulator_modern.min.css +1 -1
  40. package/dist/css/tabulator_modern.min.css.map +1 -1
  41. package/dist/css/tabulator_semanticui.css +12 -7
  42. package/dist/css/tabulator_semanticui.css.map +1 -1
  43. package/dist/css/tabulator_semanticui.min.css +1 -1
  44. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  45. package/dist/css/tabulator_simple.css +12 -7
  46. package/dist/css/tabulator_simple.css.map +1 -1
  47. package/dist/css/tabulator_simple.min.css +1 -1
  48. package/dist/css/tabulator_simple.min.css.map +1 -1
  49. package/dist/css/tabulator_site.css +12 -7
  50. package/dist/css/tabulator_site.css.map +1 -1
  51. package/dist/css/tabulator_site.min.css +1 -1
  52. package/dist/css/tabulator_site.min.css.map +1 -1
  53. package/dist/js/jquery_wrapper.js +37 -37
  54. package/dist/js/tabulator.js +1506 -706
  55. package/dist/js/tabulator.js.map +1 -1
  56. package/dist/js/tabulator.min.js +2 -2
  57. package/dist/js/tabulator.min.js.map +1 -1
  58. package/dist/js/tabulator_esm.js +4226 -3460
  59. package/dist/js/tabulator_esm.js.map +1 -1
  60. package/dist/js/tabulator_esm.min.js +2 -2
  61. package/dist/js/tabulator_esm.min.js.map +1 -1
  62. package/package.json +4 -1
  63. package/src/js/builds/jquery_wrapper.js +37 -37
  64. package/src/js/core/ColumnManager.js +270 -232
  65. package/src/js/core/CoreFeature.js +16 -2
  66. package/src/js/core/FooterManager.js +10 -10
  67. package/src/js/core/Module.js +8 -8
  68. package/src/js/core/RowManager.js +81 -88
  69. package/src/js/core/Tabulator.js +89 -72
  70. package/src/js/core/TabulatorFull.js +1 -1
  71. package/src/js/core/cell/Cell.js +15 -16
  72. package/src/js/core/cell/CellComponent.js +2 -2
  73. package/src/js/core/column/Column.js +81 -68
  74. package/src/js/core/column/ColumnComponent.js +4 -4
  75. package/src/js/core/column/defaults/options.js +1 -1
  76. package/src/js/core/defaults/options.js +4 -2
  77. package/src/js/core/rendering/Renderer.js +19 -19
  78. package/src/js/core/rendering/renderers/BasicHorizontal.js +1 -2
  79. package/src/js/core/rendering/renderers/BasicVertical.js +1 -1
  80. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +42 -58
  81. package/src/js/core/rendering/renderers/VirtualDomVertical.js +31 -22
  82. package/src/js/core/row/Row.js +32 -8
  83. package/src/js/core/row/RowComponent.js +8 -4
  84. package/src/js/core/tools/Alert.js +44 -45
  85. package/src/js/core/tools/ComponentFunctionBinder.js +4 -2
  86. package/src/js/core/tools/DataLoader.js +3 -3
  87. package/src/js/core/tools/DeprecationAdvisor.js +47 -0
  88. package/src/js/core/tools/ExternalEventBus.js +5 -5
  89. package/src/js/core/tools/InteractionMonitor.js +34 -33
  90. package/src/js/core/tools/InternalEventBus.js +5 -5
  91. package/src/js/core/tools/ModuleBinder.js +6 -6
  92. package/src/js/core/tools/OptionsList.js +4 -4
  93. package/src/js/core/tools/Popup.js +215 -189
  94. package/src/js/modules/Accessor/Accessor.js +16 -16
  95. package/src/js/modules/Accessor/defaults/accessors.js +1 -1
  96. package/src/js/modules/Ajax/Ajax.js +7 -7
  97. package/src/js/modules/Ajax/defaults/loaderPromise.js +19 -19
  98. package/src/js/modules/Ajax/defaults/urlGenerator.js +1 -1
  99. package/src/js/modules/Clipboard/Clipboard.js +23 -23
  100. package/src/js/modules/Clipboard/defaults/pasteParsers.js +0 -2
  101. package/src/js/modules/ColumnCalcs/CalcComponent.js +2 -2
  102. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +55 -51
  103. package/src/js/modules/ColumnCalcs/defaults/calculations.js +1 -1
  104. package/src/js/modules/DataTree/DataTree.js +24 -15
  105. package/src/js/modules/Download/Download.js +15 -8
  106. package/src/js/modules/Download/defaults/downloaders/csv.js +28 -28
  107. package/src/js/modules/Download/defaults/downloaders/html.js +2 -2
  108. package/src/js/modules/Download/defaults/downloaders/json.js +14 -14
  109. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +1 -1
  110. package/src/js/modules/Download/defaults/downloaders/pdf.js +17 -19
  111. package/src/js/modules/Download/defaults/downloaders/xlsx.js +2 -2
  112. package/src/js/modules/Edit/Edit.js +219 -201
  113. package/src/js/modules/Edit/List.js +1026 -991
  114. package/src/js/modules/Edit/defaults/editors/autocomplete.js +3 -3
  115. package/src/js/modules/Edit/defaults/editors/date.js +110 -0
  116. package/src/js/modules/Edit/defaults/editors/datetime.js +97 -0
  117. package/src/js/modules/Edit/defaults/editors/input.js +7 -7
  118. package/src/js/modules/Edit/defaults/editors/list.js +2 -2
  119. package/src/js/modules/Edit/defaults/editors/number.js +12 -12
  120. package/src/js/modules/Edit/defaults/editors/progress.js +11 -11
  121. package/src/js/modules/Edit/defaults/editors/range.js +5 -5
  122. package/src/js/modules/Edit/defaults/editors/select.js +3 -3
  123. package/src/js/modules/Edit/defaults/editors/star.js +9 -9
  124. package/src/js/modules/Edit/defaults/editors/textarea.js +97 -92
  125. package/src/js/modules/Edit/defaults/editors/tickCross.js +1 -3
  126. package/src/js/modules/Edit/defaults/editors/time.js +98 -0
  127. package/src/js/modules/Edit/defaults/editors.js +8 -2
  128. package/src/js/modules/Edit/inputMask.js +19 -26
  129. package/src/js/modules/Export/Export.js +69 -65
  130. package/src/js/modules/Filter/Filter.js +88 -95
  131. package/src/js/modules/Format/Format.js +24 -26
  132. package/src/js/modules/Format/defaults/formatters/buttonCross.js +1 -1
  133. package/src/js/modules/Format/defaults/formatters/buttonTick.js +1 -1
  134. package/src/js/modules/Format/defaults/formatters/color.js +1 -1
  135. package/src/js/modules/Format/defaults/formatters/datetime.js +7 -7
  136. package/src/js/modules/Format/defaults/formatters/datetimediff.js +7 -7
  137. package/src/js/modules/Format/defaults/formatters/handle.js +1 -1
  138. package/src/js/modules/Format/defaults/formatters/html.js +1 -1
  139. package/src/js/modules/Format/defaults/formatters/image.js +9 -9
  140. package/src/js/modules/Format/defaults/formatters/link.js +10 -10
  141. package/src/js/modules/Format/defaults/formatters/lookup.js +1 -1
  142. package/src/js/modules/Format/defaults/formatters/money.js +1 -1
  143. package/src/js/modules/Format/defaults/formatters/plaintext.js +1 -1
  144. package/src/js/modules/Format/defaults/formatters/progress.js +41 -42
  145. package/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +3 -3
  146. package/src/js/modules/Format/defaults/formatters/rowSelection.js +1 -1
  147. package/src/js/modules/Format/defaults/formatters/rownum.js +9 -2
  148. package/src/js/modules/Format/defaults/formatters/star.js +1 -1
  149. package/src/js/modules/Format/defaults/formatters/textarea.js +1 -1
  150. package/src/js/modules/Format/defaults/formatters/tickCross.js +1 -1
  151. package/src/js/modules/Format/defaults/formatters/traffic.js +14 -14
  152. package/src/js/modules/FrozenColumns/FrozenColumns.js +6 -8
  153. package/src/js/modules/FrozenRows/FrozenRows.js +37 -7
  154. package/src/js/modules/GroupRows/Group.js +7 -7
  155. package/src/js/modules/GroupRows/GroupComponent.js +2 -2
  156. package/src/js/modules/GroupRows/GroupRows.js +34 -11
  157. package/src/js/modules/History/History.js +2 -2
  158. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +3 -6
  159. package/src/js/modules/Import/Import.js +158 -159
  160. package/src/js/modules/Import/defaults/importers/array.js +5 -0
  161. package/src/js/modules/Import/defaults/importers/csv.js +49 -49
  162. package/src/js/modules/Import/defaults/importers/json.js +6 -6
  163. package/src/js/modules/Import/defaults/importers.js +2 -0
  164. package/src/js/modules/Interaction/Interaction.js +41 -42
  165. package/src/js/modules/Keybindings/Keybindings.js +14 -14
  166. package/src/js/modules/Keybindings/defaults/actions.js +1 -2
  167. package/src/js/modules/Layout/Layout.js +4 -5
  168. package/src/js/modules/Layout/defaults/modes/fitColumns.js +13 -16
  169. package/src/js/modules/Layout/defaults/modes/fitData.js +6 -4
  170. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +2 -2
  171. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +2 -2
  172. package/src/js/modules/Localize/Localize.js +7 -7
  173. package/src/js/modules/Menu/Menu.js +8 -11
  174. package/src/js/modules/MoveColumns/MoveColumns.js +3 -6
  175. package/src/js/modules/MoveRows/MoveRows.js +30 -36
  176. package/src/js/modules/Mutator/Mutator.js +9 -9
  177. package/src/js/modules/Page/Page.js +73 -80
  178. package/src/js/modules/Page/defaults/pageCounters/pages.js +2 -2
  179. package/src/js/modules/Page/defaults/pageCounters/rows.js +1 -1
  180. package/src/js/modules/Persistence/Persistence.js +40 -44
  181. package/src/js/modules/Persistence/defaults/readers.js +1 -1
  182. package/src/js/modules/Popup/Popup.js +4 -5
  183. package/src/js/modules/Print/Print.js +2 -2
  184. package/src/js/modules/ReactiveData/ReactiveData.js +178 -115
  185. package/src/js/modules/ResizeColumns/ResizeColumns.js +3 -3
  186. package/src/js/modules/ResizeRows/ResizeRows.js +1 -1
  187. package/src/js/modules/ResizeTable/ResizeTable.js +77 -46
  188. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +3 -5
  189. package/src/js/modules/SelectRow/SelectRow.js +26 -28
  190. package/src/js/modules/Sort/Sort.js +110 -79
  191. package/src/js/modules/Sort/defaults/sorters/alphanum.js +1 -1
  192. package/src/js/modules/Sort/defaults/sorters/array.js +24 -28
  193. package/src/js/modules/Sort/defaults/sorters/boolean.js +1 -1
  194. package/src/js/modules/Sort/defaults/sorters/date.js +1 -1
  195. package/src/js/modules/Sort/defaults/sorters/datetime.js +13 -13
  196. package/src/js/modules/Sort/defaults/sorters/exists.js +1 -1
  197. package/src/js/modules/Sort/defaults/sorters/number.js +1 -1
  198. package/src/js/modules/Sort/defaults/sorters/string.js +7 -7
  199. package/src/js/modules/Sort/defaults/sorters/time.js +1 -1
  200. package/src/js/modules/Tooltip/Tooltip.js +5 -7
  201. package/src/js/modules/Validate/Validate.js +10 -13
  202. package/src/js/modules/Validate/defaults/validators.js +8 -3
  203. package/src/scss/tabulator.scss +28 -17
  204. package/src/scss/themes/bootstrap/functions4.scss +1 -1
  205. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +8 -8
  206. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +8 -8
  207. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +25 -25
  208. package/src/scss/themes/bootstrap/variables5.scss +4 -4
  209. package/src/scss/themes/bulma/tabulator_bulma.scss +7 -7
  210. package/src/scss/themes/materialize/tabulator_materialize.scss +6 -6
  211. package/src/scss/themes/materialize/variables.scss +1 -1
  212. package/src/scss/themes/semanticui/tabulator_semanticui.scss +7 -7
  213. package/src/scss/themes/tabulator_midnight.scss +7 -7
  214. package/src/scss/themes/tabulator_modern.scss +14 -14
  215. package/src/scss/themes/tabulator_simple.scss +8 -8
  216. package/src/scss/themes/tabulator_site.scss +15 -15
@@ -1,129 +1,157 @@
1
1
  import Module from '../../core/Module.js';
2
2
 
3
3
  class ReactiveData extends Module{
4
-
4
+
5
5
  constructor(table){
6
6
  super(table);
7
-
7
+
8
8
  this.data = false;
9
9
  this.blocked = false; //block reactivity while performing update
10
10
  this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with
11
11
  this.currentVersion = 0;
12
-
12
+
13
13
  this.registerTableOption("reactiveData", false); //enable data reactivity
14
14
  }
15
-
15
+
16
16
  initialize(){
17
17
  if(this.table.options.reactiveData){
18
- this.subscribe("cell-value-save-before", this.block.bind(this));
19
- this.subscribe("cell-value-save-after", this.unblock.bind(this));
20
- this.subscribe("row-data-save-before", this.block.bind(this));
21
- this.subscribe("row-data-save-after", this.unblock.bind(this));
18
+ this.subscribe("cell-value-save-before", this.block.bind(this, "cellsave"));
19
+ this.subscribe("cell-value-save-after", this.unblock.bind(this, "cellsave"));
20
+ this.subscribe("row-data-save-before", this.block.bind(this, "rowsave"));
21
+ this.subscribe("row-data-save-after", this.unblock.bind(this, "rowsave"));
22
22
  this.subscribe("row-data-init-after", this.watchRow.bind(this));
23
23
  this.subscribe("data-processing", this.watchData.bind(this));
24
24
  this.subscribe("table-destroy", this.unwatchData.bind(this));
25
25
  }
26
26
  }
27
-
27
+
28
28
  watchData(data){
29
29
  var self = this,
30
- pushFunc, version;
31
-
30
+ version;
31
+
32
32
  this.currentVersion ++;
33
-
33
+
34
34
  version = this.currentVersion;
35
-
35
+
36
36
  this.unwatchData();
37
-
37
+
38
38
  this.data = data;
39
-
39
+
40
40
  //override array push function
41
41
  this.origFuncs.push = data.push;
42
-
42
+
43
43
  Object.defineProperty(this.data, "push", {
44
44
  enumerable: false,
45
45
  configurable: true,
46
46
  value: function(){
47
- var args = Array.from(arguments);
47
+ var args = Array.from(arguments),
48
+ result;
49
+
50
+ if(!self.blocked && version === self.currentVersion){
51
+ self.block("data-push");
48
52
 
49
- if(!self.blocked && version === self.currentVersion){
50
53
  args.forEach((arg) => {
51
54
  self.table.rowManager.addRowActual(arg, false);
52
55
  });
56
+
57
+ result = self.origFuncs.push.apply(data, arguments);
58
+
59
+ self.unblock("data-push");
53
60
  }
54
-
55
- return self.origFuncs.push.apply(data, arguments);
61
+
62
+ return result;
56
63
  }
57
64
  });
58
-
65
+
59
66
  //override array unshift function
60
67
  this.origFuncs.unshift = data.unshift;
61
-
68
+
62
69
  Object.defineProperty(this.data, "unshift", {
63
70
  enumerable: false,
64
71
  configurable: true,
65
72
  value: function(){
66
- var args = Array.from(arguments);
67
-
73
+ var args = Array.from(arguments),
74
+ result;
75
+
68
76
  if(!self.blocked && version === self.currentVersion){
77
+ self.block("data-unshift");
78
+
69
79
  args.forEach((arg) => {
70
80
  self.table.rowManager.addRowActual(arg, true);
71
81
  });
82
+
83
+ result = self.origFuncs.unshift.apply(data, arguments);
84
+
85
+ self.unblock("data-unshift");
72
86
  }
73
-
74
- return self.origFuncs.unshift.apply(data, arguments);
87
+
88
+ return result;
75
89
  }
76
90
  });
77
-
78
-
91
+
92
+
79
93
  //override array shift function
80
94
  this.origFuncs.shift = data.shift;
81
-
95
+
82
96
  Object.defineProperty(this.data, "shift", {
83
97
  enumerable: false,
84
98
  configurable: true,
85
99
  value: function(){
86
- var row;
87
-
100
+ var row, result;
101
+
88
102
  if(!self.blocked && version === self.currentVersion){
103
+ self.block("data-shift");
104
+
89
105
  if(self.data.length){
90
106
  row = self.table.rowManager.getRowFromDataObject(self.data[0]);
91
-
107
+
92
108
  if(row){
93
109
  row.deleteActual();
94
110
  }
95
111
  }
96
- }
97
112
 
98
- return self.origFuncs.shift.call(data);
113
+ result = self.origFuncs.shift.call(data);
114
+
115
+ self.unblock("data-shift");
116
+ }
117
+
118
+ return result;
99
119
  }
100
120
  });
101
-
121
+
102
122
  //override array pop function
103
123
  this.origFuncs.pop = data.pop;
104
-
124
+
105
125
  Object.defineProperty(this.data, "pop", {
106
126
  enumerable: false,
107
127
  configurable: true,
108
128
  value: function(){
109
- var row;
129
+ var row, result;
130
+
110
131
  if(!self.blocked && version === self.currentVersion){
132
+ self.block("data-pop");
133
+
111
134
  if(self.data.length){
112
135
  row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);
113
-
136
+
114
137
  if(row){
115
138
  row.deleteActual();
116
139
  }
117
140
  }
141
+
142
+ result = self.origFuncs.pop.call(data);
143
+
144
+ self.unblock("data-pop");
118
145
  }
119
- return self.origFuncs.pop.call(data);
146
+
147
+ return result;
120
148
  }
121
149
  });
122
-
123
-
150
+
151
+
124
152
  //override array splice function
125
153
  this.origFuncs.splice = data.splice;
126
-
154
+
127
155
  Object.defineProperty(this.data, "splice", {
128
156
  enumerable: false,
129
157
  configurable: true,
@@ -132,50 +160,54 @@ class ReactiveData extends Module{
132
160
  start = args[0] < 0 ? data.length + args[0] : args[0],
133
161
  end = args[1],
134
162
  newRows = args[2] ? args.slice(2) : false,
135
- startRow;
136
-
163
+ startRow, result;
164
+
137
165
  if(!self.blocked && version === self.currentVersion){
138
-
166
+ self.block("data-splice");
139
167
  //add new rows
140
168
  if(newRows){
141
169
  startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;
142
-
170
+
143
171
  if(startRow){
144
172
  newRows.forEach((rowData) => {
145
173
  self.table.rowManager.addRowActual(rowData, true, startRow, true);
146
174
  });
147
175
  }else{
148
176
  newRows = newRows.slice().reverse();
149
-
177
+
150
178
  newRows.forEach((rowData) => {
151
179
  self.table.rowManager.addRowActual(rowData, true, false, true);
152
180
  });
153
181
  }
154
182
  }
155
-
183
+
156
184
  //delete removed rows
157
185
  if(end !== 0){
158
186
  var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end);
159
-
187
+
160
188
  oldRows.forEach((rowData, i) => {
161
189
  var row = self.table.rowManager.getRowFromDataObject(rowData);
162
-
190
+
163
191
  if(row){
164
192
  row.deleteActual(i !== oldRows.length - 1);
165
193
  }
166
194
  });
167
195
  }
168
-
196
+
169
197
  if(newRows || end !== 0){
170
198
  self.table.rowManager.reRenderInPosition();
171
199
  }
172
- }
173
200
 
174
- return self.origFuncs.splice.apply(data, arguments);
201
+ result = self.origFuncs.splice.apply(data, arguments);
202
+
203
+ self.unblock("data-splice");
204
+ }
205
+
206
+ return result ;
175
207
  }
176
208
  });
177
209
  }
178
-
210
+
179
211
  unwatchData(){
180
212
  if(this.data !== false){
181
213
  for(var key in this.origFuncs){
@@ -188,152 +220,183 @@ class ReactiveData extends Module{
188
220
  }
189
221
  }
190
222
  }
191
-
223
+
192
224
  watchRow(row){
193
225
  var data = row.getData();
194
-
195
- this.blocked = true;
196
-
226
+
197
227
  for(var key in data){
198
228
  this.watchKey(row, data, key);
199
229
  }
200
-
230
+
201
231
  if(this.table.options.dataTree){
202
232
  this.watchTreeChildren(row);
203
233
  }
204
-
205
- this.blocked = false;
206
234
  }
207
-
235
+
208
236
  watchTreeChildren (row){
209
- var childField = row.getData()[this.table.options.dataTreeChildField],
237
+ var self = this,
238
+ childField = row.getData()[this.table.options.dataTreeChildField],
210
239
  origFuncs = {};
211
-
212
- function rebuildTree(){
213
- this.table.modules.dataTree.initializeRow(row);
214
- this.table.modules.dataTree.layoutRow(row);
215
- this.table.rowManager.refreshActiveData("tree", false, true);
216
- }
217
-
240
+
218
241
  if(childField){
219
-
242
+
220
243
  origFuncs.push = childField.push;
221
-
244
+
222
245
  Object.defineProperty(childField, "push", {
223
246
  enumerable: false,
224
247
  configurable: true,
225
248
  value: () => {
226
- var result = origFuncs.push.apply(childField, arguments);
227
-
228
- rebuildTree();
229
-
249
+ if(!self.blocked){
250
+ self.block("tree-push");
251
+
252
+ var result = origFuncs.push.apply(childField, arguments);
253
+ this.rebuildTree(row);
254
+
255
+ self.unblock("tree-push");
256
+ }
257
+
230
258
  return result;
231
259
  }
232
260
  });
233
-
261
+
234
262
  origFuncs.unshift = childField.unshift;
235
-
263
+
236
264
  Object.defineProperty(childField, "unshift", {
237
265
  enumerable: false,
238
266
  configurable: true,
239
267
  value: () => {
240
- var result = origFuncs.unshift.apply(childField, arguments);
241
-
242
- rebuildTree();
243
-
268
+ if(!self.blocked){
269
+ self.block("tree-unshift");
270
+
271
+ var result = origFuncs.unshift.apply(childField, arguments);
272
+ this.rebuildTree(row);
273
+
274
+ self.unblock("tree-unshift");
275
+ }
276
+
244
277
  return result;
245
278
  }
246
279
  });
247
-
280
+
248
281
  origFuncs.shift = childField.shift;
249
-
282
+
250
283
  Object.defineProperty(childField, "shift", {
251
284
  enumerable: false,
252
285
  configurable: true,
253
286
  value: () => {
254
- var result = origFuncs.shift.call(childField);
255
-
256
- rebuildTree();
257
-
287
+ if(!self.blocked){
288
+ self.block("tree-shift");
289
+
290
+ var result = origFuncs.shift.call(childField);
291
+ this.rebuildTree(row);
292
+
293
+ self.unblock("tree-shift");
294
+ }
295
+
258
296
  return result;
259
297
  }
260
298
  });
261
-
299
+
262
300
  origFuncs.pop = childField.pop;
263
-
301
+
264
302
  Object.defineProperty(childField, "pop", {
265
303
  enumerable: false,
266
304
  configurable: true,
267
305
  value: () => {
268
- var result = origFuncs.pop.call(childField);
269
-
270
- rebuildTree();
271
-
306
+ if(!self.blocked){
307
+ self.block("tree-pop");
308
+
309
+ var result = origFuncs.pop.call(childField);
310
+ this.rebuildTree(row);
311
+
312
+ self.unblock("tree-pop");
313
+ }
314
+
272
315
  return result;
273
316
  }
274
317
  });
275
-
318
+
276
319
  origFuncs.splice = childField.splice;
277
-
320
+
278
321
  Object.defineProperty(childField, "splice", {
279
322
  enumerable: false,
280
323
  configurable: true,
281
324
  value: () => {
282
- var result = origFuncs.splice.apply(childField, arguments);
283
-
284
- rebuildTree();
285
-
325
+ if(!self.blocked){
326
+ self.block("tree-splice");
327
+
328
+ var result = origFuncs.splice.apply(childField, arguments);
329
+ this.rebuildTree(row);
330
+
331
+ self.unblock("tree-splice");
332
+ }
333
+
286
334
  return result;
287
335
  }
288
336
  });
289
337
  }
290
338
  }
291
-
339
+
340
+ rebuildTree(row){
341
+ this.table.modules.dataTree.initializeRow(row);
342
+ this.table.modules.dataTree.layoutRow(row);
343
+ this.table.rowManager.refreshActiveData("tree", false, true);
344
+ }
345
+
292
346
  watchKey(row, data, key){
293
- var props = Object.getOwnPropertyDescriptor(data, key),
347
+ var self = this,
348
+ props = Object.getOwnPropertyDescriptor(data, key),
294
349
  value = data[key],
295
350
  version = this.currentVersion;
296
-
351
+
297
352
  Object.defineProperty(data, key, {
298
353
  set: (newValue) => {
299
354
  value = newValue;
300
- if(!this.blocked && version === this.currentVersion){
355
+ if(!self.blocked && version === self.currentVersion){
356
+ self.block("key");
357
+
301
358
  var update = {};
302
359
  update[key] = newValue;
303
360
  row.updateData(update);
361
+
362
+ self.unblock("key");
304
363
  }
305
-
364
+
306
365
  if(props.set){
307
366
  props.set(newValue);
308
367
  }
309
368
  },
310
369
  get:() => {
311
-
370
+
312
371
  if(props.get){
313
372
  props.get();
314
373
  }
315
-
374
+
316
375
  return value;
317
376
  }
318
377
  });
319
378
  }
320
-
379
+
321
380
  unwatchRow(row){
322
381
  var data = row.getData();
323
-
382
+
324
383
  for(var key in data){
325
384
  Object.defineProperty(data, key, {
326
385
  value:data[key],
327
386
  });
328
387
  }
329
388
  }
330
-
331
- block(){
332
- this.blocked = true;
389
+
390
+ block(key){
391
+ if(!this.blocked){
392
+ this.blocked = key;
393
+ }
333
394
  }
334
-
335
- unblock(){
336
- this.blocked = false;
395
+
396
+ unblock(key){
397
+ if(this.blocked === key){
398
+ this.blocked = false;
399
+ }
337
400
  }
338
401
  }
339
402
 
@@ -84,7 +84,7 @@ class ResizeColumns extends Module{
84
84
 
85
85
  reinitializeColumn(column){
86
86
  var frozenOffset = column.modules.frozen ? (column.modules.frozen.marginValue + column.getWidth() + "px") : false;
87
- ;
87
+
88
88
 
89
89
  column.cells.forEach((cell) => {
90
90
  if(cell.modules.resize && cell.modules.resize.handleEl){
@@ -236,7 +236,7 @@ class ResizeColumns extends Module{
236
236
  }
237
237
  }
238
238
 
239
- self.table.columnManager.renderer.rerenderColumns(true);
239
+ self.table.columnManager.rerenderColumns(true);
240
240
 
241
241
  if(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){
242
242
  column.checkCellHeights();
@@ -268,7 +268,7 @@ class ResizeColumns extends Module{
268
268
  }
269
269
  }
270
270
 
271
- e.stopPropagation(); //prevent resize from interfereing with movable columns
271
+ e.stopPropagation(); //prevent resize from interfering with movable columns
272
272
 
273
273
  //block editor from taking action while resizing is taking place
274
274
  if(self.startColumn.modules.edit){
@@ -89,7 +89,7 @@ class ResizeRows extends Module{
89
89
  self.dispatchExternal("rowResized", row.getComponent());
90
90
  }
91
91
 
92
- e.stopPropagation(); //prevent resize from interfereing with movable columns
92
+ e.stopPropagation(); //prevent resize from interfering with movable columns
93
93
 
94
94
  //block editor from taking action while resizing is taking place
95
95
  // if(self.startColumn.modules.edit){