0005-blocks-label-display-configuration-47907.patch
tests/form_pages/test_block.py | ||
---|---|---|
459 | 459 |
resp = resp.follow() |
460 | 460 | |
461 | 461 | |
462 |
def test_block_label(pub, blocks_feature): |
|
463 |
FormDef.wipe() |
|
464 |
BlockDef.wipe() |
|
465 | ||
466 |
block = BlockDef() |
|
467 |
block.name = 'foobar' |
|
468 |
block.fields = [ |
|
469 |
fields.StringField(id='123', required=True, label='Test', type='string'), |
|
470 |
] |
|
471 |
block.store() |
|
472 | ||
473 |
formdef = FormDef() |
|
474 |
formdef.name = 'form title' |
|
475 |
formdef.fields = [ |
|
476 |
fields.BlockField(id='1', label='Block Label', type='block:foobar', hint='', required=False, label_display='normal'), |
|
477 |
] |
|
478 |
formdef.store() |
|
479 |
app = get_app(pub) |
|
480 |
resp = app.get(formdef.get_url()) |
|
481 |
assert resp.pyquery.find('div.title label.field--label#form_label_f1').text() == 'Block Label' |
|
482 | ||
483 |
formdef.fields[0].label_display = 'subtitle' |
|
484 |
formdef.fields[0].hint = 'foo bar !' |
|
485 |
formdef.fields[0].required = True |
|
486 |
formdef.store() |
|
487 |
resp = app.get(formdef.get_url()) |
|
488 |
assert resp.pyquery.find('h4').text() == 'Block Label*' |
|
489 | ||
490 |
formdef.fields[0].label_display = 'hidden' |
|
491 |
formdef.store() |
|
492 |
resp = app.get(formdef.get_url()) |
|
493 |
assert 'Block Label' not in resp.text |
|
494 | ||
495 | ||
462 | 496 |
def test_block_multipage(pub, blocks_feature): |
463 | 497 |
FormDef.wipe() |
464 | 498 |
BlockDef.wipe() |
wcs/blocks.py | ||
---|---|---|
19 | 19 |
import xml.etree.ElementTree as ET |
20 | 20 | |
21 | 21 |
from quixote import get_request, get_publisher |
22 |
from quixote.html import htmltag, htmltext |
|
22 | 23 | |
23 | 24 |
from .qommon import _, N_, misc |
24 | 25 |
from .qommon.form import CompositeWidget, WidgetList |
... | ... | |
263 | 264 |
): |
264 | 265 |
self.block = block |
265 | 266 |
self.readonly = kwargs.get('readonly') |
267 |
self.label_display = kwargs.pop('label_display') or 'normal' |
|
266 | 268 |
element_values = None |
267 | 269 |
if value: |
268 | 270 |
element_values = value.get('data') |
... | ... | |
334 | 336 |
if widget.has_error(): |
335 | 337 |
has_error = True |
336 | 338 |
return has_error |
339 | ||
340 |
def render_title(self, title): |
|
341 |
if not title or self.label_display == 'hidden': |
|
342 |
return '' |
|
343 | ||
344 |
if self.label_display == 'normal': |
|
345 |
return super().render_title(title) |
|
346 | ||
347 |
if self.required: |
|
348 |
title += htmltext('<span title="%s" class="required">*</span>') % _( |
|
349 |
'This field is required.') |
|
350 |
attrs = {} |
|
351 |
hint = self.get_hint() |
|
352 |
if hint: |
|
353 |
attrs['aria-describedby'] = 'form_hint_%s' % self.name |
|
354 |
title_tag = htmltag('h4', **attrs) |
|
355 |
return title_tag + htmltext('%s</h4>') % title |
wcs/fields.py | ||
---|---|---|
2628 | 2628 |
key = 'block' |
2629 | 2629 |
widget_class = BlockWidget |
2630 | 2630 |
max_items = 1 |
2631 |
extra_attributes = ['block', 'max_items', 'add_element_label'] |
|
2631 |
extra_attributes = ['block', 'max_items', 'add_element_label', 'label_display']
|
|
2632 | 2632 |
add_element_label = '' |
2633 |
label_display = 'normal' |
|
2633 | 2634 | |
2634 | 2635 |
# cache |
2635 | 2636 |
_block = None |
... | ... | |
2652 | 2653 |
value=self.max_items) |
2653 | 2654 |
form.add(StringWidget, 'add_element_label', title=_('Label of "Add" button'), |
2654 | 2655 |
value=self.add_element_label) |
2656 |
display_options = [ |
|
2657 |
('normal', _('Normal')), |
|
2658 |
('subtitle', _('Subtitle')), |
|
2659 |
('hidden', _('Hidden')), |
|
2660 |
] |
|
2661 |
form.add( |
|
2662 |
SingleSelectWidget, 'label_display', title=_('Label display'), |
|
2663 |
value=self.label_display or 'normal', options=display_options) |
|
2655 | 2664 | |
2656 | 2665 |
def get_admin_attributes(self): |
2657 |
return super().get_admin_attributes() + ['max_items', 'add_element_label'] |
|
2666 |
return super().get_admin_attributes() + ['max_items', 'add_element_label', 'label_display']
|
|
2658 | 2667 | |
2659 | 2668 |
def store_display_value(self, data, field_id): |
2660 | 2669 |
value = data.get(field_id) |
2661 |
- |