diff --git a/addons/web/static/src/js/views/kanban/kanban_record.js b/addons/web/static/src/js/views/kanban/kanban_record.js index 072f4d41f27..30bafaab117 100644 --- a/addons/web/static/src/js/views/kanban/kanban_record.js +++ b/addons/web/static/src/js/views/kanban/kanban_record.js @@ -23,7 +23,6 @@ var KanbanRecord = Widget.extend({ events: { 'click .oe_kanban_action': '_onKanbanActionClicked', 'click .o_kanban_manage_toggle_button': '_onManageTogglerClicked', - 'keydown' : '_onKanbanKeyDown', }, /** * @override @@ -289,6 +288,9 @@ var KanbanRecord = Widget.extend({ if (this.$el.hasClass('oe_kanban_global_click') || this.$el.hasClass('oe_kanban_global_click_edit')) { this.$el.on('click', this._onGlobalClick.bind(this)); + this.$el.on('keydown', this._onKeyDownCard.bind(this)); + } else { + this.$el.on('keydown', this._onKeyDownOpenFirstLink.bind(this)); } this._processFields(); this._processWidgets(); @@ -505,11 +507,33 @@ var KanbanRecord = Widget.extend({ this.do_warn("Kanban: no action for type : " + type); } }, - _onKanbanKeyDown: function (event) { + /** + * This event is linked to the kanban card when there is a global_click + * class on this card + * + * @private + * @param {KeyDownEvent} event + */ + _onKeyDownCard: function (event) { switch (event.keyCode) { case $.ui.keyCode.ENTER: event.preventDefault(); - this._openRecord(); + this._onGlobalClick(event); + break; + } + }, + /** + * This event is linked ot the kanban card when there is no global_click + * class on the card + * + * @private + * @param {KeyDownEvent} event + */ + _onKeyDownOpenFirstLink: function (event) { + switch (event.keyCode) { + case $.ui.keyCode.ENTER: + event.preventDefault(); + $(event.target).find('a, button').first().click(); break; } }, diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index c5e5f606f61..9a5f9f8f0a0 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -3587,6 +3587,34 @@ QUnit.module('Views', { kanban.destroy(); }); + + QUnit.test('keyboard navigation on kanban when the focus is on a link that' + + 'has an action and the kanban has no oe_kanban_global_... class', function(assert){ + assert.expect(1) + var kanban = createView({ + View: KanbanView, + model: 'partner', + data: this.data, + arch: '' + + '
Edit
' + + '
', + }); + + testUtils.intercept(kanban, 'switch_view', function (event) { + assert.deepEqual(event.data, { + view_type: 'form', + res_id: 1, + mode: 'edit', + model: 'partner', + },'When selecting focusing a card and hitting ENTER, the first link or button is clicked'); + }); + kanban.$('.o_kanban_record').first().focus().trigger($.Event('keydown', { + keyCode: $.ui.keyCode.ENTER, + which: $.ui.keyCode.ENTER, + })); + + kanban.destroy(); + }); }); });