tabulator-tables 5.0.6 → 5.0.10
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.
- package/bower.json +1 -1
- package/build/rollup.js +1 -1
- package/dist/css/tabulator.css +4 -0
- package/dist/css/tabulator.css.map +1 -1
- package/dist/css/tabulator.min.css +1 -1
- package/dist/css/tabulator.min.css.map +1 -1
- package/dist/css/tabulator_bootstrap3.css +4 -0
- package/dist/css/tabulator_bootstrap3.css.map +1 -1
- package/dist/css/tabulator_bootstrap3.min.css +1 -1
- package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
- package/dist/css/tabulator_bootstrap4.css +4 -0
- package/dist/css/tabulator_bootstrap4.css.map +1 -1
- package/dist/css/tabulator_bootstrap4.min.css +1 -1
- package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
- package/dist/css/tabulator_bulma.css +4 -0
- package/dist/css/tabulator_bulma.css.map +1 -1
- package/dist/css/tabulator_bulma.min.css +1 -1
- package/dist/css/tabulator_bulma.min.css.map +1 -1
- package/dist/css/tabulator_materialize.css +4 -0
- package/dist/css/tabulator_materialize.css.map +1 -1
- package/dist/css/tabulator_materialize.min.css +1 -1
- package/dist/css/tabulator_materialize.min.css.map +1 -1
- package/dist/css/tabulator_midnight.css +4 -0
- package/dist/css/tabulator_midnight.css.map +1 -1
- package/dist/css/tabulator_midnight.min.css +1 -1
- package/dist/css/tabulator_midnight.min.css.map +1 -1
- package/dist/css/tabulator_modern.css +4 -0
- package/dist/css/tabulator_modern.css.map +1 -1
- package/dist/css/tabulator_modern.min.css +1 -1
- package/dist/css/tabulator_modern.min.css.map +1 -1
- package/dist/css/tabulator_semanticui.css +4 -0
- package/dist/css/tabulator_semanticui.css.map +1 -1
- package/dist/css/tabulator_semanticui.min.css +1 -1
- package/dist/css/tabulator_semanticui.min.css.map +1 -1
- package/dist/css/tabulator_simple.css +4 -0
- package/dist/css/tabulator_simple.css.map +1 -1
- package/dist/css/tabulator_simple.min.css +1 -1
- package/dist/css/tabulator_simple.min.css.map +1 -1
- package/dist/css/tabulator_site.css +4 -0
- package/dist/css/tabulator_site.css.map +1 -1
- package/dist/css/tabulator_site.min.css +1 -1
- package/dist/css/tabulator_site.min.css.map +1 -1
- package/dist/js/tabulator.js +450 -278
- package/dist/js/tabulator.js.map +1 -1
- package/dist/js/tabulator.min.js +2 -2
- package/dist/js/tabulator.min.js.map +1 -1
- package/dist/js/tabulator_esm.js +672 -505
- package/dist/js/tabulator_esm.js.map +1 -1
- package/dist/js/tabulator_esm.min.js +2 -2
- package/dist/js/tabulator_esm.min.js.map +1 -1
- package/package.json +1 -1
- package/src/js/core/ColumnManager.js +8 -7
- package/src/js/core/CoreFeature.js +1 -5
- package/src/js/core/RowManager.js +8 -2
- package/src/js/core/Tabulator.js +126 -100
- package/src/js/core/column/Column.js +2 -2
- package/src/js/core/defaults/options.js +1 -1
- package/src/js/core/rendering/Renderer.js +3 -2
- package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +150 -145
- package/src/js/core/rendering/renderers/VirtualDomVertical.js +1 -1
- package/src/js/core/tools/{ComponentFuctionBinder.js → ComponentFunctionBinder.js} +1 -1
- package/src/js/core/tools/DataLoader.js +2 -2
- package/src/js/core/tools/InteractionMonitor.js +143 -48
- package/src/js/core/tools/OptionsList.js +2 -2
- package/src/js/modules/ColumnCalcs/ColumnCalcs.js +14 -1
- package/src/js/modules/DataTree/DataTree.js +18 -9
- package/src/js/modules/Download/defaults/downloaders/pdf.js +0 -2
- package/src/js/modules/Download/defaults/downloaders/xlsx.js +3 -2
- package/src/js/modules/Edit/Edit.js +6 -10
- package/src/js/modules/Edit/defaults/editors/progress.js +2 -2
- package/src/js/modules/Export/Export.js +1 -1
- package/src/js/modules/Filter/Filter.js +9 -4
- package/src/js/modules/Format/defaults/formatters/datetime.js +2 -2
- package/src/js/modules/Format/defaults/formatters/datetimediff.js +1 -1
- package/src/js/modules/FrozenColumns/FrozenColumns.js +1 -1
- package/src/js/modules/FrozenRows/FrozenRows.js +4 -1
- package/src/js/modules/GroupRows/Group.js +16 -6
- package/src/js/modules/GroupRows/GroupRows.js +41 -29
- package/src/js/modules/History/History.js +3 -1
- package/src/js/modules/HtmlTableImport/HtmlTableImport.js +4 -7
- package/src/js/modules/MoveColumns/MoveColumns.js +64 -61
- package/src/js/modules/Page/Page.js +8 -10
- package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +3 -5
- package/src/js/modules/SelectRow/SelectRow.js +5 -10
- package/src/js/modules/Sort/Sort.js +1 -1
- package/src/js/modules/Sort/defaults/sorters/datetime.js +3 -2
- package/src/scss/tabulator.scss +4 -0
|
@@ -2,29 +2,29 @@ import CoreFeature from '../CoreFeature.js';
|
|
|
2
2
|
import Helpers from './Helpers.js';
|
|
3
3
|
|
|
4
4
|
export default class InteractionManager extends CoreFeature {
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
constructor (table){
|
|
7
7
|
super(table);
|
|
8
|
-
|
|
9
|
-
this.el =
|
|
10
|
-
|
|
8
|
+
|
|
9
|
+
this.el = null;
|
|
10
|
+
|
|
11
11
|
this.abortClasses = ["tabulator-headers", "tabulator-table"];
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
this.previousTargets = {};
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
this.listeners = [
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
"click",
|
|
17
|
+
"dblclick",
|
|
18
|
+
"contextmenu",
|
|
19
|
+
"mouseenter",
|
|
20
|
+
"mouseleave",
|
|
21
|
+
"mouseover",
|
|
22
|
+
"mouseout",
|
|
23
|
+
"mousemove",
|
|
24
|
+
"touchstart",
|
|
25
|
+
"touchend",
|
|
26
26
|
];
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
this.componentMap = {
|
|
29
29
|
"tabulator-cell":"cell",
|
|
30
30
|
"tabulator-row":"row",
|
|
@@ -32,36 +32,111 @@ export default class InteractionManager extends CoreFeature {
|
|
|
32
32
|
"tabulator-col":"column",
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
+
this.pseudoTrackers = {
|
|
36
|
+
"row":{
|
|
37
|
+
subscriber:null,
|
|
38
|
+
target:null,
|
|
39
|
+
},
|
|
40
|
+
"cell":{
|
|
41
|
+
subscriber:null,
|
|
42
|
+
target:null,
|
|
43
|
+
},
|
|
44
|
+
"group":{
|
|
45
|
+
subscriber:null,
|
|
46
|
+
target:null,
|
|
47
|
+
},
|
|
48
|
+
"column":{
|
|
49
|
+
subscriber:null,
|
|
50
|
+
target:null,
|
|
51
|
+
},
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
this.pseudoTracking = false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
initialize(){
|
|
58
|
+
this.el = this.table.element;
|
|
35
59
|
this.buildListenerMap();
|
|
36
60
|
this.bindSubscriptionWatchers();
|
|
37
61
|
}
|
|
38
|
-
|
|
62
|
+
|
|
39
63
|
buildListenerMap(){
|
|
40
64
|
var listenerMap = {};
|
|
41
|
-
|
|
65
|
+
|
|
42
66
|
this.listeners.forEach((listener) => {
|
|
43
67
|
listenerMap[listener] = {
|
|
44
68
|
handler:null,
|
|
45
69
|
components:[],
|
|
46
70
|
}
|
|
47
71
|
})
|
|
48
|
-
|
|
72
|
+
|
|
49
73
|
this.listeners = listenerMap;
|
|
50
74
|
}
|
|
51
75
|
|
|
76
|
+
bindPseudoEvents(){
|
|
77
|
+
Object.keys(this.pseudoTrackers).forEach((key) => {
|
|
78
|
+
this.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);
|
|
79
|
+
this.subscribe(key + "-mouseover", this.pseudoTrackers[key].subscriber);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
this.pseudoTracking = true;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
pseudoMouseEnter(key, e, target){
|
|
86
|
+
if(this.pseudoTrackers[key].target !== target){
|
|
87
|
+
|
|
88
|
+
if(this.pseudoTrackers[key].target){
|
|
89
|
+
this.dispatch(key + "-mouseleave", e, target);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
this.pseudoMouseLeave(key, e);
|
|
93
|
+
|
|
94
|
+
this.pseudoTrackers[key].target = target;
|
|
95
|
+
|
|
96
|
+
this.dispatch(key + "-mouseenter", e, target);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
pseudoMouseLeave(key, e){
|
|
101
|
+
var leaveList = Object.keys(this.pseudoTrackers),
|
|
102
|
+
linkedKeys = {
|
|
103
|
+
"row":["cell"],
|
|
104
|
+
"cell":["row"],
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
leaveList = leaveList.filter((item) => {
|
|
108
|
+
var links = linkedKeys[key];
|
|
109
|
+
return item !== key && (!links || (links && !links.includes(item)));
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
leaveList.forEach((key) => {
|
|
114
|
+
var target = this.pseudoTrackers[key].target;
|
|
115
|
+
|
|
116
|
+
if(this.pseudoTrackers[key].target){
|
|
117
|
+
this.dispatch(key + "-mouseleave", e, target);
|
|
118
|
+
|
|
119
|
+
this.pseudoTrackers[key].target = null;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
|
|
52
125
|
bindSubscriptionWatchers(){
|
|
53
126
|
var listeners = Object.keys(this.listeners),
|
|
54
127
|
components = Object.values(this.componentMap);
|
|
55
|
-
|
|
128
|
+
|
|
56
129
|
for(let comp of components){
|
|
57
130
|
for(let listener of listeners){
|
|
58
131
|
let key = comp + "-" + listener;
|
|
59
|
-
|
|
132
|
+
|
|
60
133
|
this.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));
|
|
61
134
|
}
|
|
62
135
|
}
|
|
136
|
+
|
|
137
|
+
this.subscribe("table-destroy", this.clearWatchers.bind(this))
|
|
63
138
|
}
|
|
64
|
-
|
|
139
|
+
|
|
65
140
|
subscriptionChanged(component, key, added){
|
|
66
141
|
var listener = this.listeners[key].components,
|
|
67
142
|
index = listener.indexOf(component),
|
|
@@ -81,20 +156,23 @@ export default class InteractionManager extends CoreFeature {
|
|
|
81
156
|
}
|
|
82
157
|
}
|
|
83
158
|
|
|
159
|
+
if((key === "mouseenter" || key === "mouseleave") && !this.pseudoTracking){
|
|
160
|
+
this.bindPseudoEvents();
|
|
161
|
+
}
|
|
162
|
+
|
|
84
163
|
if(changed){
|
|
85
164
|
this.updateEventListeners();
|
|
86
165
|
}
|
|
87
166
|
}
|
|
88
|
-
|
|
167
|
+
|
|
89
168
|
updateEventListeners(){
|
|
90
169
|
for(let key in this.listeners){
|
|
91
170
|
let listener = this.listeners[key];
|
|
92
|
-
|
|
171
|
+
|
|
93
172
|
if(listener.components.length){
|
|
94
173
|
if(!listener.handler){
|
|
95
174
|
listener.handler = this.track.bind(this, key);
|
|
96
175
|
this.el.addEventListener(key, listener.handler)
|
|
97
|
-
console.log("add", key)
|
|
98
176
|
// this.el.addEventListener(key, listener.handler, {passive: true})
|
|
99
177
|
}
|
|
100
178
|
}else{
|
|
@@ -105,57 +183,63 @@ export default class InteractionManager extends CoreFeature {
|
|
|
105
183
|
}
|
|
106
184
|
}
|
|
107
185
|
}
|
|
108
|
-
|
|
186
|
+
|
|
109
187
|
track(type, e){
|
|
110
188
|
var path = (e.composedPath && e.composedPath()) || e.path;
|
|
189
|
+
|
|
111
190
|
var targets = this.findTargets(path);
|
|
112
191
|
targets = this.bindComponents(type, targets);
|
|
192
|
+
|
|
113
193
|
this.triggerEvents(type, e, targets);
|
|
114
|
-
}
|
|
115
194
|
|
|
195
|
+
if(this.pseudoTracking && (type == "mouseover" || type == "mouseleave") && !Object.keys(targets).length){
|
|
196
|
+
this.pseudoMouseLeave("none", e);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
116
200
|
findTargets(path){
|
|
117
201
|
var targets = {};
|
|
118
|
-
|
|
202
|
+
|
|
119
203
|
let componentMap = Object.keys(this.componentMap);
|
|
120
|
-
|
|
204
|
+
|
|
121
205
|
for (let el of path) {
|
|
122
206
|
let classList = el.classList ? [...el.classList] : [];
|
|
123
|
-
|
|
207
|
+
|
|
124
208
|
let abort = classList.filter((item) => {
|
|
125
209
|
return this.abortClasses.includes(item);
|
|
126
210
|
})
|
|
127
|
-
|
|
211
|
+
|
|
128
212
|
if(abort.length){
|
|
129
213
|
break;
|
|
130
214
|
}
|
|
131
|
-
|
|
215
|
+
|
|
132
216
|
let elTargets = classList.filter((item) => {
|
|
133
217
|
return componentMap.includes(item);
|
|
134
218
|
})
|
|
135
|
-
|
|
219
|
+
|
|
136
220
|
for (let target of elTargets) {
|
|
137
221
|
targets[this.componentMap[target]] = el;
|
|
138
222
|
}
|
|
139
223
|
}
|
|
140
|
-
|
|
224
|
+
|
|
141
225
|
if(targets.group && targets.group === targets.row){
|
|
142
226
|
delete targets.row;
|
|
143
227
|
}
|
|
144
|
-
|
|
228
|
+
|
|
145
229
|
return targets;
|
|
146
230
|
}
|
|
147
|
-
|
|
231
|
+
|
|
148
232
|
bindComponents(type, targets){
|
|
149
233
|
//ensure row component is looked up before cell
|
|
150
234
|
var keys = Object.keys(targets).reverse(),
|
|
151
235
|
listener = this.listeners[type],
|
|
152
236
|
targetMatches = {};
|
|
153
|
-
|
|
237
|
+
|
|
154
238
|
for(let key of keys){
|
|
155
239
|
let component;
|
|
156
240
|
let target = targets[key];
|
|
157
241
|
let previousTarget = this.previousTargets[key];
|
|
158
|
-
|
|
242
|
+
|
|
159
243
|
if(previousTarget && previousTarget.target === target){
|
|
160
244
|
component = previousTarget.component;
|
|
161
245
|
}else{
|
|
@@ -163,20 +247,20 @@ export default class InteractionManager extends CoreFeature {
|
|
|
163
247
|
case "row":
|
|
164
248
|
case "group":
|
|
165
249
|
if(listener.components.includes("row") || listener.components.includes("cell")){
|
|
166
|
-
let rows = this.table.rowManager.getVisibleRows();
|
|
167
|
-
|
|
250
|
+
let rows = this.table.rowManager.getVisibleRows(true);
|
|
251
|
+
|
|
168
252
|
component = rows.find((row) => {
|
|
169
253
|
return row.getElement() === target;
|
|
170
254
|
});
|
|
171
255
|
}
|
|
172
256
|
break;
|
|
173
|
-
|
|
257
|
+
|
|
174
258
|
case "column":
|
|
175
259
|
if(listener.components.includes("column")){
|
|
176
260
|
component = this.table.columnManager.findColumn(target);
|
|
177
261
|
}
|
|
178
262
|
break
|
|
179
|
-
|
|
263
|
+
|
|
180
264
|
case "cell":
|
|
181
265
|
if(listener.components.includes("cell")){
|
|
182
266
|
component = targets["row"].findCell(target);
|
|
@@ -184,7 +268,7 @@ export default class InteractionManager extends CoreFeature {
|
|
|
184
268
|
break;
|
|
185
269
|
}
|
|
186
270
|
}
|
|
187
|
-
|
|
271
|
+
|
|
188
272
|
if(component){
|
|
189
273
|
targets[key] = component;
|
|
190
274
|
targetMatches[key] = {
|
|
@@ -193,19 +277,30 @@ export default class InteractionManager extends CoreFeature {
|
|
|
193
277
|
}
|
|
194
278
|
}
|
|
195
279
|
}
|
|
196
|
-
|
|
280
|
+
|
|
197
281
|
this.previousTargets = targetMatches;
|
|
198
|
-
|
|
282
|
+
|
|
199
283
|
return targets;
|
|
200
284
|
}
|
|
201
|
-
|
|
285
|
+
|
|
202
286
|
triggerEvents(type, e, targets){
|
|
203
287
|
var listener = this.listeners[type];
|
|
204
|
-
|
|
288
|
+
|
|
205
289
|
for(let key in targets){
|
|
206
290
|
if(targets[key] && listener.components.includes(key)){
|
|
207
291
|
this.dispatch(key + "-" + type, e, targets[key]);
|
|
208
292
|
}
|
|
209
293
|
}
|
|
210
294
|
}
|
|
295
|
+
|
|
296
|
+
clearWatchers(){
|
|
297
|
+
for(let key in this.listeners){
|
|
298
|
+
let listener = this.listeners[key];
|
|
299
|
+
|
|
300
|
+
if(listener.handler){
|
|
301
|
+
this.el.removeEventListener(key, listener.handler)
|
|
302
|
+
listener.handler = null;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
211
306
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export default class OptionsList {
|
|
2
|
-
constructor(table, msgType){
|
|
2
|
+
constructor(table, msgType, defaults = {}){
|
|
3
3
|
this.table = table;
|
|
4
4
|
this.msgType = msgType;
|
|
5
|
-
this.registeredDefaults = {}
|
|
5
|
+
this.registeredDefaults = Object.assign({}, defaults)
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
register(option, value){
|
|
@@ -53,6 +53,7 @@ class ColumnCalcs extends Module{
|
|
|
53
53
|
this.subscribe("column-add", this.recalcActiveRows.bind(this));
|
|
54
54
|
this.subscribe("data-refeshed", this.recalcActiveRows.bind(this));
|
|
55
55
|
this.subscribe("table-redraw", this.tableRedraw.bind(this));
|
|
56
|
+
this.subscribe("rows-visible", this.visibleRows.bind(this));
|
|
56
57
|
|
|
57
58
|
this.registerTableFunction("getCalcResults", this.getResults.bind(this));
|
|
58
59
|
this.registerTableFunction("recalc", this.userRecalc.bind(this));
|
|
@@ -78,6 +79,18 @@ class ColumnCalcs extends Module{
|
|
|
78
79
|
///////// Internal Logic //////////
|
|
79
80
|
///////////////////////////////////
|
|
80
81
|
|
|
82
|
+
visibleRows(viewable, rows){
|
|
83
|
+
if(this.topRow){
|
|
84
|
+
rows.unshift(this.topRow);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if(this.botRow){
|
|
88
|
+
rows.push(this.botRow);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return rows;
|
|
92
|
+
}
|
|
93
|
+
|
|
81
94
|
rowsUpdated(row){
|
|
82
95
|
if(this.table.options.groupBy){
|
|
83
96
|
this.recalcRowGroup(this);
|
|
@@ -354,7 +367,7 @@ class ColumnCalcs extends Module{
|
|
|
354
367
|
|
|
355
368
|
row.getComponent = () => {
|
|
356
369
|
if(!row.component){
|
|
357
|
-
row.component = new CalcComponent(
|
|
370
|
+
row.component = new CalcComponent(row);
|
|
358
371
|
}
|
|
359
372
|
|
|
360
373
|
return row.component;
|
|
@@ -43,12 +43,10 @@ class DataTree extends Module{
|
|
|
43
43
|
initialize(){
|
|
44
44
|
if(this.table.options.dataTree){
|
|
45
45
|
var dummyEl = null,
|
|
46
|
-
firstCol = this.table.columnManager.getFirstVisibileColumn(),
|
|
47
46
|
options = this.table.options;
|
|
48
47
|
|
|
49
48
|
this.field = options.dataTreeChildField;
|
|
50
49
|
this.indent = options.dataTreeChildIndent;
|
|
51
|
-
this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);
|
|
52
50
|
|
|
53
51
|
if(options.dataTreeBranchElement){
|
|
54
52
|
|
|
@@ -117,15 +115,23 @@ class DataTree extends Module{
|
|
|
117
115
|
|
|
118
116
|
this.subscribe("row-init", this.initializeRow.bind(this));
|
|
119
117
|
this.subscribe("row-layout-after", this.layoutRow.bind(this));
|
|
120
|
-
this.subscribe("row-relayout", this.layoutRow.bind(this));
|
|
121
118
|
this.subscribe("row-deleted", this.rowDelete.bind(this),0);
|
|
122
119
|
this.subscribe("row-data-changed", this.rowDataChanged.bind(this), 10);
|
|
120
|
+
this.subscribe("cell-value-updated", this.cellValueChanged.bind(this));
|
|
121
|
+
this.subscribe("edit-cancelled", this.cellValueChanged.bind(this));
|
|
123
122
|
this.subscribe("column-moving-rows", this.columnMoving.bind(this));
|
|
123
|
+
this.subscribe("table-built", this.initializeElementField.bind(this));
|
|
124
124
|
|
|
125
125
|
this.registerDisplayHandler(this.getRows.bind(this), 30);
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
initializeElementField(){
|
|
130
|
+
var firstCol = this.table.columnManager.getFirstVisibleColumn();
|
|
131
|
+
|
|
132
|
+
this.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);
|
|
133
|
+
}
|
|
134
|
+
|
|
129
135
|
getRowChildren(row){
|
|
130
136
|
return this.getTreeChildren(row, true);
|
|
131
137
|
}
|
|
@@ -151,6 +157,14 @@ class DataTree extends Module{
|
|
|
151
157
|
}
|
|
152
158
|
}
|
|
153
159
|
|
|
160
|
+
cellValueChanged(cell){
|
|
161
|
+
var field = cell.column.getField();
|
|
162
|
+
|
|
163
|
+
if(field === this.elementField){
|
|
164
|
+
this.layoutRow(cell.row);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
154
168
|
initializeRow(row){
|
|
155
169
|
var childArray = row.getData()[this.field];
|
|
156
170
|
var isArray = Array.isArray(childArray);
|
|
@@ -555,17 +569,12 @@ class DataTree extends Module{
|
|
|
555
569
|
return output;
|
|
556
570
|
}
|
|
557
571
|
|
|
558
|
-
checkForRestyle(cell){
|
|
559
|
-
if(!cell.row.cells.indexOf(cell)){
|
|
560
|
-
this.layoutRow(cell.row);
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
|
|
564
572
|
getChildField(){
|
|
565
573
|
return this.field;
|
|
566
574
|
}
|
|
567
575
|
|
|
568
576
|
redrawNeeded(data){
|
|
577
|
+
console.log("needed?", data)
|
|
569
578
|
return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false);
|
|
570
579
|
}
|
|
571
580
|
}
|
|
@@ -26,7 +26,9 @@ export default function(list, options, setFileContents){
|
|
|
26
26
|
rowData.push(!(col.value instanceof Date) && typeof col.value === "object" ? JSON.stringify(col.value) : col.value);
|
|
27
27
|
|
|
28
28
|
if(col.width > 1 || col.height > -1){
|
|
29
|
-
|
|
29
|
+
if(col.height > 1 || col.width > 1){
|
|
30
|
+
merges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});
|
|
31
|
+
}
|
|
30
32
|
}
|
|
31
33
|
}else{
|
|
32
34
|
rowData.push("");
|
|
@@ -36,7 +38,6 @@ export default function(list, options, setFileContents){
|
|
|
36
38
|
rows.push(rowData);
|
|
37
39
|
});
|
|
38
40
|
|
|
39
|
-
|
|
40
41
|
//convert rows to worksheet
|
|
41
42
|
XLSX.utils.sheet_add_aoa(worksheet, rows);
|
|
42
43
|
|
|
@@ -405,20 +405,23 @@ class Edit extends Module{
|
|
|
405
405
|
|
|
406
406
|
this.invalidEdit = false;
|
|
407
407
|
|
|
408
|
+
console.log("clear", cancel, cell, cell.validate)
|
|
409
|
+
|
|
408
410
|
if(cell){
|
|
409
411
|
this.currentCell = false;
|
|
410
412
|
|
|
411
413
|
cellEl = cell.getElement();
|
|
412
414
|
|
|
413
415
|
if(cancel){
|
|
414
|
-
if(cell.validate){
|
|
415
|
-
|
|
416
|
+
if(cell.column.modules.validate && this.table.modExists("validate")){
|
|
417
|
+
this.table.modules.validate.cellValidate(cell);
|
|
416
418
|
}
|
|
417
419
|
}else{
|
|
418
420
|
cellEl.classList.remove("tabulator-validation-fail");
|
|
419
421
|
}
|
|
420
422
|
|
|
421
423
|
cellEl.classList.remove("tabulator-editing");
|
|
424
|
+
|
|
422
425
|
while(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);
|
|
423
426
|
|
|
424
427
|
cell.row.getElement().classList.remove("tabulator-row-editing");
|
|
@@ -442,6 +445,7 @@ class Edit extends Module{
|
|
|
442
445
|
cell.column.definition.cellEditCancelled.call(this.table, component);
|
|
443
446
|
}
|
|
444
447
|
|
|
448
|
+
this.dispatch("edit-cancelled", cell);
|
|
445
449
|
this.dispatchExternal("cellEditCancelled", component);
|
|
446
450
|
}
|
|
447
451
|
}
|
|
@@ -572,10 +576,6 @@ class Edit extends Module{
|
|
|
572
576
|
|
|
573
577
|
cell.setValue(value, true);
|
|
574
578
|
|
|
575
|
-
if(self.table.options.dataTree && self.table.modExists("dataTree")){
|
|
576
|
-
self.table.modules.dataTree.checkForRestyle(cell);
|
|
577
|
-
}
|
|
578
|
-
|
|
579
579
|
if(valid !== true){
|
|
580
580
|
element.classList.add("tabulator-validation-fail");
|
|
581
581
|
self.table.externalEvents.dispatch("validationFailed", cell.getComponent(), value, valid);
|
|
@@ -600,10 +600,6 @@ class Edit extends Module{
|
|
|
600
600
|
function cancel(){
|
|
601
601
|
if(self.currentCell === cell){
|
|
602
602
|
self.cancelEdit();
|
|
603
|
-
|
|
604
|
-
if(self.table.options.dataTree && self.table.modExists("dataTree")){
|
|
605
|
-
self.table.modules.dataTree.checkForRestyle(cell);
|
|
606
|
-
}
|
|
607
603
|
}else{
|
|
608
604
|
// console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
|
|
609
605
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
//draggable progress bar
|
|
2
2
|
export default function(cell, onRendered, success, cancel, editorParams){
|
|
3
3
|
var element = cell.getElement(),
|
|
4
|
-
max = typeof editorParams.max === "undefined" ? ( element.getElementsByTagName("div")[0]
|
|
5
|
-
min = typeof editorParams.min === "undefined" ? ( element.getElementsByTagName("div")[0]
|
|
4
|
+
max = typeof editorParams.max === "undefined" ? ((element.getElementsByTagName("div")[0] && element.getElementsByTagName("div")[0].getAttribute("max")) || 100) : editorParams.max,
|
|
5
|
+
min = typeof editorParams.min === "undefined" ? ((element.getElementsByTagName("div")[0] && element.getElementsByTagName("div")[0].getAttribute("min")) || 0) : editorParams.min,
|
|
6
6
|
percent = (max - min) / 100,
|
|
7
7
|
value = cell.getValue() || 0,
|
|
8
8
|
handle = document.createElement("div"),
|
|
@@ -15,6 +15,7 @@ class Filter extends Module{
|
|
|
15
15
|
this.prevHeaderFilterChangeCheck = "{}";
|
|
16
16
|
|
|
17
17
|
this.changed = false; //has filtering changed since last render
|
|
18
|
+
this.tableInitialized = false;
|
|
18
19
|
|
|
19
20
|
this.registerTableOption("filterMode", "local"); //local or remote filtering
|
|
20
21
|
|
|
@@ -82,6 +83,8 @@ class Filter extends Module{
|
|
|
82
83
|
}
|
|
83
84
|
});
|
|
84
85
|
}
|
|
86
|
+
|
|
87
|
+
this.tableInitialized = true;
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
remoteFilterParams(data, config, silent, params){
|
|
@@ -546,10 +549,12 @@ class Filter extends Module{
|
|
|
546
549
|
}
|
|
547
550
|
|
|
548
551
|
refreshFilter(){
|
|
549
|
-
if(this.
|
|
550
|
-
this.
|
|
551
|
-
|
|
552
|
-
|
|
552
|
+
if(this.tableInitialized){
|
|
553
|
+
if(this.table.options.filterMode === "remote"){
|
|
554
|
+
this.reloadData();
|
|
555
|
+
}else{
|
|
556
|
+
this.refreshData(true);
|
|
557
|
+
}
|
|
553
558
|
}
|
|
554
559
|
|
|
555
560
|
//TODO - Persist left position of row manager
|
|
@@ -6,7 +6,7 @@ export default function(cell, formatterParams, onRendered){
|
|
|
6
6
|
var value = cell.getValue();
|
|
7
7
|
|
|
8
8
|
if(typeof DT != "undefined"){
|
|
9
|
-
var newDatetime =
|
|
9
|
+
var newDatetime = DT.fromFormat(String(value), inputFormat);
|
|
10
10
|
|
|
11
11
|
if(newDatetime.isValid){
|
|
12
12
|
|
|
@@ -17,7 +17,7 @@ export default function(cell, formatterParams, onRendered){
|
|
|
17
17
|
return newDatetime.toFormat(outputFormat);
|
|
18
18
|
}else{
|
|
19
19
|
|
|
20
|
-
if(invalid === true){
|
|
20
|
+
if(invalid === true || !value){
|
|
21
21
|
return value;
|
|
22
22
|
}else if(typeof invalid === "function"){
|
|
23
23
|
return invalid(value);
|
|
@@ -9,7 +9,7 @@ export default function (cell, formatterParams, onRendered) {
|
|
|
9
9
|
var value = cell.getValue();
|
|
10
10
|
|
|
11
11
|
if(typeof DT != "undefined"){
|
|
12
|
-
var newDatetime = DT.fromFormat(value, inputFormat);
|
|
12
|
+
var newDatetime = DT.fromFormat(String(value), inputFormat);
|
|
13
13
|
|
|
14
14
|
if (newDatetime.isValid){
|
|
15
15
|
if(humanize){
|
|
@@ -35,7 +35,7 @@ class FrozenColumns extends Module{
|
|
|
35
35
|
this.subscribe("cell-layout", this.layoutCell.bind(this));
|
|
36
36
|
this.subscribe("column-init", this.initializeColumn.bind(this));
|
|
37
37
|
this.subscribe("column-width", this.layout.bind(this));
|
|
38
|
-
this.subscribe("row-layout-
|
|
38
|
+
this.subscribe("row-layout-after", this.layoutRow.bind(this));
|
|
39
39
|
this.subscribe("table-layout", this.layout.bind(this));
|
|
40
40
|
this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this));
|
|
41
41
|
this.subscribe("columns-loading", this.reset.bind(this));
|
|
@@ -99,7 +99,10 @@ class FrozenRows extends Module{
|
|
|
99
99
|
|
|
100
100
|
if(index > -1){
|
|
101
101
|
var rowEl = row.getElement();
|
|
102
|
-
|
|
102
|
+
|
|
103
|
+
if(rowEl.parentNode){
|
|
104
|
+
rowEl.parentNode.removeChild(rowEl);
|
|
105
|
+
}
|
|
103
106
|
|
|
104
107
|
this.rows.splice(index, 1);
|
|
105
108
|
}
|