From 1107e1d9fd3750e6e9af5ce4c0e2f9a649408f3f Mon Sep 17 00:00:00 2001 From: Szymon Kłos Date: Thu, 31 Mar 2022 15:36:01 +0200 Subject: jsdialog: a11y: make widgets focusable fixes #2965 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - now widgets are accessible using tab key - can close all dialogs with ESC key Signed-off-by: Szymon Kłos Change-Id: I4dcafb90f61bd05a91048ec1631d6eb851986c20 --- browser/src/control/Control.JSDialog.js | 2 ++ browser/src/control/Control.JSDialogBuilder.js | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/browser/src/control/Control.JSDialog.js b/browser/src/control/Control.JSDialog.js index e33ee61224..ccf9891ea3 100644 --- a/browser/src/control/Control.JSDialog.js +++ b/browser/src/control/Control.JSDialog.js @@ -280,6 +280,8 @@ L.Control.JSDialog = L.Control.extend({ container.querySelector('[id=\'' + focusWidgetId + '\']') : null; if (focusWidget) focusWidget.focus(); + if (focusWidget && document.activeElement !== focusWidget) + console.error('cannot get focus for widget: "' + focusWidgetId + '"'); }; this.dialogs[data.id] = { diff --git a/browser/src/control/Control.JSDialogBuilder.js b/browser/src/control/Control.JSDialogBuilder.js index b8cefa01cc..4c7e86b471 100644 --- a/browser/src/control/Control.JSDialogBuilder.js +++ b/browser/src/control/Control.JSDialogBuilder.js @@ -2961,13 +2961,17 @@ L.Control.JSDialogBuilder = L.Control.extend({ if (!parent || !data || !data.id || data.id === '') return; + var control = parent.querySelector('[id=\'' + data.id + '\']'); if (data.visible === 'false' || data.visible === false) { - var control = parent.querySelector('[id=\'' + data.id + '\']'); if (control) L.DomUtil.addClass(control, 'hidden'); else if (parent.id === data.id) L.DomUtil.addClass(parent, 'hidden'); } + + // natural tab-order when using keyboard navigation + if (control && !control.hasAttribute('tabIndex')) + control.setAttribute('tabIndex', '0'); }, build: function(parent, data, hasVerticalParent, parentHasManyChildren) { -- cgit