Merge pull request #1188 from lkiesow/a11y-tooltip

Make Tooltips Accessible
This commit is contained in:
advplyr 2022-11-20 16:47:27 -06:00 committed by GitHub
commit a2cd755ffa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -21,7 +21,8 @@ export default {
return { return {
tooltip: null, tooltip: null,
tooltipId: null, tooltipId: null,
isShowing: false isShowing: false,
hideTimeout: null
} }
}, },
watch: { watch: {
@ -46,10 +47,12 @@ export default {
var tooltip = document.createElement('div') var tooltip = document.createElement('div')
this.tooltipId = String(Math.floor(Math.random() * 10000)) this.tooltipId = String(Math.floor(Math.random() * 10000))
tooltip.id = this.tooltipId tooltip.id = this.tooltipId
tooltip.className = 'tooltip-wrapper absolute px-2 py-1 text-white pointer-events-none text-xs rounded shadow-lg max-w-xs text-center hidden sm:block' tooltip.className = 'tooltip-wrapper absolute px-2 py-1 text-white text-xs rounded shadow-lg max-w-xs text-center hidden sm:block'
tooltip.style.zIndex = 100 tooltip.style.zIndex = 100
tooltip.style.backgroundColor = 'rgba(0,0,0,0.85)' tooltip.style.backgroundColor = 'rgba(0,0,0,0.85)'
tooltip.innerHTML = this.text tooltip.innerHTML = this.text
tooltip.addEventListener('mouseover', this.cancelHide);
tooltip.addEventListener('mouseleave', this.hideTooltip);
this.setTooltipPosition(tooltip) this.setTooltipPosition(tooltip)
@ -95,6 +98,7 @@ export default {
} catch (error) { } catch (error) {
console.error(error) console.error(error)
} }
this.isShowing = true this.isShowing = true
}, },
hideTooltip() { hideTooltip() {
@ -102,11 +106,16 @@ export default {
this.tooltip.remove() this.tooltip.remove()
this.isShowing = false this.isShowing = false
}, },
cancelHide() {
if (this.hideTimeout) clearTimeout(this.hideTimeout);
},
mouseover() { mouseover() {
if (!this.isShowing) this.showTooltip() if (!this.isShowing) this.showTooltip()
}, },
mouseleave() { mouseleave() {
if (this.isShowing) this.hideTooltip() if (this.isShowing) {
this.hideTimeout = setTimeout(this.hideTooltip, 100)
}
} }
}, },
beforeDestroy() { beforeDestroy() {