tabulator-tables 5.0.5 → 5.0.9
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 +412 -256
- 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 +501 -351
- 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 +1 -1
- package/src/js/core/defaults/options.js +1 -1
- package/src/js/core/rendering/Renderer.js +2 -1
- 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 +1 -1
- package/src/js/core/tools/InteractionMonitor.js +126 -49
- 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 +1 -8
- 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/Format/defaults/formatters/money.js +8 -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 +5 -7
- package/src/js/modules/MoveColumns/MoveColumns.js +64 -61
- package/src/js/modules/Page/Page.js +8 -10
- 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,41 +32,101 @@ export default class InteractionManager extends CoreFeature {
|
|
|
32
32
|
"tabulator-col":"column",
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
+
this.pseudoTrackers = {
|
|
36
|
+
"row":null,
|
|
37
|
+
"cell":null,
|
|
38
|
+
"group":null,
|
|
39
|
+
"column":null,
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
initialize(){
|
|
44
|
+
this.el = this.table.element;
|
|
35
45
|
this.buildListenerMap();
|
|
36
46
|
this.bindSubscriptionWatchers();
|
|
47
|
+
this.bindPseudoEvents();
|
|
37
48
|
}
|
|
38
|
-
|
|
49
|
+
|
|
39
50
|
buildListenerMap(){
|
|
40
51
|
var listenerMap = {};
|
|
41
|
-
|
|
52
|
+
|
|
42
53
|
this.listeners.forEach((listener) => {
|
|
43
54
|
listenerMap[listener] = {
|
|
44
55
|
handler:null,
|
|
45
56
|
components:[],
|
|
46
57
|
}
|
|
47
58
|
})
|
|
48
|
-
|
|
59
|
+
|
|
49
60
|
this.listeners = listenerMap;
|
|
50
61
|
}
|
|
51
62
|
|
|
63
|
+
bindPseudoEvents(){
|
|
64
|
+
Object.keys(this.pseudoTrackers).forEach((key) => {
|
|
65
|
+
this.subscribe(key + "-mouseover", this.pseudoMouseEnter.bind(this, key));
|
|
66
|
+
// this.subscribe(key + "-mouseout", this.pseudoMouseLeave.bind(this, key));
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
pseudoMouseEnter(key, e, target){
|
|
71
|
+
if(this.pseudoTrackers[key] !== target){
|
|
72
|
+
|
|
73
|
+
if(this.pseudoTrackers[key]){
|
|
74
|
+
this.dispatch(key + "-mouseleave", e, target);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.pseudoMouseLeave(key, e);
|
|
78
|
+
|
|
79
|
+
this.pseudoTrackers[key] = target;
|
|
80
|
+
|
|
81
|
+
this.dispatch(key + "-mouseenter", e, target);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
pseudoMouseLeave(key, e){
|
|
86
|
+
var leaveList = Object.keys(this.pseudoTrackers),
|
|
87
|
+
linkedKeys = {
|
|
88
|
+
"row":["cell"],
|
|
89
|
+
"cell":["row"],
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
leaveList = leaveList.filter((item) => {
|
|
93
|
+
var links = linkedKeys[key];
|
|
94
|
+
return item !== key && (!links || (links && !links.includes(item)));
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
leaveList.forEach((key) => {
|
|
99
|
+
var target = this.pseudoTrackers[key];
|
|
100
|
+
|
|
101
|
+
if(this.pseudoTrackers[key]){
|
|
102
|
+
this.dispatch(key + "-mouseleave", e, target);
|
|
103
|
+
|
|
104
|
+
this.pseudoTrackers[key] = null;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
52
110
|
bindSubscriptionWatchers(){
|
|
53
111
|
var listeners = Object.keys(this.listeners),
|
|
54
112
|
components = Object.values(this.componentMap);
|
|
55
|
-
|
|
113
|
+
|
|
56
114
|
for(let comp of components){
|
|
57
115
|
for(let listener of listeners){
|
|
58
116
|
let key = comp + "-" + listener;
|
|
59
|
-
|
|
117
|
+
|
|
60
118
|
this.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));
|
|
61
119
|
}
|
|
62
120
|
}
|
|
121
|
+
|
|
122
|
+
this.subscribe("table-destroy", this.clearWatchers.bind(this))
|
|
63
123
|
}
|
|
64
|
-
|
|
124
|
+
|
|
65
125
|
subscriptionChanged(component, key, added){
|
|
66
126
|
var listener = this.listeners[key].components,
|
|
67
127
|
index = listener.indexOf(component),
|
|
68
128
|
changed = false;
|
|
69
|
-
|
|
129
|
+
|
|
70
130
|
if(added){
|
|
71
131
|
if(index === -1){
|
|
72
132
|
listener.push(component);
|
|
@@ -80,16 +140,16 @@ export default class InteractionManager extends CoreFeature {
|
|
|
80
140
|
}
|
|
81
141
|
}
|
|
82
142
|
}
|
|
83
|
-
|
|
143
|
+
|
|
84
144
|
if(changed){
|
|
85
145
|
this.updateEventListeners();
|
|
86
146
|
}
|
|
87
147
|
}
|
|
88
|
-
|
|
148
|
+
|
|
89
149
|
updateEventListeners(){
|
|
90
150
|
for(let key in this.listeners){
|
|
91
151
|
let listener = this.listeners[key];
|
|
92
|
-
|
|
152
|
+
|
|
93
153
|
if(listener.components.length){
|
|
94
154
|
if(!listener.handler){
|
|
95
155
|
listener.handler = this.track.bind(this, key);
|
|
@@ -104,57 +164,63 @@ export default class InteractionManager extends CoreFeature {
|
|
|
104
164
|
}
|
|
105
165
|
}
|
|
106
166
|
}
|
|
107
|
-
|
|
167
|
+
|
|
108
168
|
track(type, e){
|
|
109
169
|
var path = (e.composedPath && e.composedPath()) || e.path;
|
|
170
|
+
|
|
110
171
|
var targets = this.findTargets(path);
|
|
111
172
|
targets = this.bindComponents(type, targets);
|
|
173
|
+
|
|
112
174
|
this.triggerEvents(type, e, targets);
|
|
113
|
-
}
|
|
114
175
|
|
|
176
|
+
if((type == "mouseover" || type == "mouseleave") && !Object.keys(targets).length){
|
|
177
|
+
this.pseudoMouseLeave("none", e);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
115
181
|
findTargets(path){
|
|
116
182
|
var targets = {};
|
|
117
|
-
|
|
183
|
+
|
|
118
184
|
let componentMap = Object.keys(this.componentMap);
|
|
119
|
-
|
|
185
|
+
|
|
120
186
|
for (let el of path) {
|
|
121
187
|
let classList = el.classList ? [...el.classList] : [];
|
|
122
|
-
|
|
188
|
+
|
|
123
189
|
let abort = classList.filter((item) => {
|
|
124
190
|
return this.abortClasses.includes(item);
|
|
125
191
|
})
|
|
126
|
-
|
|
192
|
+
|
|
127
193
|
if(abort.length){
|
|
128
194
|
break;
|
|
129
195
|
}
|
|
130
|
-
|
|
196
|
+
|
|
131
197
|
let elTargets = classList.filter((item) => {
|
|
132
198
|
return componentMap.includes(item);
|
|
133
199
|
})
|
|
134
|
-
|
|
200
|
+
|
|
135
201
|
for (let target of elTargets) {
|
|
136
202
|
targets[this.componentMap[target]] = el;
|
|
137
203
|
}
|
|
138
204
|
}
|
|
139
|
-
|
|
205
|
+
|
|
140
206
|
if(targets.group && targets.group === targets.row){
|
|
141
207
|
delete targets.row;
|
|
142
208
|
}
|
|
143
|
-
|
|
209
|
+
|
|
144
210
|
return targets;
|
|
145
211
|
}
|
|
146
|
-
|
|
212
|
+
|
|
147
213
|
bindComponents(type, targets){
|
|
148
214
|
//ensure row component is looked up before cell
|
|
149
215
|
var keys = Object.keys(targets).reverse(),
|
|
150
216
|
listener = this.listeners[type],
|
|
151
217
|
targetMatches = {};
|
|
152
|
-
|
|
218
|
+
|
|
153
219
|
for(let key of keys){
|
|
154
220
|
let component;
|
|
155
221
|
let target = targets[key];
|
|
156
222
|
let previousTarget = this.previousTargets[key];
|
|
157
|
-
|
|
223
|
+
|
|
158
224
|
if(previousTarget && previousTarget.target === target){
|
|
159
225
|
component = previousTarget.component;
|
|
160
226
|
}else{
|
|
@@ -162,20 +228,20 @@ export default class InteractionManager extends CoreFeature {
|
|
|
162
228
|
case "row":
|
|
163
229
|
case "group":
|
|
164
230
|
if(listener.components.includes("row") || listener.components.includes("cell")){
|
|
165
|
-
let rows = this.table.rowManager.getVisibleRows();
|
|
166
|
-
|
|
231
|
+
let rows = this.table.rowManager.getVisibleRows(true);
|
|
232
|
+
|
|
167
233
|
component = rows.find((row) => {
|
|
168
234
|
return row.getElement() === target;
|
|
169
235
|
});
|
|
170
236
|
}
|
|
171
237
|
break;
|
|
172
|
-
|
|
238
|
+
|
|
173
239
|
case "column":
|
|
174
240
|
if(listener.components.includes("column")){
|
|
175
241
|
component = this.table.columnManager.findColumn(target);
|
|
176
242
|
}
|
|
177
243
|
break
|
|
178
|
-
|
|
244
|
+
|
|
179
245
|
case "cell":
|
|
180
246
|
if(listener.components.includes("cell")){
|
|
181
247
|
component = targets["row"].findCell(target);
|
|
@@ -183,7 +249,7 @@ export default class InteractionManager extends CoreFeature {
|
|
|
183
249
|
break;
|
|
184
250
|
}
|
|
185
251
|
}
|
|
186
|
-
|
|
252
|
+
|
|
187
253
|
if(component){
|
|
188
254
|
targets[key] = component;
|
|
189
255
|
targetMatches[key] = {
|
|
@@ -192,19 +258,30 @@ export default class InteractionManager extends CoreFeature {
|
|
|
192
258
|
}
|
|
193
259
|
}
|
|
194
260
|
}
|
|
195
|
-
|
|
261
|
+
|
|
196
262
|
this.previousTargets = targetMatches;
|
|
197
|
-
|
|
263
|
+
|
|
198
264
|
return targets;
|
|
199
265
|
}
|
|
200
|
-
|
|
266
|
+
|
|
201
267
|
triggerEvents(type, e, targets){
|
|
202
268
|
var listener = this.listeners[type];
|
|
203
|
-
|
|
269
|
+
|
|
204
270
|
for(let key in targets){
|
|
205
271
|
if(targets[key] && listener.components.includes(key)){
|
|
206
272
|
this.dispatch(key + "-" + type, e, targets[key]);
|
|
207
273
|
}
|
|
208
274
|
}
|
|
209
275
|
}
|
|
276
|
+
|
|
277
|
+
clearWatchers(){
|
|
278
|
+
for(let key in this.listeners){
|
|
279
|
+
let listener = this.listeners[key];
|
|
280
|
+
|
|
281
|
+
if(listener.handler){
|
|
282
|
+
this.el.removeEventListener(key, listener.handler)
|
|
283
|
+
listener.handler = null;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
210
287
|
}
|
|
@@ -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
|
|
|
@@ -442,6 +442,7 @@ class Edit extends Module{
|
|
|
442
442
|
cell.column.definition.cellEditCancelled.call(this.table, component);
|
|
443
443
|
}
|
|
444
444
|
|
|
445
|
+
this.dispatch("edit-cancelled", cell);
|
|
445
446
|
this.dispatchExternal("cellEditCancelled", component);
|
|
446
447
|
}
|
|
447
448
|
}
|
|
@@ -572,10 +573,6 @@ class Edit extends Module{
|
|
|
572
573
|
|
|
573
574
|
cell.setValue(value, true);
|
|
574
575
|
|
|
575
|
-
if(self.table.options.dataTree && self.table.modExists("dataTree")){
|
|
576
|
-
self.table.modules.dataTree.checkForRestyle(cell);
|
|
577
|
-
}
|
|
578
|
-
|
|
579
576
|
if(valid !== true){
|
|
580
577
|
element.classList.add("tabulator-validation-fail");
|
|
581
578
|
self.table.externalEvents.dispatch("validationFailed", cell.getComponent(), value, valid);
|
|
@@ -600,10 +597,6 @@ class Edit extends Module{
|
|
|
600
597
|
function cancel(){
|
|
601
598
|
if(self.currentCell === cell){
|
|
602
599
|
self.cancelEdit();
|
|
603
|
-
|
|
604
|
-
if(self.table.options.dataTree && self.table.modExists("dataTree")){
|
|
605
|
-
self.table.modules.dataTree.checkForRestyle(cell);
|
|
606
|
-
}
|
|
607
600
|
}else{
|
|
608
601
|
// console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
|
|
609
602
|
}
|
|
@@ -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){
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export default function(cell, formatterParams, onRendered){
|
|
2
2
|
var floatVal = parseFloat(cell.getValue()),
|
|
3
|
+
sign = "",
|
|
3
4
|
number, integer, decimal, rgx;
|
|
4
5
|
|
|
5
6
|
var decimalSym = formatterParams.decimal || ".";
|
|
6
7
|
var thousandSym = formatterParams.thousand || ",";
|
|
8
|
+
var negativeSign = formatterParams.negativeSign || "-";
|
|
7
9
|
var symbol = formatterParams.symbol || "";
|
|
8
10
|
var after = !!formatterParams.symbolAfter;
|
|
9
11
|
var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2;
|
|
@@ -12,6 +14,11 @@ export default function(cell, formatterParams, onRendered){
|
|
|
12
14
|
return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
|
|
13
15
|
}
|
|
14
16
|
|
|
17
|
+
if(floatVal < 0){
|
|
18
|
+
floatVal = Math.abs(floatVal);
|
|
19
|
+
sign = negativeSign;
|
|
20
|
+
}
|
|
21
|
+
|
|
15
22
|
number = precision !== false ? floatVal.toFixed(precision) : floatVal;
|
|
16
23
|
number = String(number).split(".");
|
|
17
24
|
|
|
@@ -24,5 +31,5 @@ export default function(cell, formatterParams, onRendered){
|
|
|
24
31
|
integer = integer.replace(rgx, "$1" + thousandSym + "$2");
|
|
25
32
|
}
|
|
26
33
|
|
|
27
|
-
return after ? integer + decimal + symbol : symbol + integer + decimal;
|
|
34
|
+
return after ? sign + integer + decimal + symbol : sign + symbol + integer + decimal;
|
|
28
35
|
};
|
|
@@ -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
|
}
|
|
@@ -43,10 +43,16 @@ class Group{
|
|
|
43
43
|
group.wipe();
|
|
44
44
|
});
|
|
45
45
|
}else{
|
|
46
|
-
this.
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
this.rows.forEach((row) => {
|
|
47
|
+
if(row.modules){
|
|
48
|
+
delete row.modules.group;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
49
51
|
}
|
|
52
|
+
|
|
53
|
+
this.element = false;
|
|
54
|
+
this.arrowElement = false;
|
|
55
|
+
this.elementContents = false;
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
createElements(){
|
|
@@ -268,7 +274,7 @@ class Group{
|
|
|
268
274
|
}
|
|
269
275
|
|
|
270
276
|
this.generateGroupHeaderContents();
|
|
271
|
-
|
|
277
|
+
|
|
272
278
|
if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){
|
|
273
279
|
this.groupManager.table.modules.columnCalcs.recalcGroup(this);
|
|
274
280
|
}
|
|
@@ -448,7 +454,7 @@ class Group{
|
|
|
448
454
|
|
|
449
455
|
this.element.classList.add("tabulator-group-visible");
|
|
450
456
|
|
|
451
|
-
var prev = this.
|
|
457
|
+
var prev = this.generateElement();
|
|
452
458
|
|
|
453
459
|
if(this.groupList.length){
|
|
454
460
|
this.groupList.forEach((group) => {
|
|
@@ -566,7 +572,11 @@ class Group{
|
|
|
566
572
|
////////////// Standard Row Functions //////////////
|
|
567
573
|
|
|
568
574
|
getElement(){
|
|
569
|
-
this.
|
|
575
|
+
return this.elementContents ? this.element : this.generateElement();
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
generateElement(){
|
|
579
|
+
this.addBindings = false;
|
|
570
580
|
|
|
571
581
|
this._visSet();
|
|
572
582
|
|