tabulator-tables 5.5.4 → 5.6.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.
- package/bower.json +1 -1
- package/dist/css/tabulator.css +72 -2
- 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 +72 -2
- 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 +72 -2
- 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_bootstrap5.css +72 -2
- package/dist/css/tabulator_bootstrap5.css.map +1 -1
- package/dist/css/tabulator_bootstrap5.min.css +1 -1
- package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
- package/dist/css/tabulator_bulma.css +72 -2
- 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 +72 -2
- 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 +72 -2
- 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 +72 -2
- 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 +72 -2
- 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 +72 -2
- 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 +74 -4
- 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 +1868 -245
- 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 +1948 -323
- 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 +2 -2
- package/src/js/core/ColumnManager.js +4 -0
- package/src/js/core/CoreFeature.js +2 -2
- package/src/js/core/RowManager.js +12 -6
- package/src/js/core/Tabulator.js +2 -1
- package/src/js/core/TabulatorFull.js +1 -1
- package/src/js/core/column/Column.js +10 -0
- package/src/js/core/modules/optional.js +2 -1
- package/src/js/core/rendering/renderers/BasicVertical.js +4 -2
- package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +1 -1
- package/src/js/core/row/PseudoRow.js +2 -0
- package/src/js/core/tools/Alert.js +4 -0
- package/src/js/core/tools/DeprecationAdvisor.js +5 -1
- package/src/js/core/tools/Helpers.js +1 -1
- package/src/js/core/tools/InteractionMonitor.js +3 -3
- package/src/js/modules/Clipboard/Clipboard.js +5 -3
- package/src/js/modules/Clipboard/defaults/pasteActions.js +49 -6
- package/src/js/modules/Clipboard/defaults/pasteParsers.js +69 -14
- package/src/js/modules/ColumnCalcs/ColumnCalcs.js +7 -1
- package/src/js/modules/Edit/Edit.js +71 -25
- package/src/js/modules/Edit/defaults/editors/datetime.js +1 -1
- package/src/js/modules/Edit/defaults/editors/time.js +3 -1
- package/src/js/modules/Export/Export.js +38 -18
- package/src/js/modules/Format/defaults/formatters/rowSelection.js +2 -2
- package/src/js/modules/Format/defaults/formatters/rownum.js +5 -1
- package/src/js/modules/FrozenColumns/FrozenColumns.js +11 -11
- package/src/js/modules/FrozenRows/FrozenRows.js +6 -1
- package/src/js/modules/History/History.js +2 -2
- package/src/js/modules/History/defaults/redoers.js +4 -0
- package/src/js/modules/History/defaults/undoers.js +4 -0
- package/src/js/modules/Keybindings/defaults/actions.js +38 -1
- package/src/js/modules/Keybindings/defaults/bindings.js +16 -1
- package/src/js/modules/Menu/Menu.js +3 -1
- package/src/js/modules/MoveColumns/MoveColumns.js +5 -0
- package/src/js/modules/Popup/Popup.js +1 -1
- package/src/js/modules/ResizeTable/ResizeTable.js +3 -3
- package/src/js/modules/SelectRange/Range.js +354 -0
- package/src/js/modules/SelectRange/RangeComponent.js +93 -0
- package/src/js/modules/SelectRange/SelectRange.js +870 -0
- package/src/js/modules/SelectRow/SelectRow.js +46 -26
- package/src/js/modules/Sort/Sort.js +111 -105
- package/src/js/modules/Validate/defaults/validators.js +11 -0
- package/src/scss/tabulator.scss +95 -13
- package/src/scss/themes/bulma/tabulator_bulma.scss +7 -0
- package/src/scss/themes/materialize/tabulator_materialize.scss +7 -1
- package/src/scss/themes/tabulator_midnight.scss +13 -0
- package/src/scss/themes/tabulator_modern.scss +9 -0
- package/src/scss/themes/tabulator_site.scss +13 -2
|
@@ -3,90 +3,90 @@ import Module from '../../core/Module.js';
|
|
|
3
3
|
import defaultSorters from './defaults/sorters.js';
|
|
4
4
|
|
|
5
5
|
class Sort extends Module{
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
constructor(table){
|
|
8
8
|
super(table);
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
this.sortList = []; //holder current sort
|
|
11
11
|
this.changed = false; //has the sort changed since last render
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
this.registerTableOption("sortMode", "local"); //local or remote sorting
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
this.registerTableOption("initialSort", false); //initial sorting criteria
|
|
16
16
|
this.registerTableOption("columnHeaderSortMulti", true); //multiple or single column sorting
|
|
17
17
|
this.registerTableOption("sortOrderReverse", false); //reverse internal sort ordering
|
|
18
18
|
this.registerTableOption("headerSortElement", "<div class='tabulator-arrow'></div>"); //header sort element
|
|
19
19
|
this.registerTableOption("headerSortClickElement", "header"); //element which triggers sort when clicked
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
this.registerColumnOption("sorter");
|
|
22
22
|
this.registerColumnOption("sorterParams");
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
this.registerColumnOption("headerSort", true);
|
|
25
25
|
this.registerColumnOption("headerSortStartingDir");
|
|
26
26
|
this.registerColumnOption("headerSortTristate");
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
initialize(){
|
|
31
31
|
this.subscribe("column-layout", this.initializeColumn.bind(this));
|
|
32
32
|
this.subscribe("table-built", this.tableBuilt.bind(this));
|
|
33
33
|
this.registerDataHandler(this.sort.bind(this), 20);
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
this.registerTableFunction("setSort", this.userSetSort.bind(this));
|
|
36
36
|
this.registerTableFunction("getSorters", this.getSort.bind(this));
|
|
37
37
|
this.registerTableFunction("clearSort", this.clearSort.bind(this));
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
if(this.table.options.sortMode === "remote"){
|
|
40
40
|
this.subscribe("data-params", this.remoteSortParams.bind(this));
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
tableBuilt(){
|
|
45
45
|
if(this.table.options.initialSort){
|
|
46
46
|
this.setSort(this.table.options.initialSort);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
remoteSortParams(data, config, silent, params){
|
|
51
51
|
var sorters = this.getSort();
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
sorters.forEach((item) => {
|
|
54
54
|
delete item.column;
|
|
55
55
|
});
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
params.sort = sorters;
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
return params;
|
|
60
60
|
}
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
|
|
62
|
+
|
|
63
63
|
///////////////////////////////////
|
|
64
64
|
///////// Table Functions /////////
|
|
65
65
|
///////////////////////////////////
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
userSetSort(sortList, dir){
|
|
68
68
|
this.setSort(sortList, dir);
|
|
69
69
|
// this.table.rowManager.sorterRefresh();
|
|
70
70
|
this.refreshSort();
|
|
71
71
|
}
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
clearSort(){
|
|
74
74
|
this.clear();
|
|
75
75
|
// this.table.rowManager.sorterRefresh();
|
|
76
76
|
this.refreshSort();
|
|
77
77
|
}
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
|
|
79
|
+
|
|
80
80
|
///////////////////////////////////
|
|
81
81
|
///////// Internal Logic //////////
|
|
82
82
|
///////////////////////////////////
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
//initialize column header for sorting
|
|
85
85
|
initializeColumn(column){
|
|
86
86
|
var sorter = false,
|
|
87
87
|
colEl,
|
|
88
88
|
arrowEl;
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
switch(typeof column.definition.sorter){
|
|
91
91
|
case "string":
|
|
92
92
|
if(Sort.sorters[column.definition.sorter]){
|
|
@@ -95,28 +95,28 @@ class Sort extends Module{
|
|
|
95
95
|
console.warn("Sort Error - No such sorter found: ", column.definition.sorter);
|
|
96
96
|
}
|
|
97
97
|
break;
|
|
98
|
-
|
|
98
|
+
|
|
99
99
|
case "function":
|
|
100
100
|
sorter = column.definition.sorter;
|
|
101
101
|
break;
|
|
102
102
|
}
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
column.modules.sort = {
|
|
105
105
|
sorter:sorter, dir:"none",
|
|
106
106
|
params:column.definition.sorterParams || {},
|
|
107
107
|
startingDir:column.definition.headerSortStartingDir || "asc",
|
|
108
108
|
tristate: column.definition.headerSortTristate,
|
|
109
109
|
};
|
|
110
|
-
|
|
110
|
+
|
|
111
111
|
if(column.definition.headerSort !== false){
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
colEl = column.getElement();
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
colEl.classList.add("tabulator-sortable");
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
arrowEl = document.createElement("div");
|
|
118
118
|
arrowEl.classList.add("tabulator-col-sorter");
|
|
119
|
-
|
|
119
|
+
|
|
120
120
|
switch(this.table.options.headerSortClickElement){
|
|
121
121
|
case "icon":
|
|
122
122
|
arrowEl.classList.add("tabulator-col-sorter-element");
|
|
@@ -128,33 +128,39 @@ class Sort extends Module{
|
|
|
128
128
|
colEl.classList.add("tabulator-col-sorter-element");
|
|
129
129
|
break;
|
|
130
130
|
}
|
|
131
|
-
|
|
131
|
+
|
|
132
132
|
switch(this.table.options.headerSortElement){
|
|
133
133
|
case "function":
|
|
134
|
-
|
|
134
|
+
//do nothing
|
|
135
135
|
break;
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
case "object":
|
|
138
138
|
arrowEl.appendChild(this.table.options.headerSortElement);
|
|
139
139
|
break;
|
|
140
|
-
|
|
140
|
+
|
|
141
141
|
default:
|
|
142
142
|
arrowEl.innerHTML = this.table.options.headerSortElement;
|
|
143
143
|
}
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
//create sorter arrow
|
|
146
146
|
column.titleHolderElement.appendChild(arrowEl);
|
|
147
|
-
|
|
147
|
+
|
|
148
148
|
column.modules.sort.element = arrowEl;
|
|
149
|
-
|
|
149
|
+
|
|
150
150
|
this.setColumnHeaderSortIcon(column, "none");
|
|
151
|
-
|
|
151
|
+
|
|
152
|
+
if(this.table.options.headerSortClickElement === "icon"){
|
|
153
|
+
arrowEl.addEventListener("mousedown", (e) => {
|
|
154
|
+
e.stopPropagation();
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
152
158
|
//sort on click
|
|
153
159
|
(this.table.options.headerSortClickElement === "icon" ? arrowEl : colEl).addEventListener("click", (e) => {
|
|
154
160
|
var dir = "",
|
|
155
161
|
sorters=[],
|
|
156
162
|
match = false;
|
|
157
|
-
|
|
163
|
+
|
|
158
164
|
if(column.modules.sort){
|
|
159
165
|
if(column.modules.sort.tristate){
|
|
160
166
|
if(column.modules.sort.dir == "none"){
|
|
@@ -171,26 +177,26 @@ class Sort extends Module{
|
|
|
171
177
|
case "asc":
|
|
172
178
|
dir = "desc";
|
|
173
179
|
break;
|
|
174
|
-
|
|
180
|
+
|
|
175
181
|
case "desc":
|
|
176
182
|
dir = "asc";
|
|
177
183
|
break;
|
|
178
|
-
|
|
184
|
+
|
|
179
185
|
default:
|
|
180
186
|
dir = column.modules.sort.startingDir;
|
|
181
187
|
}
|
|
182
188
|
}
|
|
183
|
-
|
|
189
|
+
|
|
184
190
|
if (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {
|
|
185
191
|
sorters = this.getSort();
|
|
186
|
-
|
|
192
|
+
|
|
187
193
|
match = sorters.findIndex((sorter) => {
|
|
188
194
|
return sorter.field === column.getField();
|
|
189
195
|
});
|
|
190
|
-
|
|
196
|
+
|
|
191
197
|
if(match > -1){
|
|
192
198
|
sorters[match].dir = dir;
|
|
193
|
-
|
|
199
|
+
|
|
194
200
|
match = sorters.splice(match, 1)[0];
|
|
195
201
|
if(dir != "none"){
|
|
196
202
|
sorters.push(match);
|
|
@@ -200,7 +206,7 @@ class Sort extends Module{
|
|
|
200
206
|
sorters.push({column:column, dir:dir});
|
|
201
207
|
}
|
|
202
208
|
}
|
|
203
|
-
|
|
209
|
+
|
|
204
210
|
//add to existing sort
|
|
205
211
|
this.setSort(sorters);
|
|
206
212
|
}else{
|
|
@@ -210,63 +216,63 @@ class Sort extends Module{
|
|
|
210
216
|
//sort by column only
|
|
211
217
|
this.setSort(column, dir);
|
|
212
218
|
}
|
|
213
|
-
|
|
219
|
+
|
|
214
220
|
}
|
|
215
|
-
|
|
221
|
+
|
|
216
222
|
// this.table.rowManager.sorterRefresh(!this.sortList.length);
|
|
217
223
|
this.refreshSort();
|
|
218
224
|
}
|
|
219
225
|
});
|
|
220
226
|
}
|
|
221
227
|
}
|
|
222
|
-
|
|
228
|
+
|
|
223
229
|
refreshSort(){
|
|
224
230
|
if(this.table.options.sortMode === "remote"){
|
|
225
231
|
this.reloadData(null, false, false);
|
|
226
232
|
}else{
|
|
227
233
|
this.refreshData(true);
|
|
228
234
|
}
|
|
229
|
-
|
|
235
|
+
|
|
230
236
|
//TODO - Persist left position of row manager
|
|
231
237
|
// left = this.scrollLeft;
|
|
232
238
|
// this.scrollHorizontal(left);
|
|
233
239
|
}
|
|
234
|
-
|
|
240
|
+
|
|
235
241
|
//check if the sorters have changed since last use
|
|
236
242
|
hasChanged(){
|
|
237
243
|
var changed = this.changed;
|
|
238
244
|
this.changed = false;
|
|
239
245
|
return changed;
|
|
240
246
|
}
|
|
241
|
-
|
|
247
|
+
|
|
242
248
|
//return current sorters
|
|
243
249
|
getSort(){
|
|
244
250
|
var self = this,
|
|
245
251
|
sorters = [];
|
|
246
|
-
|
|
252
|
+
|
|
247
253
|
self.sortList.forEach(function(item){
|
|
248
254
|
if(item.column){
|
|
249
255
|
sorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});
|
|
250
256
|
}
|
|
251
257
|
});
|
|
252
|
-
|
|
258
|
+
|
|
253
259
|
return sorters;
|
|
254
260
|
}
|
|
255
|
-
|
|
261
|
+
|
|
256
262
|
//change sort list and trigger sort
|
|
257
263
|
setSort(sortList, dir){
|
|
258
264
|
var self = this,
|
|
259
265
|
newSortList = [];
|
|
260
|
-
|
|
266
|
+
|
|
261
267
|
if(!Array.isArray(sortList)){
|
|
262
268
|
sortList = [{column: sortList, dir:dir}];
|
|
263
269
|
}
|
|
264
|
-
|
|
270
|
+
|
|
265
271
|
sortList.forEach(function(item){
|
|
266
272
|
var column;
|
|
267
|
-
|
|
273
|
+
|
|
268
274
|
column = self.table.columnManager.findColumn(item.column);
|
|
269
|
-
|
|
275
|
+
|
|
270
276
|
if(column){
|
|
271
277
|
item.column = column;
|
|
272
278
|
newSortList.push(item);
|
|
@@ -274,42 +280,42 @@ class Sort extends Module{
|
|
|
274
280
|
}else{
|
|
275
281
|
console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column);
|
|
276
282
|
}
|
|
277
|
-
|
|
283
|
+
|
|
278
284
|
});
|
|
279
|
-
|
|
285
|
+
|
|
280
286
|
self.sortList = newSortList;
|
|
281
|
-
|
|
287
|
+
|
|
282
288
|
this.dispatch("sort-changed");
|
|
283
289
|
}
|
|
284
|
-
|
|
290
|
+
|
|
285
291
|
//clear sorters
|
|
286
292
|
clear(){
|
|
287
293
|
this.setSort([]);
|
|
288
294
|
}
|
|
289
|
-
|
|
295
|
+
|
|
290
296
|
//find appropriate sorter for column
|
|
291
297
|
findSorter(column){
|
|
292
298
|
var row = this.table.rowManager.activeRows[0],
|
|
293
299
|
sorter = "string",
|
|
294
300
|
field, value;
|
|
295
|
-
|
|
301
|
+
|
|
296
302
|
if(row){
|
|
297
303
|
row = row.getData();
|
|
298
304
|
field = column.getField();
|
|
299
|
-
|
|
305
|
+
|
|
300
306
|
if(field){
|
|
301
|
-
|
|
307
|
+
|
|
302
308
|
value = column.getFieldValue(row);
|
|
303
|
-
|
|
309
|
+
|
|
304
310
|
switch(typeof value){
|
|
305
311
|
case "undefined":
|
|
306
312
|
sorter = "string";
|
|
307
313
|
break;
|
|
308
|
-
|
|
314
|
+
|
|
309
315
|
case "boolean":
|
|
310
316
|
sorter = "boolean";
|
|
311
317
|
break;
|
|
312
|
-
|
|
318
|
+
|
|
313
319
|
default:
|
|
314
320
|
if(!isNaN(value) && value !== ""){
|
|
315
321
|
sorter = "number";
|
|
@@ -322,70 +328,70 @@ class Sort extends Module{
|
|
|
322
328
|
}
|
|
323
329
|
}
|
|
324
330
|
}
|
|
325
|
-
|
|
331
|
+
|
|
326
332
|
return Sort.sorters[sorter];
|
|
327
333
|
}
|
|
328
|
-
|
|
334
|
+
|
|
329
335
|
//work through sort list sorting data
|
|
330
336
|
sort(data){
|
|
331
337
|
var self = this,
|
|
332
338
|
sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,
|
|
333
339
|
sortListActual = [],
|
|
334
340
|
rowComponents = [];
|
|
335
|
-
|
|
341
|
+
|
|
336
342
|
if(this.subscribedExternal("dataSorting")){
|
|
337
343
|
this.dispatchExternal("dataSorting", self.getSort());
|
|
338
344
|
}
|
|
339
|
-
|
|
345
|
+
|
|
340
346
|
self.clearColumnHeaders();
|
|
341
|
-
|
|
347
|
+
|
|
342
348
|
if(this.table.options.sortMode !== "remote"){
|
|
343
|
-
|
|
349
|
+
|
|
344
350
|
//build list of valid sorters and trigger column specific callbacks before sort begins
|
|
345
351
|
sortList.forEach(function(item, i){
|
|
346
352
|
var sortObj;
|
|
347
|
-
|
|
353
|
+
|
|
348
354
|
if(item.column){
|
|
349
355
|
sortObj = item.column.modules.sort;
|
|
350
|
-
|
|
356
|
+
|
|
351
357
|
if(sortObj){
|
|
352
|
-
|
|
358
|
+
|
|
353
359
|
//if no sorter has been defined, take a guess
|
|
354
360
|
if(!sortObj.sorter){
|
|
355
361
|
sortObj.sorter = self.findSorter(item.column);
|
|
356
362
|
}
|
|
357
|
-
|
|
363
|
+
|
|
358
364
|
item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;
|
|
359
|
-
|
|
365
|
+
|
|
360
366
|
sortListActual.push(item);
|
|
361
367
|
}
|
|
362
|
-
|
|
368
|
+
|
|
363
369
|
self.setColumnHeader(item.column, item.dir);
|
|
364
370
|
}
|
|
365
371
|
});
|
|
366
|
-
|
|
372
|
+
|
|
367
373
|
//sort data
|
|
368
374
|
if (sortListActual.length) {
|
|
369
375
|
self._sortItems(data, sortListActual);
|
|
370
376
|
}
|
|
371
|
-
|
|
377
|
+
|
|
372
378
|
}else{
|
|
373
379
|
sortList.forEach(function(item, i){
|
|
374
380
|
self.setColumnHeader(item.column, item.dir);
|
|
375
381
|
});
|
|
376
382
|
}
|
|
377
|
-
|
|
383
|
+
|
|
378
384
|
if(this.subscribedExternal("dataSorted")){
|
|
379
385
|
data.forEach((row) => {
|
|
380
386
|
rowComponents.push(row.getComponent());
|
|
381
387
|
});
|
|
382
|
-
|
|
388
|
+
|
|
383
389
|
this.dispatchExternal("dataSorted", self.getSort(), rowComponents);
|
|
384
390
|
}
|
|
385
|
-
|
|
391
|
+
|
|
386
392
|
return data;
|
|
387
393
|
}
|
|
388
|
-
|
|
394
|
+
|
|
389
395
|
//clear sort arrows on columns
|
|
390
396
|
clearColumnHeaders(){
|
|
391
397
|
this.table.columnManager.getRealColumns().forEach((column) => {
|
|
@@ -396,21 +402,21 @@ class Sort extends Module{
|
|
|
396
402
|
}
|
|
397
403
|
});
|
|
398
404
|
}
|
|
399
|
-
|
|
405
|
+
|
|
400
406
|
//set the column header sort direction
|
|
401
407
|
setColumnHeader(column, dir){
|
|
402
408
|
column.modules.sort.dir = dir;
|
|
403
409
|
column.getElement().setAttribute("aria-sort", dir === "asc" ? "ascending" : "descending");
|
|
404
410
|
this.setColumnHeaderSortIcon(column, dir);
|
|
405
411
|
}
|
|
406
|
-
|
|
412
|
+
|
|
407
413
|
setColumnHeaderSortIcon(column, dir){
|
|
408
414
|
var sortEl = column.modules.sort.element,
|
|
409
415
|
arrowEl;
|
|
410
|
-
|
|
416
|
+
|
|
411
417
|
if(column.definition.headerSort && typeof this.table.options.headerSortElement === "function"){
|
|
412
418
|
while(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);
|
|
413
|
-
|
|
419
|
+
|
|
414
420
|
arrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);
|
|
415
421
|
|
|
416
422
|
if(typeof arrowEl === "object"){
|
|
@@ -420,45 +426,45 @@ class Sort extends Module{
|
|
|
420
426
|
}
|
|
421
427
|
}
|
|
422
428
|
}
|
|
423
|
-
|
|
429
|
+
|
|
424
430
|
//sort each item in sort list
|
|
425
431
|
_sortItems(data, sortList){
|
|
426
432
|
var sorterCount = sortList.length - 1;
|
|
427
|
-
|
|
433
|
+
|
|
428
434
|
data.sort((a, b) => {
|
|
429
435
|
var result;
|
|
430
|
-
|
|
436
|
+
|
|
431
437
|
for(var i = sorterCount; i>= 0; i--){
|
|
432
438
|
let sortItem = sortList[i];
|
|
433
|
-
|
|
439
|
+
|
|
434
440
|
result = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
|
|
435
|
-
|
|
441
|
+
|
|
436
442
|
if(result !== 0){
|
|
437
443
|
break;
|
|
438
444
|
}
|
|
439
445
|
}
|
|
440
|
-
|
|
446
|
+
|
|
441
447
|
return result;
|
|
442
448
|
});
|
|
443
449
|
}
|
|
444
|
-
|
|
450
|
+
|
|
445
451
|
//process individual rows for a sort function on active data
|
|
446
452
|
_sortRow(a, b, column, dir, params){
|
|
447
453
|
var el1Comp, el2Comp;
|
|
448
|
-
|
|
454
|
+
|
|
449
455
|
//switch elements depending on search direction
|
|
450
456
|
var el1 = dir == "asc" ? a : b;
|
|
451
457
|
var el2 = dir == "asc" ? b : a;
|
|
452
|
-
|
|
458
|
+
|
|
453
459
|
a = column.getFieldValue(el1.getData());
|
|
454
460
|
b = column.getFieldValue(el2.getData());
|
|
455
|
-
|
|
461
|
+
|
|
456
462
|
a = typeof a !== "undefined" ? a : "";
|
|
457
463
|
b = typeof b !== "undefined" ? b : "";
|
|
458
|
-
|
|
464
|
+
|
|
459
465
|
el1Comp = el1.getComponent();
|
|
460
466
|
el2Comp = el2.getComponent();
|
|
461
|
-
|
|
467
|
+
|
|
462
468
|
return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
|
|
463
469
|
}
|
|
464
470
|
}
|
|
@@ -468,4 +474,4 @@ Sort.moduleName = "sort";
|
|
|
468
474
|
//load defaults
|
|
469
475
|
Sort.sorters = defaultSorters;
|
|
470
476
|
|
|
471
|
-
export default Sort;
|
|
477
|
+
export default Sort;
|
|
@@ -37,6 +37,17 @@ export default {
|
|
|
37
37
|
return isNaN(value);
|
|
38
38
|
},
|
|
39
39
|
|
|
40
|
+
//must be alphanumeric
|
|
41
|
+
alphanumeric: function(cell, value, parameters){
|
|
42
|
+
if(value === "" || value === null || typeof value === "undefined"){
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
var reg = new RegExp(/^[a-z0-9]+$/i);
|
|
47
|
+
|
|
48
|
+
return reg.test(value);
|
|
49
|
+
},
|
|
50
|
+
|
|
40
51
|
//maximum value
|
|
41
52
|
max: function(cell, value, parameters){
|
|
42
53
|
if(value === "" || value === null || typeof value === "undefined"){
|