a11y: mark widgets as groups (#41119)

This commit is contained in:
Frédéric Péters 2020-03-28 10:18:01 +01:00
parent d20db7a3f7
commit 1e5e663d76
3 changed files with 10 additions and 7 deletions

View File

@ -1305,10 +1305,10 @@ def test_form_edit_field_advanced(pub):
resp = resp.click('Edit', href='1/')
assert resp.forms[0]['label'].value == '1st field'
assert '<legend>Additional parameters</legend>' in resp.text
assert '<label class="field--label" for="form_prefill">Prefill</label>' in resp.text
assert '>Prefill</label>' in resp.text
# check the "prefill" field is under additional parameters
assert resp.text.index('<legend>Additional parameters</legend>') < \
resp.text.index('<label class="field--label" for="form_prefill">Prefill</label>')
resp.text.index('>Prefill</label>')
# complete the "prefill" field
resp.forms[0]['prefill$type'] = 'String / Template'
@ -1323,10 +1323,10 @@ def test_form_edit_field_advanced(pub):
resp = resp.click('Edit', href='1/')
assert resp.forms[0]['label'].value == '1st field'
assert '<legend>Additional parameters</legend>' in resp.text
assert '<label class="field--label" for="form_data_source">Data Source</label>' in resp.text
assert '>Data Source</label>' in resp.text
# check the "data source" field is under additional parameters
assert resp.text.index('<legend>Additional parameters</legend>') < \
resp.text.index('<label class="field--label" for="form_data_source">Data Source</label>')
resp.text.index('>Data Source</label>')
# start filling the "data source" field
resp.forms[0]['data_source$type'] = 'json'
@ -1336,8 +1336,7 @@ def test_form_edit_field_advanced(pub):
# it should now appear before the additional parameters section
resp = resp.click('Edit', href='1/')
assert resp.text.index('<legend>Additional parameters</legend>') > \
resp.text.index('<label class="field--label" for="form_data_source">Data Source</label>')
assert resp.text.index('<legend>Additional parameters</legend>') > resp.text.index('>Data Source</label>')
def test_form_prefill_field(pub):

View File

@ -109,7 +109,7 @@ def render_title(self, title):
title += htmltext('<span title="%s" class="required">*</span>') % _(
'This field is required.')
return htmltext('<div class="title"><label class="field--label" '
'for="form_%s">%s</label></div>') % (self.name, title)
'id="form_label_%s" for="form_%s">%s</label></div>') % (self.name, self.name, title)
else:
return ''
@ -211,6 +211,7 @@ class SubmitWidget(quixote.form.widget.SubmitWidget):
class RadiobuttonsWidget(quixote.form.RadiobuttonsWidget):
template_name = 'qommon/forms/widgets/radiobuttons.html'
has_inside_labels = True
content_extra_attributes = {'role': 'radiogroup'}
def __init__(self, name, value=None, **kwargs):
self.options_with_attributes = kwargs.pop('options_with_attributes', None)
@ -472,6 +473,8 @@ class CommentWidget(Widget):
class CompositeWidget(quixote.form.CompositeWidget):
content_extra_attributes = {'role': 'group'}
def render_as_thead(self):
r = TemplateIO(html=True)
r += htmltext('<tr>\n')

View File

@ -25,6 +25,7 @@
{% endblock %}
{% block widget-content %}
<div class="content {{widget.content.content_extra_css_class}}"
aria-labelledby="form_label_{{widget.name}}"
{% for attr, value in widget.content_extra_attributes.items %}
{{attr}}="{{value}}"
{% endfor %}