Projet

Général

Profil

0005-blocks-label-display-configuration-47907.patch

Lauréline Guérin, 23 octobre 2020 19:12

Télécharger (4,62 ko)

Voir les différences:

Subject: [PATCH 5/5] blocks: label display configuration (#47907)

 tests/form_pages/test_block.py | 34 ++++++++++++++++++++++++++++++++++
 wcs/blocks.py                  | 19 +++++++++++++++++++
 wcs/fields.py                  | 13 +++++++++++--
 3 files changed, 64 insertions(+), 2 deletions(-)
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
-