[FIX] web: Disable keyboard shortcuts on BlockUI
Related to the bug: 1874270 Purpose ======= Keyboard shortcuts working on BlockUI and can cause some issues when used. Specification ============= It should not work and should not be display while some process is being executed. - add function to remove the "accesskey" attributes to avoid the use of the access keys while the blockUI is enable. - add function to reset the "accesskey" attributes when the blockUI is disable. - add condition to avoid the "Alt" key to reattribute access keys.
This commit is contained in:
@@ -103,6 +103,14 @@ odoo.define('web.KeyboardNavigationMixin', function (require) {
|
||||
* return {undefined|false}
|
||||
*/
|
||||
_onKeyDown: function (keyDownEvent) {
|
||||
if ($('body.o_ui_blocked').length &&
|
||||
(keyDownEvent.altKey || keyDownEvent.key === 'Alt') &&
|
||||
!keyDownEvent.ctrlKey) {
|
||||
if (keyDownEvent.preventDefault) keyDownEvent.preventDefault(); else keyDownEvent.returnValue = false;
|
||||
if (keyDownEvent.stopPropagation) keyDownEvent.stopPropagation();
|
||||
if (keyDownEvent.cancelBubble) keyDownEvent.cancelBubble = true;
|
||||
return false;
|
||||
}
|
||||
if (!this._areAccessKeyVisible &&
|
||||
(keyDownEvent.altKey || keyDownEvent.key === 'Alt') &&
|
||||
!keyDownEvent.ctrlKey) {
|
||||
|
||||
@@ -52,6 +52,29 @@ if ($.blockUI) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove the "accesskey" attributes to avoid the use of the access keys
|
||||
* while the blockUI is enable.
|
||||
*/
|
||||
|
||||
function blockAccessKeys() {
|
||||
var elementWithAccessKey = [];
|
||||
elementWithAccessKey = document.querySelectorAll('[accesskey]');
|
||||
_.each(elementWithAccessKey, function (elem) {
|
||||
elem.setAttribute("data-accesskey",elem.getAttribute('accesskey'));
|
||||
elem.removeAttribute('accesskey');
|
||||
});
|
||||
}
|
||||
|
||||
function unblockAccessKeys() {
|
||||
var elementWithDataAccessKey = [];
|
||||
elementWithDataAccessKey = document.querySelectorAll('[data-accesskey]');
|
||||
_.each(elementWithDataAccessKey, function (elem) {
|
||||
elem.setAttribute('accesskey', elem.getAttribute('data-accesskey'));
|
||||
elem.removeAttribute('data-accesskey');
|
||||
});
|
||||
}
|
||||
|
||||
var throbbers = [];
|
||||
|
||||
function blockUI() {
|
||||
@@ -60,6 +83,7 @@ function blockUI() {
|
||||
throbbers.push(throbber);
|
||||
throbber.appendTo($(".oe_blockui_spin_container"));
|
||||
$(document.body).addClass('o_ui_blocked');
|
||||
blockAccessKeys();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
@@ -67,6 +91,7 @@ function unblockUI() {
|
||||
_.invoke(throbbers, 'destroy');
|
||||
throbbers = [];
|
||||
$(document.body).removeClass('o_ui_blocked');
|
||||
unblockAccessKeys();
|
||||
return $.unblockUI.apply($, arguments);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user