From cfb2debacb8fdf3d510c241d7df28fbab060453e Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Mon, 14 Oct 2019 17:37:56 +0500 Subject: [PATCH 1/2] fix(Grid): arrow key navigation --- frappe/public/js/frappe/form/grid_row.js | 45 ++++++++++++++---------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 0f3f01ac61..46058746da 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -416,7 +416,7 @@ export default class GridRow { var me = this; if(field.$input) { field.$input.on('keydown', function(e) { - var { TAB, UP_ARROW, DOWN_ARROW } = frappe.ui.keyCode; + var { TAB, UP: UP_ARROW, DOWN: DOWN_ARROW } = frappe.ui.keyCode; if(!in_list([TAB, UP_ARROW, DOWN_ARROW], e.which)) { return; } @@ -429,43 +429,50 @@ export default class GridRow { if(in_list(['Text', 'Small Text'], fieldtype)) { return; } + if(field.autocomplete_open) { + return; + } base.toggle_editable_row(); - setTimeout(function() { - var input = base.columns[fieldname].field.$input; - if(input) { - input.focus(); - } - }, 400) + var input = base.columns[fieldname].field.$input; + if(input) { + input.focus(); + } - } + }; // TAB if(e.which==TAB && !e.shiftKey) { - // last column - if($(this).attr('data-last-input') || - me.grid.wrapper.find('.grid-row :input:enabled:last').get(0)===this) { - setTimeout(function() { - if(me.doc.idx === values.length) { - // last row + var last_column = me.wrapper.find(':input:enabled:last').get(0); + var is_last_column = $(this).attr('data-last-input') || last_column === this; + + if (is_last_column) { + // last row + if (me.doc.idx === values.length) { + setTimeout(function () { me.grid.add_new_row(null, null, true); me.grid.grid_rows[me.grid.grid_rows.length - 1].toggle_editable_row(); me.grid.set_focus_on_row(); - } else { - me.grid.grid_rows[me.doc.idx].toggle_editable_row(); - me.grid.set_focus_on_row(me.doc.idx+1); - } - }, 500); + }, 100); + } + // last column before last row + else { + me.grid.grid_rows[me.doc.idx].toggle_editable_row(); + me.grid.set_focus_on_row(me.doc.idx); + return false; + } } } else if(e.which==UP_ARROW) { if(me.doc.idx > 1) { var prev = me.grid.grid_rows[me.doc.idx-2]; move_up_down(prev); + return false; } } else if(e.which==DOWN_ARROW) { if(me.doc.idx < values.length) { var next = me.grid.grid_rows[me.doc.idx]; move_up_down(next); + return false; } } From ec921fd1a5cd78021c6f1694be7a63db520c5570 Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Tue, 5 Nov 2019 22:20:29 +0500 Subject: [PATCH 2/2] fix(Grid Row): Arrow key nav do not prevent default unnecessarily --- frappe/public/js/frappe/form/grid_row.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 46058746da..f9cb60a4df 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -426,11 +426,11 @@ export default class GridRow { var fieldtype = $(this).attr('data-fieldtype'); var move_up_down = function(base) { - if(in_list(['Text', 'Small Text'], fieldtype)) { - return; + if(in_list(['Text', 'Small Text', 'Code', 'Text Editor', 'HTML Editor'], fieldtype) && !e.altKey) { + return false; } if(field.autocomplete_open) { - return; + return false; } base.toggle_editable_row(); @@ -438,7 +438,7 @@ export default class GridRow { if(input) { input.focus(); } - + return true; }; // TAB @@ -465,14 +465,16 @@ export default class GridRow { } else if(e.which==UP_ARROW) { if(me.doc.idx > 1) { var prev = me.grid.grid_rows[me.doc.idx-2]; - move_up_down(prev); - return false; + if (move_up_down(prev)) { + return false; + } } } else if(e.which==DOWN_ARROW) { if(me.doc.idx < values.length) { var next = me.grid.grid_rows[me.doc.idx]; - move_up_down(next); - return false; + if (move_up_down(next)) { + return false; + } } }