0001-fields-render-template-for-title-and-subtitle-36620.patch
tests/test_fields.py | ||
---|---|---|
162 | 162 |
field.add_to_form(form) |
163 | 163 |
assert '<h3 data-field-id="None" class="test">Foobar</h3>' in str(form.render()) |
164 | 164 | |
165 |
# test for variable substitution |
|
166 |
pub.substitutions.feed(MockSubstitutionVariables()) |
|
167 |
field = fields.TitleField(label='{{ bar }}') |
|
168 |
form = Form(use_tokens=False) |
|
169 |
field.add_to_form(form) |
|
170 |
assert '<h3 data-field-id="None">Foobar</h3>' in str(form.render()) |
|
171 | ||
172 |
pub.substitutions.feed(MockSubstitutionVariables()) |
|
173 |
field = fields.TitleField(label='[bar]') |
|
174 |
form = Form(use_tokens=False) |
|
175 |
field.add_to_form(form) |
|
176 |
assert '<h3 data-field-id="None">Foobar</h3>' in str(form.render()) |
|
177 | ||
178 |
# test for proper escaping of substitution variables |
|
179 |
pub.substitutions.feed(MockSubstitutionVariables()) |
|
180 |
field = fields.TitleField(label='{{ foo }}') |
|
181 |
form = Form(use_tokens=False) |
|
182 |
field.add_to_form(form) |
|
183 |
assert '<h3 data-field-id="None">1 < 3</h3>' in str(form.render()) |
|
184 | ||
185 |
pub.substitutions.feed(MockSubstitutionVariables()) |
|
186 |
field = fields.TitleField(label='[foo]') |
|
187 |
form = Form(use_tokens=False) |
|
188 |
field.add_to_form(form) |
|
189 |
assert '<h3 data-field-id="None">1 < 3</h3>' in str(form.render()) |
|
190 | ||
191 |
# test for html content |
|
192 |
field = fields.TitleField(label='<i>Foobaré</i>') |
|
193 |
form = Form(use_tokens=False) |
|
194 |
field.add_to_form(form) |
|
195 |
assert '<i>Foobar&eacute;</i>' in str(form.render()) |
|
196 |
assert field.unhtmled_label == 'Foobaré' |
|
197 | ||
165 | 198 |
def test_subtitle(): |
166 | 199 |
field = fields.SubtitleField(label='Foobar') |
167 | 200 |
form = Form(use_tokens=False) |
... | ... | |
173 | 206 |
field.add_to_form(form) |
174 | 207 |
assert '<h4 data-field-id="None" class="test">Foobar</h4>' in str(form.render()) |
175 | 208 | |
209 |
# test for variable substitution |
|
210 |
pub.substitutions.feed(MockSubstitutionVariables()) |
|
211 |
field = fields.SubtitleField(label='{{ bar }}') |
|
212 |
form = Form(use_tokens=False) |
|
213 |
field.add_to_form(form) |
|
214 |
assert '<h4 data-field-id="None">Foobar</h4>' in str(form.render()) |
|
215 | ||
216 |
pub.substitutions.feed(MockSubstitutionVariables()) |
|
217 |
field = fields.SubtitleField(label='[bar]') |
|
218 |
form = Form(use_tokens=False) |
|
219 |
field.add_to_form(form) |
|
220 |
assert '<h4 data-field-id="None">Foobar</h4>' in str(form.render()) |
|
221 | ||
222 |
# test for proper escaping of substitution variables |
|
223 |
pub.substitutions.feed(MockSubstitutionVariables()) |
|
224 |
field = fields.SubtitleField(label='{{ foo }}') |
|
225 |
form = Form(use_tokens=False) |
|
226 |
field.add_to_form(form) |
|
227 |
assert '<h4 data-field-id="None">1 < 3</h4>' in str(form.render()) |
|
228 | ||
229 |
pub.substitutions.feed(MockSubstitutionVariables()) |
|
230 |
field = fields.SubtitleField(label='[foo]') |
|
231 |
form = Form(use_tokens=False) |
|
232 |
field.add_to_form(form) |
|
233 |
assert '<h4 data-field-id="None">1 < 3</h4>' in str(form.render()) |
|
234 | ||
235 |
# test for html content |
|
236 |
field = fields.SubtitleField(label='<i>Foobaré</i>') |
|
237 |
form = Form(use_tokens=False) |
|
238 |
field.add_to_form(form) |
|
239 |
assert '<i>Foobar&eacute;</i>' in str(form.render()) |
|
240 |
assert field.unhtmled_label == 'Foobaré' |
|
241 | ||
176 | 242 |
def test_comment(): |
177 | 243 |
field = fields.CommentField(label='Foobar') |
178 | 244 |
form = Form(use_tokens=False) |
tests/test_form_pages.py | ||
---|---|---|
513 | 513 |
data = formdef.data_class().get(data_id) |
514 | 514 |
assert data.data == {'1': 'foo', '3': 'bar'} |
515 | 515 | |
516 | ||
517 |
def test_form_multi_page_title_and_subtitle_as_template(pub): |
|
518 |
formdef = create_formdef() |
|
519 |
formdef.fields = [fields.PageField(id='0', label='1st page', type='page'), |
|
520 |
fields.StringField(id='1', label='string', varname='foo'), |
|
521 |
fields.PageField(id='2', label='2nd page', type='page'), |
|
522 |
fields.TitleField(id='4', label='<i>title of second page {{ form_var_foo }}</i>', |
|
523 |
type='title'), |
|
524 |
fields.SubtitleField(id='5', label='<i>subtitle of second page {{ form_var_foo }}</i>', |
|
525 |
type='subtitle'), |
|
526 |
fields.StringField(id='3', label='string 2')] |
|
527 |
formdef.store() |
|
528 |
resp = get_app(pub).get('/test/') |
|
529 |
formdef.data_class().wipe() |
|
530 |
resp.form['f1'] = '35 < 42' |
|
531 |
resp = resp.form.submit('submit') |
|
532 |
resp.form['f3'] = 'bar' |
|
533 |
resp = resp.form.submit('submit') |
|
534 |
assert 'Check values then click submit.' in resp.body |
|
535 |
resp = resp.form.submit('submit').follow() |
|
536 |
assert 'The form has been recorded' in resp.body |
|
537 |
expected_label = '<i>title of second page 35 < 42</i>' |
|
538 |
assert '<div class="title "><h3>%s</h3></div>' % expected_label in resp.body |
|
539 |
expected_label = '<i>subtitle of second page 35 < 42</i>' |
|
540 |
assert '<div class="subtitle "><h4>%s</h4></div>' % expected_label in resp.body |
|
541 | ||
542 | ||
516 | 543 |
def test_form_multi_page_condition(pub): |
517 | 544 |
formdef = create_formdef() |
518 | 545 |
formdef.fields = [fields.PageField(id='0', label='1st page', type='page'), |
wcs/fields.py | ||
---|---|---|
569 | 569 |
class TitleField(Field): |
570 | 570 |
key = 'title' |
571 | 571 |
description = N_('Title') |
572 |
html_tag = 'h3' |
|
572 | 573 | |
573 | 574 |
def add_to_form(self, form, value = None): |
575 |
import wcs.workflows |
|
574 | 576 |
extra_attributes = ' data-field-id="%s"' % self.id |
575 | 577 |
if self.extra_css_class: |
576 | 578 |
extra_attributes += ' class="%s"' % self.extra_css_class |
577 |
widget = HtmlWidget(htmltext('<h3%s>%s</h3>' % (extra_attributes, self.label))) |
|
579 |
title_markup = '<{html_tag}{extra_attributes}>%s</{html_tag}>'.format( |
|
580 |
html_tag=self.html_tag, |
|
581 |
extra_attributes=extra_attributes, |
|
582 |
) |
|
583 |
label = wcs.workflows.template_on_formdata(None, self.label, autoescape=False) |
|
584 |
widget = HtmlWidget(htmltext(title_markup) % label) |
|
578 | 585 |
form.widgets.append(widget) |
579 | 586 |
return widget |
580 | 587 |
add_to_view_form = add_to_form |
... | ... | |
597 | 604 |
class SubtitleField(TitleField): |
598 | 605 |
key = 'subtitle' |
599 | 606 |
description = N_('Subtitle') |
600 | ||
601 |
def add_to_form(self, form, value = None): |
|
602 |
extra_attributes = ' data-field-id="%s"' % self.id |
|
603 |
if self.extra_css_class: |
|
604 |
extra_attributes += ' class="%s"' % self.extra_css_class |
|
605 |
widget = HtmlWidget(htmltext('<h4%s>%s</h4>' % (extra_attributes, self.label))) |
|
606 |
form.widgets.append(widget) |
|
607 |
return widget |
|
608 |
add_to_view_form = add_to_form |
|
607 |
html_tag = 'h4' |
|
609 | 608 | |
610 | 609 |
register_field_class(SubtitleField) |
611 | 610 |
wcs/forms/common.py | ||
---|---|---|
384 | 384 |
return r.getvalue() |
385 | 385 | |
386 | 386 |
def display_fields(self, fields=None, form_url='', include_unset_required_fields=False): |
387 |
import wcs.workflows |
|
387 | 388 |
if fields is None: |
388 | 389 |
fields = self.formdef.fields |
389 | 390 |
r = TemplateIO(html=True) |
... | ... | |
454 | 455 |
continue |
455 | 456 | |
456 | 457 |
if f.type == 'title': |
457 |
r += htmltext('<div class="title %s"><h3>%s</h3></div>') % (f.extra_css_class or '', f.label) |
|
458 |
label = wcs.workflows.template_on_formdata(None, f.label, autoescape=False) |
|
459 |
r += htmltext('<div class="title %s"><h3>%s</h3></div>') % (f.extra_css_class or '', label) |
|
458 | 460 |
continue |
459 | 461 | |
460 | 462 |
if f.type == 'subtitle': |
461 |
r += htmltext('<div class="subtitle %s"><h4>%s</h4></div>') % (f.extra_css_class or '', f.label) |
|
463 |
label = wcs.workflows.template_on_formdata(None, f.label, autoescape=False) |
|
464 |
r += htmltext('<div class="subtitle %s"><h4>%s</h4></div>') % (f.extra_css_class or '', label) |
|
462 | 465 |
continue |
463 | 466 | |
464 | 467 |
css_classes = ['field', 'field-type-%s' % f.key] |
465 |
- |