0001-forms-pass-extended-options-to-custom-live-select-fi.patch
tests/test_form_pages.py | ||
---|---|---|
7013 | 7013 |
assert formdata.data['3'] == 'a' |
7014 | 7014 | |
7015 | 7015 | |
7016 |
def test_field_live_select_extended_content(pub, http_requests): |
|
7017 |
FormDef.wipe() |
|
7018 |
formdef = FormDef() |
|
7019 |
formdef.name = 'Foo' |
|
7020 |
formdef.fields = [ |
|
7021 |
fields.StringField(type='string', id='2', label='Bar2', size='40', |
|
7022 |
required=True, varname='bar2'), |
|
7023 |
fields.ItemField(type='item', id='3', label='Foo', |
|
7024 |
extra_css_class='template-whatever', |
|
7025 |
data_source={ |
|
7026 |
'type': 'json', |
|
7027 |
'value': '{% if form_var_bar2 %}http://remote.example.net/json-list-extra?plop={{form_var_bar2}}{% endif %}' |
|
7028 |
}), |
|
7029 |
] |
|
7030 |
formdef.store() |
|
7031 |
formdef.data_class().wipe() |
|
7032 | ||
7033 |
app = get_app(pub) |
|
7034 |
resp = app.get('/foo/') |
|
7035 |
assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true' |
|
7036 |
assert resp.html.find('div', {'data-field-id': '3'}).find('select') |
|
7037 |
resp.form['f2'] = 'plop' |
|
7038 |
live_resp = app.post('/foo/live?modified_field_id=2', params=resp.form.submit_fields()) |
|
7039 |
assert live_resp.json['result']['3']['items']['foo'] == 'bar' |
|
7040 | ||
7041 | ||
7016 | 7042 |
def test_field_live_comment_content(pub, http_requests): |
7017 | 7043 |
FormDef.wipe() |
7018 | 7044 |
formdef = FormDef() |
tests/utilities.py | ||
---|---|---|
327 | 327 |
'http://remote.example.net/500': (500, 'internal server error', None), |
328 | 328 |
'http://remote.example.net/json': (200, '{"foo": "bar"}', None), |
329 | 329 |
'http://remote.example.net/json-list': (200, '{"data": [{"id": "a", "text": "b"}]}', None), |
330 |
'http://remote.example.net/json-list-extra': (200, '{"data": [{"id": "a", "text": "b", "foo": "bar"}]}', None), |
|
330 | 331 |
'http://remote.example.net/json-err0': (200, '{"data": "foo", "err": 0}', None), |
331 | 332 |
'http://remote.example.net/json-err1': (200, '{"data": "", "err": 1}', None), |
332 | 333 |
'http://remote.example.net/json-list-err1': (200, '{"data": [{"id": "a", "text": "b"}], "err": 1}', None), |
wcs/fields.py | ||
---|---|---|
1425 | 1425 |
return [(x, x) for x in self.items] |
1426 | 1426 |
return [] |
1427 | 1427 | |
1428 |
def get_extended_options(self): |
|
1429 |
if self.data_source: |
|
1430 |
return data_sources.get_structured_items(self.data_source, mode='lazy') |
|
1431 |
if self.items: |
|
1432 |
return [{'id': x, 'text': x} for x in self.items] |
|
1433 |
return [] |
|
1434 | ||
1428 | 1435 |
def get_display_mode(self, data_source=None): |
1429 | 1436 |
if not data_source: |
1430 | 1437 |
data_source = data_sources.get_object(self.data_source) |
wcs/forms/common.py | ||
---|---|---|
694 | 694 |
# was added to the form |
695 | 695 |
result[field.id]['source_url'] = field.url |
696 | 696 |
if modified_field_varnames.intersection(varnames): |
697 |
result[field.id]['items'] = [ |
|
698 |
{'id': x[2], 'text': x[1]} for x in field.get_options(mode='lazy')] |
|
697 |
if 'template-' in (field.extra_css_class or ''): |
|
698 |
# custom template, it may need all option attributes |
|
699 |
result[field.id]['items'] = field.get_extended_options() |
|
700 |
else: |
|
701 |
result[field.id]['items'] = [ |
|
702 |
{'id': x[2], 'text': x[1]} for x in field.get_options(mode='lazy')] |
|
699 | 703 |
for widget in form.widgets: |
700 | 704 |
if not getattr(widget, 'field', None): |
701 | 705 |
continue |
wcs/qommon/static/js/qommon.forms.js | ||
---|---|---|
118 | 118 |
} |
119 | 119 |
$option.appendTo($select); |
120 | 120 |
} |
121 |
$select.trigger('wcs:options-change', {items: value.items}); |
|
121 | 122 |
} |
122 | 123 |
if (value.content) { |
123 | 124 |
var $widget = $('[data-field-id="' + key + '"]'); |
124 |
- |