tabulator-tables 5.5.4 → 5.6.0
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 +1830 -244
- 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 +1900 -312
- 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 +9 -1
- package/src/js/core/Tabulator.js +1 -0
- package/src/js/core/TabulatorFull.js +1 -1
- package/src/js/core/column/Column.js +6 -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 +55 -19
- 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 +10 -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 +347 -0
- package/src/js/modules/SelectRange/RangeComponent.js +93 -0
- package/src/js/modules/SelectRange/SelectRange.js +855 -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
package/dist/js/tabulator_esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* Tabulator v5.
|
|
1
|
+
/* Tabulator v5.6.0 (c) Oliver Folkerd 2024 */
|
|
2
2
|
class CoreFeature{
|
|
3
3
|
|
|
4
4
|
constructor(table){
|
|
@@ -119,8 +119,8 @@ class CoreFeature{
|
|
|
119
119
|
/////////// Deprecation Checks ///////////
|
|
120
120
|
//////////////////////////////////////////
|
|
121
121
|
|
|
122
|
-
deprecationCheck(oldOption, newOption){
|
|
123
|
-
return this.table.deprecationAdvisor.check(oldOption, newOption);
|
|
122
|
+
deprecationCheck(oldOption, newOption, convert){
|
|
123
|
+
return this.table.deprecationAdvisor.check(oldOption, newOption, convert);
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
deprecationCheckMsg(oldOption, msg){
|
|
@@ -1079,15 +1079,58 @@ Ajax.defaultLoaderPromise = defaultLoaderPromise;
|
|
|
1079
1079
|
Ajax.contentTypeFormatters = defaultContentTypeFormatters;
|
|
1080
1080
|
|
|
1081
1081
|
var defaultPasteActions = {
|
|
1082
|
-
replace:function(
|
|
1083
|
-
return this.table.setData(
|
|
1082
|
+
replace:function(data){
|
|
1083
|
+
return this.table.setData(data);
|
|
1084
1084
|
},
|
|
1085
|
-
update:function(
|
|
1086
|
-
return this.table.updateOrAddData(
|
|
1085
|
+
update:function(data){
|
|
1086
|
+
return this.table.updateOrAddData(data);
|
|
1087
1087
|
},
|
|
1088
|
-
insert:function(
|
|
1089
|
-
return this.table.addData(
|
|
1088
|
+
insert:function(data){
|
|
1089
|
+
return this.table.addData(data);
|
|
1090
1090
|
},
|
|
1091
|
+
range:function(data){
|
|
1092
|
+
var rows = [],
|
|
1093
|
+
range = this.table.modules.selectRange.activeRange,
|
|
1094
|
+
singleCell = false,
|
|
1095
|
+
bounds, startCell, startRow, rowWidth, dataLength;
|
|
1096
|
+
|
|
1097
|
+
dataLength = data.length;
|
|
1098
|
+
|
|
1099
|
+
if(range){
|
|
1100
|
+
bounds = range.getBounds();
|
|
1101
|
+
startCell = bounds.start;
|
|
1102
|
+
|
|
1103
|
+
if(bounds.start === bounds.end){
|
|
1104
|
+
singleCell = true;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
if(startCell){
|
|
1108
|
+
rows = this.table.rowManager.activeRows.slice();
|
|
1109
|
+
startRow = rows.indexOf(startCell.row);
|
|
1110
|
+
|
|
1111
|
+
if(singleCell){
|
|
1112
|
+
rowWidth = data.length;
|
|
1113
|
+
}else {
|
|
1114
|
+
rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
|
|
1118
|
+
if(startRow >-1){
|
|
1119
|
+
this.table.blockRedraw();
|
|
1120
|
+
|
|
1121
|
+
rows = rows.slice(startRow, startRow + rowWidth);
|
|
1122
|
+
|
|
1123
|
+
rows.forEach((row, i) => {
|
|
1124
|
+
row.updateData(data[i % dataLength]);
|
|
1125
|
+
});
|
|
1126
|
+
|
|
1127
|
+
this.table.restoreRedraw();
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
return rows;
|
|
1133
|
+
}
|
|
1091
1134
|
};
|
|
1092
1135
|
|
|
1093
1136
|
var defaultPasteParsers = {
|
|
@@ -1097,72 +1140,127 @@ var defaultPasteParsers = {
|
|
|
1097
1140
|
columns = this.table.columnManager.columns,
|
|
1098
1141
|
columnMap = [],
|
|
1099
1142
|
rows = [];
|
|
1100
|
-
|
|
1143
|
+
|
|
1101
1144
|
//get data from clipboard into array of columns and rows.
|
|
1102
1145
|
clipboard = clipboard.split("\n");
|
|
1103
|
-
|
|
1146
|
+
|
|
1104
1147
|
clipboard.forEach(function(row){
|
|
1105
1148
|
data.push(row.split("\t"));
|
|
1106
1149
|
});
|
|
1107
|
-
|
|
1150
|
+
|
|
1108
1151
|
if(data.length && !(data.length === 1 && data[0].length < 2)){
|
|
1109
|
-
|
|
1152
|
+
|
|
1110
1153
|
//check if headers are present by title
|
|
1111
1154
|
data[0].forEach(function(value){
|
|
1112
1155
|
var column = columns.find(function(column){
|
|
1113
1156
|
return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();
|
|
1114
1157
|
});
|
|
1115
|
-
|
|
1158
|
+
|
|
1116
1159
|
if(column){
|
|
1117
1160
|
columnMap.push(column);
|
|
1118
1161
|
}else {
|
|
1119
1162
|
headerFindSuccess = false;
|
|
1120
1163
|
}
|
|
1121
1164
|
});
|
|
1122
|
-
|
|
1165
|
+
|
|
1123
1166
|
//check if column headers are present by field
|
|
1124
1167
|
if(!headerFindSuccess){
|
|
1125
1168
|
headerFindSuccess = true;
|
|
1126
1169
|
columnMap = [];
|
|
1127
|
-
|
|
1170
|
+
|
|
1128
1171
|
data[0].forEach(function(value){
|
|
1129
1172
|
var column = columns.find(function(column){
|
|
1130
1173
|
return value && column.field && value.trim() && column.field.trim() === value.trim();
|
|
1131
1174
|
});
|
|
1132
|
-
|
|
1175
|
+
|
|
1133
1176
|
if(column){
|
|
1134
1177
|
columnMap.push(column);
|
|
1135
1178
|
}else {
|
|
1136
1179
|
headerFindSuccess = false;
|
|
1137
1180
|
}
|
|
1138
1181
|
});
|
|
1139
|
-
|
|
1182
|
+
|
|
1140
1183
|
if(!headerFindSuccess){
|
|
1141
1184
|
columnMap = this.table.columnManager.columnsByIndex;
|
|
1142
1185
|
}
|
|
1143
1186
|
}
|
|
1144
|
-
|
|
1187
|
+
|
|
1145
1188
|
//remove header row if found
|
|
1146
1189
|
if(headerFindSuccess){
|
|
1147
1190
|
data.shift();
|
|
1148
1191
|
}
|
|
1149
|
-
|
|
1192
|
+
|
|
1150
1193
|
data.forEach(function(item){
|
|
1151
1194
|
var row = {};
|
|
1152
|
-
|
|
1195
|
+
|
|
1153
1196
|
item.forEach(function(value, i){
|
|
1154
1197
|
if(columnMap[i]){
|
|
1155
1198
|
row[columnMap[i].field] = value;
|
|
1156
1199
|
}
|
|
1157
1200
|
});
|
|
1158
|
-
|
|
1201
|
+
|
|
1159
1202
|
rows.push(row);
|
|
1160
1203
|
});
|
|
1161
|
-
|
|
1204
|
+
|
|
1162
1205
|
return rows;
|
|
1163
1206
|
}else {
|
|
1164
1207
|
return false;
|
|
1165
1208
|
}
|
|
1209
|
+
},
|
|
1210
|
+
range:function(clipboard){
|
|
1211
|
+
var data = [],
|
|
1212
|
+
rows = [],
|
|
1213
|
+
range = this.table.modules.selectRange.activeRange,
|
|
1214
|
+
singleCell = false,
|
|
1215
|
+
bounds, startCell, colWidth, columnMap, startCol;
|
|
1216
|
+
|
|
1217
|
+
if(range){
|
|
1218
|
+
bounds = range.getBounds();
|
|
1219
|
+
startCell = bounds.start;
|
|
1220
|
+
|
|
1221
|
+
if(bounds.start === bounds.end){
|
|
1222
|
+
singleCell = true;
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
if(startCell){
|
|
1226
|
+
//get data from clipboard into array of columns and rows.
|
|
1227
|
+
clipboard = clipboard.split("\n");
|
|
1228
|
+
|
|
1229
|
+
clipboard.forEach(function(row){
|
|
1230
|
+
data.push(row.split("\t"));
|
|
1231
|
+
});
|
|
1232
|
+
|
|
1233
|
+
if(data.length){
|
|
1234
|
+
columnMap = this.table.columnManager.getVisibleColumnsByIndex();
|
|
1235
|
+
startCol = columnMap.indexOf(startCell.column);
|
|
1236
|
+
|
|
1237
|
+
if(startCol > -1){
|
|
1238
|
+
if(singleCell){
|
|
1239
|
+
colWidth = data[0].length;
|
|
1240
|
+
}else {
|
|
1241
|
+
colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
columnMap = columnMap.slice(startCol, startCol + colWidth);
|
|
1245
|
+
|
|
1246
|
+
data.forEach((item) => {
|
|
1247
|
+
var row = {};
|
|
1248
|
+
var itemLength = item.length;
|
|
1249
|
+
|
|
1250
|
+
columnMap.forEach(function(col, i){
|
|
1251
|
+
row[col.field] = item[i % itemLength];
|
|
1252
|
+
});
|
|
1253
|
+
|
|
1254
|
+
rows.push(row);
|
|
1255
|
+
});
|
|
1256
|
+
|
|
1257
|
+
return rows;
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
return false;
|
|
1166
1264
|
}
|
|
1167
1265
|
};
|
|
1168
1266
|
|
|
@@ -1305,6 +1403,7 @@ class Clipboard extends Module{
|
|
|
1305
1403
|
var sel, textRange;
|
|
1306
1404
|
this.blocked = false;
|
|
1307
1405
|
this.customSelection = false;
|
|
1406
|
+
|
|
1308
1407
|
|
|
1309
1408
|
if (this.mode === true || this.mode === "copy") {
|
|
1310
1409
|
|
|
@@ -1372,7 +1471,7 @@ class Clipboard extends Module{
|
|
|
1372
1471
|
paste(e){
|
|
1373
1472
|
var data, rowData, rows;
|
|
1374
1473
|
|
|
1375
|
-
if(this.
|
|
1474
|
+
if(this.checkPasteOrigin(e)){
|
|
1376
1475
|
|
|
1377
1476
|
data = this.getPasteData(e);
|
|
1378
1477
|
|
|
@@ -1409,10 +1508,11 @@ class Clipboard extends Module{
|
|
|
1409
1508
|
}
|
|
1410
1509
|
|
|
1411
1510
|
|
|
1412
|
-
|
|
1511
|
+
checkPasteOrigin(e){
|
|
1413
1512
|
var valid = true;
|
|
1513
|
+
var blocked = this.confirm("clipboard-paste", [e]);
|
|
1414
1514
|
|
|
1415
|
-
if(
|
|
1515
|
+
if(blocked || !["DIV", "SPAN"].includes(e.target.tagName)){
|
|
1416
1516
|
valid = false;
|
|
1417
1517
|
}
|
|
1418
1518
|
|
|
@@ -2829,6 +2929,8 @@ class Column extends CoreFeature{
|
|
|
2829
2929
|
|
|
2830
2930
|
this.table.columnManager.rerenderColumns(true);
|
|
2831
2931
|
|
|
2932
|
+
this.dispatch("column-deleted", this);
|
|
2933
|
+
|
|
2832
2934
|
resolve();
|
|
2833
2935
|
});
|
|
2834
2936
|
}
|
|
@@ -2969,6 +3071,10 @@ class Column extends CoreFeature{
|
|
|
2969
3071
|
|
|
2970
3072
|
return this.component;
|
|
2971
3073
|
}
|
|
3074
|
+
|
|
3075
|
+
getPosition(){
|
|
3076
|
+
return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1;
|
|
3077
|
+
}
|
|
2972
3078
|
}
|
|
2973
3079
|
|
|
2974
3080
|
Column.defaultOptionList = defaultColumnOptions;
|
|
@@ -3888,8 +3994,14 @@ class ColumnCalcs extends Module{
|
|
|
3888
3994
|
}
|
|
3889
3995
|
|
|
3890
3996
|
initializeTopRow(){
|
|
3997
|
+
var fragment = document.createDocumentFragment();
|
|
3998
|
+
|
|
3891
3999
|
if(!this.topInitialized){
|
|
3892
|
-
|
|
4000
|
+
|
|
4001
|
+
fragment.appendChild(document.createElement("br"));
|
|
4002
|
+
fragment.appendChild(this.topElement);
|
|
4003
|
+
|
|
4004
|
+
this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);
|
|
3893
4005
|
this.topInitialized = true;
|
|
3894
4006
|
}
|
|
3895
4007
|
}
|
|
@@ -7631,6 +7743,8 @@ class Edit$1 extends Module{
|
|
|
7631
7743
|
this.registerColumnOption("cellEdited");
|
|
7632
7744
|
this.registerColumnOption("cellEditCancelled");
|
|
7633
7745
|
|
|
7746
|
+
this.registerTableOption("editTriggerEvent", "focus");
|
|
7747
|
+
|
|
7634
7748
|
this.registerTableFunction("getEditedCells", this.getEditedCells.bind(this));
|
|
7635
7749
|
this.registerTableFunction("clearCellEdited", this.clearCellEdited.bind(this));
|
|
7636
7750
|
this.registerTableFunction("navigatePrev", this.navigatePrev.bind(this));
|
|
@@ -7662,16 +7776,30 @@ class Edit$1 extends Module{
|
|
|
7662
7776
|
this.subscribe("row-deleting", this.rowDeleteCheck.bind(this));
|
|
7663
7777
|
this.subscribe("row-layout", this.rowEditableCheck.bind(this));
|
|
7664
7778
|
this.subscribe("data-refreshing", this.cancelEdit.bind(this));
|
|
7779
|
+
this.subscribe("clipboard-paste", this.pasteBlocker.bind(this));
|
|
7665
7780
|
|
|
7666
7781
|
this.subscribe("keybinding-nav-prev", this.navigatePrev.bind(this, undefined));
|
|
7667
7782
|
this.subscribe("keybinding-nav-next", this.keybindingNavigateNext.bind(this));
|
|
7668
|
-
|
|
7669
|
-
|
|
7783
|
+
|
|
7784
|
+
|
|
7785
|
+
// this.subscribe("keybinding-nav-left", this.navigateLeft.bind(this, undefined));
|
|
7786
|
+
// this.subscribe("keybinding-nav-right", this.navigateRight.bind(this, undefined));
|
|
7670
7787
|
this.subscribe("keybinding-nav-up", this.navigateUp.bind(this, undefined));
|
|
7671
7788
|
this.subscribe("keybinding-nav-down", this.navigateDown.bind(this, undefined));
|
|
7672
7789
|
}
|
|
7673
7790
|
|
|
7674
7791
|
|
|
7792
|
+
///////////////////////////////////
|
|
7793
|
+
///////// Paste Negation //////////
|
|
7794
|
+
///////////////////////////////////
|
|
7795
|
+
|
|
7796
|
+
pasteBlocker(e){
|
|
7797
|
+
if(this.currentCell){
|
|
7798
|
+
return true;
|
|
7799
|
+
}
|
|
7800
|
+
}
|
|
7801
|
+
|
|
7802
|
+
|
|
7675
7803
|
///////////////////////////////////
|
|
7676
7804
|
////// Keybinding Functions ///////
|
|
7677
7805
|
///////////////////////////////////
|
|
@@ -7679,7 +7807,7 @@ class Edit$1 extends Module{
|
|
|
7679
7807
|
keybindingNavigateNext(e){
|
|
7680
7808
|
var cell = this.currentCell,
|
|
7681
7809
|
newRow = this.options("tabEndNewRow");
|
|
7682
|
-
|
|
7810
|
+
|
|
7683
7811
|
if(cell){
|
|
7684
7812
|
if(!this.navigateNext(cell, e)){
|
|
7685
7813
|
if(newRow){
|
|
@@ -8068,12 +8196,6 @@ class Edit$1 extends Module{
|
|
|
8068
8196
|
this.updateCellClass(cell);
|
|
8069
8197
|
element.setAttribute("tabindex", 0);
|
|
8070
8198
|
|
|
8071
|
-
element.addEventListener("click", function(e){
|
|
8072
|
-
if(!element.classList.contains("tabulator-editing")){
|
|
8073
|
-
element.focus({preventScroll: true});
|
|
8074
|
-
}
|
|
8075
|
-
});
|
|
8076
|
-
|
|
8077
8199
|
element.addEventListener("mousedown", function(e){
|
|
8078
8200
|
if (e.button === 2) {
|
|
8079
8201
|
e.preventDefault();
|
|
@@ -8081,12 +8203,33 @@ class Edit$1 extends Module{
|
|
|
8081
8203
|
self.mouseClick = true;
|
|
8082
8204
|
}
|
|
8083
8205
|
});
|
|
8206
|
+
|
|
8207
|
+
if(this.options("editTriggerEvent") === "dblclick"){
|
|
8208
|
+
element.addEventListener("dblclick", function(e){
|
|
8209
|
+
if(!element.classList.contains("tabulator-editing")){
|
|
8210
|
+
element.focus({preventScroll: true});
|
|
8211
|
+
self.edit(cell, e, false);
|
|
8212
|
+
}
|
|
8213
|
+
});
|
|
8214
|
+
}
|
|
8084
8215
|
|
|
8085
|
-
|
|
8086
|
-
|
|
8087
|
-
|
|
8088
|
-
|
|
8089
|
-
|
|
8216
|
+
|
|
8217
|
+
if(this.options("editTriggerEvent") === "focus" || this.options("editTriggerEvent") === "click"){
|
|
8218
|
+
element.addEventListener("click", function(e){
|
|
8219
|
+
if(!element.classList.contains("tabulator-editing")){
|
|
8220
|
+
element.focus({preventScroll: true});
|
|
8221
|
+
self.edit(cell, e, false);
|
|
8222
|
+
}
|
|
8223
|
+
});
|
|
8224
|
+
}
|
|
8225
|
+
|
|
8226
|
+
if(this.options("editTriggerEvent") === "focus"){
|
|
8227
|
+
element.addEventListener("focus", function(e){
|
|
8228
|
+
if(!self.recursionBlock){
|
|
8229
|
+
self.edit(cell, e, false);
|
|
8230
|
+
}
|
|
8231
|
+
});
|
|
8232
|
+
}
|
|
8090
8233
|
}
|
|
8091
8234
|
}
|
|
8092
8235
|
|
|
@@ -8233,7 +8376,6 @@ class Edit$1 extends Module{
|
|
|
8233
8376
|
allowEdit = this.allowEdit(cell);
|
|
8234
8377
|
|
|
8235
8378
|
if(allowEdit || forceEdit){
|
|
8236
|
-
|
|
8237
8379
|
self.cancelEdit();
|
|
8238
8380
|
|
|
8239
8381
|
self.currentCell = cell;
|
|
@@ -8283,27 +8425,33 @@ class Edit$1 extends Module{
|
|
|
8283
8425
|
}
|
|
8284
8426
|
}else {
|
|
8285
8427
|
console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor);
|
|
8286
|
-
|
|
8428
|
+
this.blur(element);
|
|
8287
8429
|
return false;
|
|
8288
8430
|
}
|
|
8289
8431
|
}else {
|
|
8290
|
-
|
|
8432
|
+
this.blur(element);
|
|
8291
8433
|
return false;
|
|
8292
8434
|
}
|
|
8293
8435
|
|
|
8294
8436
|
return true;
|
|
8295
8437
|
}else {
|
|
8296
8438
|
this.mouseClick = false;
|
|
8297
|
-
|
|
8439
|
+
this.blur(element);
|
|
8298
8440
|
return false;
|
|
8299
8441
|
}
|
|
8300
8442
|
}else {
|
|
8301
8443
|
this.mouseClick = false;
|
|
8302
|
-
|
|
8444
|
+
this.blur(element);
|
|
8303
8445
|
return false;
|
|
8304
8446
|
}
|
|
8305
8447
|
}
|
|
8306
8448
|
|
|
8449
|
+
blur(element){
|
|
8450
|
+
if(!this.confirm("edit-blur", [element]) ){
|
|
8451
|
+
element.blur();
|
|
8452
|
+
}
|
|
8453
|
+
}
|
|
8454
|
+
|
|
8307
8455
|
getEditedCells(){
|
|
8308
8456
|
var output = [];
|
|
8309
8457
|
|
|
@@ -8387,10 +8535,20 @@ class Export extends Module{
|
|
|
8387
8535
|
this.cloneTableStyle = style;
|
|
8388
8536
|
this.config = config || {};
|
|
8389
8537
|
this.colVisProp = colVisProp;
|
|
8538
|
+
|
|
8539
|
+
var headers, body;
|
|
8390
8540
|
|
|
8391
|
-
|
|
8392
|
-
|
|
8393
|
-
|
|
8541
|
+
if (range === 'range') {
|
|
8542
|
+
var columns = this.table.modules.selectRange.selectedColumns();
|
|
8543
|
+
headers = this.config.columnHeaders !== false
|
|
8544
|
+
? this.headersToExportRows(this.generateColumnGroupHeaders(columns))
|
|
8545
|
+
: [];
|
|
8546
|
+
body = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true));
|
|
8547
|
+
} else {
|
|
8548
|
+
headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];
|
|
8549
|
+
body = this.bodyToExportRows(this.rowLookup(range));
|
|
8550
|
+
}
|
|
8551
|
+
|
|
8394
8552
|
return headers.concat(body);
|
|
8395
8553
|
}
|
|
8396
8554
|
|
|
@@ -8425,7 +8583,11 @@ class Export extends Module{
|
|
|
8425
8583
|
case "selected":
|
|
8426
8584
|
rows = this.table.modules.selectRow.selectedRows;
|
|
8427
8585
|
break;
|
|
8428
|
-
|
|
8586
|
+
|
|
8587
|
+
case "range":
|
|
8588
|
+
rows = this.table.modules.selectRange.selectedRows();
|
|
8589
|
+
break;
|
|
8590
|
+
|
|
8429
8591
|
case "active":
|
|
8430
8592
|
default:
|
|
8431
8593
|
if(this.table.options.pagination){
|
|
@@ -8439,10 +8601,12 @@ class Export extends Module{
|
|
|
8439
8601
|
return Object.assign([], rows);
|
|
8440
8602
|
}
|
|
8441
8603
|
|
|
8442
|
-
generateColumnGroupHeaders(){
|
|
8604
|
+
generateColumnGroupHeaders(columns){
|
|
8443
8605
|
var output = [];
|
|
8444
8606
|
|
|
8445
|
-
|
|
8607
|
+
if (!columns) {
|
|
8608
|
+
columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;
|
|
8609
|
+
}
|
|
8446
8610
|
|
|
8447
8611
|
columns.forEach((column) => {
|
|
8448
8612
|
var colData = this.processColumnGroup(column);
|
|
@@ -8451,7 +8615,7 @@ class Export extends Module{
|
|
|
8451
8615
|
output.push(colData);
|
|
8452
8616
|
}
|
|
8453
8617
|
});
|
|
8454
|
-
|
|
8618
|
+
|
|
8455
8619
|
return output;
|
|
8456
8620
|
}
|
|
8457
8621
|
|
|
@@ -8579,16 +8743,16 @@ class Export extends Module{
|
|
|
8579
8743
|
return exportRows;
|
|
8580
8744
|
}
|
|
8581
8745
|
|
|
8582
|
-
bodyToExportRows(rows){
|
|
8583
|
-
|
|
8584
|
-
var columns = [];
|
|
8746
|
+
bodyToExportRows(rows, columns = []){
|
|
8585
8747
|
var exportRows = [];
|
|
8586
8748
|
|
|
8587
|
-
|
|
8588
|
-
|
|
8589
|
-
|
|
8590
|
-
|
|
8591
|
-
|
|
8749
|
+
if (columns.length === 0) {
|
|
8750
|
+
this.table.columnManager.columnsByIndex.forEach((column) => {
|
|
8751
|
+
if (this.columnVisCheck(column)) {
|
|
8752
|
+
columns.push(column.getComponent());
|
|
8753
|
+
}
|
|
8754
|
+
});
|
|
8755
|
+
}
|
|
8592
8756
|
|
|
8593
8757
|
if(this.config.columnCalcs !== false && this.table.modExists("columnCalcs")){
|
|
8594
8758
|
if(this.table.modules.columnCalcs.topInitialized){
|
|
@@ -8599,7 +8763,7 @@ class Export extends Module{
|
|
|
8599
8763
|
rows.push(this.table.modules.columnCalcs.botRow);
|
|
8600
8764
|
}
|
|
8601
8765
|
}
|
|
8602
|
-
|
|
8766
|
+
|
|
8603
8767
|
rows = rows.filter((row) => {
|
|
8604
8768
|
switch(row.type){
|
|
8605
8769
|
case "group":
|
|
@@ -8826,7 +8990,8 @@ class Export extends Module{
|
|
|
8826
8990
|
if(col){
|
|
8827
8991
|
var cellEl = document.createElement("td"),
|
|
8828
8992
|
column = col.component._column,
|
|
8829
|
-
|
|
8993
|
+
table = this.table,
|
|
8994
|
+
index = table.columnManager.findColumnIndex(column),
|
|
8830
8995
|
value = col.value,
|
|
8831
8996
|
cellStyle;
|
|
8832
8997
|
|
|
@@ -8853,6 +9018,9 @@ class Export extends Module{
|
|
|
8853
9018
|
getRow:function(){
|
|
8854
9019
|
return row.component;
|
|
8855
9020
|
},
|
|
9021
|
+
getTable:function(){
|
|
9022
|
+
return table;
|
|
9023
|
+
},
|
|
8856
9024
|
getComponent:function(){
|
|
8857
9025
|
return cellWrapper;
|
|
8858
9026
|
},
|
|
@@ -10511,8 +10679,12 @@ function buttonCross(cell, formatterParams, onRendered){
|
|
|
10511
10679
|
function rownum(cell, formatterParams, onRendered){
|
|
10512
10680
|
var content = document.createElement("span");
|
|
10513
10681
|
var row = cell.getRow();
|
|
10682
|
+
var table = cell.getTable();
|
|
10514
10683
|
|
|
10515
10684
|
row.watchPosition((position) => {
|
|
10685
|
+
if (formatterParams.relativeToPage) {
|
|
10686
|
+
position += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1);
|
|
10687
|
+
}
|
|
10516
10688
|
content.innerText = position;
|
|
10517
10689
|
});
|
|
10518
10690
|
|
|
@@ -10589,7 +10761,7 @@ function rowSelection(cell, formatterParams, onRendered){
|
|
|
10589
10761
|
if(row instanceof RowComponent){
|
|
10590
10762
|
|
|
10591
10763
|
checkbox.addEventListener("change", (e) => {
|
|
10592
|
-
if(this.table.options.
|
|
10764
|
+
if(this.table.options.selectableRowsRangeMode === "click"){
|
|
10593
10765
|
if(!blocked){
|
|
10594
10766
|
row.toggleSelect();
|
|
10595
10767
|
}else {
|
|
@@ -10600,7 +10772,7 @@ function rowSelection(cell, formatterParams, onRendered){
|
|
|
10600
10772
|
}
|
|
10601
10773
|
});
|
|
10602
10774
|
|
|
10603
|
-
if(this.table.options.
|
|
10775
|
+
if(this.table.options.selectableRowsRangeMode === "click"){
|
|
10604
10776
|
checkbox.addEventListener("click", (e) => {
|
|
10605
10777
|
blocked = true;
|
|
10606
10778
|
this.table.modules.selectRow.handleComplexRowClick(row._row, e);
|
|
@@ -10893,7 +11065,9 @@ class FrozenColumns extends Module{
|
|
|
10893
11065
|
this.subscribe("columns-loading", this.reset.bind(this));
|
|
10894
11066
|
|
|
10895
11067
|
this.subscribe("column-add", this.reinitializeColumns.bind(this));
|
|
10896
|
-
this.subscribe("column-
|
|
11068
|
+
this.subscribe("column-deleted", this.reinitializeColumns.bind(this));
|
|
11069
|
+
this.subscribe("column-hide", this.reinitializeColumns.bind(this));
|
|
11070
|
+
this.subscribe("column-show", this.reinitializeColumns.bind(this));
|
|
10897
11071
|
|
|
10898
11072
|
this.subscribe("table-redraw", this.layout.bind(this));
|
|
10899
11073
|
this.subscribe("layout-refreshing", this.blockLayout.bind(this));
|
|
@@ -10919,16 +11093,16 @@ class FrozenColumns extends Module{
|
|
|
10919
11093
|
this.table.columnManager.columnsByIndex.forEach((column) => {
|
|
10920
11094
|
this.initializeColumn(column);
|
|
10921
11095
|
});
|
|
11096
|
+
|
|
11097
|
+
this.layout();
|
|
10922
11098
|
}
|
|
10923
11099
|
|
|
10924
11100
|
//initialize specific column
|
|
10925
11101
|
initializeColumn(column){
|
|
10926
11102
|
var config = {margin:0, edge:false};
|
|
10927
11103
|
|
|
10928
|
-
if(!column.isGroup){
|
|
10929
|
-
|
|
11104
|
+
if(!column.isGroup){
|
|
10930
11105
|
if(this.frozenCheck(column)){
|
|
10931
|
-
|
|
10932
11106
|
config.position = this.initializationMode;
|
|
10933
11107
|
|
|
10934
11108
|
if(this.initializationMode == "left"){
|
|
@@ -11019,9 +11193,8 @@ class FrozenColumns extends Module{
|
|
|
11019
11193
|
leftParents.push(parentEl);
|
|
11020
11194
|
}
|
|
11021
11195
|
|
|
11022
|
-
|
|
11023
|
-
|
|
11024
|
-
}
|
|
11196
|
+
parentEl.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left");
|
|
11197
|
+
parentEl.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right");
|
|
11025
11198
|
}else {
|
|
11026
11199
|
this.layoutElement(column.getElement(), column);
|
|
11027
11200
|
}
|
|
@@ -11069,7 +11242,6 @@ class FrozenColumns extends Module{
|
|
|
11069
11242
|
//layout columns appropriately
|
|
11070
11243
|
layout(){
|
|
11071
11244
|
if(this.active && !this.blocked){
|
|
11072
|
-
|
|
11073
11245
|
//calculate left columns
|
|
11074
11246
|
this.layoutColumnPosition();
|
|
11075
11247
|
|
|
@@ -11132,9 +11304,8 @@ class FrozenColumns extends Module{
|
|
|
11132
11304
|
|
|
11133
11305
|
element.classList.add("tabulator-frozen");
|
|
11134
11306
|
|
|
11135
|
-
|
|
11136
|
-
|
|
11137
|
-
}
|
|
11307
|
+
element.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left");
|
|
11308
|
+
element.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right");
|
|
11138
11309
|
}
|
|
11139
11310
|
}
|
|
11140
11311
|
|
|
@@ -11178,12 +11349,17 @@ class FrozenRows extends Module{
|
|
|
11178
11349
|
}
|
|
11179
11350
|
|
|
11180
11351
|
initialize(){
|
|
11352
|
+
var fragment = document.createDocumentFragment();
|
|
11353
|
+
|
|
11181
11354
|
this.rows = [];
|
|
11182
11355
|
|
|
11183
11356
|
this.topElement.classList.add("tabulator-frozen-rows-holder");
|
|
11357
|
+
|
|
11358
|
+
fragment.appendChild(document.createElement("br"));
|
|
11359
|
+
fragment.appendChild(this.topElement);
|
|
11184
11360
|
|
|
11185
11361
|
// this.table.columnManager.element.append(this.topElement);
|
|
11186
|
-
this.table.columnManager.getContentsElement().insertBefore(
|
|
11362
|
+
this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);
|
|
11187
11363
|
|
|
11188
11364
|
this.subscribe("row-deleting", this.detachRow.bind(this));
|
|
11189
11365
|
this.subscribe("rows-visible", this.visibleRows.bind(this));
|
|
@@ -12649,6 +12825,8 @@ var defaultUndoers = {
|
|
|
12649
12825
|
|
|
12650
12826
|
rowAdd: function(action){
|
|
12651
12827
|
action.component.deleteActual();
|
|
12828
|
+
|
|
12829
|
+
this.table.rowManager.checkPlaceholder();
|
|
12652
12830
|
},
|
|
12653
12831
|
|
|
12654
12832
|
rowDelete: function(action){
|
|
@@ -12659,6 +12837,8 @@ var defaultUndoers = {
|
|
|
12659
12837
|
}
|
|
12660
12838
|
|
|
12661
12839
|
this._rebindRow(action.component, newRow);
|
|
12840
|
+
|
|
12841
|
+
this.table.rowManager.checkPlaceholder();
|
|
12662
12842
|
},
|
|
12663
12843
|
|
|
12664
12844
|
rowMove: function(action){
|
|
@@ -12685,10 +12865,14 @@ var defaultRedoers = {
|
|
|
12685
12865
|
}
|
|
12686
12866
|
|
|
12687
12867
|
this._rebindRow(action.component, newRow);
|
|
12868
|
+
|
|
12869
|
+
this.table.rowManager.checkPlaceholder();
|
|
12688
12870
|
},
|
|
12689
12871
|
|
|
12690
12872
|
rowDelete:function(action){
|
|
12691
12873
|
action.component.deleteActual();
|
|
12874
|
+
|
|
12875
|
+
this.table.rowManager.checkPlaceholder();
|
|
12692
12876
|
},
|
|
12693
12877
|
|
|
12694
12878
|
rowMove: function(action){
|
|
@@ -12813,7 +12997,7 @@ class History extends Module{
|
|
|
12813
12997
|
|
|
12814
12998
|
return true;
|
|
12815
12999
|
}else {
|
|
12816
|
-
console.warn("History Undo Error - No more history to undo");
|
|
13000
|
+
console.warn(this.options("history") ? "History Undo Error - No more history to undo" : "History module not enabled");
|
|
12817
13001
|
return false;
|
|
12818
13002
|
}
|
|
12819
13003
|
}
|
|
@@ -12831,7 +13015,7 @@ class History extends Module{
|
|
|
12831
13015
|
|
|
12832
13016
|
return true;
|
|
12833
13017
|
}else {
|
|
12834
|
-
console.warn("History Redo Error - No more history to redo");
|
|
13018
|
+
console.warn(this.options("history") ? "History Redo Error - No more history to redo" : "History module not enabled");
|
|
12835
13019
|
return false;
|
|
12836
13020
|
}
|
|
12837
13021
|
}
|
|
@@ -13648,6 +13832,8 @@ var defaultBindings = {
|
|
|
13648
13832
|
navNext:9,
|
|
13649
13833
|
navUp:38,
|
|
13650
13834
|
navDown:40,
|
|
13835
|
+
navLeft:37,
|
|
13836
|
+
navRight:39,
|
|
13651
13837
|
scrollPageUp:33,
|
|
13652
13838
|
scrollPageDown:34,
|
|
13653
13839
|
scrollToStart:36,
|
|
@@ -13655,6 +13841,19 @@ var defaultBindings = {
|
|
|
13655
13841
|
undo:["ctrl + 90", "meta + 90"],
|
|
13656
13842
|
redo:["ctrl + 89", "meta + 89"],
|
|
13657
13843
|
copyToClipboard:["ctrl + 67", "meta + 67"],
|
|
13844
|
+
|
|
13845
|
+
rangeJumpUp:["ctrl + 38", "meta + 38"],
|
|
13846
|
+
rangeJumpDown:["ctrl + 40", "meta + 40"],
|
|
13847
|
+
rangeJumpLeft:["ctrl + 37", "meta + 37"],
|
|
13848
|
+
rangeJumpRight:["ctrl + 39", "meta + 39"],
|
|
13849
|
+
rangeExpandUp:"shift + 38",
|
|
13850
|
+
rangeExpandDown:"shift + 40",
|
|
13851
|
+
rangeExpandLeft:"shift + 37",
|
|
13852
|
+
rangeExpandRight:"shift + 39",
|
|
13853
|
+
rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"],
|
|
13854
|
+
rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"],
|
|
13855
|
+
rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"],
|
|
13856
|
+
rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"],
|
|
13658
13857
|
};
|
|
13659
13858
|
|
|
13660
13859
|
var defaultActions = {
|
|
@@ -13742,6 +13941,43 @@ var defaultActions = {
|
|
|
13742
13941
|
this.dispatch("keybinding-nav-down", e);
|
|
13743
13942
|
},
|
|
13744
13943
|
|
|
13944
|
+
rangeJumpLeft: function(e){
|
|
13945
|
+
this.dispatch("keybinding-nav-range", e, "left", true, false);
|
|
13946
|
+
},
|
|
13947
|
+
rangeJumpRight: function(e){
|
|
13948
|
+
this.dispatch("keybinding-nav-range", e, "right", true, false);
|
|
13949
|
+
},
|
|
13950
|
+
rangeJumpUp: function(e){
|
|
13951
|
+
this.dispatch("keybinding-nav-range", e, "up", true, false);
|
|
13952
|
+
},
|
|
13953
|
+
rangeJumpDown: function(e){
|
|
13954
|
+
this.dispatch("keybinding-nav-range", e, "down", true, false);
|
|
13955
|
+
},
|
|
13956
|
+
rangeExpandLeft: function(e){
|
|
13957
|
+
this.dispatch("keybinding-nav-range", e, "left", false, true);
|
|
13958
|
+
},
|
|
13959
|
+
rangeExpandRight: function(e){
|
|
13960
|
+
this.dispatch("keybinding-nav-range", e, "right", false, true);
|
|
13961
|
+
},
|
|
13962
|
+
rangeExpandUp: function(e){
|
|
13963
|
+
this.dispatch("keybinding-nav-range", e, "up", false, true);
|
|
13964
|
+
},
|
|
13965
|
+
rangeExpandDown: function(e){
|
|
13966
|
+
this.dispatch("keybinding-nav-range", e, "down", false, true);
|
|
13967
|
+
},
|
|
13968
|
+
rangeExpandJumpLeft: function(e){
|
|
13969
|
+
this.dispatch("keybinding-nav-range", e, "left", true, true);
|
|
13970
|
+
},
|
|
13971
|
+
rangeExpandJumpRight: function(e){
|
|
13972
|
+
this.dispatch("keybinding-nav-range", e, "right", true, true);
|
|
13973
|
+
},
|
|
13974
|
+
rangeExpandJumpUp: function(e){
|
|
13975
|
+
this.dispatch("keybinding-nav-range", e, "up", true, true);
|
|
13976
|
+
},
|
|
13977
|
+
rangeExpandJumpDown: function(e){
|
|
13978
|
+
this.dispatch("keybinding-nav-range", e, "down", true, true);
|
|
13979
|
+
},
|
|
13980
|
+
|
|
13745
13981
|
undo:function(e){
|
|
13746
13982
|
var cell = false;
|
|
13747
13983
|
if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
|
|
@@ -14020,7 +14256,7 @@ class Menu extends Module{
|
|
|
14020
14256
|
this.subscribe("group-dblclick", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));
|
|
14021
14257
|
}
|
|
14022
14258
|
}
|
|
14023
|
-
|
|
14259
|
+
|
|
14024
14260
|
initializeColumn(column){
|
|
14025
14261
|
var def = column.definition;
|
|
14026
14262
|
|
|
@@ -14229,6 +14465,7 @@ class Menu extends Module{
|
|
|
14229
14465
|
this.rootPopup = null;
|
|
14230
14466
|
|
|
14231
14467
|
if(this.currentComponent){
|
|
14468
|
+
this.dispatch("menu-closed", menu, popup);
|
|
14232
14469
|
this.dispatchExternal("menuClosed", this.currentComponent.getComponent());
|
|
14233
14470
|
this.currentComponent = null;
|
|
14234
14471
|
}
|
|
@@ -14236,6 +14473,7 @@ class Menu extends Module{
|
|
|
14236
14473
|
|
|
14237
14474
|
this.currentComponent = component;
|
|
14238
14475
|
|
|
14476
|
+
this.dispatch("menu-opened", menu, popup);
|
|
14239
14477
|
this.dispatchExternal("menuOpened", component.getComponent());
|
|
14240
14478
|
}
|
|
14241
14479
|
}
|
|
@@ -14279,8 +14517,13 @@ class MoveColumns extends Module{
|
|
|
14279
14517
|
initialize(){
|
|
14280
14518
|
if(this.table.options.movableColumns){
|
|
14281
14519
|
this.subscribe("column-init", this.initializeColumn.bind(this));
|
|
14520
|
+
this.subscribe("alert-show", this.abortMove.bind(this));
|
|
14282
14521
|
}
|
|
14283
14522
|
}
|
|
14523
|
+
|
|
14524
|
+
abortMove(){
|
|
14525
|
+
clearTimeout(this.checkTimeout);
|
|
14526
|
+
}
|
|
14284
14527
|
|
|
14285
14528
|
initializeColumn(column){
|
|
14286
14529
|
var self = this,
|
|
@@ -16866,7 +17109,7 @@ class Popup$1 extends Module{
|
|
|
16866
17109
|
this.subscribe("group-dblclick", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));
|
|
16867
17110
|
}
|
|
16868
17111
|
}
|
|
16869
|
-
|
|
17112
|
+
|
|
16870
17113
|
initializeColumn(column){
|
|
16871
17114
|
var def = column.definition;
|
|
16872
17115
|
|
|
@@ -18023,7 +18266,7 @@ class ResizeTable extends Module{
|
|
|
18023
18266
|
this.autoResize = true;
|
|
18024
18267
|
|
|
18025
18268
|
this.resizeObserver = new ResizeObserver((entry) => {
|
|
18026
|
-
if(!table.browserMobile || (table.browserMobile
|
|
18269
|
+
if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){
|
|
18027
18270
|
|
|
18028
18271
|
var nodeHeight = Math.floor(entry[0].contentRect.height);
|
|
18029
18272
|
var nodeWidth = Math.floor(entry[0].contentRect.width);
|
|
@@ -18049,7 +18292,7 @@ class ResizeTable extends Module{
|
|
|
18049
18292
|
if(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))){
|
|
18050
18293
|
|
|
18051
18294
|
this.containerObserver = new ResizeObserver((entry) => {
|
|
18052
|
-
if(!table.browserMobile || (table.browserMobile
|
|
18295
|
+
if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){
|
|
18053
18296
|
|
|
18054
18297
|
var nodeHeight = Math.floor(entry[0].contentRect.height);
|
|
18055
18298
|
var nodeWidth = Math.floor(entry[0].contentRect.width);
|
|
@@ -18072,7 +18315,7 @@ class ResizeTable extends Module{
|
|
|
18072
18315
|
|
|
18073
18316
|
}else {
|
|
18074
18317
|
this.binding = function(){
|
|
18075
|
-
if(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){
|
|
18318
|
+
if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){
|
|
18076
18319
|
table.columnManager.rerenderColumns(true);
|
|
18077
18320
|
table.redraw();
|
|
18078
18321
|
}
|
|
@@ -18491,11 +18734,11 @@ class SelectRow extends Module{
|
|
|
18491
18734
|
this.selectedRows = []; //hold selected rows
|
|
18492
18735
|
this.headerCheckboxElement = null; // hold header select element
|
|
18493
18736
|
|
|
18494
|
-
this.registerTableOption("
|
|
18495
|
-
this.registerTableOption("
|
|
18496
|
-
this.registerTableOption("
|
|
18497
|
-
this.registerTableOption("
|
|
18498
|
-
this.registerTableOption("
|
|
18737
|
+
this.registerTableOption("selectableRows", "highlight"); //highlight rows on hover
|
|
18738
|
+
this.registerTableOption("selectableRowsRangeMode", "drag"); //highlight rows on hover
|
|
18739
|
+
this.registerTableOption("selectableRowsRollingSelection", true); //roll selection once maximum number of selectable rows is reached
|
|
18740
|
+
this.registerTableOption("selectableRowsPersistence", true); // maintain selection when table view is updated
|
|
18741
|
+
this.registerTableOption("selectableRowsCheck", function(data, row){return true;}); //check whether row is selectable
|
|
18499
18742
|
|
|
18500
18743
|
this.registerTableFunction("selectRow", this.selectRows.bind(this));
|
|
18501
18744
|
this.registerTableFunction("deselectRow", this.deselectRows.bind(this));
|
|
@@ -18511,17 +18754,32 @@ class SelectRow extends Module{
|
|
|
18511
18754
|
}
|
|
18512
18755
|
|
|
18513
18756
|
initialize(){
|
|
18514
|
-
|
|
18757
|
+
|
|
18758
|
+
this.deprecatedOptionsCheck();
|
|
18759
|
+
|
|
18760
|
+
if(this.table.options.selectableRows === "highlight" && this.table.options.selectableRange){
|
|
18761
|
+
this.table.options.selectableRows = false;
|
|
18762
|
+
}
|
|
18763
|
+
|
|
18764
|
+
if(this.table.options.selectableRows !== false){
|
|
18515
18765
|
this.subscribe("row-init", this.initializeRow.bind(this));
|
|
18516
18766
|
this.subscribe("row-deleting", this.rowDeleted.bind(this));
|
|
18517
18767
|
this.subscribe("rows-wipe", this.clearSelectionData.bind(this));
|
|
18518
18768
|
this.subscribe("rows-retrieve", this.rowRetrieve.bind(this));
|
|
18519
18769
|
|
|
18520
|
-
if(this.table.options.
|
|
18770
|
+
if(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){
|
|
18521
18771
|
this.subscribe("data-refreshing", this.deselectRows.bind(this));
|
|
18522
18772
|
}
|
|
18523
18773
|
}
|
|
18524
18774
|
}
|
|
18775
|
+
|
|
18776
|
+
deprecatedOptionsCheck(){
|
|
18777
|
+
this.deprecationCheck("selectable", "selectableRows", true);
|
|
18778
|
+
this.deprecationCheck("selectableRollingSelection", "selectableRowsRollingSelection", true);
|
|
18779
|
+
this.deprecationCheck("selectableRangeMode", "selectableRowsRangeMode", true);
|
|
18780
|
+
this.deprecationCheck("selectablePersistence", "selectableRowsPersistence", true);
|
|
18781
|
+
this.deprecationCheck("selectableCheck", "selectableRowsCheck", true);
|
|
18782
|
+
}
|
|
18525
18783
|
|
|
18526
18784
|
rowRetrieve(type, prevValue){
|
|
18527
18785
|
return type === "selected" ? this.selectedRows : prevValue;
|
|
@@ -18546,6 +18804,7 @@ class SelectRow extends Module{
|
|
|
18546
18804
|
|
|
18547
18805
|
initializeRow(row){
|
|
18548
18806
|
var self = this,
|
|
18807
|
+
selectable = self.checkRowSelectability(row),
|
|
18549
18808
|
element = row.getElement();
|
|
18550
18809
|
|
|
18551
18810
|
// trigger end of row selection
|
|
@@ -18559,14 +18818,14 @@ class SelectRow extends Module{
|
|
|
18559
18818
|
};
|
|
18560
18819
|
|
|
18561
18820
|
row.modules.select = {selected:false};
|
|
18821
|
+
|
|
18822
|
+
element.classList.toggle("tabulator-selectable", selectable);
|
|
18823
|
+
element.classList.toggle("tabulator-unselectable", !selectable);
|
|
18562
18824
|
|
|
18563
18825
|
//set row selection class
|
|
18564
|
-
if(self.checkRowSelectability(row)){
|
|
18565
|
-
|
|
18566
|
-
|
|
18567
|
-
|
|
18568
|
-
if(self.table.options.selectable && self.table.options.selectable != "highlight"){
|
|
18569
|
-
if(self.table.options.selectableRangeMode === "click"){
|
|
18826
|
+
if(self.checkRowSelectability(row)){
|
|
18827
|
+
if(self.table.options.selectableRows && self.table.options.selectableRows != "highlight"){
|
|
18828
|
+
if(self.table.options.selectableRowsRangeMode === "click"){
|
|
18570
18829
|
element.addEventListener("click", this.handleComplexRowClick.bind(this, row));
|
|
18571
18830
|
}else {
|
|
18572
18831
|
element.addEventListener("click", function(e){
|
|
@@ -18615,10 +18874,6 @@ class SelectRow extends Module{
|
|
|
18615
18874
|
});
|
|
18616
18875
|
}
|
|
18617
18876
|
}
|
|
18618
|
-
|
|
18619
|
-
}else {
|
|
18620
|
-
element.classList.add("tabulator-unselectable");
|
|
18621
|
-
element.classList.remove("tabulator-selectable");
|
|
18622
18877
|
}
|
|
18623
18878
|
}
|
|
18624
18879
|
|
|
@@ -18640,8 +18895,8 @@ class SelectRow extends Module{
|
|
|
18640
18895
|
toggledRows.forEach((toggledRow)=>{
|
|
18641
18896
|
if(toggledRow !== this.lastClickedRow){
|
|
18642
18897
|
|
|
18643
|
-
if(this.table.options.
|
|
18644
|
-
if(this.selectedRows.length < this.table.options.
|
|
18898
|
+
if(this.table.options.selectableRows !== true && !this.isRowSelected(row)){
|
|
18899
|
+
if(this.selectedRows.length < this.table.options.selectableRows){
|
|
18645
18900
|
this.toggleRow(toggledRow);
|
|
18646
18901
|
}
|
|
18647
18902
|
}else {
|
|
@@ -18653,9 +18908,9 @@ class SelectRow extends Module{
|
|
|
18653
18908
|
}else {
|
|
18654
18909
|
this.deselectRows(undefined, true);
|
|
18655
18910
|
|
|
18656
|
-
if(this.table.options.
|
|
18657
|
-
if(toggledRows.length > this.table.options.
|
|
18658
|
-
toggledRows = toggledRows.slice(0, this.table.options.
|
|
18911
|
+
if(this.table.options.selectableRows !== true){
|
|
18912
|
+
if(toggledRows.length > this.table.options.selectableRows){
|
|
18913
|
+
toggledRows = toggledRows.slice(0, this.table.options.selectableRows);
|
|
18659
18914
|
}
|
|
18660
18915
|
}
|
|
18661
18916
|
|
|
@@ -18675,7 +18930,7 @@ class SelectRow extends Module{
|
|
|
18675
18930
|
|
|
18676
18931
|
checkRowSelectability(row){
|
|
18677
18932
|
if(row && row.type === "row"){
|
|
18678
|
-
return this.table.options.
|
|
18933
|
+
return this.table.options.selectableRowsCheck.call(this.table, row.getComponent());
|
|
18679
18934
|
}
|
|
18680
18935
|
|
|
18681
18936
|
return false;
|
|
@@ -18702,6 +18957,10 @@ class SelectRow extends Module{
|
|
|
18702
18957
|
rowMatch = this.table.rowManager.rows;
|
|
18703
18958
|
break;
|
|
18704
18959
|
|
|
18960
|
+
case "number":
|
|
18961
|
+
rowMatch = this.table.rowManager.findRow(rows);
|
|
18962
|
+
break;
|
|
18963
|
+
|
|
18705
18964
|
case "string":
|
|
18706
18965
|
rowMatch = this.table.rowManager.findRow(rows);
|
|
18707
18966
|
|
|
@@ -18737,9 +18996,9 @@ class SelectRow extends Module{
|
|
|
18737
18996
|
//select an individual row
|
|
18738
18997
|
_selectRow(rowInfo, silent, force){
|
|
18739
18998
|
//handle max row count
|
|
18740
|
-
if(!isNaN(this.table.options.
|
|
18741
|
-
if(this.selectedRows.length >= this.table.options.
|
|
18742
|
-
if(this.table.options.
|
|
18999
|
+
if(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){
|
|
19000
|
+
if(this.selectedRows.length >= this.table.options.selectableRows){
|
|
19001
|
+
if(this.table.options.selectableRowsRollingSelection){
|
|
18743
19002
|
this._deselectRow(this.selectedRows[0]);
|
|
18744
19003
|
}else {
|
|
18745
19004
|
return false;
|
|
@@ -18793,6 +19052,10 @@ class SelectRow extends Module{
|
|
|
18793
19052
|
case "undefined":
|
|
18794
19053
|
rowMatch = Object.assign([], this.selectedRows);
|
|
18795
19054
|
break;
|
|
19055
|
+
|
|
19056
|
+
case "number":
|
|
19057
|
+
rowMatch = this.table.rowManager.findRow(rows);
|
|
19058
|
+
break;
|
|
18796
19059
|
|
|
18797
19060
|
case "string":
|
|
18798
19061
|
rowMatch = this.table.rowManager.findRow(rows);
|
|
@@ -19220,90 +19483,90 @@ var defaultSorters = {
|
|
|
19220
19483
|
};
|
|
19221
19484
|
|
|
19222
19485
|
class Sort extends Module{
|
|
19223
|
-
|
|
19486
|
+
|
|
19224
19487
|
constructor(table){
|
|
19225
19488
|
super(table);
|
|
19226
|
-
|
|
19489
|
+
|
|
19227
19490
|
this.sortList = []; //holder current sort
|
|
19228
19491
|
this.changed = false; //has the sort changed since last render
|
|
19229
|
-
|
|
19492
|
+
|
|
19230
19493
|
this.registerTableOption("sortMode", "local"); //local or remote sorting
|
|
19231
|
-
|
|
19494
|
+
|
|
19232
19495
|
this.registerTableOption("initialSort", false); //initial sorting criteria
|
|
19233
19496
|
this.registerTableOption("columnHeaderSortMulti", true); //multiple or single column sorting
|
|
19234
19497
|
this.registerTableOption("sortOrderReverse", false); //reverse internal sort ordering
|
|
19235
19498
|
this.registerTableOption("headerSortElement", "<div class='tabulator-arrow'></div>"); //header sort element
|
|
19236
19499
|
this.registerTableOption("headerSortClickElement", "header"); //element which triggers sort when clicked
|
|
19237
|
-
|
|
19500
|
+
|
|
19238
19501
|
this.registerColumnOption("sorter");
|
|
19239
19502
|
this.registerColumnOption("sorterParams");
|
|
19240
|
-
|
|
19503
|
+
|
|
19241
19504
|
this.registerColumnOption("headerSort", true);
|
|
19242
19505
|
this.registerColumnOption("headerSortStartingDir");
|
|
19243
19506
|
this.registerColumnOption("headerSortTristate");
|
|
19244
|
-
|
|
19507
|
+
|
|
19245
19508
|
}
|
|
19246
|
-
|
|
19509
|
+
|
|
19247
19510
|
initialize(){
|
|
19248
19511
|
this.subscribe("column-layout", this.initializeColumn.bind(this));
|
|
19249
19512
|
this.subscribe("table-built", this.tableBuilt.bind(this));
|
|
19250
19513
|
this.registerDataHandler(this.sort.bind(this), 20);
|
|
19251
|
-
|
|
19514
|
+
|
|
19252
19515
|
this.registerTableFunction("setSort", this.userSetSort.bind(this));
|
|
19253
19516
|
this.registerTableFunction("getSorters", this.getSort.bind(this));
|
|
19254
19517
|
this.registerTableFunction("clearSort", this.clearSort.bind(this));
|
|
19255
|
-
|
|
19518
|
+
|
|
19256
19519
|
if(this.table.options.sortMode === "remote"){
|
|
19257
19520
|
this.subscribe("data-params", this.remoteSortParams.bind(this));
|
|
19258
19521
|
}
|
|
19259
19522
|
}
|
|
19260
|
-
|
|
19523
|
+
|
|
19261
19524
|
tableBuilt(){
|
|
19262
19525
|
if(this.table.options.initialSort){
|
|
19263
19526
|
this.setSort(this.table.options.initialSort);
|
|
19264
19527
|
}
|
|
19265
19528
|
}
|
|
19266
|
-
|
|
19529
|
+
|
|
19267
19530
|
remoteSortParams(data, config, silent, params){
|
|
19268
19531
|
var sorters = this.getSort();
|
|
19269
|
-
|
|
19532
|
+
|
|
19270
19533
|
sorters.forEach((item) => {
|
|
19271
19534
|
delete item.column;
|
|
19272
19535
|
});
|
|
19273
|
-
|
|
19536
|
+
|
|
19274
19537
|
params.sort = sorters;
|
|
19275
|
-
|
|
19538
|
+
|
|
19276
19539
|
return params;
|
|
19277
19540
|
}
|
|
19278
|
-
|
|
19279
|
-
|
|
19541
|
+
|
|
19542
|
+
|
|
19280
19543
|
///////////////////////////////////
|
|
19281
19544
|
///////// Table Functions /////////
|
|
19282
19545
|
///////////////////////////////////
|
|
19283
|
-
|
|
19546
|
+
|
|
19284
19547
|
userSetSort(sortList, dir){
|
|
19285
19548
|
this.setSort(sortList, dir);
|
|
19286
19549
|
// this.table.rowManager.sorterRefresh();
|
|
19287
19550
|
this.refreshSort();
|
|
19288
19551
|
}
|
|
19289
|
-
|
|
19552
|
+
|
|
19290
19553
|
clearSort(){
|
|
19291
19554
|
this.clear();
|
|
19292
19555
|
// this.table.rowManager.sorterRefresh();
|
|
19293
19556
|
this.refreshSort();
|
|
19294
19557
|
}
|
|
19295
|
-
|
|
19296
|
-
|
|
19558
|
+
|
|
19559
|
+
|
|
19297
19560
|
///////////////////////////////////
|
|
19298
19561
|
///////// Internal Logic //////////
|
|
19299
19562
|
///////////////////////////////////
|
|
19300
|
-
|
|
19563
|
+
|
|
19301
19564
|
//initialize column header for sorting
|
|
19302
19565
|
initializeColumn(column){
|
|
19303
19566
|
var sorter = false,
|
|
19304
19567
|
colEl,
|
|
19305
19568
|
arrowEl;
|
|
19306
|
-
|
|
19569
|
+
|
|
19307
19570
|
switch(typeof column.definition.sorter){
|
|
19308
19571
|
case "string":
|
|
19309
19572
|
if(Sort.sorters[column.definition.sorter]){
|
|
@@ -19312,28 +19575,28 @@ class Sort extends Module{
|
|
|
19312
19575
|
console.warn("Sort Error - No such sorter found: ", column.definition.sorter);
|
|
19313
19576
|
}
|
|
19314
19577
|
break;
|
|
19315
|
-
|
|
19578
|
+
|
|
19316
19579
|
case "function":
|
|
19317
19580
|
sorter = column.definition.sorter;
|
|
19318
19581
|
break;
|
|
19319
19582
|
}
|
|
19320
|
-
|
|
19583
|
+
|
|
19321
19584
|
column.modules.sort = {
|
|
19322
19585
|
sorter:sorter, dir:"none",
|
|
19323
19586
|
params:column.definition.sorterParams || {},
|
|
19324
19587
|
startingDir:column.definition.headerSortStartingDir || "asc",
|
|
19325
19588
|
tristate: column.definition.headerSortTristate,
|
|
19326
19589
|
};
|
|
19327
|
-
|
|
19590
|
+
|
|
19328
19591
|
if(column.definition.headerSort !== false){
|
|
19329
|
-
|
|
19592
|
+
|
|
19330
19593
|
colEl = column.getElement();
|
|
19331
|
-
|
|
19594
|
+
|
|
19332
19595
|
colEl.classList.add("tabulator-sortable");
|
|
19333
|
-
|
|
19596
|
+
|
|
19334
19597
|
arrowEl = document.createElement("div");
|
|
19335
19598
|
arrowEl.classList.add("tabulator-col-sorter");
|
|
19336
|
-
|
|
19599
|
+
|
|
19337
19600
|
switch(this.table.options.headerSortClickElement){
|
|
19338
19601
|
case "icon":
|
|
19339
19602
|
arrowEl.classList.add("tabulator-col-sorter-element");
|
|
@@ -19345,33 +19608,39 @@ class Sort extends Module{
|
|
|
19345
19608
|
colEl.classList.add("tabulator-col-sorter-element");
|
|
19346
19609
|
break;
|
|
19347
19610
|
}
|
|
19348
|
-
|
|
19611
|
+
|
|
19349
19612
|
switch(this.table.options.headerSortElement){
|
|
19350
19613
|
case "function":
|
|
19351
|
-
|
|
19614
|
+
//do nothing
|
|
19352
19615
|
break;
|
|
19353
|
-
|
|
19616
|
+
|
|
19354
19617
|
case "object":
|
|
19355
19618
|
arrowEl.appendChild(this.table.options.headerSortElement);
|
|
19356
19619
|
break;
|
|
19357
|
-
|
|
19620
|
+
|
|
19358
19621
|
default:
|
|
19359
19622
|
arrowEl.innerHTML = this.table.options.headerSortElement;
|
|
19360
19623
|
}
|
|
19361
|
-
|
|
19624
|
+
|
|
19362
19625
|
//create sorter arrow
|
|
19363
19626
|
column.titleHolderElement.appendChild(arrowEl);
|
|
19364
|
-
|
|
19627
|
+
|
|
19365
19628
|
column.modules.sort.element = arrowEl;
|
|
19366
|
-
|
|
19629
|
+
|
|
19367
19630
|
this.setColumnHeaderSortIcon(column, "none");
|
|
19368
|
-
|
|
19631
|
+
|
|
19632
|
+
if(this.table.options.headerSortClickElement === "icon"){
|
|
19633
|
+
arrowEl.addEventListener("mousedown", (e) => {
|
|
19634
|
+
e.stopPropagation();
|
|
19635
|
+
});
|
|
19636
|
+
}
|
|
19637
|
+
|
|
19369
19638
|
//sort on click
|
|
19370
19639
|
(this.table.options.headerSortClickElement === "icon" ? arrowEl : colEl).addEventListener("click", (e) => {
|
|
19371
19640
|
var dir = "",
|
|
19372
19641
|
sorters=[],
|
|
19373
19642
|
match = false;
|
|
19374
|
-
|
|
19643
|
+
|
|
19375
19644
|
if(column.modules.sort){
|
|
19376
19645
|
if(column.modules.sort.tristate){
|
|
19377
19646
|
if(column.modules.sort.dir == "none"){
|
|
@@ -19388,26 +19657,26 @@ class Sort extends Module{
|
|
|
19388
19657
|
case "asc":
|
|
19389
19658
|
dir = "desc";
|
|
19390
19659
|
break;
|
|
19391
|
-
|
|
19660
|
+
|
|
19392
19661
|
case "desc":
|
|
19393
19662
|
dir = "asc";
|
|
19394
19663
|
break;
|
|
19395
|
-
|
|
19664
|
+
|
|
19396
19665
|
default:
|
|
19397
19666
|
dir = column.modules.sort.startingDir;
|
|
19398
19667
|
}
|
|
19399
19668
|
}
|
|
19400
|
-
|
|
19669
|
+
|
|
19401
19670
|
if (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {
|
|
19402
19671
|
sorters = this.getSort();
|
|
19403
|
-
|
|
19672
|
+
|
|
19404
19673
|
match = sorters.findIndex((sorter) => {
|
|
19405
19674
|
return sorter.field === column.getField();
|
|
19406
19675
|
});
|
|
19407
|
-
|
|
19676
|
+
|
|
19408
19677
|
if(match > -1){
|
|
19409
19678
|
sorters[match].dir = dir;
|
|
19410
|
-
|
|
19679
|
+
|
|
19411
19680
|
match = sorters.splice(match, 1)[0];
|
|
19412
19681
|
if(dir != "none"){
|
|
19413
19682
|
sorters.push(match);
|
|
@@ -19417,7 +19686,7 @@ class Sort extends Module{
|
|
|
19417
19686
|
sorters.push({column:column, dir:dir});
|
|
19418
19687
|
}
|
|
19419
19688
|
}
|
|
19420
|
-
|
|
19689
|
+
|
|
19421
19690
|
//add to existing sort
|
|
19422
19691
|
this.setSort(sorters);
|
|
19423
19692
|
}else {
|
|
@@ -19427,63 +19696,63 @@ class Sort extends Module{
|
|
|
19427
19696
|
//sort by column only
|
|
19428
19697
|
this.setSort(column, dir);
|
|
19429
19698
|
}
|
|
19430
|
-
|
|
19699
|
+
|
|
19431
19700
|
}
|
|
19432
|
-
|
|
19701
|
+
|
|
19433
19702
|
// this.table.rowManager.sorterRefresh(!this.sortList.length);
|
|
19434
19703
|
this.refreshSort();
|
|
19435
19704
|
}
|
|
19436
19705
|
});
|
|
19437
19706
|
}
|
|
19438
19707
|
}
|
|
19439
|
-
|
|
19708
|
+
|
|
19440
19709
|
refreshSort(){
|
|
19441
19710
|
if(this.table.options.sortMode === "remote"){
|
|
19442
19711
|
this.reloadData(null, false, false);
|
|
19443
19712
|
}else {
|
|
19444
19713
|
this.refreshData(true);
|
|
19445
19714
|
}
|
|
19446
|
-
|
|
19715
|
+
|
|
19447
19716
|
//TODO - Persist left position of row manager
|
|
19448
19717
|
// left = this.scrollLeft;
|
|
19449
19718
|
// this.scrollHorizontal(left);
|
|
19450
19719
|
}
|
|
19451
|
-
|
|
19720
|
+
|
|
19452
19721
|
//check if the sorters have changed since last use
|
|
19453
19722
|
hasChanged(){
|
|
19454
19723
|
var changed = this.changed;
|
|
19455
19724
|
this.changed = false;
|
|
19456
19725
|
return changed;
|
|
19457
19726
|
}
|
|
19458
|
-
|
|
19727
|
+
|
|
19459
19728
|
//return current sorters
|
|
19460
19729
|
getSort(){
|
|
19461
19730
|
var self = this,
|
|
19462
19731
|
sorters = [];
|
|
19463
|
-
|
|
19732
|
+
|
|
19464
19733
|
self.sortList.forEach(function(item){
|
|
19465
19734
|
if(item.column){
|
|
19466
19735
|
sorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});
|
|
19467
19736
|
}
|
|
19468
19737
|
});
|
|
19469
|
-
|
|
19738
|
+
|
|
19470
19739
|
return sorters;
|
|
19471
19740
|
}
|
|
19472
|
-
|
|
19741
|
+
|
|
19473
19742
|
//change sort list and trigger sort
|
|
19474
19743
|
setSort(sortList, dir){
|
|
19475
19744
|
var self = this,
|
|
19476
19745
|
newSortList = [];
|
|
19477
|
-
|
|
19746
|
+
|
|
19478
19747
|
if(!Array.isArray(sortList)){
|
|
19479
19748
|
sortList = [{column: sortList, dir:dir}];
|
|
19480
19749
|
}
|
|
19481
|
-
|
|
19750
|
+
|
|
19482
19751
|
sortList.forEach(function(item){
|
|
19483
19752
|
var column;
|
|
19484
|
-
|
|
19753
|
+
|
|
19485
19754
|
column = self.table.columnManager.findColumn(item.column);
|
|
19486
|
-
|
|
19755
|
+
|
|
19487
19756
|
if(column){
|
|
19488
19757
|
item.column = column;
|
|
19489
19758
|
newSortList.push(item);
|
|
@@ -19491,42 +19760,42 @@ class Sort extends Module{
|
|
|
19491
19760
|
}else {
|
|
19492
19761
|
console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column);
|
|
19493
19762
|
}
|
|
19494
|
-
|
|
19763
|
+
|
|
19495
19764
|
});
|
|
19496
|
-
|
|
19765
|
+
|
|
19497
19766
|
self.sortList = newSortList;
|
|
19498
|
-
|
|
19767
|
+
|
|
19499
19768
|
this.dispatch("sort-changed");
|
|
19500
19769
|
}
|
|
19501
|
-
|
|
19770
|
+
|
|
19502
19771
|
//clear sorters
|
|
19503
19772
|
clear(){
|
|
19504
19773
|
this.setSort([]);
|
|
19505
19774
|
}
|
|
19506
|
-
|
|
19775
|
+
|
|
19507
19776
|
//find appropriate sorter for column
|
|
19508
19777
|
findSorter(column){
|
|
19509
19778
|
var row = this.table.rowManager.activeRows[0],
|
|
19510
19779
|
sorter = "string",
|
|
19511
19780
|
field, value;
|
|
19512
|
-
|
|
19781
|
+
|
|
19513
19782
|
if(row){
|
|
19514
19783
|
row = row.getData();
|
|
19515
19784
|
field = column.getField();
|
|
19516
|
-
|
|
19785
|
+
|
|
19517
19786
|
if(field){
|
|
19518
|
-
|
|
19787
|
+
|
|
19519
19788
|
value = column.getFieldValue(row);
|
|
19520
|
-
|
|
19789
|
+
|
|
19521
19790
|
switch(typeof value){
|
|
19522
19791
|
case "undefined":
|
|
19523
19792
|
sorter = "string";
|
|
19524
19793
|
break;
|
|
19525
|
-
|
|
19794
|
+
|
|
19526
19795
|
case "boolean":
|
|
19527
19796
|
sorter = "boolean";
|
|
19528
19797
|
break;
|
|
19529
|
-
|
|
19798
|
+
|
|
19530
19799
|
default:
|
|
19531
19800
|
if(!isNaN(value) && value !== ""){
|
|
19532
19801
|
sorter = "number";
|
|
@@ -19539,151 +19808,1433 @@ class Sort extends Module{
|
|
|
19539
19808
|
}
|
|
19540
19809
|
}
|
|
19541
19810
|
}
|
|
19542
|
-
|
|
19543
|
-
return Sort.sorters[sorter];
|
|
19811
|
+
|
|
19812
|
+
return Sort.sorters[sorter];
|
|
19813
|
+
}
|
|
19814
|
+
|
|
19815
|
+
//work through sort list sorting data
|
|
19816
|
+
sort(data){
|
|
19817
|
+
var self = this,
|
|
19818
|
+
sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,
|
|
19819
|
+
sortListActual = [],
|
|
19820
|
+
rowComponents = [];
|
|
19821
|
+
|
|
19822
|
+
if(this.subscribedExternal("dataSorting")){
|
|
19823
|
+
this.dispatchExternal("dataSorting", self.getSort());
|
|
19824
|
+
}
|
|
19825
|
+
|
|
19826
|
+
self.clearColumnHeaders();
|
|
19827
|
+
|
|
19828
|
+
if(this.table.options.sortMode !== "remote"){
|
|
19829
|
+
|
|
19830
|
+
//build list of valid sorters and trigger column specific callbacks before sort begins
|
|
19831
|
+
sortList.forEach(function(item, i){
|
|
19832
|
+
var sortObj;
|
|
19833
|
+
|
|
19834
|
+
if(item.column){
|
|
19835
|
+
sortObj = item.column.modules.sort;
|
|
19836
|
+
|
|
19837
|
+
if(sortObj){
|
|
19838
|
+
|
|
19839
|
+
//if no sorter has been defined, take a guess
|
|
19840
|
+
if(!sortObj.sorter){
|
|
19841
|
+
sortObj.sorter = self.findSorter(item.column);
|
|
19842
|
+
}
|
|
19843
|
+
|
|
19844
|
+
item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;
|
|
19845
|
+
|
|
19846
|
+
sortListActual.push(item);
|
|
19847
|
+
}
|
|
19848
|
+
|
|
19849
|
+
self.setColumnHeader(item.column, item.dir);
|
|
19850
|
+
}
|
|
19851
|
+
});
|
|
19852
|
+
|
|
19853
|
+
//sort data
|
|
19854
|
+
if (sortListActual.length) {
|
|
19855
|
+
self._sortItems(data, sortListActual);
|
|
19856
|
+
}
|
|
19857
|
+
|
|
19858
|
+
}else {
|
|
19859
|
+
sortList.forEach(function(item, i){
|
|
19860
|
+
self.setColumnHeader(item.column, item.dir);
|
|
19861
|
+
});
|
|
19862
|
+
}
|
|
19863
|
+
|
|
19864
|
+
if(this.subscribedExternal("dataSorted")){
|
|
19865
|
+
data.forEach((row) => {
|
|
19866
|
+
rowComponents.push(row.getComponent());
|
|
19867
|
+
});
|
|
19868
|
+
|
|
19869
|
+
this.dispatchExternal("dataSorted", self.getSort(), rowComponents);
|
|
19870
|
+
}
|
|
19871
|
+
|
|
19872
|
+
return data;
|
|
19873
|
+
}
|
|
19874
|
+
|
|
19875
|
+
//clear sort arrows on columns
|
|
19876
|
+
clearColumnHeaders(){
|
|
19877
|
+
this.table.columnManager.getRealColumns().forEach((column) => {
|
|
19878
|
+
if(column.modules.sort){
|
|
19879
|
+
column.modules.sort.dir = "none";
|
|
19880
|
+
column.getElement().setAttribute("aria-sort", "none");
|
|
19881
|
+
this.setColumnHeaderSortIcon(column, "none");
|
|
19882
|
+
}
|
|
19883
|
+
});
|
|
19884
|
+
}
|
|
19885
|
+
|
|
19886
|
+
//set the column header sort direction
|
|
19887
|
+
setColumnHeader(column, dir){
|
|
19888
|
+
column.modules.sort.dir = dir;
|
|
19889
|
+
column.getElement().setAttribute("aria-sort", dir === "asc" ? "ascending" : "descending");
|
|
19890
|
+
this.setColumnHeaderSortIcon(column, dir);
|
|
19891
|
+
}
|
|
19892
|
+
|
|
19893
|
+
setColumnHeaderSortIcon(column, dir){
|
|
19894
|
+
var sortEl = column.modules.sort.element,
|
|
19895
|
+
arrowEl;
|
|
19896
|
+
|
|
19897
|
+
if(column.definition.headerSort && typeof this.table.options.headerSortElement === "function"){
|
|
19898
|
+
while(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);
|
|
19899
|
+
|
|
19900
|
+
arrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);
|
|
19901
|
+
|
|
19902
|
+
if(typeof arrowEl === "object"){
|
|
19903
|
+
sortEl.appendChild(arrowEl);
|
|
19904
|
+
}else {
|
|
19905
|
+
sortEl.innerHTML = arrowEl;
|
|
19906
|
+
}
|
|
19907
|
+
}
|
|
19908
|
+
}
|
|
19909
|
+
|
|
19910
|
+
//sort each item in sort list
|
|
19911
|
+
_sortItems(data, sortList){
|
|
19912
|
+
var sorterCount = sortList.length - 1;
|
|
19913
|
+
|
|
19914
|
+
data.sort((a, b) => {
|
|
19915
|
+
var result;
|
|
19916
|
+
|
|
19917
|
+
for(var i = sorterCount; i>= 0; i--){
|
|
19918
|
+
let sortItem = sortList[i];
|
|
19919
|
+
|
|
19920
|
+
result = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
|
|
19921
|
+
|
|
19922
|
+
if(result !== 0){
|
|
19923
|
+
break;
|
|
19924
|
+
}
|
|
19925
|
+
}
|
|
19926
|
+
|
|
19927
|
+
return result;
|
|
19928
|
+
});
|
|
19929
|
+
}
|
|
19930
|
+
|
|
19931
|
+
//process individual rows for a sort function on active data
|
|
19932
|
+
_sortRow(a, b, column, dir, params){
|
|
19933
|
+
var el1Comp, el2Comp;
|
|
19934
|
+
|
|
19935
|
+
//switch elements depending on search direction
|
|
19936
|
+
var el1 = dir == "asc" ? a : b;
|
|
19937
|
+
var el2 = dir == "asc" ? b : a;
|
|
19938
|
+
|
|
19939
|
+
a = column.getFieldValue(el1.getData());
|
|
19940
|
+
b = column.getFieldValue(el2.getData());
|
|
19941
|
+
|
|
19942
|
+
a = typeof a !== "undefined" ? a : "";
|
|
19943
|
+
b = typeof b !== "undefined" ? b : "";
|
|
19944
|
+
|
|
19945
|
+
el1Comp = el1.getComponent();
|
|
19946
|
+
el2Comp = el2.getComponent();
|
|
19947
|
+
|
|
19948
|
+
return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
|
|
19949
|
+
}
|
|
19950
|
+
}
|
|
19951
|
+
|
|
19952
|
+
Sort.moduleName = "sort";
|
|
19953
|
+
|
|
19954
|
+
//load defaults
|
|
19955
|
+
Sort.sorters = defaultSorters;
|
|
19956
|
+
|
|
19957
|
+
class RangeComponent {
|
|
19958
|
+
constructor(range) {
|
|
19959
|
+
this._range = range;
|
|
19960
|
+
|
|
19961
|
+
return new Proxy(this, {
|
|
19962
|
+
get: function (target, name, receiver) {
|
|
19963
|
+
if (typeof target[name] !== "undefined") {
|
|
19964
|
+
return target[name];
|
|
19965
|
+
} else {
|
|
19966
|
+
return target._range.table.componentFunctionBinder.handle("range", target._range, name);
|
|
19967
|
+
}
|
|
19968
|
+
},
|
|
19969
|
+
});
|
|
19970
|
+
}
|
|
19971
|
+
|
|
19972
|
+
getElement() {
|
|
19973
|
+
return this._range.element;
|
|
19974
|
+
}
|
|
19975
|
+
|
|
19976
|
+
getData() {
|
|
19977
|
+
return this._range.getData();
|
|
19978
|
+
}
|
|
19979
|
+
|
|
19980
|
+
getCells() {
|
|
19981
|
+
return this._range.getCells(true);
|
|
19982
|
+
}
|
|
19983
|
+
|
|
19984
|
+
getStructuredCells() {
|
|
19985
|
+
return this._range.getStructuredCells();
|
|
19986
|
+
}
|
|
19987
|
+
|
|
19988
|
+
getRows() {
|
|
19989
|
+
return this._range.getRows().map((row) => row.getComponent());
|
|
19990
|
+
}
|
|
19991
|
+
|
|
19992
|
+
getColumns() {
|
|
19993
|
+
return this._range.getColumns().map((column) => column.getComponent());
|
|
19994
|
+
}
|
|
19995
|
+
|
|
19996
|
+
getBounds() {
|
|
19997
|
+
return this._range.getBounds();
|
|
19998
|
+
}
|
|
19999
|
+
|
|
20000
|
+
getTopEdge() {
|
|
20001
|
+
return this._range.top;
|
|
20002
|
+
}
|
|
20003
|
+
|
|
20004
|
+
getBottomEdge() {
|
|
20005
|
+
return this._range.bottom;
|
|
20006
|
+
}
|
|
20007
|
+
|
|
20008
|
+
getLeftEdge() {
|
|
20009
|
+
return this._range.left;
|
|
20010
|
+
}
|
|
20011
|
+
|
|
20012
|
+
getRightEdge() {
|
|
20013
|
+
return this._range.right;
|
|
20014
|
+
}
|
|
20015
|
+
|
|
20016
|
+
setBounds(start, end){
|
|
20017
|
+
if(this._range.destroyedGuard("setBounds")){
|
|
20018
|
+
this._range.setBounds(start ? start._cell : start, end ? end._cell : end);
|
|
20019
|
+
}
|
|
20020
|
+
}
|
|
20021
|
+
|
|
20022
|
+
setStartBound(start){
|
|
20023
|
+
if(this._range.destroyedGuard("setStartBound")){
|
|
20024
|
+
this._range.setEndBound(start ? start._cell : start);
|
|
20025
|
+
this._range.rangeManager.layoutElement();
|
|
20026
|
+
}
|
|
20027
|
+
}
|
|
20028
|
+
|
|
20029
|
+
setEndBound(end){
|
|
20030
|
+
if(this._range.destroyedGuard("setEndBound")){
|
|
20031
|
+
this._range.setEndBound(end ? end._cell : end);
|
|
20032
|
+
this._range.rangeManager.layoutElement();
|
|
20033
|
+
}
|
|
20034
|
+
}
|
|
20035
|
+
|
|
20036
|
+
clearValues(){
|
|
20037
|
+
if(this._range.destroyedGuard("clearValues")){
|
|
20038
|
+
this._range.clearValues();
|
|
20039
|
+
}
|
|
20040
|
+
}
|
|
20041
|
+
|
|
20042
|
+
remove(){
|
|
20043
|
+
if(this._range.destroyedGuard("remove")){
|
|
20044
|
+
this._range.destroy(true);
|
|
20045
|
+
}
|
|
20046
|
+
}
|
|
20047
|
+
}
|
|
20048
|
+
|
|
20049
|
+
class Range extends CoreFeature{
|
|
20050
|
+
constructor(table, rangeManager, start, end) {
|
|
20051
|
+
super(table);
|
|
20052
|
+
|
|
20053
|
+
this.rangeManager = rangeManager;
|
|
20054
|
+
this.element = null;
|
|
20055
|
+
this.initialized = false;
|
|
20056
|
+
this.initializing = {
|
|
20057
|
+
start:false,
|
|
20058
|
+
end:false,
|
|
20059
|
+
};
|
|
20060
|
+
this.destroyed = false;
|
|
20061
|
+
|
|
20062
|
+
this.top = 0;
|
|
20063
|
+
this.bottom = 0;
|
|
20064
|
+
this.left = 0;
|
|
20065
|
+
this.right = 0;
|
|
20066
|
+
|
|
20067
|
+
this.table = table;
|
|
20068
|
+
this.start = {row:0, col:0};
|
|
20069
|
+
this.end = {row:0, col:0};
|
|
20070
|
+
|
|
20071
|
+
this.initElement();
|
|
20072
|
+
|
|
20073
|
+
setTimeout(() => {
|
|
20074
|
+
this.initBounds(start, end);
|
|
20075
|
+
});
|
|
20076
|
+
}
|
|
20077
|
+
|
|
20078
|
+
initElement(){
|
|
20079
|
+
this.element = document.createElement("div");
|
|
20080
|
+
this.element.classList.add("tabulator-range");
|
|
20081
|
+
}
|
|
20082
|
+
|
|
20083
|
+
initBounds(start, end){
|
|
20084
|
+
this._updateMinMax();
|
|
20085
|
+
|
|
20086
|
+
if(start){
|
|
20087
|
+
this.setBounds(start, end || start);
|
|
20088
|
+
}
|
|
20089
|
+
}
|
|
20090
|
+
|
|
20091
|
+
///////////////////////////////////
|
|
20092
|
+
/////// Boundary Setup ///////
|
|
20093
|
+
///////////////////////////////////
|
|
20094
|
+
|
|
20095
|
+
setStart(row, col) {
|
|
20096
|
+
if(this.start.row !== row || this.start.col !== col){
|
|
20097
|
+
this.start.row = row;
|
|
20098
|
+
this.start.col = col;
|
|
20099
|
+
|
|
20100
|
+
this.initializing.start = true;
|
|
20101
|
+
this._updateMinMax();
|
|
20102
|
+
}
|
|
20103
|
+
}
|
|
20104
|
+
|
|
20105
|
+
setEnd(row, col) {
|
|
20106
|
+
if(this.end.row !== row || this.end.col !== col){
|
|
20107
|
+
this.end.row = row;
|
|
20108
|
+
this.end.col = col;
|
|
20109
|
+
|
|
20110
|
+
this.initializing.end = true;
|
|
20111
|
+
this._updateMinMax();
|
|
20112
|
+
}
|
|
20113
|
+
}
|
|
20114
|
+
|
|
20115
|
+
setBounds(start, end, visibleRows){
|
|
20116
|
+
if(start){
|
|
20117
|
+
this.setStartBound(start);
|
|
20118
|
+
}
|
|
20119
|
+
|
|
20120
|
+
this.setEndBound(end || start);
|
|
20121
|
+
this.rangeManager.layoutElement(visibleRows);
|
|
20122
|
+
}
|
|
20123
|
+
|
|
20124
|
+
setStartBound(element){
|
|
20125
|
+
var row, col;
|
|
20126
|
+
|
|
20127
|
+
if (element.type === "column") {
|
|
20128
|
+
if(this.rangeManager.columnSelection){
|
|
20129
|
+
this.setStart(0, element.getPosition() - 2);
|
|
20130
|
+
}
|
|
20131
|
+
}else {
|
|
20132
|
+
row = element.row.position - 1;
|
|
20133
|
+
col = element.column.getPosition() - 2;
|
|
20134
|
+
|
|
20135
|
+
if (element.column === this.rangeManager.rowHeader) {
|
|
20136
|
+
this.setStart(row, 0);
|
|
20137
|
+
} else {
|
|
20138
|
+
this.setStart(row, col);
|
|
20139
|
+
}
|
|
20140
|
+
}
|
|
20141
|
+
}
|
|
20142
|
+
|
|
20143
|
+
setEndBound(element){
|
|
20144
|
+
var rowsCount = this._getTableRows().length,
|
|
20145
|
+
row, col, isRowHeader;
|
|
20146
|
+
|
|
20147
|
+
if (element.type === "column") {
|
|
20148
|
+
if(this.rangeManager.columnSelection){
|
|
20149
|
+
if (this.rangeManager.selecting === "column") {
|
|
20150
|
+
this.setEnd(rowsCount - 1, element.getPosition() - 2);
|
|
20151
|
+
} else if (this.rangeManager.selecting === "cell") {
|
|
20152
|
+
this.setEnd(0, element.getPosition() - 2);
|
|
20153
|
+
}
|
|
20154
|
+
}
|
|
20155
|
+
}else {
|
|
20156
|
+
row = element.row.position - 1;
|
|
20157
|
+
col = element.column.getPosition() - 2;
|
|
20158
|
+
isRowHeader = element.column === this.rangeManager.rowHeader;
|
|
20159
|
+
|
|
20160
|
+
if (this.rangeManager.selecting === "row") {
|
|
20161
|
+
this.setEnd(row, this._getTableColumns().length - 2);
|
|
20162
|
+
} else if (this.rangeManager.selecting !== "row" && isRowHeader) {
|
|
20163
|
+
this.setEnd(row, 0);
|
|
20164
|
+
} else if (this.rangeManager.selecting === "column") {
|
|
20165
|
+
this.setEnd(rowsCount - 1, col);
|
|
20166
|
+
} else {
|
|
20167
|
+
this.setEnd(row, col);
|
|
20168
|
+
}
|
|
20169
|
+
}
|
|
20170
|
+
}
|
|
20171
|
+
|
|
20172
|
+
_updateMinMax() {
|
|
20173
|
+
this.top = Math.min(this.start.row, this.end.row);
|
|
20174
|
+
this.bottom = Math.max(this.start.row, this.end.row);
|
|
20175
|
+
this.left = Math.min(this.start.col, this.end.col);
|
|
20176
|
+
this.right = Math.max(this.start.col, this.end.col);
|
|
20177
|
+
|
|
20178
|
+
if(this.initialized){
|
|
20179
|
+
this.dispatchExternal("rangeChanged", this.getComponent());
|
|
20180
|
+
}else {
|
|
20181
|
+
if(this.initializing.start && this.initializing.end){
|
|
20182
|
+
this.initialized = true;
|
|
20183
|
+
this.dispatchExternal("rangeAdded", this.getComponent());
|
|
20184
|
+
}
|
|
20185
|
+
}
|
|
20186
|
+
}
|
|
20187
|
+
|
|
20188
|
+
_getTableColumns() {
|
|
20189
|
+
return this.table.columnManager.getVisibleColumnsByIndex();
|
|
20190
|
+
}
|
|
20191
|
+
|
|
20192
|
+
_getTableRows() {
|
|
20193
|
+
return this.table.rowManager.getDisplayRows();
|
|
20194
|
+
}
|
|
20195
|
+
|
|
20196
|
+
///////////////////////////////////
|
|
20197
|
+
/////// Rendering ///////
|
|
20198
|
+
///////////////////////////////////
|
|
20199
|
+
|
|
20200
|
+
layout() {
|
|
20201
|
+
var _vDomTop = this.table.rowManager.renderer.vDomTop,
|
|
20202
|
+
_vDomBottom = this.table.rowManager.renderer.vDomBottom,
|
|
20203
|
+
_vDomLeft = this.table.columnManager.renderer.leftCol,
|
|
20204
|
+
_vDomRight = this.table.columnManager.renderer.rightCol,
|
|
20205
|
+
top, bottom, left, right, topLeftCell, bottomRightCell;
|
|
20206
|
+
|
|
20207
|
+
if (_vDomTop == null) {
|
|
20208
|
+
_vDomTop = 0;
|
|
20209
|
+
}
|
|
20210
|
+
|
|
20211
|
+
if (_vDomBottom == null) {
|
|
20212
|
+
_vDomBottom = Infinity;
|
|
20213
|
+
}
|
|
20214
|
+
|
|
20215
|
+
if (_vDomLeft == null) {
|
|
20216
|
+
_vDomLeft = 0;
|
|
20217
|
+
}
|
|
20218
|
+
|
|
20219
|
+
if (_vDomRight == null) {
|
|
20220
|
+
_vDomRight = Infinity;
|
|
20221
|
+
}
|
|
20222
|
+
|
|
20223
|
+
if (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) {
|
|
20224
|
+
top = Math.max(this.top, _vDomTop);
|
|
20225
|
+
bottom = Math.min(this.bottom, _vDomBottom);
|
|
20226
|
+
left = Math.max(this.left, _vDomLeft);
|
|
20227
|
+
right = Math.min(this.right, _vDomRight);
|
|
20228
|
+
|
|
20229
|
+
topLeftCell = this.rangeManager.getCell(top, left);
|
|
20230
|
+
bottomRightCell = this.rangeManager.getCell(bottom, right);
|
|
20231
|
+
|
|
20232
|
+
this.element.classList.add("tabulator-range-active");
|
|
20233
|
+
// this.element.classList.toggle("tabulator-range-active", this === this.rangeManager.activeRange);
|
|
20234
|
+
|
|
20235
|
+
this.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + "px";
|
|
20236
|
+
this.element.style.top = topLeftCell.row.getElement().offsetTop + "px";
|
|
20237
|
+
this.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + "px";
|
|
20238
|
+
this.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + "px";
|
|
20239
|
+
}
|
|
20240
|
+
}
|
|
20241
|
+
|
|
20242
|
+
atTopLeft(cell) {
|
|
20243
|
+
return cell.row.position - 1 === this.top && cell.column.getPosition() - 2 === this.left;
|
|
20244
|
+
}
|
|
20245
|
+
|
|
20246
|
+
atBottomRight(cell) {
|
|
20247
|
+
return cell.row.position - 1 === this.bottom && cell.column.getPosition() - 2 === this.right;
|
|
20248
|
+
}
|
|
20249
|
+
|
|
20250
|
+
occupies(cell) {
|
|
20251
|
+
return this.occupiesRow(cell.row) && this.occupiesColumn(cell.column);
|
|
20252
|
+
}
|
|
20253
|
+
|
|
20254
|
+
occupiesRow(row) {
|
|
20255
|
+
return this.top <= row.position - 1 && row.position - 1 <= this.bottom;
|
|
20256
|
+
}
|
|
20257
|
+
|
|
20258
|
+
occupiesColumn(col) {
|
|
20259
|
+
return this.left <= col.getPosition() - 2 && col.getPosition() - 2 <= this.right;
|
|
20260
|
+
}
|
|
20261
|
+
|
|
20262
|
+
overlaps(left, top, right, bottom) {
|
|
20263
|
+
if ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){
|
|
20264
|
+
return false;
|
|
20265
|
+
}
|
|
20266
|
+
|
|
20267
|
+
return true;
|
|
20268
|
+
}
|
|
20269
|
+
|
|
20270
|
+
getData() {
|
|
20271
|
+
var data = [],
|
|
20272
|
+
rows = this.getRows(),
|
|
20273
|
+
columns = this.getColumns();
|
|
20274
|
+
|
|
20275
|
+
rows.forEach((row) => {
|
|
20276
|
+
var rowData = row.getData(),
|
|
20277
|
+
result = {};
|
|
20278
|
+
|
|
20279
|
+
columns.forEach((column) => {
|
|
20280
|
+
result[column.field] = rowData[column.field];
|
|
20281
|
+
});
|
|
20282
|
+
|
|
20283
|
+
data.push(result);
|
|
20284
|
+
});
|
|
20285
|
+
|
|
20286
|
+
return data;
|
|
20287
|
+
}
|
|
20288
|
+
|
|
20289
|
+
getCells(structured, component) {
|
|
20290
|
+
var cells = [],
|
|
20291
|
+
rows = this.getRows(),
|
|
20292
|
+
columns = this.getColumns();
|
|
20293
|
+
|
|
20294
|
+
if (structured) {
|
|
20295
|
+
cells = rows.map((row) => {
|
|
20296
|
+
var arr = [];
|
|
20297
|
+
|
|
20298
|
+
row.getCells().forEach((cell) => {
|
|
20299
|
+
if (columns.includes(cell.column)) {
|
|
20300
|
+
arr.push(component ? cell.getComponent() : cell);
|
|
20301
|
+
}
|
|
20302
|
+
});
|
|
20303
|
+
|
|
20304
|
+
return arr;
|
|
20305
|
+
});
|
|
20306
|
+
} else {
|
|
20307
|
+
rows.forEach((row) => {
|
|
20308
|
+
row.getCells().forEach((cell) => {
|
|
20309
|
+
if (columns.includes(cell.column)) {
|
|
20310
|
+
cells.push(component ? cell.getComponent() : cell);
|
|
20311
|
+
}
|
|
20312
|
+
});
|
|
20313
|
+
});
|
|
20314
|
+
}
|
|
20315
|
+
|
|
20316
|
+
return cells;
|
|
20317
|
+
}
|
|
20318
|
+
|
|
20319
|
+
getStructuredCells() {
|
|
20320
|
+
return this.getCells(true, true);
|
|
20321
|
+
}
|
|
20322
|
+
|
|
20323
|
+
getRows() {
|
|
20324
|
+
return this._getTableRows().slice(this.top, this.bottom + 1);
|
|
20325
|
+
}
|
|
20326
|
+
|
|
20327
|
+
getColumns() {
|
|
20328
|
+
return this._getTableColumns().slice(this.left + 1, this.right + 2);
|
|
20329
|
+
}
|
|
20330
|
+
|
|
20331
|
+
clearValues(){
|
|
20332
|
+
var cells = this.getCells();
|
|
20333
|
+
var clearValue = this.table.options.selectableRangeClearCellsValue;
|
|
20334
|
+
|
|
20335
|
+
this.table.blockRedraw();
|
|
20336
|
+
|
|
20337
|
+
cells.forEach((cell) => {
|
|
20338
|
+
cell.setValue(clearValue);
|
|
20339
|
+
});
|
|
20340
|
+
|
|
20341
|
+
this.table.restoreRedraw();
|
|
20342
|
+
|
|
20343
|
+
}
|
|
20344
|
+
|
|
20345
|
+
getBounds(component){
|
|
20346
|
+
var cells = this.getCells(false, component),
|
|
20347
|
+
output = {
|
|
20348
|
+
start:null,
|
|
20349
|
+
end:null,
|
|
20350
|
+
};
|
|
20351
|
+
|
|
20352
|
+
if(cells.length){
|
|
20353
|
+
output.start = cells[0];
|
|
20354
|
+
output.end = cells[cells.length - 1];
|
|
20355
|
+
}else {
|
|
20356
|
+
console.warn("No bounds defined on range");
|
|
20357
|
+
}
|
|
20358
|
+
|
|
20359
|
+
return output;
|
|
20360
|
+
}
|
|
20361
|
+
|
|
20362
|
+
getComponent() {
|
|
20363
|
+
if (!this.component) {
|
|
20364
|
+
this.component = new RangeComponent(this);
|
|
20365
|
+
}
|
|
20366
|
+
return this.component;
|
|
20367
|
+
}
|
|
20368
|
+
|
|
20369
|
+
destroy(notify) {
|
|
20370
|
+
this.destroyed = true;
|
|
20371
|
+
|
|
20372
|
+
this.element.remove();
|
|
20373
|
+
|
|
20374
|
+
if(notify){
|
|
20375
|
+
this.rangeManager.rangeRemoved(this);
|
|
20376
|
+
}
|
|
20377
|
+
|
|
20378
|
+
if(this.initialized){
|
|
20379
|
+
this.dispatchExternal("rangeRemoved", this.getComponent());
|
|
20380
|
+
}
|
|
20381
|
+
}
|
|
20382
|
+
|
|
20383
|
+
destroyedGuard(func){
|
|
20384
|
+
if(this.destroyed){
|
|
20385
|
+
console.warn("You cannot call the " + func + " function on a destroyed range");
|
|
20386
|
+
}
|
|
20387
|
+
|
|
20388
|
+
return !this.destroyed;
|
|
20389
|
+
}
|
|
20390
|
+
}
|
|
20391
|
+
|
|
20392
|
+
class SelectRange extends Module {
|
|
20393
|
+
constructor(table) {
|
|
20394
|
+
super(table);
|
|
20395
|
+
|
|
20396
|
+
this.selecting = "cell";
|
|
20397
|
+
this.mousedown = false;
|
|
20398
|
+
this.ranges = [];
|
|
20399
|
+
this.overlay = null;
|
|
20400
|
+
this.rowHeader = null;
|
|
20401
|
+
this.layoutChangeTimeout = null;
|
|
20402
|
+
this.columnSelection = false;
|
|
20403
|
+
this.rowSelection = false;
|
|
20404
|
+
this.maxRanges = 0;
|
|
20405
|
+
this.activeRange = false;
|
|
20406
|
+
this.blockKeydown = false;
|
|
20407
|
+
|
|
20408
|
+
this.keyDownEvent = this._handleKeyDown.bind(this);
|
|
20409
|
+
this.mouseUpEvent = this._handleMouseUp.bind(this);
|
|
20410
|
+
|
|
20411
|
+
this.registerTableOption("selectableRange", false); //enable selectable range
|
|
20412
|
+
this.registerTableOption("selectableRangeColumns", false); //enable selectable range
|
|
20413
|
+
this.registerTableOption("selectableRangeRows", false); //enable selectable range
|
|
20414
|
+
this.registerTableOption("selectableRangeClearCells", false); //allow clearing of active range
|
|
20415
|
+
this.registerTableOption("selectableRangeClearCellsValue", undefined); //value for cleared active range
|
|
20416
|
+
|
|
20417
|
+
this.registerTableFunction("getRangesData", this.getRangesData.bind(this));
|
|
20418
|
+
this.registerTableFunction("getRanges", this.getRanges.bind(this));
|
|
20419
|
+
this.registerTableFunction("addRange", this.addRangeFromComponent.bind(this));
|
|
20420
|
+
|
|
20421
|
+
this.registerComponentFunction("cell", "getRanges", this.cellGetRanges.bind(this));
|
|
20422
|
+
this.registerComponentFunction("row", "getRanges", this.rowGetRanges.bind(this));
|
|
20423
|
+
this.registerComponentFunction("column", "getRanges", this.colGetRanges.bind(this));
|
|
20424
|
+
}
|
|
20425
|
+
|
|
20426
|
+
///////////////////////////////////
|
|
20427
|
+
/////// Initialization ///////
|
|
20428
|
+
///////////////////////////////////
|
|
20429
|
+
|
|
20430
|
+
initialize() {
|
|
20431
|
+
if (this.options("selectableRange")) {
|
|
20432
|
+
if(!this.options("selectableRows")){
|
|
20433
|
+
|
|
20434
|
+
this.maxRanges = this.options("selectableRange");
|
|
20435
|
+
|
|
20436
|
+
this.initializeTable();
|
|
20437
|
+
this.initializeWatchers();
|
|
20438
|
+
}else {
|
|
20439
|
+
console.warn("SelectRange functionality cannot be used in conjunction with row selection");
|
|
20440
|
+
}
|
|
20441
|
+
}
|
|
20442
|
+
}
|
|
20443
|
+
|
|
20444
|
+
|
|
20445
|
+
initializeTable() {
|
|
20446
|
+
this.overlay = document.createElement("div");
|
|
20447
|
+
this.overlay.classList.add("tabulator-range-overlay");
|
|
20448
|
+
|
|
20449
|
+
this.rangeContainer = document.createElement("div");
|
|
20450
|
+
this.rangeContainer.classList.add("tabulator-range-container");
|
|
20451
|
+
|
|
20452
|
+
this.activeRangeCellElement = document.createElement("div");
|
|
20453
|
+
this.activeRangeCellElement.classList.add("tabulator-range-cell-active");
|
|
20454
|
+
|
|
20455
|
+
this.overlay.appendChild(this.rangeContainer);
|
|
20456
|
+
this.overlay.appendChild(this.activeRangeCellElement);
|
|
20457
|
+
|
|
20458
|
+
this.table.rowManager.element.addEventListener("keydown", this.keyDownEvent);
|
|
20459
|
+
|
|
20460
|
+
this.resetRanges();
|
|
20461
|
+
|
|
20462
|
+
this.table.rowManager.element.appendChild(this.overlay);
|
|
20463
|
+
this.table.columnManager.element.setAttribute("tabindex", 0);
|
|
20464
|
+
this.table.element.classList.add("tabulator-ranges");
|
|
20465
|
+
}
|
|
20466
|
+
|
|
20467
|
+
initializeWatchers() {
|
|
20468
|
+
this.columnSelection = this.options("selectableRangeColumns");
|
|
20469
|
+
this.rowSelection = this.options("selectableRangeRows");
|
|
20470
|
+
|
|
20471
|
+
this.subscribe("column-init", this.initializeColumn.bind(this));
|
|
20472
|
+
this.subscribe("column-mousedown", this.handleColumnMouseDown.bind(this));
|
|
20473
|
+
this.subscribe("column-mousemove", this.handleColumnMouseMove.bind(this));
|
|
20474
|
+
this.subscribe("column-resized", this.handleColumnResized.bind(this));
|
|
20475
|
+
this.subscribe("column-width", this.layoutChange.bind(this));
|
|
20476
|
+
this.subscribe("column-height", this.layoutChange.bind(this));
|
|
20477
|
+
this.subscribe("column-resized", this.layoutChange.bind(this));
|
|
20478
|
+
this.subscribe("columns-loaded", this.updateHeaderColumn.bind(this));
|
|
20479
|
+
|
|
20480
|
+
this.subscribe("cell-height", this.layoutChange.bind(this));
|
|
20481
|
+
this.subscribe("cell-rendered", this.renderCell.bind(this));
|
|
20482
|
+
this.subscribe("cell-mousedown", this.handleCellMouseDown.bind(this));
|
|
20483
|
+
this.subscribe("cell-mousemove", this.handleCellMouseMove.bind(this));
|
|
20484
|
+
this.subscribe("cell-click", this.handleCellClick.bind(this));
|
|
20485
|
+
this.subscribe("cell-editing", this.handleEditingCell.bind(this));
|
|
20486
|
+
|
|
20487
|
+
this.subscribe("page-changed", this.redraw.bind(this));
|
|
20488
|
+
|
|
20489
|
+
this.subscribe("scroll-vertical", this.layoutChange.bind(this));
|
|
20490
|
+
this.subscribe("scroll-horizontal", this.layoutChange.bind(this));
|
|
20491
|
+
|
|
20492
|
+
this.subscribe("data-destroy", this.tableDestroyed.bind(this));
|
|
20493
|
+
this.subscribe("data-processed", this.resetRanges.bind(this));
|
|
20494
|
+
|
|
20495
|
+
this.subscribe("table-layout", this.layoutElement.bind(this));
|
|
20496
|
+
this.subscribe("table-redraw", this.redraw.bind(this));
|
|
20497
|
+
this.subscribe("table-destroy", this.tableDestroyed.bind(this));
|
|
20498
|
+
|
|
20499
|
+
this.subscribe("edit-editor-clear", this.finishEditingCell.bind(this));
|
|
20500
|
+
this.subscribe("edit-blur", this.restoreFocus.bind(this));
|
|
20501
|
+
|
|
20502
|
+
this.subscribe("keybinding-nav-prev", this.keyNavigate.bind(this, "left"));
|
|
20503
|
+
this.subscribe("keybinding-nav-next", this.keyNavigate.bind(this, "right"));
|
|
20504
|
+
this.subscribe("keybinding-nav-left", this.keyNavigate.bind(this, "left"));
|
|
20505
|
+
this.subscribe("keybinding-nav-right", this.keyNavigate.bind(this, "right"));
|
|
20506
|
+
this.subscribe("keybinding-nav-up", this.keyNavigate.bind(this, "up"));
|
|
20507
|
+
this.subscribe("keybinding-nav-down", this.keyNavigate.bind(this, "down"));
|
|
20508
|
+
this.subscribe("keybinding-nav-range", this.keyNavigateRange.bind(this));
|
|
20509
|
+
}
|
|
20510
|
+
|
|
20511
|
+
|
|
20512
|
+
initializeColumn(column) {
|
|
20513
|
+
if(this.columnSelection && column.definition.headerSort && this.options("headerSortClickElement") !== "icon"){
|
|
20514
|
+
console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior");
|
|
20515
|
+
}
|
|
20516
|
+
|
|
20517
|
+
if (column.modules.edit) ;
|
|
20518
|
+
}
|
|
20519
|
+
|
|
20520
|
+
updateHeaderColumn(){
|
|
20521
|
+
if(this.rowSelection){
|
|
20522
|
+
this.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0];
|
|
20523
|
+
|
|
20524
|
+
if(this.rowHeader){
|
|
20525
|
+
this.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + " tabulator-range-row-header";
|
|
20526
|
+
|
|
20527
|
+
if(this.rowHeader.definition.headerSort){
|
|
20528
|
+
console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior");
|
|
20529
|
+
}
|
|
20530
|
+
|
|
20531
|
+
if(this.rowHeader.definition.editor){
|
|
20532
|
+
console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior");
|
|
20533
|
+
}
|
|
20534
|
+
}
|
|
20535
|
+
}
|
|
20536
|
+
}
|
|
20537
|
+
|
|
20538
|
+
///////////////////////////////////
|
|
20539
|
+
/////// Table Functions ///////
|
|
20540
|
+
///////////////////////////////////
|
|
20541
|
+
|
|
20542
|
+
getRanges(){
|
|
20543
|
+
return this.ranges.map((range) => range.getComponent());
|
|
20544
|
+
}
|
|
20545
|
+
|
|
20546
|
+
getRangesData() {
|
|
20547
|
+
return this.ranges.map((range) => range.getData());
|
|
20548
|
+
}
|
|
20549
|
+
|
|
20550
|
+
addRangeFromComponent(start, end){
|
|
20551
|
+
start = start ? start._cell : null;
|
|
20552
|
+
end = end ? end._cell : null;
|
|
20553
|
+
|
|
20554
|
+
return this.addRange(start, end);
|
|
20555
|
+
}
|
|
20556
|
+
|
|
20557
|
+
///////////////////////////////////
|
|
20558
|
+
/////// Component Functions ///////
|
|
20559
|
+
///////////////////////////////////
|
|
20560
|
+
|
|
20561
|
+
cellGetRanges(cell){
|
|
20562
|
+
var ranges = [];
|
|
20563
|
+
|
|
20564
|
+
if (cell.column === this.rowHeader) {
|
|
20565
|
+
ranges = this.ranges.filter((range) => range.occupiesRow(cell.row));
|
|
20566
|
+
} else {
|
|
20567
|
+
ranges = this.ranges.filter((range) => range.occupies(cell));
|
|
20568
|
+
}
|
|
20569
|
+
|
|
20570
|
+
return ranges.map((range) => range.getComponent());
|
|
20571
|
+
}
|
|
20572
|
+
|
|
20573
|
+
rowGetRanges(row){
|
|
20574
|
+
var ranges = this.ranges.filter((range) => range.occupiesRow(row));
|
|
20575
|
+
|
|
20576
|
+
return ranges.map((range) => range.getComponent());
|
|
20577
|
+
}
|
|
20578
|
+
|
|
20579
|
+
colGetRanges(col){
|
|
20580
|
+
var ranges = this.ranges.filter((range) => range.occupiesColumn(col));
|
|
20581
|
+
|
|
20582
|
+
return ranges.map((range) => range.getComponent());
|
|
20583
|
+
}
|
|
20584
|
+
|
|
20585
|
+
///////////////////////////////////
|
|
20586
|
+
////////// Event Handlers /////////
|
|
20587
|
+
///////////////////////////////////
|
|
20588
|
+
|
|
20589
|
+
_handleMouseUp(e){
|
|
20590
|
+
this.mousedown = false;
|
|
20591
|
+
document.removeEventListener("mouseup", this.mouseUpEvent);
|
|
20592
|
+
}
|
|
20593
|
+
|
|
20594
|
+
_handleKeyDown(e) {
|
|
20595
|
+
if (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) {
|
|
20596
|
+
if (e.key === "Enter") {
|
|
20597
|
+
// is editing a cell?
|
|
20598
|
+
if (this.table.modules.edit && this.table.modules.edit.currentCell) {
|
|
20599
|
+
return;
|
|
20600
|
+
}
|
|
20601
|
+
|
|
20602
|
+
this.table.modules.edit.editCell(this.getActiveCell());
|
|
20603
|
+
|
|
20604
|
+
e.preventDefault();
|
|
20605
|
+
}
|
|
20606
|
+
|
|
20607
|
+
if ((e.key === "Backspace" || e.key === "Delete") && this.options("selectableRangeClearCells")) {
|
|
20608
|
+
if(this.activeRange){
|
|
20609
|
+
this.activeRange.clearValues();
|
|
20610
|
+
}
|
|
20611
|
+
}
|
|
20612
|
+
}
|
|
20613
|
+
}
|
|
20614
|
+
|
|
20615
|
+
initializeFocus(cell){
|
|
20616
|
+
var range;
|
|
20617
|
+
|
|
20618
|
+
try{
|
|
20619
|
+
if (document.selection) { // IE
|
|
20620
|
+
range = document.body.createTextRange();
|
|
20621
|
+
range.moveToElementText(cell.getElement());
|
|
20622
|
+
range.select();
|
|
20623
|
+
} else if (window.getSelection) {
|
|
20624
|
+
range = document.createRange();
|
|
20625
|
+
range.selectNode(cell.getElement());
|
|
20626
|
+
window.getSelection().removeAllRanges();
|
|
20627
|
+
window.getSelection().addRange(range);
|
|
20628
|
+
}
|
|
20629
|
+
}catch(e){}
|
|
20630
|
+
}
|
|
20631
|
+
|
|
20632
|
+
restoreFocus(element){
|
|
20633
|
+
this.table.rowManager.element.focus();
|
|
20634
|
+
|
|
20635
|
+
return true;
|
|
20636
|
+
}
|
|
20637
|
+
|
|
20638
|
+
///////////////////////////////////
|
|
20639
|
+
////// Column Functionality ///////
|
|
20640
|
+
///////////////////////////////////
|
|
20641
|
+
|
|
20642
|
+
handleColumnResized(column) {
|
|
20643
|
+
var selected;
|
|
20644
|
+
|
|
20645
|
+
if (this.selecting !== "column" && this.selecting !== "all") {
|
|
20646
|
+
return;
|
|
20647
|
+
}
|
|
20648
|
+
|
|
20649
|
+
selected = this.ranges.some((range) => range.occupiesColumn(column));
|
|
20650
|
+
|
|
20651
|
+
if (!selected) {
|
|
20652
|
+
return;
|
|
20653
|
+
}
|
|
20654
|
+
|
|
20655
|
+
this.ranges.forEach((range) => {
|
|
20656
|
+
var selectedColumns = range.getColumns(true);
|
|
20657
|
+
|
|
20658
|
+
selectedColumns.forEach((selectedColumn) => {
|
|
20659
|
+
if (selectedColumn !== column) {
|
|
20660
|
+
selectedColumn.setWidth(column.width);
|
|
20661
|
+
}
|
|
20662
|
+
});
|
|
20663
|
+
});
|
|
20664
|
+
}
|
|
20665
|
+
|
|
20666
|
+
handleColumnMouseDown(event, column) {
|
|
20667
|
+
if (event.button === 2 && (this.selecting === "column" || this.selecting === "all") && this.activeRange.occupiesColumn(column)) {
|
|
20668
|
+
return;
|
|
20669
|
+
}
|
|
20670
|
+
|
|
20671
|
+
this.mousedown = true;
|
|
20672
|
+
|
|
20673
|
+
document.addEventListener("mouseup", this.mouseUpEvent);
|
|
20674
|
+
|
|
20675
|
+
this.newSelection(event, column);
|
|
20676
|
+
}
|
|
20677
|
+
|
|
20678
|
+
handleColumnMouseMove(e, column) {
|
|
20679
|
+
if (column === this.rowHeader || !this.mousedown || this.selecting === 'all') {
|
|
20680
|
+
return;
|
|
20681
|
+
}
|
|
20682
|
+
|
|
20683
|
+
this.activeRange.setBounds(false, column, true);
|
|
20684
|
+
}
|
|
20685
|
+
|
|
20686
|
+
///////////////////////////////////
|
|
20687
|
+
//////// Cell Functionality ///////
|
|
20688
|
+
///////////////////////////////////
|
|
20689
|
+
|
|
20690
|
+
renderCell(cell) {
|
|
20691
|
+
var el = cell.getElement(),
|
|
20692
|
+
rangeIdx = this.ranges.findIndex((range) => range.occupies(cell));
|
|
20693
|
+
|
|
20694
|
+
el.classList.toggle("tabulator-range-selected", rangeIdx !== -1);
|
|
20695
|
+
el.classList.toggle("tabulator-range-only-cell-selected", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) && this.ranges[0].atBottomRight(cell));
|
|
20696
|
+
|
|
20697
|
+
el.dataset.range = rangeIdx;
|
|
20698
|
+
}
|
|
20699
|
+
|
|
20700
|
+
handleCellMouseDown(event, cell) {
|
|
20701
|
+
if (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === "row" || this.selecting === "all") && this.activeRange.occupiesRow(cell.row)))) {
|
|
20702
|
+
return;
|
|
20703
|
+
}
|
|
20704
|
+
|
|
20705
|
+
this.mousedown = true;
|
|
20706
|
+
|
|
20707
|
+
document.addEventListener("mouseup", this.mouseUpEvent);
|
|
20708
|
+
|
|
20709
|
+
this.newSelection(event, cell);
|
|
20710
|
+
}
|
|
20711
|
+
|
|
20712
|
+
handleCellMouseMove(e, cell) {
|
|
20713
|
+
if (!this.mousedown || this.selecting === "all") {
|
|
20714
|
+
return;
|
|
20715
|
+
}
|
|
20716
|
+
|
|
20717
|
+
this.activeRange.setBounds(false, cell, true);
|
|
20718
|
+
}
|
|
20719
|
+
|
|
20720
|
+
handleCellClick(e, cell){
|
|
20721
|
+
this.initializeFocus(cell);
|
|
20722
|
+
}
|
|
20723
|
+
|
|
20724
|
+
handleEditingCell(cell) {
|
|
20725
|
+
if(this.activeRange){
|
|
20726
|
+
this.activeRange.setBounds(cell);
|
|
20727
|
+
}
|
|
20728
|
+
}
|
|
20729
|
+
|
|
20730
|
+
finishEditingCell() {
|
|
20731
|
+
this.blockKeydown = true;
|
|
20732
|
+
this.table.rowManager.element.focus();
|
|
20733
|
+
|
|
20734
|
+
setTimeout(() => {
|
|
20735
|
+
this.blockKeydown = false;
|
|
20736
|
+
}, 10);
|
|
20737
|
+
}
|
|
20738
|
+
|
|
20739
|
+
///////////////////////////////////
|
|
20740
|
+
/////// Navigation ///////
|
|
20741
|
+
///////////////////////////////////
|
|
20742
|
+
|
|
20743
|
+
keyNavigate(dir, e){
|
|
20744
|
+
if(this.navigate(false, false, dir)){
|
|
20745
|
+
e.preventDefault();
|
|
20746
|
+
}
|
|
20747
|
+
}
|
|
20748
|
+
|
|
20749
|
+
keyNavigateRange(e, dir, jump, expand){
|
|
20750
|
+
if(this.navigate(jump, expand, dir)){
|
|
20751
|
+
e.preventDefault();
|
|
20752
|
+
}
|
|
20753
|
+
}
|
|
20754
|
+
|
|
20755
|
+
navigate(jump, expand, dir) {
|
|
20756
|
+
var moved = false,
|
|
20757
|
+
range, rangeEdge, nextRow, nextCol, row, column;
|
|
20758
|
+
|
|
20759
|
+
// Don't navigate while editing
|
|
20760
|
+
if (this.table.modules.edit && this.table.modules.edit.currentCell) {
|
|
20761
|
+
return false;
|
|
20762
|
+
}
|
|
20763
|
+
|
|
20764
|
+
// If there are more than 1 range, use the active range and destroy the others
|
|
20765
|
+
if (this.ranges.length > 1) {
|
|
20766
|
+
this.ranges = this.ranges.filter((range) => {
|
|
20767
|
+
if (range === this.activeRange) {
|
|
20768
|
+
range.setEnd(range.start.row, range.start.col);
|
|
20769
|
+
return true;
|
|
20770
|
+
}
|
|
20771
|
+
range.destroy();
|
|
20772
|
+
return false;
|
|
20773
|
+
});
|
|
20774
|
+
}
|
|
20775
|
+
|
|
20776
|
+
range = this.activeRange;
|
|
20777
|
+
|
|
20778
|
+
rangeEdge = expand ? range.end : range.start;
|
|
20779
|
+
nextRow = rangeEdge.row;
|
|
20780
|
+
nextCol = rangeEdge.col;
|
|
20781
|
+
|
|
20782
|
+
if(jump){
|
|
20783
|
+
switch(dir){
|
|
20784
|
+
case "left":
|
|
20785
|
+
nextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col);
|
|
20786
|
+
break;
|
|
20787
|
+
case "right":
|
|
20788
|
+
nextCol = this.findJumpCellRight(range.start.row, rangeEdge.col);
|
|
20789
|
+
break;
|
|
20790
|
+
case "up":
|
|
20791
|
+
nextRow = this.findJumpCellUp(rangeEdge.row, range.start.col);
|
|
20792
|
+
break;
|
|
20793
|
+
case "down":
|
|
20794
|
+
nextRow = this.findJumpCellDown(rangeEdge.row, range.start.col);
|
|
20795
|
+
break;
|
|
20796
|
+
}
|
|
20797
|
+
}else {
|
|
20798
|
+
if(expand){
|
|
20799
|
+
if ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) {
|
|
20800
|
+
return;
|
|
20801
|
+
}
|
|
20802
|
+
}
|
|
20803
|
+
|
|
20804
|
+
switch(dir){
|
|
20805
|
+
case "left":
|
|
20806
|
+
nextCol = Math.max(nextCol - 1, 0);
|
|
20807
|
+
break;
|
|
20808
|
+
case "right":
|
|
20809
|
+
nextCol = Math.min(nextCol + 1, this.getTableColumns().length - 2);
|
|
20810
|
+
break;
|
|
20811
|
+
case "up":
|
|
20812
|
+
nextRow = Math.max(nextRow - 1, 0);
|
|
20813
|
+
break;
|
|
20814
|
+
case "down":
|
|
20815
|
+
nextRow = Math.min(nextRow + 1, this.getTableRows().length - 1);
|
|
20816
|
+
break;
|
|
20817
|
+
}
|
|
20818
|
+
}
|
|
20819
|
+
|
|
20820
|
+
moved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row;
|
|
20821
|
+
|
|
20822
|
+
if(!expand){
|
|
20823
|
+
range.setStart(nextRow, nextCol);
|
|
20824
|
+
}
|
|
20825
|
+
|
|
20826
|
+
range.setEnd(nextRow, nextCol);
|
|
20827
|
+
|
|
20828
|
+
if(!expand){
|
|
20829
|
+
this.selecting = "cell";
|
|
20830
|
+
}
|
|
20831
|
+
|
|
20832
|
+
if (moved) {
|
|
20833
|
+
row = this.getRowByRangePos(range.end.row);
|
|
20834
|
+
column = this.getColumnByRangePos(range.end.col);
|
|
20835
|
+
|
|
20836
|
+
if ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) {
|
|
20837
|
+
column.getComponent().scrollTo(undefined, false);
|
|
20838
|
+
} else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) {
|
|
20839
|
+
row.getComponent().scrollTo(undefined, false);
|
|
20840
|
+
} else {
|
|
20841
|
+
// Use faster autoScroll when the elements are on the DOM
|
|
20842
|
+
this.autoScroll(range, row.getElement(), column.getElement());
|
|
20843
|
+
}
|
|
20844
|
+
|
|
20845
|
+
this.layoutElement();
|
|
20846
|
+
|
|
20847
|
+
return true;
|
|
20848
|
+
}
|
|
20849
|
+
}
|
|
20850
|
+
|
|
20851
|
+
rangeRemoved(removed){
|
|
20852
|
+
this.ranges = this.ranges.filter((range) => range !== removed);
|
|
20853
|
+
|
|
20854
|
+
if(this.activeRange === removed){
|
|
20855
|
+
if(this.ranges.length){
|
|
20856
|
+
this.activeRange = this.ranges[this.ranges.length - 1];
|
|
20857
|
+
}else {
|
|
20858
|
+
this.addRange();
|
|
20859
|
+
}
|
|
20860
|
+
}
|
|
20861
|
+
|
|
20862
|
+
this.layoutElement();
|
|
20863
|
+
}
|
|
20864
|
+
|
|
20865
|
+
findJumpCell(cells, reverse, emptyStart, emptySide){
|
|
20866
|
+
var nextCell;
|
|
20867
|
+
|
|
20868
|
+
if(reverse){
|
|
20869
|
+
cells = cells.reverse();
|
|
20870
|
+
}
|
|
20871
|
+
|
|
20872
|
+
for(let currentCell of cells){
|
|
20873
|
+
let currentValue = currentCell.getValue();
|
|
20874
|
+
|
|
20875
|
+
if(emptyStart){
|
|
20876
|
+
nextCell = currentCell;
|
|
20877
|
+
if(currentValue){
|
|
20878
|
+
break;
|
|
20879
|
+
}
|
|
20880
|
+
}else {
|
|
20881
|
+
if(emptySide){
|
|
20882
|
+
nextCell = currentCell;
|
|
20883
|
+
|
|
20884
|
+
if(currentValue){
|
|
20885
|
+
break;
|
|
20886
|
+
}
|
|
20887
|
+
}else {
|
|
20888
|
+
if(currentValue){
|
|
20889
|
+
nextCell = currentCell;
|
|
20890
|
+
}else {
|
|
20891
|
+
break;
|
|
20892
|
+
}
|
|
20893
|
+
}
|
|
20894
|
+
}
|
|
20895
|
+
}
|
|
20896
|
+
|
|
20897
|
+
return nextCell;
|
|
20898
|
+
}
|
|
20899
|
+
|
|
20900
|
+
findJumpCellLeft(rowPos, colPos){
|
|
20901
|
+
var row = this.getRowByRangePos(rowPos),
|
|
20902
|
+
cells = row.cells.filter((cell) => cell.column.visible),
|
|
20903
|
+
isStartingCellEmpty = !cells[colPos + 1].getValue(),
|
|
20904
|
+
isLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false,
|
|
20905
|
+
jumpCol = colPos,
|
|
20906
|
+
nextCell = this.findJumpCell(cells.slice(0, colPos), true, isStartingCellEmpty, isLeftOfStartingCellEmpty);
|
|
20907
|
+
|
|
20908
|
+
if(nextCell){
|
|
20909
|
+
jumpCol = nextCell.column.getPosition() - 2;
|
|
20910
|
+
}
|
|
20911
|
+
|
|
20912
|
+
return jumpCol;
|
|
20913
|
+
}
|
|
20914
|
+
|
|
20915
|
+
findJumpCellRight(rowPos, colPos){
|
|
20916
|
+
var row = this.getRowByRangePos(rowPos),
|
|
20917
|
+
cells = row.cells.filter((cell) => cell.column.visible),
|
|
20918
|
+
isStartingCellEmpty = !cells[colPos + 1].getValue(),
|
|
20919
|
+
isRightOfStartingCellEmpty = cells[colPos + 2] ? !cells[colPos + 2].getValue() : false,
|
|
20920
|
+
jumpCol = colPos,
|
|
20921
|
+
nextCell = this.findJumpCell(cells.slice(colPos + 2, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);
|
|
20922
|
+
|
|
20923
|
+
if(nextCell){
|
|
20924
|
+
jumpCol = nextCell.column.getPosition() - 2;
|
|
20925
|
+
}
|
|
20926
|
+
|
|
20927
|
+
return jumpCol;
|
|
20928
|
+
}
|
|
20929
|
+
|
|
20930
|
+
findJumpCellUp(rowPos, colPos) {
|
|
20931
|
+
var column = this.getColumnByRangePos(colPos),
|
|
20932
|
+
cells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),
|
|
20933
|
+
isStartingCellEmpty = !cells[rowPos].getValue(),
|
|
20934
|
+
isTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false,
|
|
20935
|
+
jumpRow = rowPos,
|
|
20936
|
+
nextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty);
|
|
20937
|
+
|
|
20938
|
+
if(nextCell){
|
|
20939
|
+
jumpRow = nextCell.row.position - 1;
|
|
20940
|
+
}
|
|
20941
|
+
|
|
20942
|
+
return jumpRow;
|
|
20943
|
+
}
|
|
20944
|
+
|
|
20945
|
+
findJumpCellDown(rowPos, colPos) {
|
|
20946
|
+
var column = this.getColumnByRangePos(colPos),
|
|
20947
|
+
cells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),
|
|
20948
|
+
isStartingCellEmpty = !cells[rowPos].getValue(),
|
|
20949
|
+
isBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false,
|
|
20950
|
+
jumpRow = rowPos,
|
|
20951
|
+
nextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty);
|
|
20952
|
+
|
|
20953
|
+
if(nextCell){
|
|
20954
|
+
jumpRow = nextCell.row.position - 1;
|
|
20955
|
+
}
|
|
20956
|
+
|
|
20957
|
+
return jumpRow;
|
|
20958
|
+
}
|
|
20959
|
+
|
|
20960
|
+
///////////////////////////////////
|
|
20961
|
+
/////// Selection ///////
|
|
20962
|
+
///////////////////////////////////
|
|
20963
|
+
newSelection(event, element) {
|
|
20964
|
+
var range;
|
|
20965
|
+
|
|
20966
|
+
if (element.type === "column") {
|
|
20967
|
+
if(!this.columnSelection){
|
|
20968
|
+
return;
|
|
20969
|
+
}
|
|
20970
|
+
|
|
20971
|
+
if (element === this.rowHeader) {
|
|
20972
|
+
range = this.resetRanges();
|
|
20973
|
+
this.selecting = "all";
|
|
20974
|
+
|
|
20975
|
+
const topLeftCell = this.getCell(0, 0);
|
|
20976
|
+
const bottomRightCell = this.getCell(-1, -1);
|
|
20977
|
+
|
|
20978
|
+
range.setBounds(topLeftCell, bottomRightCell);
|
|
20979
|
+
return;
|
|
20980
|
+
} else {
|
|
20981
|
+
this.selecting = "column";
|
|
20982
|
+
}
|
|
20983
|
+
} else if (element.column === this.rowHeader) {
|
|
20984
|
+
this.selecting = "row";
|
|
20985
|
+
} else {
|
|
20986
|
+
this.selecting = "cell";
|
|
20987
|
+
}
|
|
20988
|
+
|
|
20989
|
+
if (event.shiftKey) {
|
|
20990
|
+
this.activeRange.setBounds(false, element);
|
|
20991
|
+
} else if (event.ctrlKey) {
|
|
20992
|
+
this.addRange().setBounds(element);
|
|
20993
|
+
} else {
|
|
20994
|
+
this.resetRanges().setBounds(element);
|
|
20995
|
+
}
|
|
19544
20996
|
}
|
|
19545
|
-
|
|
19546
|
-
|
|
19547
|
-
|
|
19548
|
-
|
|
19549
|
-
|
|
19550
|
-
|
|
19551
|
-
|
|
19552
|
-
|
|
19553
|
-
if(this.subscribedExternal("dataSorting")){
|
|
19554
|
-
this.dispatchExternal("dataSorting", self.getSort());
|
|
20997
|
+
|
|
20998
|
+
autoScroll(range, row, column) {
|
|
20999
|
+
var tableHolder = this.table.rowManager.element,
|
|
21000
|
+
rowHeader = this.rowHeader.getElement(),
|
|
21001
|
+
rect, view, withinHorizontalView, withinVerticalView;
|
|
21002
|
+
|
|
21003
|
+
if (typeof row === 'undefined') {
|
|
21004
|
+
row = this.getRowByRangePos(range.end.row).getElement();
|
|
19555
21005
|
}
|
|
19556
|
-
|
|
19557
|
-
|
|
19558
|
-
|
|
19559
|
-
|
|
19560
|
-
|
|
19561
|
-
|
|
19562
|
-
|
|
19563
|
-
|
|
19564
|
-
|
|
19565
|
-
|
|
19566
|
-
|
|
19567
|
-
|
|
19568
|
-
|
|
19569
|
-
|
|
19570
|
-
|
|
19571
|
-
|
|
19572
|
-
|
|
19573
|
-
|
|
19574
|
-
|
|
19575
|
-
|
|
19576
|
-
|
|
19577
|
-
|
|
19578
|
-
|
|
19579
|
-
|
|
19580
|
-
|
|
19581
|
-
|
|
19582
|
-
})
|
|
19583
|
-
|
|
19584
|
-
//sort data
|
|
19585
|
-
if (sortListActual.length) {
|
|
19586
|
-
self._sortItems(data, sortListActual);
|
|
21006
|
+
|
|
21007
|
+
if (typeof column === 'undefined') {
|
|
21008
|
+
column = this.getColumnByRangePos(range.end.col).getElement();
|
|
21009
|
+
}
|
|
21010
|
+
|
|
21011
|
+
rect = {
|
|
21012
|
+
left: column.offsetLeft,
|
|
21013
|
+
right: column.offsetLeft + column.offsetWidth,
|
|
21014
|
+
top: row.offsetTop,
|
|
21015
|
+
bottom: row.offsetTop + row.offsetHeight,
|
|
21016
|
+
};
|
|
21017
|
+
|
|
21018
|
+
view = {
|
|
21019
|
+
left: tableHolder.scrollLeft + rowHeader.offsetWidth,
|
|
21020
|
+
right: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth),
|
|
21021
|
+
top: tableHolder.scrollTop,
|
|
21022
|
+
bottom: tableHolder.scrollTop + tableHolder.offsetHeight - this.table.rowManager.scrollbarWidth,
|
|
21023
|
+
};
|
|
21024
|
+
|
|
21025
|
+
withinHorizontalView = view.left < rect.left && rect.left < view.right && view.left < rect.right && rect.right < view.right;
|
|
21026
|
+
|
|
21027
|
+
withinVerticalView = view.top < rect.top && rect.top < view.bottom && view.top < rect.bottom && rect.bottom < view.bottom;
|
|
21028
|
+
|
|
21029
|
+
if (!withinHorizontalView) {
|
|
21030
|
+
if (rect.left < view.left) {
|
|
21031
|
+
tableHolder.scrollLeft = rect.left - rowHeader.offsetWidth;
|
|
21032
|
+
} else if (rect.right > view.right) {
|
|
21033
|
+
tableHolder.scrollLeft = rect.right - tableHolder.clientWidth;
|
|
19587
21034
|
}
|
|
19588
|
-
|
|
19589
|
-
}else {
|
|
19590
|
-
sortList.forEach(function(item, i){
|
|
19591
|
-
self.setColumnHeader(item.column, item.dir);
|
|
19592
|
-
});
|
|
19593
21035
|
}
|
|
19594
|
-
|
|
19595
|
-
if(
|
|
19596
|
-
|
|
19597
|
-
|
|
19598
|
-
})
|
|
19599
|
-
|
|
19600
|
-
|
|
21036
|
+
|
|
21037
|
+
if (!withinVerticalView) {
|
|
21038
|
+
if (rect.top < view.top) {
|
|
21039
|
+
tableHolder.scrollTop = rect.top;
|
|
21040
|
+
} else if (rect.bottom > view.bottom) {
|
|
21041
|
+
tableHolder.scrollTop = rect.bottom - tableHolder.clientHeight;
|
|
21042
|
+
}
|
|
19601
21043
|
}
|
|
19602
|
-
|
|
19603
|
-
return data;
|
|
19604
21044
|
}
|
|
19605
|
-
|
|
19606
|
-
|
|
19607
|
-
|
|
19608
|
-
|
|
19609
|
-
|
|
19610
|
-
|
|
19611
|
-
|
|
19612
|
-
|
|
21045
|
+
|
|
21046
|
+
|
|
21047
|
+
///////////////////////////////////
|
|
21048
|
+
/////// Layout ///////
|
|
21049
|
+
///////////////////////////////////
|
|
21050
|
+
|
|
21051
|
+
layoutChange(){
|
|
21052
|
+
this.overlay.style.visibility = "hidden";
|
|
21053
|
+
clearTimeout(this.layoutChangeTimeout);
|
|
21054
|
+
this.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200);
|
|
21055
|
+
}
|
|
21056
|
+
|
|
21057
|
+
redraw(force) {
|
|
21058
|
+
if (force) {
|
|
21059
|
+
this.selecting = 'cell';
|
|
21060
|
+
this.resetRanges();
|
|
21061
|
+
this.layoutElement();
|
|
21062
|
+
}
|
|
21063
|
+
}
|
|
21064
|
+
|
|
21065
|
+
layoutElement(visibleRows) {
|
|
21066
|
+
var rows;
|
|
21067
|
+
|
|
21068
|
+
if (visibleRows) {
|
|
21069
|
+
rows = this.table.rowManager.getVisibleRows(true);
|
|
21070
|
+
} else {
|
|
21071
|
+
rows = this.table.rowManager.getRows();
|
|
21072
|
+
}
|
|
21073
|
+
|
|
21074
|
+
rows.forEach((row) => {
|
|
21075
|
+
if (row.type === "row") {
|
|
21076
|
+
this.layoutRow(row);
|
|
21077
|
+
row.cells.forEach((cell) => this.renderCell(cell));
|
|
19613
21078
|
}
|
|
19614
21079
|
});
|
|
21080
|
+
|
|
21081
|
+
this.getTableColumns().forEach((column) => {
|
|
21082
|
+
this.layoutColumn(column);
|
|
21083
|
+
});
|
|
21084
|
+
|
|
21085
|
+
this.layoutRanges();
|
|
19615
21086
|
}
|
|
19616
|
-
|
|
19617
|
-
|
|
19618
|
-
|
|
19619
|
-
|
|
19620
|
-
|
|
19621
|
-
|
|
21087
|
+
|
|
21088
|
+
layoutRow(row) {
|
|
21089
|
+
var el = row.getElement(),
|
|
21090
|
+
selected = false,
|
|
21091
|
+
occupied = this.ranges.some((range) => range.occupiesRow(row));
|
|
21092
|
+
|
|
21093
|
+
if (this.selecting === "row") {
|
|
21094
|
+
selected = occupied;
|
|
21095
|
+
} else if (this.selecting === "all") {
|
|
21096
|
+
selected = true;
|
|
21097
|
+
}
|
|
21098
|
+
|
|
21099
|
+
el.classList.toggle("tabulator-range-selected", selected);
|
|
21100
|
+
el.classList.toggle("tabulator-range-highlight", occupied);
|
|
19622
21101
|
}
|
|
19623
|
-
|
|
19624
|
-
|
|
19625
|
-
var
|
|
19626
|
-
|
|
19627
|
-
|
|
19628
|
-
|
|
19629
|
-
|
|
19630
|
-
|
|
19631
|
-
|
|
21102
|
+
|
|
21103
|
+
layoutColumn(column) {
|
|
21104
|
+
var el = column.getElement(),
|
|
21105
|
+
selected = false,
|
|
21106
|
+
occupied = this.ranges.some((range) => range.occupiesColumn(column));
|
|
21107
|
+
|
|
21108
|
+
if (this.selecting === "column") {
|
|
21109
|
+
selected = occupied;
|
|
21110
|
+
} else if (this.selecting === "all") {
|
|
21111
|
+
selected = true;
|
|
21112
|
+
}
|
|
21113
|
+
|
|
21114
|
+
el.classList.toggle("tabulator-range-selected", selected);
|
|
21115
|
+
el.classList.toggle("tabulator-range-highlight", occupied);
|
|
21116
|
+
}
|
|
21117
|
+
|
|
21118
|
+
layoutRanges() {
|
|
21119
|
+
var activeCell;
|
|
21120
|
+
|
|
21121
|
+
if (!this.table.initialized) {
|
|
21122
|
+
return;
|
|
21123
|
+
}
|
|
21124
|
+
|
|
21125
|
+
activeCell = this.getActiveCell();
|
|
21126
|
+
|
|
21127
|
+
if (!activeCell) {
|
|
21128
|
+
return;
|
|
21129
|
+
}
|
|
21130
|
+
|
|
21131
|
+
this.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + "px";
|
|
21132
|
+
this.activeRangeCellElement.style.top = activeCell.row.getElement().offsetTop + "px";
|
|
21133
|
+
this.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + "px";
|
|
21134
|
+
this.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + "px";
|
|
21135
|
+
|
|
21136
|
+
this.ranges.forEach((range) => range.layout());
|
|
21137
|
+
|
|
21138
|
+
this.overlay.style.visibility = "visible";
|
|
21139
|
+
}
|
|
21140
|
+
|
|
21141
|
+
|
|
21142
|
+
///////////////////////////////////
|
|
21143
|
+
/////// Helper Functions ///////
|
|
21144
|
+
///////////////////////////////////
|
|
21145
|
+
|
|
21146
|
+
getCell(rowIdx, colIdx) {
|
|
21147
|
+
var row;
|
|
21148
|
+
|
|
21149
|
+
if (colIdx < 0) {
|
|
21150
|
+
colIdx = this.getTableColumns().length + colIdx - 1;
|
|
19632
21151
|
|
|
19633
|
-
if(
|
|
19634
|
-
|
|
19635
|
-
}else {
|
|
19636
|
-
sortEl.innerHTML = arrowEl;
|
|
21152
|
+
if (colIdx < 0) {
|
|
21153
|
+
return null;
|
|
19637
21154
|
}
|
|
19638
21155
|
}
|
|
21156
|
+
|
|
21157
|
+
if (rowIdx < 0) {
|
|
21158
|
+
rowIdx = this.getTableRows().length + rowIdx;
|
|
21159
|
+
}
|
|
21160
|
+
|
|
21161
|
+
row = this.table.rowManager.getRowFromPosition(rowIdx + 1);
|
|
21162
|
+
|
|
21163
|
+
return row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx + 1] : null;
|
|
19639
21164
|
}
|
|
21165
|
+
|
|
21166
|
+
|
|
21167
|
+
getActiveCell() {
|
|
21168
|
+
return this.getCell(this.activeRange.start.row, this.activeRange.start.col);
|
|
21169
|
+
}
|
|
21170
|
+
|
|
21171
|
+
getRowByRangePos(pos) {
|
|
21172
|
+
return this.getTableRows()[pos];
|
|
21173
|
+
}
|
|
21174
|
+
|
|
21175
|
+
getColumnByRangePos(pos) {
|
|
21176
|
+
return this.getTableColumns()[pos + 1];
|
|
21177
|
+
}
|
|
21178
|
+
|
|
21179
|
+
getTableRows() {
|
|
21180
|
+
return this.table.rowManager.getDisplayRows();
|
|
21181
|
+
}
|
|
21182
|
+
|
|
21183
|
+
getTableColumns() {
|
|
21184
|
+
return this.table.columnManager.getVisibleColumnsByIndex();
|
|
21185
|
+
}
|
|
21186
|
+
|
|
21187
|
+
addRange(start, end) {
|
|
21188
|
+
var range;
|
|
21189
|
+
|
|
21190
|
+
if(this.maxRanges !== true && this.ranges.length >= this.maxRanges){
|
|
21191
|
+
this.ranges.shift().destroy();
|
|
21192
|
+
}
|
|
21193
|
+
|
|
21194
|
+
range = new Range(this.table, this, start, end);
|
|
21195
|
+
|
|
21196
|
+
this.activeRange = range;
|
|
21197
|
+
this.ranges.push(range);
|
|
21198
|
+
this.rangeContainer.appendChild(range.element);
|
|
21199
|
+
|
|
21200
|
+
return range;
|
|
21201
|
+
}
|
|
21202
|
+
|
|
21203
|
+
resetRanges() {
|
|
21204
|
+
var range, cell;
|
|
21205
|
+
|
|
21206
|
+
this.ranges.forEach((range) => range.destroy());
|
|
21207
|
+
this.ranges = [];
|
|
21208
|
+
|
|
21209
|
+
range = this.addRange();
|
|
21210
|
+
|
|
21211
|
+
if(this.table.rowManager.activeRows.length){
|
|
21212
|
+
cell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0];
|
|
19640
21213
|
|
|
19641
|
-
|
|
19642
|
-
|
|
19643
|
-
|
|
19644
|
-
|
|
19645
|
-
data.sort((a, b) => {
|
|
19646
|
-
var result;
|
|
19647
|
-
|
|
19648
|
-
for(var i = sorterCount; i>= 0; i--){
|
|
19649
|
-
let sortItem = sortList[i];
|
|
19650
|
-
|
|
19651
|
-
result = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
|
|
19652
|
-
|
|
19653
|
-
if(result !== 0){
|
|
19654
|
-
break;
|
|
19655
|
-
}
|
|
21214
|
+
if(cell){
|
|
21215
|
+
range.setBounds(cell);
|
|
21216
|
+
this.initializeFocus(cell);
|
|
19656
21217
|
}
|
|
19657
|
-
|
|
19658
|
-
|
|
19659
|
-
|
|
21218
|
+
}
|
|
21219
|
+
|
|
21220
|
+
return range;
|
|
19660
21221
|
}
|
|
19661
|
-
|
|
19662
|
-
|
|
19663
|
-
|
|
19664
|
-
|
|
19665
|
-
|
|
19666
|
-
|
|
19667
|
-
|
|
19668
|
-
|
|
19669
|
-
|
|
19670
|
-
|
|
19671
|
-
|
|
19672
|
-
|
|
19673
|
-
a = typeof a !== "undefined" ? a : "";
|
|
19674
|
-
b = typeof b !== "undefined" ? b : "";
|
|
19675
|
-
|
|
19676
|
-
el1Comp = el1.getComponent();
|
|
19677
|
-
el2Comp = el2.getComponent();
|
|
19678
|
-
|
|
19679
|
-
return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
|
|
21222
|
+
|
|
21223
|
+
tableDestroyed(){
|
|
21224
|
+
document.removeEventListener("mouseup", this.mouseUpEvent);
|
|
21225
|
+
this.table.rowManager.element.removeEventListener("keydown", this.keyDownEvent);
|
|
21226
|
+
}
|
|
21227
|
+
|
|
21228
|
+
selectedRows(component) {
|
|
21229
|
+
return component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows();
|
|
21230
|
+
}
|
|
21231
|
+
|
|
21232
|
+
selectedColumns(component) {
|
|
21233
|
+
return component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns();
|
|
19680
21234
|
}
|
|
19681
21235
|
}
|
|
19682
21236
|
|
|
19683
|
-
|
|
19684
|
-
|
|
19685
|
-
//load defaults
|
|
19686
|
-
Sort.sorters = defaultSorters;
|
|
21237
|
+
SelectRange.moduleName = "selectRange";
|
|
19687
21238
|
|
|
19688
21239
|
class Tooltip extends Module{
|
|
19689
21240
|
|
|
@@ -19850,6 +21401,17 @@ var defaultValidators = {
|
|
|
19850
21401
|
return isNaN(value);
|
|
19851
21402
|
},
|
|
19852
21403
|
|
|
21404
|
+
//must be alphanumeric
|
|
21405
|
+
alphanumeric: function(cell, value, parameters){
|
|
21406
|
+
if(value === "" || value === null || typeof value === "undefined"){
|
|
21407
|
+
return true;
|
|
21408
|
+
}
|
|
21409
|
+
|
|
21410
|
+
var reg = new RegExp(/^[a-z0-9]+$/i);
|
|
21411
|
+
|
|
21412
|
+
return reg.test(value);
|
|
21413
|
+
},
|
|
21414
|
+
|
|
19853
21415
|
//maximum value
|
|
19854
21416
|
max: function(cell, value, parameters){
|
|
19855
21417
|
if(value === "" || value === null || typeof value === "undefined"){
|
|
@@ -20286,6 +21848,7 @@ var modules = /*#__PURE__*/Object.freeze({
|
|
|
20286
21848
|
ResponsiveLayoutModule: ResponsiveLayout,
|
|
20287
21849
|
SelectRowModule: SelectRow,
|
|
20288
21850
|
SortModule: Sort,
|
|
21851
|
+
SelectRangeModule: SelectRange,
|
|
20289
21852
|
TooltipModule: Tooltip,
|
|
20290
21853
|
ValidateModule: Validate
|
|
20291
21854
|
});
|
|
@@ -21610,6 +23173,10 @@ class ColumnManager extends CoreFeature {
|
|
|
21610
23173
|
|
|
21611
23174
|
return index > -1 ? this.columnsByIndex[index] : false;
|
|
21612
23175
|
}
|
|
23176
|
+
|
|
23177
|
+
getVisibleColumnsByIndex() {
|
|
23178
|
+
return this.columnsByIndex.filter((col) => col.visible);
|
|
23179
|
+
}
|
|
21613
23180
|
|
|
21614
23181
|
getColumns(){
|
|
21615
23182
|
return this.columns;
|
|
@@ -22009,8 +23576,6 @@ class BasicVertical extends Renderer{
|
|
|
22009
23576
|
}
|
|
22010
23577
|
});
|
|
22011
23578
|
|
|
22012
|
-
|
|
22013
|
-
|
|
22014
23579
|
if(onlyGroupHeaders){
|
|
22015
23580
|
element.style.minWidth = this.table.columnManager.getWidth() + "px";
|
|
22016
23581
|
}else {
|
|
@@ -22027,6 +23592,10 @@ class BasicVertical extends Renderer{
|
|
|
22027
23592
|
}
|
|
22028
23593
|
|
|
22029
23594
|
this.renderRows();
|
|
23595
|
+
|
|
23596
|
+
if(!this.rows().length){
|
|
23597
|
+
this.table.rowManager.tableEmpty();
|
|
23598
|
+
}
|
|
22030
23599
|
}
|
|
22031
23600
|
|
|
22032
23601
|
scrollToRowNearestTop(row){
|
|
@@ -23020,7 +24589,7 @@ class RowManager extends CoreFeature{
|
|
|
23020
24589
|
|
|
23021
24590
|
this.regenerateRowPositions();
|
|
23022
24591
|
|
|
23023
|
-
if(
|
|
24592
|
+
if(this.displayRowsCount){
|
|
23024
24593
|
this._clearPlaceholder();
|
|
23025
24594
|
}
|
|
23026
24595
|
|
|
@@ -23649,6 +25218,14 @@ class RowManager extends CoreFeature{
|
|
|
23649
25218
|
this.renderEmptyScroll();
|
|
23650
25219
|
this._showPlaceholder();
|
|
23651
25220
|
}
|
|
25221
|
+
|
|
25222
|
+
checkPlaceholder(){
|
|
25223
|
+
if(this.displayRowsCount){
|
|
25224
|
+
this._clearPlaceholder();
|
|
25225
|
+
}else {
|
|
25226
|
+
this.tableEmpty();
|
|
25227
|
+
}
|
|
25228
|
+
}
|
|
23652
25229
|
|
|
23653
25230
|
_showPlaceholder(){
|
|
23654
25231
|
if(this.placeholder){
|
|
@@ -24130,11 +25707,11 @@ class InteractionManager extends CoreFeature {
|
|
|
24130
25707
|
}
|
|
24131
25708
|
}
|
|
24132
25709
|
}
|
|
24133
|
-
|
|
25710
|
+
|
|
24134
25711
|
if(targets.group && targets.group === targets.row){
|
|
24135
25712
|
delete targets.row;
|
|
24136
25713
|
}
|
|
24137
|
-
|
|
25714
|
+
|
|
24138
25715
|
return targets;
|
|
24139
25716
|
}
|
|
24140
25717
|
|
|
@@ -24666,7 +26243,7 @@ class DeprecationAdvisor extends CoreFeature{
|
|
|
24666
26243
|
}
|
|
24667
26244
|
}
|
|
24668
26245
|
|
|
24669
|
-
check(oldOption, newOption){
|
|
26246
|
+
check(oldOption, newOption, convert){
|
|
24670
26247
|
var msg = "";
|
|
24671
26248
|
|
|
24672
26249
|
if(typeof this.options(oldOption) !== "undefined"){
|
|
@@ -24675,6 +26252,10 @@ class DeprecationAdvisor extends CoreFeature{
|
|
|
24675
26252
|
if(newOption){
|
|
24676
26253
|
msg = msg + ", Please use the %c" + newOption + "%c option instead";
|
|
24677
26254
|
this._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');
|
|
26255
|
+
|
|
26256
|
+
if(convert){
|
|
26257
|
+
this.table.options[newOption] = this.table.options[oldOption];
|
|
26258
|
+
}
|
|
24678
26259
|
}else {
|
|
24679
26260
|
this._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');
|
|
24680
26261
|
}
|
|
@@ -25463,6 +27044,8 @@ class Alert extends CoreFeature{
|
|
|
25463
27044
|
alert(content, type = "msg"){
|
|
25464
27045
|
if(content){
|
|
25465
27046
|
this.clear();
|
|
27047
|
+
|
|
27048
|
+
this.dispatch("alert-show", type);
|
|
25466
27049
|
|
|
25467
27050
|
this.type = type;
|
|
25468
27051
|
|
|
@@ -25485,6 +27068,8 @@ class Alert extends CoreFeature{
|
|
|
25485
27068
|
}
|
|
25486
27069
|
|
|
25487
27070
|
clear(){
|
|
27071
|
+
this.dispatch("alert-hide", this.type);
|
|
27072
|
+
|
|
25488
27073
|
if(this.element.parentNode){
|
|
25489
27074
|
this.element.parentNode.removeChild(this.element);
|
|
25490
27075
|
}
|
|
@@ -25748,6 +27333,7 @@ class Tabulator {
|
|
|
25748
27333
|
|
|
25749
27334
|
_loadInitialData(){
|
|
25750
27335
|
this.dataLoader.load(this.options.data);
|
|
27336
|
+
this.columnManager.verticalAlignHeaders();
|
|
25751
27337
|
}
|
|
25752
27338
|
|
|
25753
27339
|
//deconstructor
|
|
@@ -26414,7 +28000,9 @@ class PseudoRow {
|
|
|
26414
28000
|
setCellHeight(){}
|
|
26415
28001
|
|
|
26416
28002
|
clearCellHeight(){}
|
|
28003
|
+
|
|
28004
|
+
rendered(){}
|
|
26417
28005
|
}
|
|
26418
28006
|
|
|
26419
|
-
export { Accessor as AccessorModule, Ajax as AjaxModule, CalcComponent, CellComponent, Clipboard as ClipboardModule, ColumnCalcs as ColumnCalcsModule, ColumnComponent, DataTree as DataTreeModule, Download as DownloadModule, Edit$1 as EditModule, Export as ExportModule, Filter as FilterModule, Format as FormatModule, FrozenColumns as FrozenColumnsModule, FrozenRows as FrozenRowsModule, GroupComponent, GroupRows as GroupRowsModule, History as HistoryModule, HtmlTableImport as HtmlTableImportModule, Import as ImportModule, Interaction as InteractionModule, Keybindings as KeybindingsModule, Menu as MenuModule, Module, MoveColumns as MoveColumnsModule, MoveRows as MoveRowsModule, Mutator as MutatorModule, Page as PageModule, Persistence as PersistenceModule, Popup$1 as PopupModule, Print as PrintModule, PseudoRow, ReactiveData as ReactiveDataModule, Renderer, ResizeColumns as ResizeColumnsModule, ResizeRows as ResizeRowsModule, ResizeTable as ResizeTableModule, ResponsiveLayout as ResponsiveLayoutModule, RowComponent, SelectRow as SelectRowModule, Sort as SortModule, Tabulator, TabulatorFull, Tooltip as TooltipModule, Validate as ValidateModule };
|
|
28007
|
+
export { Accessor as AccessorModule, Ajax as AjaxModule, CalcComponent, CellComponent, Clipboard as ClipboardModule, ColumnCalcs as ColumnCalcsModule, ColumnComponent, DataTree as DataTreeModule, Download as DownloadModule, Edit$1 as EditModule, Export as ExportModule, Filter as FilterModule, Format as FormatModule, FrozenColumns as FrozenColumnsModule, FrozenRows as FrozenRowsModule, GroupComponent, GroupRows as GroupRowsModule, History as HistoryModule, HtmlTableImport as HtmlTableImportModule, Import as ImportModule, Interaction as InteractionModule, Keybindings as KeybindingsModule, Menu as MenuModule, Module, MoveColumns as MoveColumnsModule, MoveRows as MoveRowsModule, Mutator as MutatorModule, Page as PageModule, Persistence as PersistenceModule, Popup$1 as PopupModule, Print as PrintModule, PseudoRow, ReactiveData as ReactiveDataModule, Renderer, ResizeColumns as ResizeColumnsModule, ResizeRows as ResizeRowsModule, ResizeTable as ResizeTableModule, ResponsiveLayout as ResponsiveLayoutModule, RowComponent, SelectRange as SelectRangeModule, SelectRow as SelectRowModule, Sort as SortModule, Tabulator, TabulatorFull, Tooltip as TooltipModule, Validate as ValidateModule };
|
|
26420
28008
|
//# sourceMappingURL=tabulator_esm.js.map
|