Skip to content

Commit c3c8fcd

Browse files
marker-daomarker dao ®
andauthored
FileUploader: Support accessibility in FileList (#31454)
Co-authored-by: marker dao ® <[email protected]>
1 parent 0a69269 commit c3c8fcd

File tree

32 files changed

+345
-1
lines changed

32 files changed

+345
-1
lines changed

packages/devextreme/js/__internal/ui/file_uploader/file_uploader.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,12 +652,25 @@ class FileUploader extends Editor<FileUploaderProperties> {
652652
}
653653

654654
this.$element().toggleClass(FILEUPLOADER_SHOW_FILE_LIST_CLASS, showFileList);
655+
this._toggleFileContainerAria(Boolean(showFileList && this._files?.length));
655656
this._toggleFileUploaderEmptyClassName();
656657
this._updateFileNameMaxWidth();
657658

658659
this._validationMessage?.repaint();
659660
}
660661

662+
_toggleFileContainerAria(applyAria: boolean): void {
663+
const aria = {
664+
role: applyAria ? 'list' : null,
665+
'aria-label': applyAria
666+
? messageLocalization.format('dxFileUploader-fileListLabel')
667+
: null,
668+
};
669+
670+
// @ts-expect-error attr type should be extdened
671+
this._$filesContainer?.attr(aria);
672+
}
673+
661674
_renderFile(file: FileUploaderItem): void {
662675
const { value } = file;
663676

@@ -667,7 +680,8 @@ class FileUploader extends Editor<FileUploaderProperties> {
667680

668681
const $fileContainer = $('<div>')
669682
.addClass(FILEUPLOADER_FILE_CONTAINER_CLASS)
670-
.appendTo(this._$filesContainer);
683+
.appendTo(this._$filesContainer)
684+
.attr('role', 'listitem');
671685

672686
this._renderFileIcon(value.name, $fileContainer);
673687

@@ -800,6 +814,10 @@ class FileUploader extends Editor<FileUploaderProperties> {
800814
integrationOptions: {},
801815
hoverStateEnabled,
802816
stylingMode: _buttonStylingMode,
817+
elementAttr: {
818+
// @ts-expect-error foramat params should be extended
819+
'aria-label': messageLocalization.format('dxFileUploader-removeFileButtonLabel', file?.value?.name ?? ''),
820+
},
803821
},
804822
);
805823

@@ -825,6 +843,10 @@ class FileUploader extends Editor<FileUploaderProperties> {
825843
icon: 'upload',
826844
hoverStateEnabled,
827845
stylingMode: _buttonStylingMode,
846+
elementAttr: {
847+
// @ts-expect-error foramat params should be extended
848+
'aria-label': messageLocalization.format('dxFileUploader-uploadFileButtonLabel', file?.value?.name ?? ''),
849+
},
828850
},
829851
);
830852

@@ -859,6 +881,10 @@ class FileUploader extends Editor<FileUploaderProperties> {
859881
this.option({ value: valueCopy });
860882
this._preventRecreatingFiles = false;
861883

884+
if (this._files?.length === 0) {
885+
this._toggleFileContainerAria(false);
886+
}
887+
862888
this._toggleFileUploaderEmptyClassName();
863889
this._resetInputValue(true);
864890
}

packages/devextreme/js/localization/messages/ar.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "نوع الملف غير مسموح به",
8989
"dxFileUploader-invalidMaxFileSize": "الملف كبير جدا",
9090
"dxFileUploader-invalidMinFileSize": "الملف صغير جدًا",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "من عند",
9396
"dxRangeSlider-ariaTill": "حتى",

packages/devextreme/js/localization/messages/bg.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "File type is not allowed",
8989
"dxFileUploader-invalidMaxFileSize": "File is too large",
9090
"dxFileUploader-invalidMinFileSize": "File is too small",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "От",
9396
"dxRangeSlider-ariaTill": "Till",

packages/devextreme/js/localization/messages/ca.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "El tipus de fitxer no està permès",
8989
"dxFileUploader-invalidMaxFileSize": "El fitxer és massa gran",
9090
"dxFileUploader-invalidMinFileSize": "El fitxer és massa petit",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "Des de",
9396
"dxRangeSlider-ariaTill": "Fins a",

packages/devextreme/js/localization/messages/cs.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "Nepovolený typ souboru",
8989
"dxFileUploader-invalidMaxFileSize": "Soubor je příliš velký",
9090
"dxFileUploader-invalidMinFileSize": "Soubor je příliš malý",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "Od",
9396
"dxRangeSlider-ariaTill": "Do",

packages/devextreme/js/localization/messages/da.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "Filtype er ikke tilladt",
8989
"dxFileUploader-invalidMaxFileSize": "Filen er for stor",
9090
"dxFileUploader-invalidMinFileSize": "Filen er for lille",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "Fra",
9396
"dxRangeSlider-ariaTill": "Indtil",

packages/devextreme/js/localization/messages/de.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "Unzulässiger Dateityp",
8989
"dxFileUploader-invalidMaxFileSize": "Datei ist zu groß",
9090
"dxFileUploader-invalidMinFileSize": "Datei ist zu klein",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "Von",
9396
"dxRangeSlider-ariaTill": "Bis",

packages/devextreme/js/localization/messages/el.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "Ο τυπος του αρχείου δεν είναι επιτρεπτός",
8989
"dxFileUploader-invalidMaxFileSize": "Το αρχείο είναι πολύ μεγάλο",
9090
"dxFileUploader-invalidMinFileSize": "Το αρχειο είναι πολυ μικρό",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "Από",
9396
"dxRangeSlider-ariaTill": "Εώς",

packages/devextreme/js/localization/messages/en.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "File type is not allowed",
8989
"dxFileUploader-invalidMaxFileSize": "File is too large",
9090
"dxFileUploader-invalidMinFileSize": "File is too small",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "From",
9396
"dxRangeSlider-ariaTill": "Till",

packages/devextreme/js/localization/messages/es.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"dxFileUploader-invalidFileExtension": "Tipo de archivo no está permitido",
8989
"dxFileUploader-invalidMaxFileSize": "Archivo es muy grande",
9090
"dxFileUploader-invalidMinFileSize": "Archivo es muy pequeño",
91+
"dxFileUploader-fileListLabel": "File list",
92+
"dxFileUploader-removeFileButtonLabel": "Remove file {0}",
93+
"dxFileUploader-uploadFileButtonLabel": "Upload file {0}",
9194

9295
"dxRangeSlider-ariaFrom": "Desde",
9396
"dxRangeSlider-ariaTill": "Hasta",

0 commit comments

Comments
 (0)