summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/chrome/keyboard_navigation_mixin.js1
-rw-r--r--addons/web/static/src/js/views/control_panel/control_panel_renderer.js6
-rw-r--r--addons/web/static/tests/chrome/action_manager_tests.js30
3 files changed, 37 insertions, 0 deletions
diff --git a/addons/web/static/src/js/chrome/keyboard_navigation_mixin.js b/addons/web/static/src/js/chrome/keyboard_navigation_mixin.js
index 4913d5a6a80..4318bca879a 100644
--- a/addons/web/static/src/js/chrome/keyboard_navigation_mixin.js
+++ b/addons/web/static/src/js/chrome/keyboard_navigation_mixin.js
@@ -8,6 +8,7 @@ odoo.define('web.KeyboardNavigationMixin', function (require) {
*/
var knownUnusableAccessKeys = [' ',
'A', // reserved for Odoo Edit
+ 'B', // reserved for Odoo Previous Breadcrumb (Back)
'C', // reserved for Odoo Create
'H', // reserved for Odoo Home
'J', // reserved for Odoo Discard
diff --git a/addons/web/static/src/js/views/control_panel/control_panel_renderer.js b/addons/web/static/src/js/views/control_panel/control_panel_renderer.js
index 5ce53b20806..9c519695d7d 100644
--- a/addons/web/static/src/js/views/control_panel/control_panel_renderer.js
+++ b/addons/web/static/src/js/views/control_panel/control_panel_renderer.js
@@ -254,6 +254,12 @@ var ControlPanelRenderer = Renderer.extend({
self.trigger_up('breadcrumb_clicked', {controllerID: bc.controllerID});
});
}
+
+ var secondLast = index === length - 2;
+ if (secondLast) {
+ $bc.attr('accessKey', 'b');
+ }
+
return $bc;
},
/**
diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js
index 6fdfc6d92bc..b14ccefb447 100644
--- a/addons/web/static/tests/chrome/action_manager_tests.js
+++ b/addons/web/static/tests/chrome/action_manager_tests.js
@@ -2568,6 +2568,36 @@ QUnit.module('ActionManager', {
actionManager.destroy();
});
+ QUnit.test('reverse breadcrumb works on accesskey "b"', async function (assert) {
+ assert.expect(4);
+
+ var actionManager = await createActionManager({
+ actions: this.actions,
+ archs: this.archs,
+ data: this.data,
+ });
+ await actionManager.doAction(3);
+
+ // open a record in form view
+ await testUtils.dom.click(actionManager.$('.o_list_view .o_data_row:first'));
+ await testUtils.dom.click(actionManager.$('.o_form_view button:contains(Execute action)'));
+
+ assert.containsN(actionManager, '.o_control_panel .breadcrumb li', 3);
+
+ var $previousBreadcrumb = actionManager.$('.o_control_panel .breadcrumb li.active').prev();
+ assert.strictEqual($previousBreadcrumb.attr("accesskey"), "b",
+ "previous breadcrumb should have accessKey 'b'");
+ await testUtils.dom.click($previousBreadcrumb);
+
+ assert.containsN(actionManager, '.o_control_panel .breadcrumb li', 2);
+
+ var $previousBreadcrumb = actionManager.$('.o_control_panel .breadcrumb li.active').prev();
+ assert.strictEqual($previousBreadcrumb.attr("accesskey"), "b",
+ "previous breadcrumb should have accessKey 'b'");
+
+ actionManager.destroy();
+ });
+
QUnit.test('reload previous controller when discarding a new record', async function (assert) {
assert.expect(8);