@@ -24,23 +24,22 @@ function getTextContent(
24
24
. join ( '' )
25
25
}
26
26
27
- function getLabelContent ( element : Element | HTMLInputElement ) {
28
- let textContent
27
+ function getLabelContent ( element : Element ) : string | null {
28
+ let textContent : string | null
29
29
if ( element . tagName . toLowerCase ( ) === 'label' ) {
30
30
textContent = getTextContent ( element )
31
- } else if ( 'value' in element ) {
32
- return element . value
33
31
} else {
34
- textContent = element . textContent
32
+ textContent = ( element as HTMLInputElement ) . value || element . textContent
35
33
}
36
34
return textContent
37
35
}
38
36
39
37
// Based on https://github.com/eps1lon/dom-accessibility-api/pull/352
40
- function getRealLabels ( element : Element | HTMLInputElement ) {
41
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
42
- if ( 'labels' in element && element . labels !== undefined )
43
- return element . labels ?? [ ]
38
+ function getRealLabels ( element : Element ) {
39
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- types are not aware of older browsers that don't implement `labels`
40
+ if ( ( element as HTMLInputElement ) . labels !== undefined ) {
41
+ return ( element as HTMLInputElement ) . labels ?? [ ]
42
+ }
44
43
45
44
if ( ! isLabelable ( element ) ) return [ ]
46
45
@@ -49,9 +48,8 @@ function getRealLabels(element: Element | HTMLInputElement) {
49
48
}
50
49
51
50
function isLabelable ( element : Element ) {
52
- const labelableRegex = / B U T T O N | M E T E R | O U T P U T | P R O G R E S S | S E L E C T | T E X T A R E A /
53
51
return (
54
- labelableRegex . test ( element . tagName ) ||
52
+ / B U T T O N | M E T E R | O U T P U T | P R O G R E S S | S E L E C T | T E X T A R E A / . test ( element . tagName ) ||
55
53
( element . tagName === 'INPUT' && element . getAttribute ( 'type' ) !== 'hidden' )
56
54
)
57
55
}
0 commit comments