Hello community, here is the log from the commit of package python-django-crispy-forms for openSUSE:Factory checked in at 2020-01-07 23:54:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-django-crispy-forms (Old) and /work/SRC/openSUSE:Factory/.python-django-crispy-forms.new.6675 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-crispy-forms" Tue Jan 7 23:54:27 2020 rev:6 rq:761489 version:1.8.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-django-crispy-forms/python-django-crispy-forms.changes 2019-10-30 14:49:05.630263633 +0100 +++ /work/SRC/openSUSE:Factory/.python-django-crispy-forms.new.6675/python-django-crispy-forms.changes 2020-01-07 23:54:47.620076166 +0100 @@ -1,0 +2,8 @@ +Tue Jan 7 09:29:18 UTC 2020 - Tomáš Chvátal <tchva...@suse.com> + +- Update to 1.8.1: + * Fixing FileField UI bug introduced with 1.8.0 + * Remove is-valid css class for radio (bug introduced with 1.8.0) + * Various alignment and margin fixes for Bootstrap 4 template pack + +------------------------------------------------------------------- Old: ---- django-crispy-forms-1.8.0.tar.gz New: ---- django-crispy-forms-1.8.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-django-crispy-forms.spec ++++++ --- /var/tmp/diff_new_pack.zanC2S/_old 2020-01-07 23:54:48.120076426 +0100 +++ /var/tmp/diff_new_pack.zanC2S/_new 2020-01-07 23:54:48.120076426 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-django-crispy-forms # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define mod_name django-crispy-forms Name: python-%{mod_name} -Version: 1.8.0 +Version: 1.8.1 Release: 0 Summary: Django DRY Forms License: MIT ++++++ django-crispy-forms-1.8.0.tar.gz -> django-crispy-forms-1.8.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/CONTRIBUTORS.txt new/django-crispy-forms-1.8.1/CONTRIBUTORS.txt --- old/django-crispy-forms-1.8.0/CONTRIBUTORS.txt 2017-02-22 11:58:37.000000000 +0100 +++ new/django-crispy-forms-1.8.1/CONTRIBUTORS.txt 2019-11-22 14:50:36.000000000 +0100 @@ -107,3 +107,4 @@ * Yoong Kang Lim <yoongkang> * Dmitry Dygalo <Stranger6667> * Lee Skillen <lskillen> +* Bryan Brancotte <bryan-brancotte> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/PKG-INFO new/django-crispy-forms-1.8.1/PKG-INFO --- old/django-crispy-forms-1.8.0/PKG-INFO 2019-10-17 17:25:16.000000000 +0200 +++ new/django-crispy-forms-1.8.1/PKG-INFO 2019-11-22 14:51:01.000000000 +0100 @@ -1,8 +1,8 @@ Metadata-Version: 1.1 Name: django-crispy-forms -Version: 1.8.0 +Version: 1.8.1 Summary: Best way to have Django DRY forms -Home-page: http://github.com/djang-crispy-forms/django-crispy-forms +Home-page: https://github.com/django-crispy-forms/django-crispy-forms Author: Miguel Araujo Author-email: miguel.araujo.pe...@gmail.com License: MIT @@ -10,7 +10,7 @@ django-crispy-forms =================== - .. image:: https://travis-ci.org/django-crispy-forms/django-crispy-forms.png?branch=dev + .. image:: https://travis-ci.org/django-crispy-forms/django-crispy-forms.png?branch=master :alt: Build Status :target: https://travis-ci.org/django-crispy-forms/django-crispy-forms @@ -83,6 +83,7 @@ Classifier: Framework :: Django :: 1.11 Classifier: Framework :: Django :: 2.1 Classifier: Framework :: Django :: 2.2 +Classifier: Framework :: Django :: 3.0 Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: JavaScript diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/README.rst new/django-crispy-forms-1.8.1/README.rst --- old/django-crispy-forms-1.8.0/README.rst 2019-10-17 17:14:45.000000000 +0200 +++ new/django-crispy-forms-1.8.1/README.rst 2019-10-23 14:28:10.000000000 +0200 @@ -2,7 +2,7 @@ django-crispy-forms =================== -.. image:: https://travis-ci.org/django-crispy-forms/django-crispy-forms.png?branch=dev +.. image:: https://travis-ci.org/django-crispy-forms/django-crispy-forms.png?branch=master :alt: Build Status :target: https://travis-ci.org/django-crispy-forms/django-crispy-forms diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/__init__.py new/django-crispy-forms-1.8.1/crispy_forms/__init__.py --- old/django-crispy-forms-1.8.0/crispy_forms/__init__.py 2019-10-17 17:14:45.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/__init__.py 2019-11-22 14:50:36.000000000 +0100 @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- -__version__ = '1.8.0' +__version__ = '1.8.1' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/bootstrap.py new/django-crispy-forms-1.8.1/crispy_forms/bootstrap.py --- old/django-crispy-forms-1.8.0/crispy_forms/bootstrap.py 2017-10-17 16:10:19.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/bootstrap.py 2019-11-22 14:44:09.000000000 +0100 @@ -130,7 +130,7 @@ class FieldWithButtons(Div): template = '%s/layout/field_with_buttons.html' - field_template = '%s/layout/field.html' + field_template = '%s/field.html' def render(self, form, form_style, context, template_pack=TEMPLATE_PACK, extra_context=None, **kwargs): # We first render the buttons diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/helper.py new/django-crispy-forms-1.8.1/crispy_forms/helper.py --- old/django-crispy-forms-1.8.0/crispy_forms/helper.py 2019-10-17 17:14:45.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/helper.py 2019-11-22 14:44:09.000000000 +0100 @@ -356,36 +356,33 @@ Used by crispy_forms_tags to get helper attributes """ items = { + 'disable_csrf': self.disable_csrf, + 'error_text_inline': self.error_text_inline, + 'field_class': self.field_class, + 'field_template': + self.field_template or '%s/field.html' % template_pack, 'form_method': self.form_method.strip(), - 'form_tag': self.form_tag, - 'form_style': self.form_style.strip(), 'form_show_errors': self.form_show_errors, + 'form_show_labels': self.form_show_labels, + 'form_style': self.form_style.strip(), + 'form_tag': self.form_tag, 'help_text_inline': self.help_text_inline, - 'error_text_inline': self.error_text_inline, 'html5_required': self.html5_required, - 'form_show_labels': self.form_show_labels, - 'disable_csrf': self.disable_csrf, - 'use_custom_control': self.use_custom_control, + 'include_media': self.include_media, 'label_class': self.label_class, - 'field_class': self.field_class, - 'include_media': self.include_media + 'use_custom_control': self.use_custom_control, } - + if template_pack == 'bootstrap4': - bootstrap_size_match = re.findall(r'col-(xl|lg|md|sm)-(\d+)', self.label_class) - if bootstrap_size_match: - if template_pack == 'bootstrap4': + if 'form-horizontal' in self.form_class.split(): + bootstrap_size_match = re.findall(r'col-(xl|lg|md|sm)-(\d+)', self.label_class) + if bootstrap_size_match: offset_pattern = 'offset-%s-%s' - else: - offset_pattern = 'col-%s-offset-%s' - items['bootstrap_checkbox_offsets'] = [offset_pattern % m for m in bootstrap_size_match] + items['bootstrap_checkbox_offsets'] = [offset_pattern % m for m in bootstrap_size_match] else: bootstrap_size_match = re.findall(r'col-(lg|md|sm|xs)-(\d+)', self.label_class) if bootstrap_size_match: - if template_pack == 'bootstrap4': - offset_pattern = 'offset-%s-%s' - else: - offset_pattern = 'col-%s-offset-%s' + offset_pattern = 'col-%s-offset-%s' items['bootstrap_checkbox_offsets'] = [offset_pattern % m for m in bootstrap_size_match] items['attrs'] = {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/layout.py new/django-crispy-forms-1.8.1/crispy_forms/layout.py --- old/django-crispy-forms-1.8.0/crispy_forms/layout.py 2019-10-17 17:14:45.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/layout.py 2019-11-22 14:44:09.000000000 +0100 @@ -370,28 +370,21 @@ Row('form_field_1', 'form_field_2', 'form_field_3') """ - - def __init__(self, *args, **kwargs): - # Map template packs to the css class they need here. - # TODO: This is a _Smell_. There should be a factory which creates a - # template pack specific subclass. (Or such...) - row_class_map = { - 'uni_form': 'formRow', - 'bootstrap4': 'form-row', - 'bootstrap3': 'row', - } - # Fetch the class, with a suitable default. - self.css_class = row_class_map.get(get_template_pack(), 'row') - super(Row, self).__init__(*args, **kwargs) + template = "%s/layout/row.html" class Column(Div): """ - Layout object. It wraps fields in a div whose default class is "formColumn". Example:: + Layout object. It wraps fields in a div so the wrapper can be used as a column. Example:: Column('form_field_1', 'form_field_2') + + Depending on the template, css class associated to the div is formColumn, row, or nothing. For this last case, you + must provide css classes. Example:: + + Column('form_field_1', 'form_field_2', css_class='col-xs-6',) """ - css_class = 'formColumn' + template = "%s/layout/column.html" class HTML(object): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap/layout/column.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap/layout/column.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap/layout/column.html 1970-01-01 01:00:00.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap/layout/column.html 2019-11-22 14:44:09.000000000 +0100 @@ -0,0 +1,3 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="{{ div.css_class|default:'' }}" {{ div.flat_attrs|safe }}> + {{ fields|safe }} +</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap/layout/row.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap/layout/row.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap/layout/row.html 1970-01-01 01:00:00.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap/layout/row.html 2019-11-22 14:44:09.000000000 +0100 @@ -0,0 +1,3 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="row {{ div.css_class|default:'' }}" {{ div.flat_attrs|safe }}> + {{ fields|safe }} +</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap/uni_form.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap/uni_form.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap/uni_form.html 2019-09-19 16:26:12.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap/uni_form.html 2019-11-22 14:44:09.000000000 +0100 @@ -6,6 +6,6 @@ {% include "bootstrap/errors.html" %} {% endif %} {% for field in form %} - {% include field_template|default:"bootstrap/field.html" %} + {% include field_template %} {% endfor %} {% endspecialspaceless %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap3/layout/column.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/column.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap3/layout/column.html 1970-01-01 01:00:00.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/column.html 2019-11-22 14:44:09.000000000 +0100 @@ -0,0 +1,3 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="formColumn {{ div.css_class|default:'' }}" {{ div.flat_attrs|safe }}> + {{ fields|safe }} +</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap3/layout/row.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/row.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap3/layout/row.html 1970-01-01 01:00:00.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/row.html 2019-11-22 14:44:09.000000000 +0100 @@ -0,0 +1,3 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="row {{ div.css_class|default:'' }}" {{ div.flat_attrs|safe }}> + {{ fields|safe }} +</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap3/uni_form.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/uni_form.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap3/uni_form.html 2019-09-19 16:26:12.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/uni_form.html 2019-11-22 14:44:09.000000000 +0100 @@ -6,6 +6,6 @@ {% include "bootstrap3/errors.html" %} {% endif %} {% for field in form %} - {% include field_template|default:"bootstrap3/field.html" %} + {% include field_template %} {% endfor %} {% endspecialspaceless %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/errors.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/errors.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/errors.html 2016-01-07 21:15:59.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/errors.html 2019-10-23 14:28:10.000000000 +0200 @@ -1,7 +1,7 @@ {% if form.non_field_errors %} <div class="alert alert-block alert-danger"> {% if form_error_title %}<h4 class="alert-heading">{{ form_error_title }}</h4>{% endif %} - <ul> + <ul class="m-0"> {{ form.non_field_errors|unordered_list }} </ul> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/errors_formset.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/errors_formset.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/errors_formset.html 2016-01-07 21:15:59.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/errors_formset.html 2019-10-23 14:28:10.000000000 +0200 @@ -1,7 +1,7 @@ {% if formset.non_form_errors %} <div class="alert alert-block alert-danger"> {% if formset_error_title %}<h4 class="alert-heading">{{ formset_error_title }}</h4>{% endif %} - <ul> + <ul class="m-0"> {{ formset.non_form_errors|unordered_list }} </ul> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/field.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/field.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/field.html 2019-10-16 21:06:03.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/field.html 2019-11-22 14:44:09.000000000 +0100 @@ -35,7 +35,7 @@ {{ field.label|safe }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %} </label> {% include 'bootstrap4/layout/help_text_and_errors.html' %} - {% elif field|is_file %} + {% elif field|is_file and not field|is_clearable_file and use_custom_control %} {% include 'bootstrap4/layout/field_file.html' %} {% else %} <div class="{{ field_class }}"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple.html 2019-10-16 21:06:03.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple.html 2019-11-22 14:44:09.000000000 +0100 @@ -5,7 +5,7 @@ {% for choice in field.field.choices %} <div class="{%if use_custom_control%}custom-control custom-checkbox{% if inline_class %} custom-control-inline{% endif %}{% else %}form-check{% if inline_class %} form-check-inline{% endif %}{% endif %}"> - <input type="checkbox" class="{%if use_custom_control%}custom-control-input{% else %}form-check-input{% endif %}{%if is_bound %} is-{% if field.errors %}in{%endif%}valid{% endif %}"{% if choice.0 in field.value or choice.0|stringformat:"s" in field.value or choice.0|stringformat:"s" == field.value|default_if_none:""|stringformat:"s" %} checked="checked"{% endif %} name="{{ field.html_name }}" id="id_{{ field.html_name }}_{{ forloop.counter }}" value="{{ choice.0|unlocalize }}" {{ field.field.widget.attrs|flatatt }}> + <input type="checkbox" class="{%if use_custom_control%}custom-control-input{% else %}form-check-input{% endif %}{% if field.errors %} is-invalid{% endif %}"{% if choice.0 in field.value or choice.0|stringformat:"s" in field.value or choice.0|stringformat:"s" == field.value|default_if_none:""|stringformat:"s" %} checked="checked"{% endif %} name="{{ field.html_name }}" id="id_{{ field.html_name }}_{{ forloop.counter }}" value="{{ choice.0|unlocalize }}" {{ field.field.widget.attrs|flatatt }}> <label class="{%if use_custom_control%}custom-control-label{% else %}form-check-label{% endif %}" for="id_{{ field.html_name }}_{{ forloop.counter }}"> {{ choice.1|unlocalize }} </label> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/column.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/column.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/column.html 1970-01-01 01:00:00.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/column.html 2019-11-22 14:44:09.000000000 +0100 @@ -0,0 +1,3 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="col {{ div.css_class|default:'' }}" {{ div.flat_attrs|safe }}> + {{ fields|safe }} +</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/field_file.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/field_file.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/field_file.html 2019-10-16 21:06:03.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/field_file.html 2019-11-22 14:44:09.000000000 +0100 @@ -4,4 +4,13 @@ {% crispy_field field 'class' 'custom-file-input' %} <label class="custom-file-label" for="{{ field.id_for_label }}">Choose file</label> {% include 'bootstrap4/layout/help_text_and_errors.html' %} + <script type="text/javascript" id="script-{{ field.id_for_label }}"> + document.getElementById("script-{{ field.id_for_label }}").parentNode.querySelector('.custom-file-input').onchange = function (e){ + var filenames = ""; + for (let i=0;i<e.target.files.length;i++){ + filenames+=(i>0?", ":"")+e.target.files[0].name; + } + e.target.parentNode.querySelector('.custom-file-label').innerHTML=filenames; + } + </script> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/formactions.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/formactions.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/formactions.html 2018-03-15 16:14:26.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/formactions.html 2019-11-22 14:44:09.000000000 +0100 @@ -1,4 +1,4 @@ -<div{% if formactions.attrs %} {{ formactions.flat_attrs|safe }}{% endif %} class="form-group row"> +<div{% if formactions.attrs %} {{ formactions.flat_attrs|safe }}{% endif %} class="form-group"> {% if label_class %} <div class="aab {{ label_class }}"></div> {% endif %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/radioselect.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/radioselect.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/radioselect.html 2019-10-16 21:06:03.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/radioselect.html 2019-11-22 14:44:09.000000000 +0100 @@ -5,7 +5,7 @@ {% for choice in field.field.choices %} <div class="{%if use_custom_control%}custom-control custom-radio{% if inline_class %} custom-control-inline{% endif %}{% else %}form-check{% if inline_class %} form-check-inline{% endif %}{% endif %}"> - <input type="radio" class="{%if use_custom_control%}custom-control-input{% else %}form-check-input{% endif %}{%if is_bound %} is-{% if field.errors %}in{%endif%}valid{% endif %}"{% if choice.0|stringformat:"s" == field.value|default_if_none:""|stringformat:"s" %} checked="checked"{% endif %} name="{{ field.html_name }}" id="id_{{ field.html_name }}_{{ forloop.counter }}" value="{{ choice.0|unlocalize }}" {{ field.field.widget.attrs|flatatt }}> + <input type="radio" class="{%if use_custom_control%}custom-control-input{% else %}form-check-input{% endif %}{% if field.errors %} is-invalid{% endif %}"{% if choice.0|stringformat:"s" == field.value|default_if_none:""|stringformat:"s" %} checked="checked"{% endif %} name="{{ field.html_name }}" id="id_{{ field.html_name }}_{{ forloop.counter }}" value="{{ choice.0|unlocalize }}" {{ field.field.widget.attrs|flatatt }}> <label for="id_{{ field.html_name }}_{{ forloop.counter }}" class="{%if use_custom_control%}custom-control-label{% else %}form-check-label{% endif %}"> {{ choice.1|unlocalize }} </label> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/row.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/row.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/layout/row.html 1970-01-01 01:00:00.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/row.html 2019-11-22 14:44:09.000000000 +0100 @@ -0,0 +1,3 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="form-row {{ div.css_class|default:'' }}" {{ div.flat_attrs|safe }}> + {{ fields|safe }} +</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/uni_form.html new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/uni_form.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/bootstrap4/uni_form.html 2019-09-19 16:26:12.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/uni_form.html 2019-11-22 14:44:09.000000000 +0100 @@ -6,6 +6,6 @@ {% include "bootstrap4/errors.html" %} {% endif %} {% for field in form %} - {% include field_template|default:"bootstrap4/field.html" %} + {% include field_template %} {% endfor %} {% endspecialspaceless %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/uni_form/layout/column.html new/django-crispy-forms-1.8.1/crispy_forms/templates/uni_form/layout/column.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/uni_form/layout/column.html 1970-01-01 01:00:00.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/uni_form/layout/column.html 2019-11-22 14:44:09.000000000 +0100 @@ -0,0 +1,3 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="formColumn {{ div.css_class|default:'' }}" {{ div.flat_attrs|safe }}> + {{ fields|safe }} +</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/uni_form/layout/row.html new/django-crispy-forms-1.8.1/crispy_forms/templates/uni_form/layout/row.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/uni_form/layout/row.html 1970-01-01 01:00:00.000000000 +0100 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/uni_form/layout/row.html 2019-11-22 14:44:09.000000000 +0100 @@ -0,0 +1,4 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="formRow {{ div.css_class|default:'' }}" {{ div.flat_attrs|safe }}> + {{ fields|safe }} +</div> + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templates/uni_form/uni_form.html new/django-crispy-forms-1.8.1/crispy_forms/templates/uni_form/uni_form.html --- old/django-crispy-forms-1.8.0/crispy_forms/templates/uni_form/uni_form.html 2019-09-19 16:26:12.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templates/uni_form/uni_form.html 2019-11-22 14:44:09.000000000 +0100 @@ -9,7 +9,7 @@ {% endif %} {% for field in form %} - {% include field_template|default:"uni_form/field.html" %} + {% include field_template %} {% endfor %} {% if form_style == "" or form_style %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templatetags/crispy_forms_field.py new/django-crispy-forms-1.8.1/crispy_forms/templatetags/crispy_forms_field.py --- old/django-crispy-forms-1.8.0/crispy_forms/templatetags/crispy_forms_field.py 2019-10-16 21:06:03.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templatetags/crispy_forms_field.py 2019-11-22 14:44:09.000000000 +0100 @@ -43,6 +43,11 @@ @register.filter +def is_clearable_file(field): + return isinstance(field.field.widget, forms.ClearableFileInput) + + +@register.filter def is_multivalue(field): return isinstance(field.field.widget, forms.MultiWidget) @@ -142,7 +147,7 @@ # HTML5 required attribute if html5_required and field.field.required and 'required' not in widget.attrs: - if field.field.widget.__class__.__name__ is not 'RadioSelect': + if field.field.widget.__class__.__name__ != 'RadioSelect': widget.attrs['required'] = 'required' for attribute_name, attribute in attr.items(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templatetags/crispy_forms_filters.py new/django-crispy-forms-1.8.1/crispy_forms/templatetags/crispy_forms_filters.py --- old/django-crispy-forms-1.8.0/crispy_forms/templatetags/crispy_forms_filters.py 2019-10-10 06:46:48.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templatetags/crispy_forms_filters.py 2019-11-22 14:44:09.000000000 +0100 @@ -44,24 +44,19 @@ {{ myform|label_class:"col-lg-2",field_class:"col-lg-8" }} """ + c = Context({ + 'field_class': field_class, + 'field_template': '%s/field.html' % template_pack, + 'form_show_errors': True, + 'form_show_labels': True, + 'label_class': label_class, + }).flatten() if isinstance(form, BaseFormSet): template = uni_formset_template(template_pack) - c = Context({ - 'formset': form, - 'form_show_errors': True, - 'form_show_labels': True, - 'label_class': label_class, - 'field_class': field_class, - }).flatten() + c['formset'] = form else: template = uni_form_template(template_pack) - c = Context({ - 'form': form, - 'form_show_errors': True, - 'form_show_labels': True, - 'label_class': label_class, - 'field_class': field_class, - }).flatten() + c['form'] = form return template.render(c) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/templatetags/crispy_forms_tags.py new/django-crispy-forms-1.8.1/crispy_forms/templatetags/crispy_forms_tags.py --- old/django-crispy-forms-1.8.0/crispy_forms/templatetags/crispy_forms_tags.py 2019-10-10 06:46:48.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/templatetags/crispy_forms_tags.py 2019-11-22 14:44:09.000000000 +0100 @@ -149,28 +149,29 @@ # We take form/formset parameters from attrs if they are set, otherwise we use defaults response_dict = { - 'template_pack': self.template_pack, - '%s_action' % form_type: attrs['attrs'].get("action", ''), - '%s_method' % form_type: attrs.get("form_method", 'post'), - '%s_tag' % form_type: attrs.get("form_tag", True), - '%s_class' % form_type: attrs['attrs'].get("class", ''), - '%s_id' % form_type: attrs['attrs'].get("id", ""), - '%s_style' % form_type: attrs.get("form_style", None), - 'form_error_title': attrs.get("form_error_title", None), - 'formset_error_title': attrs.get("formset_error_title", None), - 'form_show_errors': attrs.get("form_show_errors", True), - 'help_text_inline': attrs.get("help_text_inline", False), - 'html5_required': attrs.get("html5_required", False), - 'form_show_labels': attrs.get("form_show_labels", True), - 'disable_csrf': attrs.get("disable_csrf", False), - 'inputs': attrs.get('inputs', []), - 'is_formset': is_formset, + '%s_action' % form_type: attrs['attrs'].get('action', ''), '%s_attrs' % form_type: attrs.get('attrs', ''), - 'flat_attrs': attrs.get('flat_attrs', ''), + '%s_class' % form_type: attrs['attrs'].get('class', ''), + '%s_id' % form_type: attrs['attrs'].get('id', ''), + '%s_method' % form_type: attrs.get('form_method', 'post'), + '%s_style' % form_type: attrs.get('form_style', None), + '%s_tag' % form_type: attrs.get('form_tag', True), + 'disable_csrf': attrs.get('disable_csrf', False), 'error_text_inline': attrs.get('error_text_inline', True), - 'label_class': attrs.get('label_class', ''), 'field_class': attrs.get('field_class', ''), + 'field_template': attrs.get('field_template', ''), + 'flat_attrs': attrs.get('flat_attrs', ''), + 'form_error_title': attrs.get('form_error_title', None), + 'form_show_errors': attrs.get('form_show_errors', True), + 'form_show_labels': attrs.get('form_show_labels', True), + 'formset_error_title': attrs.get('formset_error_title', None), + 'help_text_inline': attrs.get('help_text_inline', False), + 'html5_required': attrs.get('html5_required', False), 'include_media': attrs.get('include_media', True), + 'inputs': attrs.get('inputs', []), + 'is_formset': is_formset, + 'label_class': attrs.get('label_class', ''), + 'template_pack': self.template_pack, } # Handles custom attributes added to helpers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/tests/test_form_helper.py new/django-crispy-forms-1.8.1/crispy_forms/tests/test_form_helper.py --- old/django-crispy-forms-1.8.0/crispy_forms/tests/test_form_helper.py 2019-10-16 21:06:03.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/tests/test_form_helper.py 2019-11-22 14:44:09.000000000 +0100 @@ -810,14 +810,38 @@ html = render_crispy_form(form) assert '<div class="form-group">' in html - assert '<div class="offset-lg-2 col-lg-8">' in html + assert '<div class="col-lg-8">' in html assert html.count('col-lg-8') == 7 + assert 'offset' not in html form.helper.label_class = 'col-sm-3 col-md-4' form.helper.field_class = 'col-sm-8 col-md-6' html = render_crispy_form(form) assert '<div class="form-group">' in html + assert '<div class="col-sm-8 col-md-6">' in html + assert html.count('col-sm-8') == 7 + assert 'offset' not in html + + +@only_bootstrap4 +def test_label_class_and_field_class_bs4_offset_when_horizontal(): + form = SampleForm() + form.helper = FormHelper() + form.helper.label_class = 'col-lg-2' + form.helper.field_class = 'col-lg-8' + form.helper.form_class = 'form-horizontal' + html = render_crispy_form(form) + + assert '<div class="form-group row">' in html + assert '<div class="offset-lg-2 col-lg-8">' in html + assert html.count('col-lg-8') == 7 + + form.helper.label_class = 'col-sm-3 col-md-4' + form.helper.field_class = 'col-sm-8 col-md-6' + html = render_crispy_form(form) + + assert '<div class="form-group row">' in html assert '<div class="offset-sm-3 offset-md-4 col-sm-8 col-md-6">' in html assert html.count('col-sm-8') == 7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/crispy_forms/tests/test_layout.py new/django-crispy-forms-1.8.1/crispy_forms/tests/test_layout.py --- old/django-crispy-forms-1.8.0/crispy_forms/tests/test_layout.py 2019-10-17 17:14:45.000000000 +0200 +++ new/django-crispy-forms-1.8.1/crispy_forms/tests/test_layout.py 2019-11-22 14:44:09.000000000 +0100 @@ -251,6 +251,43 @@ assert 'email' not in html +def test_column_has_css_classes(settings): + template = Template(""" + {% load crispy_forms_tags %} + {% crispy form form_helper %} + """) + + form = SampleForm() + form_helper = FormHelper() + form_helper.add_layout( + Layout( + Fieldset( + 'Company Data', + 'is_company', + 'email', + 'password1', + 'password2', + css_id="multifield_info", + ), + Column( + 'first_name', + 'last_name', + ) + ) + ) + + c = Context({'form': form, 'form_helper': form_helper}) + html = template.render(c) + print(html) + + if settings.CRISPY_TEMPLATE_PACK == 'uni_form': + assert html.count('formColumn') == 1 + assert html.count('col') == 0 + elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap4': + assert html.count('formColumn') == 0 + assert html.count('col') == 1 + + def test_formset_layout(settings): SampleFormSet = formset_factory(SampleForm, extra=3) formset = SampleFormSet() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/django_crispy_forms.egg-info/PKG-INFO new/django-crispy-forms-1.8.1/django_crispy_forms.egg-info/PKG-INFO --- old/django-crispy-forms-1.8.0/django_crispy_forms.egg-info/PKG-INFO 2019-10-17 17:25:15.000000000 +0200 +++ new/django-crispy-forms-1.8.1/django_crispy_forms.egg-info/PKG-INFO 2019-11-22 14:51:01.000000000 +0100 @@ -1,8 +1,8 @@ Metadata-Version: 1.1 Name: django-crispy-forms -Version: 1.8.0 +Version: 1.8.1 Summary: Best way to have Django DRY forms -Home-page: http://github.com/djang-crispy-forms/django-crispy-forms +Home-page: https://github.com/django-crispy-forms/django-crispy-forms Author: Miguel Araujo Author-email: miguel.araujo.pe...@gmail.com License: MIT @@ -10,7 +10,7 @@ django-crispy-forms =================== - .. image:: https://travis-ci.org/django-crispy-forms/django-crispy-forms.png?branch=dev + .. image:: https://travis-ci.org/django-crispy-forms/django-crispy-forms.png?branch=master :alt: Build Status :target: https://travis-ci.org/django-crispy-forms/django-crispy-forms @@ -83,6 +83,7 @@ Classifier: Framework :: Django :: 1.11 Classifier: Framework :: Django :: 2.1 Classifier: Framework :: Django :: 2.2 +Classifier: Framework :: Django :: 3.0 Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: JavaScript diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/django_crispy_forms.egg-info/SOURCES.txt new/django-crispy-forms-1.8.1/django_crispy_forms.egg-info/SOURCES.txt --- old/django-crispy-forms-1.8.0/django_crispy_forms.egg-info/SOURCES.txt 2019-10-17 17:25:15.000000000 +0200 +++ new/django-crispy-forms-1.8.1/django_crispy_forms.egg-info/SOURCES.txt 2019-11-22 14:51:01.000000000 +0100 @@ -31,6 +31,7 @@ crispy_forms/templates/bootstrap/layout/buttonholder.html crispy_forms/templates/bootstrap/layout/checkboxselectmultiple.html crispy_forms/templates/bootstrap/layout/checkboxselectmultiple_inline.html +crispy_forms/templates/bootstrap/layout/column.html crispy_forms/templates/bootstrap/layout/div.html crispy_forms/templates/bootstrap/layout/field_errors.html crispy_forms/templates/bootstrap/layout/field_errors_block.html @@ -43,6 +44,7 @@ crispy_forms/templates/bootstrap/layout/prepended_appended_text.html crispy_forms/templates/bootstrap/layout/radioselect.html crispy_forms/templates/bootstrap/layout/radioselect_inline.html +crispy_forms/templates/bootstrap/layout/row.html crispy_forms/templates/bootstrap/layout/tab-link.html crispy_forms/templates/bootstrap/layout/tab.html crispy_forms/templates/bootstrap/layout/uneditable_input.html @@ -66,6 +68,7 @@ crispy_forms/templates/bootstrap3/layout/buttonholder.html crispy_forms/templates/bootstrap3/layout/checkboxselectmultiple.html crispy_forms/templates/bootstrap3/layout/checkboxselectmultiple_inline.html +crispy_forms/templates/bootstrap3/layout/column.html crispy_forms/templates/bootstrap3/layout/div.html crispy_forms/templates/bootstrap3/layout/field_errors.html crispy_forms/templates/bootstrap3/layout/field_errors_block.html @@ -79,6 +82,7 @@ crispy_forms/templates/bootstrap3/layout/prepended_appended_text.html crispy_forms/templates/bootstrap3/layout/radioselect.html crispy_forms/templates/bootstrap3/layout/radioselect_inline.html +crispy_forms/templates/bootstrap3/layout/row.html crispy_forms/templates/bootstrap3/layout/tab-link.html crispy_forms/templates/bootstrap3/layout/tab.html crispy_forms/templates/bootstrap3/layout/uneditable_input.html @@ -101,6 +105,7 @@ crispy_forms/templates/bootstrap4/layout/buttonholder.html crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple.html crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple_inline.html +crispy_forms/templates/bootstrap4/layout/column.html crispy_forms/templates/bootstrap4/layout/div.html crispy_forms/templates/bootstrap4/layout/field_errors.html crispy_forms/templates/bootstrap4/layout/field_errors_block.html @@ -115,6 +120,7 @@ crispy_forms/templates/bootstrap4/layout/prepended_appended_text.html crispy_forms/templates/bootstrap4/layout/radioselect.html crispy_forms/templates/bootstrap4/layout/radioselect_inline.html +crispy_forms/templates/bootstrap4/layout/row.html crispy_forms/templates/bootstrap4/layout/tab-link.html crispy_forms/templates/bootstrap4/layout/tab.html crispy_forms/templates/bootstrap4/layout/uneditable_input.html @@ -131,9 +137,11 @@ crispy_forms/templates/uni_form/whole_uni_formset.html crispy_forms/templates/uni_form/layout/baseinput.html crispy_forms/templates/uni_form/layout/buttonholder.html +crispy_forms/templates/uni_form/layout/column.html crispy_forms/templates/uni_form/layout/div.html crispy_forms/templates/uni_form/layout/fieldset.html crispy_forms/templates/uni_form/layout/multifield.html +crispy_forms/templates/uni_form/layout/row.html crispy_forms/templatetags/__init__.py crispy_forms/templatetags/crispy_forms_field.py crispy_forms/templatetags/crispy_forms_filters.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-crispy-forms-1.8.0/setup.py new/django-crispy-forms-1.8.1/setup.py --- old/django-crispy-forms-1.8.0/setup.py 2019-10-17 17:24:14.000000000 +0200 +++ new/django-crispy-forms-1.8.1/setup.py 2019-10-23 14:28:10.000000000 +0200 @@ -31,7 +31,7 @@ "Framework :: Django :: 1.11", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", -# "Framework :: Django :: 3.0", + "Framework :: Django :: 3.0", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: JavaScript", @@ -49,7 +49,7 @@ keywords=['forms', 'django', 'crispy', 'DRY'], author='Miguel Araujo', author_email='miguel.araujo.pe...@gmail.com', - url='http://github.com/djang-crispy-forms/django-crispy-forms', + url='https://github.com/django-crispy-forms/django-crispy-forms', license='MIT', packages=find_packages(exclude=['docs']), include_package_data=True,