From 92754136a653453d00f0b95cdefac533fec5e1ba Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 9 Oct 2019 12:39:44 +0200 Subject: [PATCH] Refs #1432 -- Proper grouping of autocomplete properties --- src/pretix/base/forms/questions.py | 42 ++++++++++++++++++++++++---- src/pretix/presale/forms/checkout.py | 1 + 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index 00db9c54d7..dd49bfd6ed 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -96,8 +96,8 @@ class NamePartsWidget(forms.MultiWidget): id='%s_%s' % (id_, i), title=self.scheme['fields'][i][1], placeholder=self.scheme['fields'][i][1], - autocomplete=self.autofill_map.get(self.scheme['fields'][i][0], 'off'), ) + final_attrs['autocomplete'] = (self.attrs.get('autocomplete', '') + ' ' + self.autofill_map.get(self.scheme['fields'][i][0], 'off')).strip() final_attrs['data-size'] = self.scheme['fields'][i][2] output.append(widget.render(name + '_%s' % i, widget_value, final_attrs, renderer=renderer)) return mark_safe(self.format_output(output)) @@ -203,7 +203,12 @@ class BaseQuestionsForm(forms.Form): self.fields['attendee_email'] = forms.EmailField( required=event.settings.attendee_emails_required, label=_('Attendee email'), - initial=(cartpos.attendee_email if cartpos else orderpos.attendee_email) + initial=(cartpos.attendee_email if cartpos else orderpos.attendee_email), + widget=forms.EmailInput( + attrs={ + 'autocomplete': 'email' + } + ) ) for q in questions: @@ -333,6 +338,10 @@ class BaseQuestionsForm(forms.Form): self.fields[key] = value value.initial = data.get('question_form_data', {}).get(key) + for k, v in self.fields.items(): + if v.widget.attrs.get('autocomplete') or k == 'attendee_name_parts': + v.widget.attrs['autocomplete'] = 'section-{} '.format(self.prefix) + v.widget.attrs.get('autocomplete', '') + def clean(self): d = super().clean() @@ -375,9 +384,25 @@ class BaseInvoiceAddressForm(forms.ModelForm): 'vat_id', 'internal_reference', 'beneficiary') widgets = { 'is_business': BusinessBooleanRadio, - 'street': forms.Textarea(attrs={'rows': 2, 'placeholder': _('Street and Number')}), + 'street': forms.Textarea(attrs={ + 'rows': 2, + 'placeholder': _('Street and Number'), + 'autocomplete': 'street-address' + }), 'beneficiary': forms.Textarea(attrs={'rows': 3}), - 'company': forms.TextInput(attrs={'data-display-dependency': '#id_is_business_1'}), + 'country': forms.Select(attrs={ + 'autocomplete': 'country', + }), + 'zipcode': forms.TextInput(attrs={ + 'autocomplete': 'postal-code', + }), + 'city': forms.TextInput(attrs={ + 'autocomplete': 'address-level2', + }), + 'company': forms.TextInput(attrs={ + 'data-display-dependency': '#id_is_business_1', + 'autocomplete': 'organization', + }), 'vat_id': forms.TextInput(attrs={'data-display-dependency': '#id_is_business_1'}), 'internal_reference': forms.TextInput, } @@ -435,7 +460,10 @@ class BaseInvoiceAddressForm(forms.ModelForm): self.fields['state'] = forms.ChoiceField( label=pgettext_lazy('address', 'State'), required=False, - choices=c + choices=c, + widget=forms.Select(attrs={ + 'autocomplete': 'address-level1', + }), ) self.fields['state'].widget.is_required = True @@ -472,6 +500,10 @@ class BaseInvoiceAddressForm(forms.ModelForm): if not event.settings.invoice_address_beneficiary: del self.fields['beneficiary'] + for k, v in self.fields.items(): + if v.widget.attrs.get('autocomplete') or k == 'name_parts': + v.widget.attrs['autocomplete'] = 'section-invoice billing ' + v.widget.attrs.get('autocomplete', '') + def clean(self): data = self.cleaned_data if not data.get('is_business'): diff --git a/src/pretix/presale/forms/checkout.py b/src/pretix/presale/forms/checkout.py index e4932f97f3..c56687b53c 100644 --- a/src/pretix/presale/forms/checkout.py +++ b/src/pretix/presale/forms/checkout.py @@ -29,6 +29,7 @@ class ContactForm(forms.Form): help_text=_('Make sure to enter a valid email address. We will send you an order ' 'confirmation including a link that you need to access your order later.'), validators=[EmailBlacklistValidator()], + widget=forms.EmailInput(attrs={'autocomplete': 'section-contact email'}) ) def __init__(self, *args, **kwargs):