misc: increase width of computed data field value template widget (#76591) #505

Merged
fpeters merged 2 commits from wip/76591-computed-data-value-edit into main 2023-08-02 10:32:05 +02:00
2 changed files with 45 additions and 2 deletions

View File

@ -3589,6 +3589,44 @@ def test_form_new_computed_field(pub):
assert resp.form['data_source$type'].options == [('None', True, 'None'), ('carddef:baz', False, 'Baz')]
def test_form_edit_computed_field(pub):
create_superuser(pub)
create_role(pub)
FormDef.wipe()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = []
formdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/')
resp = resp.click(href='fields/')
resp.forms[0]['label'] = 'foobar'
resp.forms[0]['type'] = 'computed'
resp = resp.forms[0].submit().follow()
field = FormDef.get(1).fields[0]
resp = app.get('/backoffice/forms/%s/fields/%s/' % (formdef.id, field.id))
assert resp.pyquery('input#form_value_template').attr.size == '150'
resp.form['value_template'] = '{% with %}' # invalid syntax
resp = resp.form.submit('submit')
assert 'syntax error' in resp.pyquery('#form_error_value_template').text()
resp.form['value_template'] = '{{ "%s" }}' % ('xxxx ' * 200) # long string
resp = resp.form.submit('submit')
# check a long template value is displayed in a textarea
resp = app.get('/backoffice/forms/%s/fields/%s/' % (formdef.id, field.id))
assert resp.pyquery('textarea#form_value_template').attr.rows == '7'
# check template validation is still effective
resp.form['value_template'] = '{% with %}' # invalid syntax
resp = resp.form.submit('submit')
assert 'syntax error' in resp.pyquery('#form_error_value_template').text()
def test_form_category_management_roles(pub, backoffice_user, backoffice_role):
app = login(get_app(pub), username='backoffice-user', password='backoffice-user')
app.get('/backoffice/forms/', status=403)

View File

@ -4374,15 +4374,20 @@ class ComputedField(Field):
size=30,
hint=_('This is used as suffix for variable names.'),
)
value_widget = StringWidget
value_widget_kwargs = {'size': 150}
if len(self.value_template or '') > value_widget_kwargs['size']:
value_widget = TextWidget
value_widget_kwargs = {'cols': 150, 'rows': len(self.value_template) // 150 + 1}
form.add(
StringWidget,
value_widget,
'value_template',
title=_('Value'),
required=True,
size=80,
value=self.value_template,
validation_function=ComputedExpressionWidget.validate_template,
hint=_('As a Django template'),
**value_widget_kwargs,
)
form.add(
CheckboxWidget,