don't autofocus external links like feedback

#495
This commit is contained in:
tophf 2018-09-06 20:59:04 +03:00
parent 4a877ad27b
commit b90f7bfce5
2 changed files with 9 additions and 3 deletions

View File

@ -372,18 +372,23 @@ function focusAccessibility() {
* Switches to the next/previous keyboard-focusable element * Switches to the next/previous keyboard-focusable element
* @param {HTMLElement} rootElement * @param {HTMLElement} rootElement
* @param {Number} step - for exmaple 1 or -1 * @param {Number} step - for exmaple 1 or -1
* @returns {HTMLElement|false|undefined} -
* HTMLElement: focus changed,
* false: focus unchanged,
* undefined: nothing to focus
*/ */
function moveFocus(rootElement, step) { function moveFocus(rootElement, step) {
const elements = [...rootElement.getElementsByTagName('*')]; const elements = [...rootElement.getElementsByTagName('*')];
const activeIndex = Math.max(0, elements.indexOf(document.activeElement)); const activeIndex = Math.max(0, elements.indexOf(document.activeElement));
const num = elements.length; const num = elements.length;
const {activeElement} = document;
for (let i = 1; i < num; i++) { for (let i = 1; i < num; i++) {
const elementIndex = (activeIndex + i * step + num) % num; const elementIndex = (activeIndex + i * step + num) % num;
// we don't use positive tabindex so we stop at any valid value // we don't use positive tabindex so we stop at any valid value
const el = elements[elementIndex]; const el = elements[elementIndex];
if (!el.disabled && el.tabIndex >= 0) { if (!el.disabled && el.tabIndex >= 0) {
el.focus(); el.focus();
return; return activeElement !== el && el;
} }
} }
} }

View File

@ -34,8 +34,9 @@ function messageBox({
document.body.appendChild(messageBox.element); document.body.appendChild(messageBox.element);
messageBox.originalFocus = document.activeElement; messageBox.originalFocus = document.activeElement;
moveFocus(messageBox.element, 1); // skip external links like feedback
while ((moveFocus(messageBox.element, 1) || {}).target === '_blank') {/*NOP*/}
// suppress focus outline when invoked via click
if (focusAccessibility.lastFocusedViaClick && document.activeElement) { if (focusAccessibility.lastFocusedViaClick && document.activeElement) {
document.activeElement.dataset.focusedViaClick = ''; document.activeElement.dataset.focusedViaClick = '';
} }