0001-forms-mark-string-fields-with-html5-autocomplete-att.patch
tests/test_form_pages.py | ||
---|---|---|
2111 | 2111 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
2112 | 2112 |
assert resp.forms[0]['f0'].value == 'foo@localhost' |
2113 | 2113 | |
2114 |
def test_form_page_profile_first_name_prefill(pub): |
|
2115 |
user = create_user(pub) |
|
2116 | ||
2117 |
from wcs.admin.settings import UserFieldsFormDef |
|
2118 |
user_formdef = UserFieldsFormDef(pub) |
|
2119 |
user_formdef.fields = [ |
|
2120 |
fields.StringField( |
|
2121 |
id='_first_name', label='first name', |
|
2122 |
type='string', extra_css_class='autocomplete-given-name'), |
|
2123 |
fields.StringField( |
|
2124 |
id='_city', label='city', |
|
2125 |
type='string', extra_css_class='autocomplete-address-level2') |
|
2126 |
] |
|
2127 |
user_formdef.store() |
|
2128 |
user.form_data = {'_first_name': 'plop', '_city': 'mytown'} |
|
2129 |
user.set_attributes_from_formdata(user.form_data) |
|
2130 |
user.store() |
|
2131 | ||
2132 |
formdef = create_formdef() |
|
2133 |
formdef.data_class().wipe() |
|
2134 |
formdef.fields = [ |
|
2135 |
fields.StringField( |
|
2136 |
id='0', label='string', |
|
2137 |
prefill={'type': 'user', 'value': '_first_name'}), |
|
2138 |
fields.StringField( |
|
2139 |
id='1', label='string', |
|
2140 |
prefill={'type': 'user', 'value': '_city'}) |
|
2141 |
] |
|
2142 |
formdef.store() |
|
2143 | ||
2144 |
resp = get_app(pub).get('/test/') |
|
2145 |
assert resp.forms[0]['f0'].value == '' |
|
2146 |
assert resp.forms[0]['f0'].attrs['autocomplete'] == 'given-name' # html5 |
|
2147 |
assert resp.forms[0]['f1'].value == '' |
|
2148 |
assert resp.forms[0]['f1'].attrs['autocomplete'] == 'address-level2' # html5 |
|
2149 | ||
2150 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
2151 |
assert resp.forms[0]['f0'].value == 'plop' |
|
2152 |
assert resp.forms[0]['f1'].value == 'mytown' |
|
2153 | ||
2114 | 2154 |
def test_form_page_formula_prefill(pub): |
2115 | 2155 |
user = create_user(pub) |
2116 | 2156 |
formdef = create_formdef() |
wcs/ctl/check_hobos.py | ||
---|---|---|
217 | 217 |
if field.id in profile_field_ids: |
218 | 218 |
profile_fields[field.id] = field |
219 | 219 | |
220 |
html5_autocomplete_map = { |
|
221 |
'first_name': 'given-name', |
|
222 |
'last_name': 'family-name', |
|
223 |
'address': 'address-line1', |
|
224 |
'zipcode': 'postal-code', |
|
225 |
'city': 'address-level2', |
|
226 |
'country': 'country', |
|
227 |
'phone': 'tel', |
|
228 |
'email': 'email', |
|
229 |
} |
|
230 | ||
220 | 231 |
# create or update profile fields |
221 | 232 |
for attribute in profile.get('fields', []): |
222 | 233 |
field_id = '_' + attribute['name'] |
... | ... | |
241 | 252 | |
242 | 253 |
if attribute['disabled']: |
243 | 254 |
profile_field_ids.remove('_' + attribute['name']) |
255 |
if attribute['name'] in html5_autocomplete_map: |
|
256 |
profile_fields[field_id].extra_css_class = ( |
|
257 |
'autocomplete-%s' % html5_autocomplete_map[attribute['name']]) |
|
244 | 258 | |
245 | 259 |
# insert profile fields at the beginning |
246 | 260 |
formdef.fields = [profile_fields[x] for x in profile_field_ids] + formdef.fields |
wcs/fields.py | ||
---|---|---|
369 | 369 | |
370 | 370 |
def get_prefill_attributes(self): |
371 | 371 |
t = self.prefill.get('type') |
372 | ||
372 | 373 |
if t == 'geolocation': |
373 | 374 |
return {'geolocation': self.prefill.get('value')} |
375 | ||
376 |
if t == 'user': |
|
377 |
formdef = get_publisher().user_class.get_formdef() |
|
378 |
for user_field in formdef.fields or []: |
|
379 |
if user_field.id != self.prefill.get('value'): |
|
380 |
continue |
|
381 |
try: |
|
382 |
autocomplete_attribute = re.search(r'\bautocomplete-([a-z0-9-]+)', |
|
383 |
user_field.extra_css_class).groups()[0] |
|
384 |
except (TypeError, IndexError): |
|
385 |
continue |
|
386 |
return {'autocomplete': autocomplete_attribute} |
|
387 | ||
374 | 388 |
return None |
375 | 389 | |
376 | 390 |
def feed_session(self, value, display_value): |
wcs/qommon/form.py | ||
---|---|---|
150 | 150 |
attrs = {'id': 'form_' + self.name} |
151 | 151 |
if self.required: |
152 | 152 |
attrs['aria-required'] = 'true' |
153 |
if getattr(self, 'prefill_attributes', None) and 'autocomplete' in self.prefill_attributes: |
|
154 |
attrs['autocomplete'] = self.prefill_attributes['autocomplete'] |
|
153 | 155 |
if self.attrs: |
154 | 156 |
attrs.update(self.attrs) |
155 | 157 |
return htmltag("input", xml_end=True, type=self.HTML_TYPE, name=self.name, |
156 |
- |