(
container: Element,
element: Element,
{selector = '*'} = {},
)
| 55 | } |
| 56 | |
| 57 | function getLabels( |
| 58 | container: Element, |
| 59 | element: Element, |
| 60 | {selector = '*'} = {}, |
| 61 | ): {content: string | null; formControl: HTMLElement | null}[] { |
| 62 | const ariaLabelledBy = element.getAttribute('aria-labelledby') |
| 63 | const labelsId = ariaLabelledBy ? ariaLabelledBy.split(' ') : [] |
| 64 | return labelsId.length |
| 65 | ? labelsId.map(labelId => { |
| 66 | const labellingElement = container.querySelector<HTMLElement>( |
| 67 | `[id="${labelId}"]`, |
| 68 | ) |
| 69 | return labellingElement |
| 70 | ? {content: getLabelContent(labellingElement), formControl: null} |
| 71 | : {content: '', formControl: null} |
| 72 | }) |
| 73 | : Array.from(getRealLabels(element)).map(label => { |
| 74 | const textToMatch = getLabelContent(label) |
| 75 | const formControlSelector = |
| 76 | 'button, input, meter, output, progress, select, textarea' |
| 77 | const labelledFormControl = Array.from( |
| 78 | label.querySelectorAll<HTMLElement>(formControlSelector), |
| 79 | ).filter(formControlElement => formControlElement.matches(selector))[0] |
| 80 | return {content: textToMatch, formControl: labelledFormControl} |
| 81 | }) |
| 82 | } |
| 83 | |
| 84 | export {getLabels, getRealLabels, getLabelContent} |
no test coverage detected