Skip to content

Commit 82a85b7

Browse files
authored
Merge branch 'olifolkerd:master' into Fix-header-and-footer-height-calculation-issue-with-CSS-transform-scale
2 parents cac4aeb + 3ed553a commit 82a85b7

File tree

5 files changed

+55
-17
lines changed

5 files changed

+55
-17
lines changed

src/js/core/ColumnManager.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ export default class ColumnManager extends CoreFeature {
9393
var el = document.createElement("div");
9494

9595
el.classList.add("tabulator-header-contents");
96-
el.setAttribute("role", "rowgroup");
9796

9897
return el;
9998
}
@@ -787,4 +786,4 @@ export default class ColumnManager extends CoreFeature {
787786

788787
this.table.footerManager.redraw();
789788
}
790-
}
789+
}

src/js/core/RowManager.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export default class RowManager extends CoreFeature{
6161

6262
el.classList.add("tabulator-table");
6363
el.setAttribute("role", "rowgroup");
64+
el.setAttribute("id", "tabulator-table-body");
6465

6566
return el;
6667
}

src/js/core/Tabulator.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ class Tabulator extends ModuleBinder{
232232

233233
element.classList.add("tabulator");
234234
element.setAttribute("role", "grid");
235+
element.setAttribute("aria-owns", "tabulator-table-body");
235236

236237
//empty element
237238
while(element.firstChild) element.removeChild(element.firstChild);

src/js/modules/Edit/Edit.js

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,19 @@ export default class Edit extends Module{
6969
this.subscribe("data-refreshing", this.cancelEdit.bind(this));
7070
this.subscribe("clipboard-paste", this.pasteBlocker.bind(this));
7171

72-
this.subscribe("keybinding-nav-prev", this.navigatePrev.bind(this, undefined));
73-
this.subscribe("keybinding-nav-next", this.keybindingNavigateNext.bind(this));
74-
75-
// this.subscribe("keybinding-nav-left", this.navigateLeft.bind(this, undefined));
76-
// this.subscribe("keybinding-nav-right", this.navigateRight.bind(this, undefined));
77-
this.subscribe("keybinding-nav-up", this.navigateUp.bind(this, undefined));
78-
this.subscribe("keybinding-nav-down", this.navigateDown.bind(this, undefined));
72+
if (!this.confirm("edit-nav-disabled")) {
73+
this.subscribe("keybinding-nav-prev", this.navigatePrev.bind(this, undefined));
74+
this.subscribe("keybinding-nav-next", this.keybindingNavigateNext.bind(this));
75+
76+
// this.subscribe("keybinding-nav-left", this.navigateLeft.bind(this, undefined));
77+
// this.subscribe("keybinding-nav-right", this.navigateRight.bind(this, undefined));
78+
this.subscribe("keybinding-nav-up", this.navigateUp.bind(this, undefined));
79+
this.subscribe("keybinding-nav-down", this.navigateDown.bind(this, undefined));
80+
}
81+
82+
// Add event handlers for other modules to access editing state and functionality
83+
this.subscribe("edit-check-editing", this.checkEditing.bind(this));
84+
this.subscribe("edit-cancel-cell", this.cancelEditEvent.bind(this));
7985

8086
if(Object.keys(this.table.options).includes("editorEmptyValue")){
8187
this.convertEmptyValues = true;
@@ -449,6 +455,19 @@ export default class Edit extends Module{
449455
return this.currentCell ? this.currentCell.getComponent() : false;
450456
}
451457

458+
checkEditing(){
459+
return !!this.currentCell;
460+
}
461+
462+
cancelEditEvent(){
463+
if(this.currentCell){
464+
this.cancelEdit();
465+
return true;
466+
}
467+
return false;
468+
}
469+
470+
452471
clearEditor(cancel){
453472
var cell = this.currentCell,
454473
cellEl;

src/js/modules/SelectRange/SelectRange.js

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export default class SelectRange extends Module {
3333
this.registerTableOption("selectableRangeClearCells", false); //allow clearing of active range
3434
this.registerTableOption("selectableRangeClearCellsValue", undefined); //value for cleared active range
3535
this.registerTableOption("selectableRangeAutoFocus", true); //focus on a cell after resetRanges
36+
this.registerTableOption("selectableRangeBlurEditOnNavigate", undefined); //prevent editing on navigation
3637

3738
this.registerTableFunction("getRangesData", this.getRangesData.bind(this));
3839
this.registerTableFunction("getRanges", this.getRanges.bind(this));
@@ -66,6 +67,10 @@ export default class SelectRange extends Module {
6667
console.warn("Having multiple frozen columns with selectRange option may result in unpredictable behavior.");
6768
}
6869
}
70+
71+
this.subscribe("edit-nav-disabled", () => {
72+
return true; // Disable navigation in edit module
73+
});
6974
}
7075

7176

@@ -128,8 +133,8 @@ export default class SelectRange extends Module {
128133
this.subscribe("edit-editor-clear", this.finishEditingCell.bind(this));
129134
this.subscribe("edit-blur", this.restoreFocus.bind(this));
130135

131-
this.subscribe("keybinding-nav-prev", this.keyNavigate.bind(this, "left"));
132-
this.subscribe("keybinding-nav-next", this.keyNavigate.bind(this, "right"));
136+
this.subscribe("keybinding-nav-prev", this.keyNavigate.bind(this, "prev"));
137+
this.subscribe("keybinding-nav-next", this.keyNavigate.bind(this, "next"));
133138
this.subscribe("keybinding-nav-left", this.keyNavigate.bind(this, "left"));
134139
this.subscribe("keybinding-nav-right", this.keyNavigate.bind(this, "right"));
135140
this.subscribe("keybinding-nav-up", this.keyNavigate.bind(this, "up"));
@@ -142,12 +147,6 @@ export default class SelectRange extends Module {
142147
if(this.columnSelection && column.definition.headerSort && this.options("headerSortClickElement") !== "icon"){
143148
console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'.");
144149
}
145-
146-
if (column.modules.edit) {
147-
// Block editor from taking action so we can trigger edit by
148-
// double clicking.
149-
// column.modules.edit.blocked = true;
150-
}
151150
}
152151

153152
updateHeaderColumn(){
@@ -403,6 +402,25 @@ export default class SelectRange extends Module {
403402
///////////////////////////////////
404403

405404
keyNavigate(dir, e){
405+
if(this.options("selectableRangeBlurEditOnNavigate")){
406+
const isEditing = this.chain("edit-check-editing");
407+
408+
if(isEditing){
409+
if(dir === 'next' || dir === 'prev'){
410+
this.dispatch("edit-cancel-cell");
411+
}else{
412+
// Prevent navigating while editing except for next/prev
413+
return false;
414+
}
415+
}
416+
}
417+
418+
if (dir === 'prev') {
419+
dir = 'left';
420+
} else if (dir === 'next') {
421+
dir = 'right';
422+
}
423+
406424
if(this.navigate(false, false, dir)){
407425
e.preventDefault();
408426
}

0 commit comments

Comments
 (0)