Fix phone tel-country-code label and autocomplete (#5227)

* Fix phone tel-country-code label and autocomplete

* Add autocomplete sectioning for MultiWidget
This commit is contained in:
Richard Schreiber
2025-06-10 20:34:08 +02:00
committed by GitHub
parent 2f7a00e660
commit 24c02751cc

View File

@@ -308,7 +308,10 @@ class WrappedPhonePrefixSelect(Select):
self.initial = "+%d" % prefix self.initial = "+%d" % prefix
break break
choices += get_phone_prefixes_sorted_and_localized() choices += get_phone_prefixes_sorted_and_localized()
super().__init__(choices=choices, attrs={'aria-label': pgettext_lazy('phonenumber', 'International area code')}) super().__init__(choices=choices, attrs={
'aria-label': pgettext_lazy('phonenumber', 'International area code'),
'autocomplete': 'tel-country-code',
})
def render(self, name, value, *args, **kwargs): def render(self, name, value, *args, **kwargs):
return super().render(name, value or self.initial, *args, **kwargs) return super().render(name, value or self.initial, *args, **kwargs)
@@ -331,11 +334,11 @@ class WrappedPhonePrefixSelect(Select):
class WrappedPhoneNumberPrefixWidget(PhoneNumberPrefixWidget): class WrappedPhoneNumberPrefixWidget(PhoneNumberPrefixWidget):
def __init__(self, attrs=None, initial=None): def __init__(self, attrs=None, initial=None):
attrs = { widgets = (WrappedPhonePrefixSelect(initial), forms.TextInput(attrs={
'aria-label': pgettext_lazy('phonenumber', 'Phone number (without international area code)') 'aria-label': pgettext_lazy('phonenumber', 'Phone number (without international area code)'),
} 'autocomplete': 'tel-national',
widgets = (WrappedPhonePrefixSelect(initial), forms.TextInput(attrs=attrs)) }))
super(PhoneNumberPrefixWidget, self).__init__(widgets, attrs) super(PhoneNumberPrefixWidget, self).__init__(widgets)
def render(self, name, value, attrs=None, renderer=None): def render(self, name, value, attrs=None, renderer=None):
output = super().render(name, value, attrs, renderer) output = super().render(name, value, attrs, renderer)
@@ -992,6 +995,13 @@ class BaseQuestionsForm(forms.Form):
value.initial = data.get('question_form_data', {}).get(key) value.initial = data.get('question_form_data', {}).get(key)
for k, v in self.fields.items(): for k, v in self.fields.items():
if isinstance(v.widget, forms.MultiWidget):
for w in v.widget.widgets:
autocomplete = w.attrs.get('autocomplete', '')
if autocomplete.strip() == "off":
w.attrs['autocomplete'] = 'off'
else:
w.attrs['autocomplete'] = 'section-{} '.format(self.prefix) + autocomplete
if v.widget.attrs.get('autocomplete') or k == 'attendee_name_parts': if v.widget.attrs.get('autocomplete') or k == 'attendee_name_parts':
autocomplete = v.widget.attrs.get('autocomplete', '') autocomplete = v.widget.attrs.get('autocomplete', '')
if autocomplete.strip() == "off": if autocomplete.strip() == "off":