fix: partially fix video/audio in dialogs (#1939)
This commit is contained in:
parent
a3d0c87e27
commit
456dac73b5
|
@ -1,9 +1,13 @@
|
||||||
// Forked from a11y-dialog 4.0.1, adding a small change to element.focus() to work
|
// Forked from a11y-dialog 4.0.1, adding a small change to element.focus() to work
|
||||||
// around a Chrome bug with sticky positioning (https://github.com/nolanlawson/pinafore/issues/671)
|
// around a Chrome bug with sticky positioning (https://github.com/nolanlawson/pinafore/issues/671)
|
||||||
|
// Now it also works around shadow DOM and video/audio with controls.
|
||||||
|
// (video/audio with controls is not 100% fixable because we can't focus the elements inside, but
|
||||||
|
// you can at least tab to the video/audio and use other controls, like space bar and left/right)
|
||||||
// Original: https://unpkg.com/a11y-dialog@4.0.1/a11y-dialog.js
|
// Original: https://unpkg.com/a11y-dialog@4.0.1/a11y-dialog.js
|
||||||
|
|
||||||
const FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^="-"])']
|
const FOCUSABLE_ELEMENTS_QUERY = 'a[href], area[href], input, select, textarea, ' +
|
||||||
const FOCUSABLE_ELEMENTS_QUERY = FOCUSABLE_ELEMENTS.join(',')
|
'button, iframe, object, embed, [contenteditable], [tabindex], ' +
|
||||||
|
'video[controls], audio[controls], summary'
|
||||||
const TAB_KEY = 9
|
const TAB_KEY = 9
|
||||||
const ESCAPE_KEY = 27
|
const ESCAPE_KEY = 27
|
||||||
const shadowRoots = []
|
const shadowRoots = []
|
||||||
|
@ -365,8 +369,10 @@ function getFocusableChildren (node) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return candidateFocusableChildren.filter(child => {
|
return candidateFocusableChildren.filter(child => {
|
||||||
return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length) &&
|
return !child.disabled &&
|
||||||
child.tabIndex !== -1
|
!/^-/.test(child.getAttribute('tabindex') || '') &&
|
||||||
|
!child.hasAttribute('inert') && // see https://github.com/GoogleChrome/inert-polyfill
|
||||||
|
(child.offsetWidth || child.offsetHeight || child.getClientRects().length)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue