diff --git a/src/pretix/base/forms/widgets.py b/src/pretix/base/forms/widgets.py index b353295578..c86ff75d62 100644 --- a/src/pretix/base/forms/widgets.py +++ b/src/pretix/base/forms/widgets.py @@ -209,7 +209,10 @@ class SplitDateTimePickerWidget(forms.SplitDateTimeWidget): date_attrs['placeholder'] = lazy(date_placeholder, str) time_attrs['placeholder'] = lazy(time_placeholder, str) - + date_attrs['aria-label'] = _('Date') + time_attrs['aria-label'] = _('Time') + if 'aria-label' in attrs: + del attrs['aria-label'] widgets = ( forms.DateInput(attrs=date_attrs, format=date_format), forms.TimeInput(attrs=time_attrs, format=time_format), diff --git a/src/pretix/control/forms/renderers.py b/src/pretix/control/forms/renderers.py index 94abd8bc0b..74de913046 100644 --- a/src/pretix/control/forms/renderers.py +++ b/src/pretix/control/forms/renderers.py @@ -20,7 +20,7 @@ # . # from bootstrap3.text import text_value -from django.forms import CheckboxInput +from django.forms import CheckboxInput, CheckboxSelectMultiple, RadioSelect from django.forms.utils import flatatt from django.utils.html import format_html from django.utils.safestring import mark_safe @@ -30,7 +30,7 @@ from i18nfield.forms import I18nFormField from pretix.base.forms.renderers import FieldRenderer, InlineFieldRenderer -def render_label(content, label_for=None, label_class=None, label_title='', optional=False): +def render_label(content, label_for=None, label_class=None, label_title='', label_id='', optional=False): """ Render a label with content """ @@ -41,6 +41,8 @@ def render_label(content, label_for=None, label_class=None, label_title='', opti attrs['class'] = label_class if label_title: attrs['title'] = label_title + if label_id: + attrs['id'] = label_id if text_value(content) == ' ': # Empty label, e.g. checkbox @@ -61,6 +63,7 @@ class ControlFieldRenderer(FieldRenderer): def __init__(self, *args, **kwargs): kwargs['layout'] = 'horizontal' super().__init__(*args, **kwargs) + self.is_group_widget = isinstance(self.widget, (CheckboxSelectMultiple, RadioSelect, )) or (self.is_multi_widget and len(self.widget.widgets) > 1) def add_label(self, html): label = self.get_label() @@ -73,14 +76,29 @@ class ControlFieldRenderer(FieldRenderer): else: required = self.field.field.required + if self.is_group_widget: + label_for = "" + label_id = "legend-{}".format(self.field.html_name) + else: + label_for = self.field.id_for_label + label_id = "" + html = render_label( label, - label_for=self.field.id_for_label, + label_for=label_for, label_class=self.get_label_class(), + label_id=label_id, optional=not required and not isinstance(self.widget, CheckboxInput) ) + html return html + def wrap_label_and_field(self, html): + if self.is_group_widget: + attrs = ' role="group" aria-labelledby="legend-{}"'.format(self.field.html_name) + else: + attrs = '' + return '
{html}
'.format(klass=self.get_form_group_class(), html=html, attrs=attrs) + class BulkEditMixin: