tabulator-tables 5.5.4 → 5.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bower.json +1 -1
- package/dist/css/tabulator.css +72 -2
- package/dist/css/tabulator.css.map +1 -1
- package/dist/css/tabulator.min.css +1 -1
- package/dist/css/tabulator.min.css.map +1 -1
- package/dist/css/tabulator_bootstrap3.css +72 -2
- package/dist/css/tabulator_bootstrap3.css.map +1 -1
- package/dist/css/tabulator_bootstrap3.min.css +1 -1
- package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
- package/dist/css/tabulator_bootstrap4.css +72 -2
- package/dist/css/tabulator_bootstrap4.css.map +1 -1
- package/dist/css/tabulator_bootstrap4.min.css +1 -1
- package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
- package/dist/css/tabulator_bootstrap5.css +72 -2
- package/dist/css/tabulator_bootstrap5.css.map +1 -1
- package/dist/css/tabulator_bootstrap5.min.css +1 -1
- package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
- package/dist/css/tabulator_bulma.css +72 -2
- package/dist/css/tabulator_bulma.css.map +1 -1
- package/dist/css/tabulator_bulma.min.css +1 -1
- package/dist/css/tabulator_bulma.min.css.map +1 -1
- package/dist/css/tabulator_materialize.css +72 -2
- package/dist/css/tabulator_materialize.css.map +1 -1
- package/dist/css/tabulator_materialize.min.css +1 -1
- package/dist/css/tabulator_materialize.min.css.map +1 -1
- package/dist/css/tabulator_midnight.css +72 -2
- package/dist/css/tabulator_midnight.css.map +1 -1
- package/dist/css/tabulator_midnight.min.css +1 -1
- package/dist/css/tabulator_midnight.min.css.map +1 -1
- package/dist/css/tabulator_modern.css +72 -2
- package/dist/css/tabulator_modern.css.map +1 -1
- package/dist/css/tabulator_modern.min.css +1 -1
- package/dist/css/tabulator_modern.min.css.map +1 -1
- package/dist/css/tabulator_semanticui.css +72 -2
- package/dist/css/tabulator_semanticui.css.map +1 -1
- package/dist/css/tabulator_semanticui.min.css +1 -1
- package/dist/css/tabulator_semanticui.min.css.map +1 -1
- package/dist/css/tabulator_simple.css +72 -2
- package/dist/css/tabulator_simple.css.map +1 -1
- package/dist/css/tabulator_simple.min.css +1 -1
- package/dist/css/tabulator_simple.min.css.map +1 -1
- package/dist/css/tabulator_site.css +74 -4
- package/dist/css/tabulator_site.css.map +1 -1
- package/dist/css/tabulator_site.min.css +1 -1
- package/dist/css/tabulator_site.min.css.map +1 -1
- package/dist/js/tabulator.js +1868 -245
- package/dist/js/tabulator.js.map +1 -1
- package/dist/js/tabulator.min.js +2 -2
- package/dist/js/tabulator.min.js.map +1 -1
- package/dist/js/tabulator_esm.js +1948 -323
- package/dist/js/tabulator_esm.js.map +1 -1
- package/dist/js/tabulator_esm.min.js +2 -2
- package/dist/js/tabulator_esm.min.js.map +1 -1
- package/package.json +2 -2
- package/src/js/core/ColumnManager.js +4 -0
- package/src/js/core/CoreFeature.js +2 -2
- package/src/js/core/RowManager.js +12 -6
- package/src/js/core/Tabulator.js +2 -1
- package/src/js/core/TabulatorFull.js +1 -1
- package/src/js/core/column/Column.js +10 -0
- package/src/js/core/modules/optional.js +2 -1
- package/src/js/core/rendering/renderers/BasicVertical.js +4 -2
- package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +1 -1
- package/src/js/core/row/PseudoRow.js +2 -0
- package/src/js/core/tools/Alert.js +4 -0
- package/src/js/core/tools/DeprecationAdvisor.js +5 -1
- package/src/js/core/tools/Helpers.js +1 -1
- package/src/js/core/tools/InteractionMonitor.js +3 -3
- package/src/js/modules/Clipboard/Clipboard.js +5 -3
- package/src/js/modules/Clipboard/defaults/pasteActions.js +49 -6
- package/src/js/modules/Clipboard/defaults/pasteParsers.js +69 -14
- package/src/js/modules/ColumnCalcs/ColumnCalcs.js +7 -1
- package/src/js/modules/Edit/Edit.js +71 -25
- package/src/js/modules/Edit/defaults/editors/datetime.js +1 -1
- package/src/js/modules/Edit/defaults/editors/time.js +3 -1
- package/src/js/modules/Export/Export.js +38 -18
- package/src/js/modules/Format/defaults/formatters/rowSelection.js +2 -2
- package/src/js/modules/Format/defaults/formatters/rownum.js +5 -1
- package/src/js/modules/FrozenColumns/FrozenColumns.js +11 -11
- package/src/js/modules/FrozenRows/FrozenRows.js +6 -1
- package/src/js/modules/History/History.js +2 -2
- package/src/js/modules/History/defaults/redoers.js +4 -0
- package/src/js/modules/History/defaults/undoers.js +4 -0
- package/src/js/modules/Keybindings/defaults/actions.js +38 -1
- package/src/js/modules/Keybindings/defaults/bindings.js +16 -1
- package/src/js/modules/Menu/Menu.js +3 -1
- package/src/js/modules/MoveColumns/MoveColumns.js +5 -0
- package/src/js/modules/Popup/Popup.js +1 -1
- package/src/js/modules/ResizeTable/ResizeTable.js +3 -3
- package/src/js/modules/SelectRange/Range.js +354 -0
- package/src/js/modules/SelectRange/RangeComponent.js +93 -0
- package/src/js/modules/SelectRange/SelectRange.js +870 -0
- package/src/js/modules/SelectRow/SelectRow.js +46 -26
- package/src/js/modules/Sort/Sort.js +111 -105
- package/src/js/modules/Validate/defaults/validators.js +11 -0
- package/src/scss/tabulator.scss +95 -13
- package/src/scss/themes/bulma/tabulator_bulma.scss +7 -0
- package/src/scss/themes/materialize/tabulator_materialize.scss +7 -1
- package/src/scss/themes/tabulator_midnight.scss +13 -0
- package/src/scss/themes/tabulator_modern.scss +9 -0
- package/src/scss/themes/tabulator_site.scss +13 -2
|
@@ -24,6 +24,8 @@ class Edit extends Module{
|
|
|
24
24
|
this.registerColumnOption("cellEdited");
|
|
25
25
|
this.registerColumnOption("cellEditCancelled");
|
|
26
26
|
|
|
27
|
+
this.registerTableOption("editTriggerEvent", "focus");
|
|
28
|
+
|
|
27
29
|
this.registerTableFunction("getEditedCells", this.getEditedCells.bind(this));
|
|
28
30
|
this.registerTableFunction("clearCellEdited", this.clearCellEdited.bind(this));
|
|
29
31
|
this.registerTableFunction("navigatePrev", this.navigatePrev.bind(this));
|
|
@@ -55,16 +57,30 @@ class Edit extends Module{
|
|
|
55
57
|
this.subscribe("row-deleting", this.rowDeleteCheck.bind(this));
|
|
56
58
|
this.subscribe("row-layout", this.rowEditableCheck.bind(this));
|
|
57
59
|
this.subscribe("data-refreshing", this.cancelEdit.bind(this));
|
|
60
|
+
this.subscribe("clipboard-paste", this.pasteBlocker.bind(this));
|
|
58
61
|
|
|
59
62
|
this.subscribe("keybinding-nav-prev", this.navigatePrev.bind(this, undefined));
|
|
60
63
|
this.subscribe("keybinding-nav-next", this.keybindingNavigateNext.bind(this));
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
// this.subscribe("keybinding-nav-left", this.navigateLeft.bind(this, undefined));
|
|
67
|
+
// this.subscribe("keybinding-nav-right", this.navigateRight.bind(this, undefined));
|
|
63
68
|
this.subscribe("keybinding-nav-up", this.navigateUp.bind(this, undefined));
|
|
64
69
|
this.subscribe("keybinding-nav-down", this.navigateDown.bind(this, undefined));
|
|
65
70
|
}
|
|
66
71
|
|
|
67
72
|
|
|
73
|
+
///////////////////////////////////
|
|
74
|
+
///////// Paste Negation //////////
|
|
75
|
+
///////////////////////////////////
|
|
76
|
+
|
|
77
|
+
pasteBlocker(e){
|
|
78
|
+
if(this.currentCell){
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
68
84
|
///////////////////////////////////
|
|
69
85
|
////// Keybinding Functions ///////
|
|
70
86
|
///////////////////////////////////
|
|
@@ -72,7 +88,7 @@ class Edit extends Module{
|
|
|
72
88
|
keybindingNavigateNext(e){
|
|
73
89
|
var cell = this.currentCell,
|
|
74
90
|
newRow = this.options("tabEndNewRow");
|
|
75
|
-
|
|
91
|
+
|
|
76
92
|
if(cell){
|
|
77
93
|
if(!this.navigateNext(cell, e)){
|
|
78
94
|
if(newRow){
|
|
@@ -461,12 +477,6 @@ class Edit extends Module{
|
|
|
461
477
|
this.updateCellClass(cell);
|
|
462
478
|
element.setAttribute("tabindex", 0);
|
|
463
479
|
|
|
464
|
-
element.addEventListener("click", function(e){
|
|
465
|
-
if(!element.classList.contains("tabulator-editing")){
|
|
466
|
-
element.focus({preventScroll: true});
|
|
467
|
-
}
|
|
468
|
-
});
|
|
469
|
-
|
|
470
480
|
element.addEventListener("mousedown", function(e){
|
|
471
481
|
if (e.button === 2) {
|
|
472
482
|
e.preventDefault();
|
|
@@ -474,12 +484,33 @@ class Edit extends Module{
|
|
|
474
484
|
self.mouseClick = true;
|
|
475
485
|
}
|
|
476
486
|
});
|
|
487
|
+
|
|
488
|
+
if(this.options("editTriggerEvent") === "dblclick"){
|
|
489
|
+
element.addEventListener("dblclick", function(e){
|
|
490
|
+
if(!element.classList.contains("tabulator-editing")){
|
|
491
|
+
element.focus({preventScroll: true});
|
|
492
|
+
self.edit(cell, e, false);
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
}
|
|
477
496
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
497
|
+
|
|
498
|
+
if(this.options("editTriggerEvent") === "focus" || this.options("editTriggerEvent") === "click"){
|
|
499
|
+
element.addEventListener("click", function(e){
|
|
500
|
+
if(!element.classList.contains("tabulator-editing")){
|
|
501
|
+
element.focus({preventScroll: true});
|
|
502
|
+
self.edit(cell, e, false);
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
if(this.options("editTriggerEvent") === "focus"){
|
|
508
|
+
element.addEventListener("focus", function(e){
|
|
509
|
+
if(!self.recursionBlock){
|
|
510
|
+
self.edit(cell, e, false);
|
|
511
|
+
}
|
|
512
|
+
});
|
|
513
|
+
}
|
|
483
514
|
}
|
|
484
515
|
}
|
|
485
516
|
|
|
@@ -565,8 +596,9 @@ class Edit extends Module{
|
|
|
565
596
|
allowEdit = true,
|
|
566
597
|
rendered = function(){},
|
|
567
598
|
element = cell.getElement(),
|
|
599
|
+
editFinished = false,
|
|
568
600
|
cellEditor, component, params;
|
|
569
|
-
|
|
601
|
+
|
|
570
602
|
//prevent editing if another cell is refusing to leave focus (eg. validation fail)
|
|
571
603
|
|
|
572
604
|
if(this.currentCell){
|
|
@@ -578,13 +610,15 @@ class Edit extends Module{
|
|
|
578
610
|
|
|
579
611
|
//handle successful value change
|
|
580
612
|
function success(value){
|
|
581
|
-
if(self.currentCell === cell){
|
|
613
|
+
if(self.currentCell === cell && !editFinished){
|
|
582
614
|
var valid = self.chain("edit-success", [cell, value], true, true);
|
|
583
|
-
|
|
615
|
+
|
|
584
616
|
if(valid === true || self.table.options.validationMode === "highlight"){
|
|
617
|
+
|
|
618
|
+
editFinished = true;
|
|
619
|
+
|
|
585
620
|
self.clearEditor();
|
|
586
621
|
|
|
587
|
-
|
|
588
622
|
if(!cell.modules.edit){
|
|
589
623
|
cell.modules.edit = {};
|
|
590
624
|
}
|
|
@@ -596,12 +630,17 @@ class Edit extends Module{
|
|
|
596
630
|
}
|
|
597
631
|
|
|
598
632
|
cell.setValue(value, true);
|
|
599
|
-
|
|
633
|
+
|
|
600
634
|
return valid === true;
|
|
601
635
|
}else{
|
|
636
|
+
editFinished = true;
|
|
602
637
|
self.invalidEdit = true;
|
|
603
638
|
self.focusCellNoEvent(cell, true);
|
|
604
639
|
rendered();
|
|
640
|
+
|
|
641
|
+
setTimeout(() => {
|
|
642
|
+
editFinished = false;
|
|
643
|
+
}, 10);
|
|
605
644
|
return false;
|
|
606
645
|
}
|
|
607
646
|
}else{
|
|
@@ -611,7 +650,9 @@ class Edit extends Module{
|
|
|
611
650
|
|
|
612
651
|
//handle aborted edit
|
|
613
652
|
function cancel(){
|
|
614
|
-
|
|
653
|
+
// editFinished = true;
|
|
654
|
+
|
|
655
|
+
if(self.currentCell === cell && !editFinished){
|
|
615
656
|
self.cancelEdit();
|
|
616
657
|
}else{
|
|
617
658
|
// console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
|
|
@@ -630,7 +671,6 @@ class Edit extends Module{
|
|
|
630
671
|
allowEdit = this.allowEdit(cell);
|
|
631
672
|
|
|
632
673
|
if(allowEdit || forceEdit){
|
|
633
|
-
|
|
634
674
|
self.cancelEdit();
|
|
635
675
|
|
|
636
676
|
self.currentCell = cell;
|
|
@@ -680,27 +720,33 @@ class Edit extends Module{
|
|
|
680
720
|
}
|
|
681
721
|
}else{
|
|
682
722
|
console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor);
|
|
683
|
-
|
|
723
|
+
this.blur(element);
|
|
684
724
|
return false;
|
|
685
725
|
}
|
|
686
726
|
}else{
|
|
687
|
-
|
|
727
|
+
this.blur(element);
|
|
688
728
|
return false;
|
|
689
729
|
}
|
|
690
730
|
|
|
691
731
|
return true;
|
|
692
732
|
}else{
|
|
693
733
|
this.mouseClick = false;
|
|
694
|
-
|
|
734
|
+
this.blur(element);
|
|
695
735
|
return false;
|
|
696
736
|
}
|
|
697
737
|
}else{
|
|
698
738
|
this.mouseClick = false;
|
|
699
|
-
|
|
739
|
+
this.blur(element);
|
|
700
740
|
return false;
|
|
701
741
|
}
|
|
702
742
|
}
|
|
703
743
|
|
|
744
|
+
blur(element){
|
|
745
|
+
if(!this.confirm("edit-blur", [element]) ){
|
|
746
|
+
element.blur();
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
|
|
704
750
|
getEditedCells(){
|
|
705
751
|
var output = [];
|
|
706
752
|
|
|
@@ -37,7 +37,7 @@ export default function(cell, onRendered, success, cancel, editorParams){
|
|
|
37
37
|
newDatetime = DT.fromFormat(String(cellValue), inputFormat);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
cellValue = newDatetime.toFormat("yyyy-MM-dd") + "T" + newDatetime.toFormat("
|
|
40
|
+
cellValue = newDatetime.toFormat("yyyy-MM-dd") + "T" + newDatetime.toFormat("HH:mm");
|
|
41
41
|
}else{
|
|
42
42
|
console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js");
|
|
43
43
|
}
|
|
@@ -37,12 +37,14 @@ export default function(cell, onRendered, success, cancel, editorParams){
|
|
|
37
37
|
newDatetime = DT.fromFormat(String(cellValue), inputFormat);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
cellValue = newDatetime.toFormat("
|
|
40
|
+
cellValue = newDatetime.toFormat("HH:mm");
|
|
41
41
|
|
|
42
42
|
}else{
|
|
43
43
|
console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js");
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
+
|
|
47
|
+
console.log("val", cellValue);
|
|
46
48
|
|
|
47
49
|
input.value = cellValue;
|
|
48
50
|
|
|
@@ -35,10 +35,20 @@ class Export extends Module{
|
|
|
35
35
|
this.cloneTableStyle = style;
|
|
36
36
|
this.config = config || {};
|
|
37
37
|
this.colVisProp = colVisProp;
|
|
38
|
-
|
|
39
|
-
var headers
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
|
|
39
|
+
var headers, body;
|
|
40
|
+
|
|
41
|
+
if (range === 'range') {
|
|
42
|
+
var columns = this.table.modules.selectRange.selectedColumns();
|
|
43
|
+
headers = this.config.columnHeaders !== false
|
|
44
|
+
? this.headersToExportRows(this.generateColumnGroupHeaders(columns))
|
|
45
|
+
: [];
|
|
46
|
+
body = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true));
|
|
47
|
+
} else {
|
|
48
|
+
headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];
|
|
49
|
+
body = this.bodyToExportRows(this.rowLookup(range));
|
|
50
|
+
}
|
|
51
|
+
|
|
42
52
|
return headers.concat(body);
|
|
43
53
|
}
|
|
44
54
|
|
|
@@ -73,7 +83,11 @@ class Export extends Module{
|
|
|
73
83
|
case "selected":
|
|
74
84
|
rows = this.table.modules.selectRow.selectedRows;
|
|
75
85
|
break;
|
|
76
|
-
|
|
86
|
+
|
|
87
|
+
case "range":
|
|
88
|
+
rows = this.table.modules.selectRange.selectedRows();
|
|
89
|
+
break;
|
|
90
|
+
|
|
77
91
|
case "active":
|
|
78
92
|
default:
|
|
79
93
|
if(this.table.options.pagination){
|
|
@@ -87,10 +101,12 @@ class Export extends Module{
|
|
|
87
101
|
return Object.assign([], rows);
|
|
88
102
|
}
|
|
89
103
|
|
|
90
|
-
generateColumnGroupHeaders(){
|
|
104
|
+
generateColumnGroupHeaders(columns){
|
|
91
105
|
var output = [];
|
|
92
106
|
|
|
93
|
-
|
|
107
|
+
if (!columns) {
|
|
108
|
+
columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;
|
|
109
|
+
}
|
|
94
110
|
|
|
95
111
|
columns.forEach((column) => {
|
|
96
112
|
var colData = this.processColumnGroup(column);
|
|
@@ -99,7 +115,7 @@ class Export extends Module{
|
|
|
99
115
|
output.push(colData);
|
|
100
116
|
}
|
|
101
117
|
});
|
|
102
|
-
|
|
118
|
+
|
|
103
119
|
return output;
|
|
104
120
|
}
|
|
105
121
|
|
|
@@ -227,16 +243,16 @@ class Export extends Module{
|
|
|
227
243
|
return exportRows;
|
|
228
244
|
}
|
|
229
245
|
|
|
230
|
-
bodyToExportRows(rows){
|
|
231
|
-
|
|
232
|
-
var columns = [];
|
|
246
|
+
bodyToExportRows(rows, columns = []){
|
|
233
247
|
var exportRows = [];
|
|
234
248
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
249
|
+
if (columns.length === 0) {
|
|
250
|
+
this.table.columnManager.columnsByIndex.forEach((column) => {
|
|
251
|
+
if (this.columnVisCheck(column)) {
|
|
252
|
+
columns.push(column.getComponent());
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
240
256
|
|
|
241
257
|
if(this.config.columnCalcs !== false && this.table.modExists("columnCalcs")){
|
|
242
258
|
if(this.table.modules.columnCalcs.topInitialized){
|
|
@@ -247,7 +263,7 @@ class Export extends Module{
|
|
|
247
263
|
rows.push(this.table.modules.columnCalcs.botRow);
|
|
248
264
|
}
|
|
249
265
|
}
|
|
250
|
-
|
|
266
|
+
|
|
251
267
|
rows = rows.filter((row) => {
|
|
252
268
|
switch(row.type){
|
|
253
269
|
case "group":
|
|
@@ -474,7 +490,8 @@ class Export extends Module{
|
|
|
474
490
|
if(col){
|
|
475
491
|
var cellEl = document.createElement("td"),
|
|
476
492
|
column = col.component._column,
|
|
477
|
-
|
|
493
|
+
table = this.table,
|
|
494
|
+
index = table.columnManager.findColumnIndex(column),
|
|
478
495
|
value = col.value,
|
|
479
496
|
cellStyle;
|
|
480
497
|
|
|
@@ -501,6 +518,9 @@ class Export extends Module{
|
|
|
501
518
|
getRow:function(){
|
|
502
519
|
return row.component;
|
|
503
520
|
},
|
|
521
|
+
getTable:function(){
|
|
522
|
+
return table;
|
|
523
|
+
},
|
|
504
524
|
getComponent:function(){
|
|
505
525
|
return cellWrapper;
|
|
506
526
|
},
|
|
@@ -20,7 +20,7 @@ export default function(cell, formatterParams, onRendered){
|
|
|
20
20
|
if(row instanceof RowComponent){
|
|
21
21
|
|
|
22
22
|
checkbox.addEventListener("change", (e) => {
|
|
23
|
-
if(this.table.options.
|
|
23
|
+
if(this.table.options.selectableRowsRangeMode === "click"){
|
|
24
24
|
if(!blocked){
|
|
25
25
|
row.toggleSelect();
|
|
26
26
|
}else{
|
|
@@ -31,7 +31,7 @@ export default function(cell, formatterParams, onRendered){
|
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
33
|
|
|
34
|
-
if(this.table.options.
|
|
34
|
+
if(this.table.options.selectableRowsRangeMode === "click"){
|
|
35
35
|
checkbox.addEventListener("click", (e) => {
|
|
36
36
|
blocked = true;
|
|
37
37
|
this.table.modules.selectRow.handleComplexRowClick(row._row, e);
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export default function(cell, formatterParams, onRendered){
|
|
2
2
|
var content = document.createElement("span");
|
|
3
3
|
var row = cell.getRow();
|
|
4
|
+
var table = cell.getTable();
|
|
4
5
|
|
|
5
6
|
row.watchPosition((position) => {
|
|
7
|
+
if (formatterParams.relativeToPage) {
|
|
8
|
+
position += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1);
|
|
9
|
+
}
|
|
6
10
|
content.innerText = position;
|
|
7
11
|
});
|
|
8
12
|
|
|
9
13
|
return content;
|
|
10
|
-
}
|
|
14
|
+
}
|
|
@@ -31,7 +31,10 @@ class FrozenColumns extends Module{
|
|
|
31
31
|
this.subscribe("columns-loading", this.reset.bind(this));
|
|
32
32
|
|
|
33
33
|
this.subscribe("column-add", this.reinitializeColumns.bind(this));
|
|
34
|
-
this.subscribe("column-
|
|
34
|
+
this.subscribe("column-deleted", this.reinitializeColumns.bind(this));
|
|
35
|
+
this.subscribe("column-hide", this.reinitializeColumns.bind(this));
|
|
36
|
+
this.subscribe("column-show", this.reinitializeColumns.bind(this));
|
|
37
|
+
this.subscribe("columns-loaded", this.reinitializeColumns.bind(this));
|
|
35
38
|
|
|
36
39
|
this.subscribe("table-redraw", this.layout.bind(this));
|
|
37
40
|
this.subscribe("layout-refreshing", this.blockLayout.bind(this));
|
|
@@ -57,16 +60,16 @@ class FrozenColumns extends Module{
|
|
|
57
60
|
this.table.columnManager.columnsByIndex.forEach((column) => {
|
|
58
61
|
this.initializeColumn(column);
|
|
59
62
|
});
|
|
63
|
+
|
|
64
|
+
this.layout();
|
|
60
65
|
}
|
|
61
66
|
|
|
62
67
|
//initialize specific column
|
|
63
68
|
initializeColumn(column){
|
|
64
69
|
var config = {margin:0, edge:false};
|
|
65
70
|
|
|
66
|
-
if(!column.isGroup){
|
|
67
|
-
|
|
71
|
+
if(!column.isGroup){
|
|
68
72
|
if(this.frozenCheck(column)){
|
|
69
|
-
|
|
70
73
|
config.position = this.initializationMode;
|
|
71
74
|
|
|
72
75
|
if(this.initializationMode == "left"){
|
|
@@ -157,9 +160,8 @@ class FrozenColumns extends Module{
|
|
|
157
160
|
leftParents.push(parentEl);
|
|
158
161
|
}
|
|
159
162
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
+
parentEl.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left");
|
|
164
|
+
parentEl.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right");
|
|
163
165
|
}else{
|
|
164
166
|
this.layoutElement(column.getElement(), column);
|
|
165
167
|
}
|
|
@@ -207,7 +209,6 @@ class FrozenColumns extends Module{
|
|
|
207
209
|
//layout columns appropriately
|
|
208
210
|
layout(){
|
|
209
211
|
if(this.active && !this.blocked){
|
|
210
|
-
|
|
211
212
|
//calculate left columns
|
|
212
213
|
this.layoutColumnPosition();
|
|
213
214
|
|
|
@@ -270,9 +271,8 @@ class FrozenColumns extends Module{
|
|
|
270
271
|
|
|
271
272
|
element.classList.add("tabulator-frozen");
|
|
272
273
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
274
|
+
element.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left");
|
|
275
|
+
element.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right");
|
|
276
276
|
}
|
|
277
277
|
}
|
|
278
278
|
|
|
@@ -19,12 +19,17 @@ class FrozenRows extends Module{
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
initialize(){
|
|
22
|
+
var fragment = document.createDocumentFragment();
|
|
23
|
+
|
|
22
24
|
this.rows = [];
|
|
23
25
|
|
|
24
26
|
this.topElement.classList.add("tabulator-frozen-rows-holder");
|
|
27
|
+
|
|
28
|
+
fragment.appendChild(document.createElement("br"));
|
|
29
|
+
fragment.appendChild(this.topElement);
|
|
25
30
|
|
|
26
31
|
// this.table.columnManager.element.append(this.topElement);
|
|
27
|
-
this.table.columnManager.getContentsElement().insertBefore(
|
|
32
|
+
this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);
|
|
28
33
|
|
|
29
34
|
this.subscribe("row-deleting", this.detachRow.bind(this));
|
|
30
35
|
this.subscribe("rows-visible", this.visibleRows.bind(this));
|
|
@@ -119,7 +119,7 @@ class History extends Module{
|
|
|
119
119
|
|
|
120
120
|
return true;
|
|
121
121
|
}else{
|
|
122
|
-
console.warn("History Undo Error - No more history to undo");
|
|
122
|
+
console.warn(this.options("history") ? "History Undo Error - No more history to undo" : "History module not enabled");
|
|
123
123
|
return false;
|
|
124
124
|
}
|
|
125
125
|
}
|
|
@@ -137,7 +137,7 @@ class History extends Module{
|
|
|
137
137
|
|
|
138
138
|
return true;
|
|
139
139
|
}else{
|
|
140
|
-
console.warn("History Redo Error - No more history to redo");
|
|
140
|
+
console.warn(this.options("history") ? "History Redo Error - No more history to redo" : "History module not enabled");
|
|
141
141
|
return false;
|
|
142
142
|
}
|
|
143
143
|
}
|
|
@@ -12,10 +12,14 @@ export default {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
this._rebindRow(action.component, newRow);
|
|
15
|
+
|
|
16
|
+
this.table.rowManager.checkPlaceholder();
|
|
15
17
|
},
|
|
16
18
|
|
|
17
19
|
rowDelete:function(action){
|
|
18
20
|
action.component.deleteActual();
|
|
21
|
+
|
|
22
|
+
this.table.rowManager.checkPlaceholder();
|
|
19
23
|
},
|
|
20
24
|
|
|
21
25
|
rowMove: function(action){
|
|
@@ -6,6 +6,8 @@ export default {
|
|
|
6
6
|
|
|
7
7
|
rowAdd: function(action){
|
|
8
8
|
action.component.deleteActual();
|
|
9
|
+
|
|
10
|
+
this.table.rowManager.checkPlaceholder();
|
|
9
11
|
},
|
|
10
12
|
|
|
11
13
|
rowDelete: function(action){
|
|
@@ -16,6 +18,8 @@ export default {
|
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
this._rebindRow(action.component, newRow);
|
|
21
|
+
|
|
22
|
+
this.table.rowManager.checkPlaceholder();
|
|
19
23
|
},
|
|
20
24
|
|
|
21
25
|
rowMove: function(action){
|
|
@@ -83,6 +83,43 @@ export default {
|
|
|
83
83
|
this.dispatch("keybinding-nav-down", e);
|
|
84
84
|
},
|
|
85
85
|
|
|
86
|
+
rangeJumpLeft: function(e){
|
|
87
|
+
this.dispatch("keybinding-nav-range", e, "left", true, false);
|
|
88
|
+
},
|
|
89
|
+
rangeJumpRight: function(e){
|
|
90
|
+
this.dispatch("keybinding-nav-range", e, "right", true, false);
|
|
91
|
+
},
|
|
92
|
+
rangeJumpUp: function(e){
|
|
93
|
+
this.dispatch("keybinding-nav-range", e, "up", true, false);
|
|
94
|
+
},
|
|
95
|
+
rangeJumpDown: function(e){
|
|
96
|
+
this.dispatch("keybinding-nav-range", e, "down", true, false);
|
|
97
|
+
},
|
|
98
|
+
rangeExpandLeft: function(e){
|
|
99
|
+
this.dispatch("keybinding-nav-range", e, "left", false, true);
|
|
100
|
+
},
|
|
101
|
+
rangeExpandRight: function(e){
|
|
102
|
+
this.dispatch("keybinding-nav-range", e, "right", false, true);
|
|
103
|
+
},
|
|
104
|
+
rangeExpandUp: function(e){
|
|
105
|
+
this.dispatch("keybinding-nav-range", e, "up", false, true);
|
|
106
|
+
},
|
|
107
|
+
rangeExpandDown: function(e){
|
|
108
|
+
this.dispatch("keybinding-nav-range", e, "down", false, true);
|
|
109
|
+
},
|
|
110
|
+
rangeExpandJumpLeft: function(e){
|
|
111
|
+
this.dispatch("keybinding-nav-range", e, "left", true, true);
|
|
112
|
+
},
|
|
113
|
+
rangeExpandJumpRight: function(e){
|
|
114
|
+
this.dispatch("keybinding-nav-range", e, "right", true, true);
|
|
115
|
+
},
|
|
116
|
+
rangeExpandJumpUp: function(e){
|
|
117
|
+
this.dispatch("keybinding-nav-range", e, "up", true, true);
|
|
118
|
+
},
|
|
119
|
+
rangeExpandJumpDown: function(e){
|
|
120
|
+
this.dispatch("keybinding-nav-range", e, "down", true, true);
|
|
121
|
+
},
|
|
122
|
+
|
|
86
123
|
undo:function(e){
|
|
87
124
|
var cell = false;
|
|
88
125
|
if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
|
|
@@ -116,4 +153,4 @@ export default {
|
|
|
116
153
|
}
|
|
117
154
|
}
|
|
118
155
|
},
|
|
119
|
-
};
|
|
156
|
+
};
|
|
@@ -3,6 +3,8 @@ export default {
|
|
|
3
3
|
navNext:9,
|
|
4
4
|
navUp:38,
|
|
5
5
|
navDown:40,
|
|
6
|
+
navLeft:37,
|
|
7
|
+
navRight:39,
|
|
6
8
|
scrollPageUp:33,
|
|
7
9
|
scrollPageDown:34,
|
|
8
10
|
scrollToStart:36,
|
|
@@ -10,4 +12,17 @@ export default {
|
|
|
10
12
|
undo:["ctrl + 90", "meta + 90"],
|
|
11
13
|
redo:["ctrl + 89", "meta + 89"],
|
|
12
14
|
copyToClipboard:["ctrl + 67", "meta + 67"],
|
|
13
|
-
|
|
15
|
+
|
|
16
|
+
rangeJumpUp:["ctrl + 38", "meta + 38"],
|
|
17
|
+
rangeJumpDown:["ctrl + 40", "meta + 40"],
|
|
18
|
+
rangeJumpLeft:["ctrl + 37", "meta + 37"],
|
|
19
|
+
rangeJumpRight:["ctrl + 39", "meta + 39"],
|
|
20
|
+
rangeExpandUp:"shift + 38",
|
|
21
|
+
rangeExpandDown:"shift + 40",
|
|
22
|
+
rangeExpandLeft:"shift + 37",
|
|
23
|
+
rangeExpandRight:"shift + 39",
|
|
24
|
+
rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"],
|
|
25
|
+
rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"],
|
|
26
|
+
rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"],
|
|
27
|
+
rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"],
|
|
28
|
+
};
|
|
@@ -76,7 +76,7 @@ class Menu extends Module{
|
|
|
76
76
|
this.subscribe("group-dblclick", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
|
|
80
80
|
initializeColumn(column){
|
|
81
81
|
var def = column.definition;
|
|
82
82
|
|
|
@@ -285,6 +285,7 @@ class Menu extends Module{
|
|
|
285
285
|
this.rootPopup = null;
|
|
286
286
|
|
|
287
287
|
if(this.currentComponent){
|
|
288
|
+
this.dispatch("menu-closed", menu, popup);
|
|
288
289
|
this.dispatchExternal("menuClosed", this.currentComponent.getComponent());
|
|
289
290
|
this.currentComponent = null;
|
|
290
291
|
}
|
|
@@ -292,6 +293,7 @@ class Menu extends Module{
|
|
|
292
293
|
|
|
293
294
|
this.currentComponent = component;
|
|
294
295
|
|
|
296
|
+
this.dispatch("menu-opened", menu, popup);
|
|
295
297
|
this.dispatchExternal("menuOpened", component.getComponent());
|
|
296
298
|
}
|
|
297
299
|
}
|
|
@@ -37,8 +37,13 @@ class MoveColumns extends Module{
|
|
|
37
37
|
initialize(){
|
|
38
38
|
if(this.table.options.movableColumns){
|
|
39
39
|
this.subscribe("column-init", this.initializeColumn.bind(this));
|
|
40
|
+
this.subscribe("alert-show", this.abortMove.bind(this));
|
|
40
41
|
}
|
|
41
42
|
}
|
|
43
|
+
|
|
44
|
+
abortMove(){
|
|
45
|
+
clearTimeout(this.checkTimeout);
|
|
46
|
+
}
|
|
42
47
|
|
|
43
48
|
initializeColumn(column){
|
|
44
49
|
var self = this,
|
|
@@ -45,7 +45,7 @@ class ResizeTable extends Module{
|
|
|
45
45
|
this.autoResize = true;
|
|
46
46
|
|
|
47
47
|
this.resizeObserver = new ResizeObserver((entry) => {
|
|
48
|
-
if(!table.browserMobile || (table.browserMobile
|
|
48
|
+
if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){
|
|
49
49
|
|
|
50
50
|
var nodeHeight = Math.floor(entry[0].contentRect.height);
|
|
51
51
|
var nodeWidth = Math.floor(entry[0].contentRect.width);
|
|
@@ -71,7 +71,7 @@ class ResizeTable extends Module{
|
|
|
71
71
|
if(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))){
|
|
72
72
|
|
|
73
73
|
this.containerObserver = new ResizeObserver((entry) => {
|
|
74
|
-
if(!table.browserMobile || (table.browserMobile
|
|
74
|
+
if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){
|
|
75
75
|
|
|
76
76
|
var nodeHeight = Math.floor(entry[0].contentRect.height);
|
|
77
77
|
var nodeWidth = Math.floor(entry[0].contentRect.width);
|
|
@@ -94,7 +94,7 @@ class ResizeTable extends Module{
|
|
|
94
94
|
|
|
95
95
|
}else{
|
|
96
96
|
this.binding = function(){
|
|
97
|
-
if(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){
|
|
97
|
+
if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){
|
|
98
98
|
table.columnManager.rerenderColumns(true);
|
|
99
99
|
table.redraw();
|
|
100
100
|
}
|