Projet

Général

Profil

0001-forms-use-a-css-class-to-display-radio-choices-inlin.patch

patch à wcs - Frédéric Péters, 12 janvier 2021 21:47

Télécharger (5,17 ko)

Voir les différences:

Subject: [PATCH] forms: use a css class to display radio choices inline
 (#50089)

 tests/test_fields.py                                   |  8 ++++----
 wcs/fields.py                                          |  7 ++++---
 wcs/qommon/static/css/qommon.scss                      | 10 +++++++---
 wcs/qommon/templates/qommon/forms/widget.html          |  4 ++--
 .../templates/qommon/forms/widgets/radiobuttons.html   |  2 ++
 5 files changed, 19 insertions(+), 12 deletions(-)
tests/test_fields.py
466 466
    form = Form(use_tokens=False)
467 467
    field.add_to_form(form)
468 468
    form.render()
469
    assert str(form.widgets[-1].render()).count('<br') == 0
469
    assert 'widget-inline-radio' in str(form.widgets[-1].render())
470 470

  
471 471
    field = fields.ItemField(id='1', label='Foobar', display_mode='radio',
472 472
            items=['aa'*30, 'ab', 'ac'])
473 473
    form = Form(use_tokens=False)
474 474
    field.add_to_form(form)
475 475
    form.render()
476
    assert str(form.widgets[-1].render()).count('<br') == 2
476
    assert 'widget-inline-radio' not in str(form.widgets[-1].render())
477 477

  
478 478
    field = fields.ItemField(id='1', label='Foobar', display_mode='radio',
479 479
            items=['aa', 'ab'*30, 'ac'])
480 480
    form = Form(use_tokens=False)
481 481
    field.add_to_form(form)
482 482
    form.render()
483
    assert str(form.widgets[-1].render()).count('<br') == 2
483
    assert 'widget-inline-radio' not in str(form.widgets[-1].render())
484 484

  
485 485
    field = fields.ItemField(id='1', label='Foobar', display_mode='radio',
486 486
            items=['aa', 'ab', 'ac', 'ad'])
487 487
    form = Form(use_tokens=False)
488 488
    field.add_to_form(form)
489 489
    form.render()
490
    assert str(form.widgets[-1].render()).count('<br') == 3
490
    assert 'widget-inline-radio' not in str(form.widgets[-1].render())
491 491

  
492 492

  
493 493
def test_items_render():
wcs/fields.py
1565 1565
            else:
1566 1566
                first_items = [x[1] for x in kwargs['options'][:3]]
1567 1567
            length_first_items = sum([len(x) for x in first_items])
1568
            if len(kwargs['options']) > 3 or length_first_items > 40:
1569
                # TODO: absence/presence of delimitor should be an option
1570
                kwargs['delim'] = htmltext('<br />')
1568
            # display radio buttons on a single line if there's just a few
1569
            # short options.
1570
            # TODO: absence/presence of delimitor should be an option
1571
            self.inline = bool(len(kwargs['options']) <= 3 and length_first_items <= 40)
1571 1572
        elif display_mode == 'autocomplete':
1572 1573
            kwargs['select2'] = True
1573 1574
        elif display_mode == 'map':
wcs/qommon/static/css/qommon.scss
273 273
	margin-right: 2em;
274 274
}
275 275

  
276
div.CheckboxesWidget .content label,
277
div.RadiobuttonsWidget .content label {
278
	display: inline-block;
276
div.CheckboxesWidget, div.RadiobuttonsWidget {
279 277
	padding: 5px 0;
278
	.content label {
279
		display: block;
280
	}
281
	&.widget-inline-radio .content label {
282
		display: inline-block;
283
	}
280 284
}
281 285

  
282 286
div.dataview {
wcs/qommon/templates/qommon/forms/widget.html
1
<div class="widget {{widget.class_name}} {{widget.extra_css_class}}
1
<div class="{% block widget-css-classes %}widget {{widget.class_name}} {{widget.extra_css_class}}
2 2
     {% if widget.readonly %}widget-readonly{% endif %}
3 3
     {% if widget.get_error %}widget-with-error{% endif %}
4 4
     {% if widget.is_required %}widget-required{% else %}widget-optional{% endif %}
5
     {% if widget.is_prefilled %}widget-prefilled{% endif %}"
5
     {% if widget.is_prefilled %}widget-prefilled{% endif %}{% endblock %}"
6 6
     {% if widget.is_hidden %}style="display: none"{% endif %}
7 7
     {% if widget.field %}data-field-id="{{ widget.field.id }}"{% endif %}
8 8
     {% if widget.div_id %}id="{{widget.div_id}}" data-valuecontainerid="form_{{widget.name}}"{% endif %}
wcs/qommon/templates/qommon/forms/widgets/radiobuttons.html
1 1
{% extends "qommon/forms/widget.html" %}
2 2

  
3
{% block widget-css-classes %}{{ block.super }}{% if widget.field.inline %} widget-inline-radio{% endif %}{% endblock %}
4

  
3 5
{% block widget-control %}
4 6
{% for option in widget.get_options %}
5 7
 <label {% if option.disabled %}class="disabled"{% endif %}><input
6
-