Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (this._activeElement && !isElementTabbable(this._activeElement)) {
this._activeElement = null
}
const childNodes = element && element.children
for (let childIndex = 0; childNodes && childIndex < childNodes.length; childIndex++) {
const child = childNodes[childIndex] as HTMLElement
if (!isElementFocusZone(child)) {
// If the item is explicitly set to not be focusable then TABINDEX needs to be set to -1.
if (child.getAttribute && child.getAttribute(IS_FOCUSABLE_ATTRIBUTE) === 'false') {
child.setAttribute(TABINDEX, '-1')
}
if (isElementTabbable(child)) {
if (this.props.disabled) {
child.setAttribute(TABINDEX, '-1')
} else if (
!this._isInnerZone &&
((!this._activeElement && !this._defaultFocusElement) || this._activeElement === child)
) {
this._defaultFocusElement = child
if (child.getAttribute(TABINDEX) !== '0') {
child.setAttribute(TABINDEX, '0')
}
} else if (child.getAttribute(TABINDEX) !== '-1') {
child.setAttribute(TABINDEX, '-1')
}
} else if (child.tagName === 'svg' && child.getAttribute('focusable') !== 'false') {
// Disgusting IE hack. Sad face.
child.setAttribute('focusable', 'false')
private updateTabIndexes(onElement?: HTMLElement) {
let element = onElement
if (!element && this._root.current) {
this._defaultFocusElement = null
element = this._root.current
if (this._activeElement && !elementContains(element, this._activeElement)) {
this._activeElement = null
}
}
// If active element changes state to disabled, set it to null.
// Otherwise, we lose keyboard accessibility to other elements in focus zone.
if (this._activeElement && !isElementTabbable(this._activeElement)) {
this._activeElement = null
}
const childNodes = element && element.children
for (let childIndex = 0; childNodes && childIndex < childNodes.length; childIndex++) {
const child = childNodes[childIndex] as HTMLElement
if (!isElementFocusZone(child)) {
// If the item is explicitly set to not be focusable then TABINDEX needs to be set to -1.
if (child.getAttribute && child.getAttribute(IS_FOCUSABLE_ATTRIBUTE) === 'false') {
child.setAttribute(TABINDEX, '-1')
}
if (isElementTabbable(child)) {
if (this.props.disabled) {
if (disabled) {
return
}
let target = ev.target as HTMLElement
const path = []
while (target && target !== this._root.current) {
path.push(target)
target = getParent(target, ALLOW_VIRTUAL_ELEMENTS) as HTMLElement
}
while (path.length) {
target = path.pop() as HTMLElement
if (target && isElementTabbable(target)) {
this.setActiveElement(target, true)
}
if (isElementFocusZone(target)) {
// Stop here since the focus zone will take care of its own children.
break
}
}
}
const ownerZoneElement = this.getOwnerZone(this._root.current) as HTMLElement
if (ownerZoneElement !== this._root.current) {
const ownerZone =
_allInstances[ownerZoneElement.getAttribute(FOCUSZONE_ID_ATTRIBUTE) as string]
return !!ownerZone && ownerZone.focusElement(this._root.current)
}
return false
}
if (
!forceIntoFirstElement &&
this._activeElement &&
elementContains(this._root.current, this._activeElement) &&
isElementTabbable(this._activeElement)
) {
this._activeElement.focus()
return true
}
const firstChild = this._root.current.firstChild as HTMLElement
return this.focusElement(getNextElement(this._root.current, firstChild, true) as HTMLElement)
}
return false
}