From aa125b661a3100c95adfbcdd5330041f6dd6bd1c Mon Sep 17 00:00:00 2001
From: Christian Rath-Ulrich <christian@rath-ulrich.de>
Date: Thu, 23 Nov 2023 09:24:49 +0100
Subject: [PATCH] [TASK] Add aria-label to datepicker button

To make the functionality of the button that opens the datepicker clear
to screenreaders, an aria-label is added to the button.

Resolves: #102470
Releases: main, 12.4
Change-Id: I3c16c887cd148101fe225d65ea95a6f88dd1518b
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/83292
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: core-ci <typo3@b13.com>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 typo3/sysext/backend/Classes/Form/Element/DatetimeElement.php | 4 +++-
 .../sysext/core/Resources/Private/Language/locallang_core.xlf | 3 +++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/typo3/sysext/backend/Classes/Form/Element/DatetimeElement.php b/typo3/sysext/backend/Classes/Form/Element/DatetimeElement.php
index 78af2def214e..28607ca8a598 100644
--- a/typo3/sysext/backend/Classes/Form/Element/DatetimeElement.php
+++ b/typo3/sysext/backend/Classes/Form/Element/DatetimeElement.php
@@ -194,6 +194,8 @@ class DatetimeElement extends AbstractFormElement
         $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
+        $buttonAriaLabelEscaped = htmlspecialchars($languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.datepicker.label'));
+
         $expansionHtml = [];
         $expansionHtml[] = '<div class="form-control-wrap" style="max-width: ' . $width . 'px">';
         $expansionHtml[] =  '<div class="form-wizards-wrap">';
@@ -201,7 +203,7 @@ class DatetimeElement extends AbstractFormElement
         $expansionHtml[] =          '<div class="input-group">';
         $expansionHtml[] =              '<input type="text" ' . GeneralUtility::implodeAttributes($attributes, true) . ' />';
         $expansionHtml[] =              '<input type="hidden" name="' . $itemName . '" value="' . htmlspecialchars((string)$itemValue) . '" />';
-        $expansionHtml[] =              '<button class="btn btn-default" type="button" data-global-event="click" data-action-focus="#' . $attributes['id'] . '">';
+        $expansionHtml[] =              '<button class="btn btn-default" aria-label="' . $buttonAriaLabelEscaped . '" type="button" data-global-event="click" data-action-focus="#' . $attributes['id'] . '">';
         $expansionHtml[] =                  $this->iconFactory->getIcon('actions-edit-pick-date', Icon::SIZE_SMALL)->render();
         $expansionHtml[] =              '</button>';
         $expansionHtml[] =          '</div>';
diff --git a/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf b/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf
index 0f1d59c7d712..c341c2cc605b 100644
--- a/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf
+++ b/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf
@@ -3,6 +3,9 @@
 	<file source-language="en" datatype="plaintext" original="EXT:core/Resources/Private/Language/locallang_core.xlf" date="2011-10-17T20:22:33Z" product-name="lang">
 		<header/>
 		<body>
+			<trans-unit id="labels.datepicker.label" resname="labels.datepicker.label">
+				<source>Open date picker</source>
+			</trans-unit>
 			<trans-unit id="labels.openInNewWindow" resname="labels.openInNewWindow">
 				<source>Open in new window</source>
 			</trans-unit>
-- 
GitLab