From 04c0f886236b9f70604960429b6e011070d5d941 Mon Sep 17 00:00:00 2001 From: Yann Weber Date: Tue, 9 Jan 2024 17:45:15 +0100 Subject: [PATCH] a11y: add aria-required when input field required (#85451) --- gadjo/templatetags/gadjo.py | 2 ++ tests/test_templatetags.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/gadjo/templatetags/gadjo.py b/gadjo/templatetags/gadjo.py index 89433dd..7f30bc1 100644 --- a/gadjo/templatetags/gadjo.py +++ b/gadjo/templatetags/gadjo.py @@ -114,6 +114,8 @@ def with_template(form): if field.errors: aria_described_by.append(f'error_{field.id_for_label}') field.field.widget.attrs['aria-invalid'] = 'true' + if field.field.required: + field.field.widget.attrs['aria-required'] = 'true' if aria_described_by: field.field.widget.attrs['aria-describedby'] = ' '.join(aria_described_by) fields_with_templates.append( diff --git a/tests/test_templatetags.py b/tests/test_templatetags.py index 9057188..b4f320f 100644 --- a/tests/test_templatetags.py +++ b/tests/test_templatetags.py @@ -46,6 +46,7 @@ def test_with_template(): rendered = t.render(ctx) assert PyQuery(rendered).find('input[type=text]') assert not PyQuery(rendered).find('input[type=text]').attr['aria-invalid'] + assert PyQuery(rendered).find('input[type=text]').attr['aria-required'] ctx = Context({'request': request, 'form': ExampleForm(data=request.GET)}) rendered = t.render(ctx) @@ -71,3 +72,10 @@ def test_with_template(): PyQuery(rendered).find('input[type=text][aria-describedby]').attr['aria-describedby'] == 'help_text_id_text error_id_text' ) + + class ExampleForm(forms.Form): + text = forms.CharField(label='Text', max_length=50, required=False) + + ctx = Context({'request': request, 'form': ExampleForm(data=request.GET)}) + rendered = t.render(ctx) + assert not PyQuery(rendered).find('input[type=text]').attr['aria-required']