Hello community,
here is the log from the commit of package python-django-crispy-forms for
openSUSE:Leap:15.2 checked in at 2020-02-23 16:47:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/python-django-crispy-forms (Old)
and /work/SRC/openSUSE:Leap:15.2/.python-django-crispy-forms.new.26092
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-crispy-forms"
Sun Feb 23 16:47:19 2020 rev:3 rq:776568 version:1.8.1
Changes:
--------
---
/work/SRC/openSUSE:Leap:15.2/python-django-crispy-forms/python-django-crispy-forms.changes
2020-01-15 15:48:37.183432054 +0100
+++
/work/SRC/openSUSE:Leap:15.2/.python-django-crispy-forms.new.26092/python-django-crispy-forms.changes
2020-02-23 16:47:20.194305077 +0100
@@ -1,0 +2,28 @@
+Tue Jan 7 09:29:18 UTC 2020 - Tomáš Chvátal <[email protected]>
+
+- 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
+
+-------------------------------------------------------------------
+Wed Oct 30 12:08:12 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 1.8.0:
+ * Update to support new django releases
+ * Numerous improvements to bootstrap4 template pack
+- Remove patches:
+ * django-21.patch
+ * django-20.patch
+
+-------------------------------------------------------------------
+Mon Sep 16 14:10:41 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Test only with pytest 3, newer releases not compatible
+
+-------------------------------------------------------------------
+Fri May 31 07:44:09 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Fix old leap build
+
+-------------------------------------------------------------------
Old:
----
django-20.patch
django-21.patch
django-crispy-forms-1.7.2.tar.gz
New:
----
django-crispy-forms-1.8.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-crispy-forms.spec ++++++
--- /var/tmp/diff_new_pack.IjGGEz/_old 2020-02-23 16:47:20.474305616 +0100
+++ /var/tmp/diff_new_pack.IjGGEz/_new 2020-02-23 16:47:20.478305624 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-django-crispy-forms
#
-# Copyright (c) 2018 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
@@ -12,22 +12,20 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define mod_name django-crispy-forms
Name: python-%{mod_name}
-Version: 1.7.2
+Version: 1.8.1
Release: 0
Summary: Django DRY Forms
License: MIT
Group: Development/Languages/Python
URL: http://github.com/maraujop/django-crispy-forms
Source:
https://files.pythonhosted.org/packages/source/d/%{mod_name}/%{mod_name}-%{version}.tar.gz
-Patch0: django-20.patch
-Patch1: django-21.patch
BuildRequires: %{python_module Django}
BuildRequires: %{python_module pytest-django}
BuildRequires: %{python_module pytest}
@@ -46,15 +44,13 @@
%prep
%setup -q -n %{mod_name}-%{version}
-%autopatch -p1
-# Remove not needed files
-find . -name '*.pyc' -delete
%build
%python_build
%check
-%python_expand PYTHONPATH=`pwd`
DJANGO_SETTINGS_MODULE=crispy_forms.tests.test_settings
py.test-%{$python_version} crispy_forms/tests
+export DJANGO_SETTINGS_MODULE=crispy_forms.tests.test_settings
+%pytest
%install
%python_install
++++++ django-crispy-forms-1.7.2.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.7.2/CONTRIBUTORS.txt
new/django-crispy-forms-1.8.1/CONTRIBUTORS.txt
--- old/django-crispy-forms-1.7.2/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.7.2/PKG-INFO
new/django-crispy-forms-1.8.1/PKG-INFO
--- old/django-crispy-forms-1.7.2/PKG-INFO 2018-03-09 15:47:00.000000000
+0100
+++ new/django-crispy-forms-1.8.1/PKG-INFO 2019-11-22 14:51:01.000000000
+0100
@@ -1,17 +1,16 @@
Metadata-Version: 1.1
Name: django-crispy-forms
-Version: 1.7.2
+Version: 1.8.1
Summary: Best way to have Django DRY forms
-Home-page: http://github.com/maraujop/django-crispy-forms
+Home-page: https://github.com/django-crispy-forms/django-crispy-forms
Author: Miguel Araujo
Author-email: [email protected]
License: MIT
-Description-Content-Type: UNKNOWN
Description: ===================
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
@@ -20,17 +19,17 @@
The best way to have Django_ DRY forms. Build programmatic reusable
layouts out of components, having full control of the rendered HTML without
writing HTML in templates. All this without breaking the standard way of doing
things in Django, so it plays nice with any other form application.
- `django-crispy-forms` supports Python 2.7/Python 3.3+ and Django
1.8/Django 1.10+
+ `django-crispy-forms` supports Python 2.7/Python 3.5+ and Django 1.11,
2.1, 2.2 and 3.0.
The application mainly provides:
* A filter named ``|crispy`` that will render elegant div based forms.
Think of it as the built-in methods: ``as_table``, ``as_ul`` and ``as_p``. You
cannot tune up the output, but it is easy to start using it.
* A tag named ``{% crispy %}`` that will render a form based on your
configuration and specific layout setup. This gives you amazing power without
much hassle, helping you save tons of time.
- Django-crispy-forms supports several frontend frameworks, such as
Twitter `Bootstrap`_ (versions 2 and 3), `Uni-form`_ and Foundation. You can
also easily adapt your custom company's one, creating your own, `see the docs`_
for more information. You can easily switch among them using
``CRISPY_TEMPLATE_PACK`` setting variable.
+ Django-crispy-forms supports several frontend frameworks, such as
Twitter `Bootstrap`_ (versions 2, 3, and 4), `Uni-form`_ and Foundation. You
can also easily adapt your custom company's one, creating your own, `see the
docs`_ for more information. You can easily switch among them using
``CRISPY_TEMPLATE_PACK`` setting variable.
.. _`Uni-form`: http://sprawsm.com/uni-form
- .. _`Bootstrap`: http://twitter.github.com/bootstrap/index.html
+ .. _`Bootstrap`: https://getbootstrap.com
.. _`see the docs`: https://django-crispy-forms.readthedocs.io
Authors
@@ -81,14 +80,20 @@
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
+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
+Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-crispy-forms-1.7.2/README.rst
new/django-crispy-forms-1.8.1/README.rst
--- old/django-crispy-forms-1.7.2/README.rst 2017-10-17 16:10:19.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
@@ -11,17 +11,17 @@
The best way to have Django_ DRY forms. Build programmatic reusable layouts
out of components, having full control of the rendered HTML without writing
HTML in templates. All this without breaking the standard way of doing things
in Django, so it plays nice with any other form application.
-`django-crispy-forms` supports Python 2.7/Python 3.3+ and Django 1.8/Django
1.10+
+`django-crispy-forms` supports Python 2.7/Python 3.5+ and Django 1.11, 2.1,
2.2 and 3.0.
The application mainly provides:
* A filter named ``|crispy`` that will render elegant div based forms. Think
of it as the built-in methods: ``as_table``, ``as_ul`` and ``as_p``. You cannot
tune up the output, but it is easy to start using it.
* A tag named ``{% crispy %}`` that will render a form based on your
configuration and specific layout setup. This gives you amazing power without
much hassle, helping you save tons of time.
-Django-crispy-forms supports several frontend frameworks, such as Twitter
`Bootstrap`_ (versions 2 and 3), `Uni-form`_ and Foundation. You can also
easily adapt your custom company's one, creating your own, `see the docs`_ for
more information. You can easily switch among them using
``CRISPY_TEMPLATE_PACK`` setting variable.
+Django-crispy-forms supports several frontend frameworks, such as Twitter
`Bootstrap`_ (versions 2, 3, and 4), `Uni-form`_ and Foundation. You can also
easily adapt your custom company's one, creating your own, `see the docs`_ for
more information. You can easily switch among them using
``CRISPY_TEMPLATE_PACK`` setting variable.
.. _`Uni-form`: http://sprawsm.com/uni-form
-.. _`Bootstrap`: http://twitter.github.com/bootstrap/index.html
+.. _`Bootstrap`: https://getbootstrap.com
.. _`see the docs`: https://django-crispy-forms.readthedocs.io
Authors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-crispy-forms-1.7.2/crispy_forms/__init__.py
new/django-crispy-forms-1.8.1/crispy_forms/__init__.py
--- old/django-crispy-forms-1.7.2/crispy_forms/__init__.py 2018-03-09
15:42:59.000000000 +0100
+++ 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.7.2'
+__version__ = '1.8.1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-crispy-forms-1.7.2/crispy_forms/bootstrap.py
new/django-crispy-forms-1.8.1/crispy_forms/bootstrap.py
--- old/django-crispy-forms-1.7.2/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.7.2/crispy_forms/compatibility.py
new/django-crispy-forms-1.8.1/crispy_forms/compatibility.py
--- old/django-crispy-forms-1.7.2/crispy_forms/compatibility.py 2017-10-17
16:10:19.000000000 +0200
+++ new/django-crispy-forms-1.8.1/crispy_forms/compatibility.py 2019-09-19
16:53:39.000000000 +0200
@@ -1,4 +1,5 @@
import sys
+import django
try:
basestring
@@ -16,3 +17,8 @@
binary_type = str
string_types = basestring
integer_types = (int, long)
+
+if django.VERSION < (3, 0):
+ from django.utils.lru_cache import lru_cache
+else:
+ from functools import lru_cache
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-crispy-forms-1.7.2/crispy_forms/helper.py
new/django-crispy-forms-1.8.1/crispy_forms/helper.py
--- old/django-crispy-forms-1.7.2/crispy_forms/helper.py 2018-03-05
15:49:56.000000000 +0100
+++ new/django-crispy-forms-1.8.1/crispy_forms/helper.py 2019-11-22
14:44:09.000000000 +0100
@@ -125,7 +125,7 @@
Let's see what attributes you can set and what form behaviors they apply
to:
**form_method**: Specifies form method attribute.
- You can see it to 'POST' or 'GET'. Defaults to 'POST'
+ You can set it to 'POST' or 'GET'. Defaults to 'POST'
**form_action**: Applied to the form action attribute:
- Can be a named url in your URLconf that can be executed via the
`{% url %}` template tag. \
@@ -215,6 +215,7 @@
template = None
field_template = None
disable_csrf = False
+ use_custom_control = True
label_class = ''
field_class = ''
include_media = True
@@ -355,26 +356,34 @@
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,
+ '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,
}
- bootstrap_size_match = re.findall('col-(lg|md|sm|xs)-(\d+)',
self.label_class)
- if bootstrap_size_match:
- if template_pack == 'bootstrap4':
- offset_pattern = 'offset-%s-%s'
- else:
+
+ 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'
+ 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:
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]
items['attrs'] = {}
if self.attrs:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-crispy-forms-1.7.2/crispy_forms/layout.py
new/django-crispy-forms-1.8.1/crispy_forms/layout.py
--- old/django-crispy-forms-1.7.2/crispy_forms/layout.py 2017-10-17
16:10:19.000000000 +0200
+++ new/django-crispy-forms-1.8.1/crispy_forms/layout.py 2019-11-22
14:44:09.000000000 +0100
@@ -370,19 +370,21 @@
Row('form_field_1', 'form_field_2', 'form_field_3')
"""
-
- def __init__(self, *args, **kwargs):
- self.css_class = 'formRow' if get_template_pack() == 'uni_form' else
'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.7.2/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.7.2/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.7.2/crispy_forms/templates/bootstrap/layout/radioselect.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap/layout/radioselect.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap/layout/radioselect.html
2018-03-05 15:49:56.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap/layout/radioselect.html
2019-09-19 16:53:39.000000000 +0200
@@ -5,8 +5,8 @@
{% include 'bootstrap/layout/field_errors_block.html' %}
{% for choice in field.field.choices %}
- <label for="id_{{ field.id_for_label }}_{{ forloop.counter }}"
class="radio{% if inline_class %} {{ inline_class }}{% endif %}">
- <input type="radio"{% if choice.0|stringformat:"s" ==
field.value|default_if_none:""|stringformat:"s" %} checked="checked"{% endif %}
name="{{ field.html_name }}" id="id_{{ field.id_for_label }}_{{ forloop.counter
}}" value="{{ choice.0|unlocalize }}" {{ field.field.widget.attrs|flatatt }}>{{
choice.1|unlocalize }}
+ <label for="id_{{ field.html_name }}_{{ forloop.counter }}"
class="radio{% if inline_class %} {{ inline_class }}{% endif %}">
+ <input type="radio"{% 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 }}>{{
choice.1|unlocalize }}
</label>
{% endfor %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/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.7.2/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.7.2/crispy_forms/templates/bootstrap/uni_form.html
2016-01-07 21:15:59.000000000 +0100
+++
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 "bootstrap/field.html" %}
+ {% include field_template %}
{% endfor %}
{% endspecialspaceless %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/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.7.2/crispy_forms/templates/bootstrap3/layout/help_text.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/help_text.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap3/layout/help_text.html
2015-08-13 20:27:02.000000000 +0200
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/help_text.html
2019-10-21 16:35:18.000000000 +0200
@@ -2,6 +2,6 @@
{% if help_text_inline %}
<span id="hint_{{ field.auto_id }}" class="help-block">{{
field.help_text|safe }}</span>
{% else %}
- <p id="hint_{{ field.auto_id }}" class="help-block">{{
field.help_text|safe }}</p>
+ <div id="hint_{{ field.auto_id }}" class="help-block">{{
field.help_text|safe }}</div>
{% endif %}
{% endif %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap3/layout/prepended_appended_text.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/prepended_appended_text.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap3/layout/prepended_appended_text.html
2017-02-22 11:58:37.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/prepended_appended_text.html
2019-09-19 16:53:39.000000000 +0200
@@ -12,17 +12,11 @@
{% endif %}
<div class="controls {{ field_class }}">
- {% if field|is_select %}
- {% if crispy_prepended_text %}<span class="input-group{% if
active %} active{% endif %}{% if input_size %} {{ input_size }}{% endif %}">{{
crispy_prepended_text|safe }}</span>{% endif %}
+ <div class="input-group">
+ {% if crispy_prepended_text %}<span class="input-group-addon{%
if active %} active{% endif %}{% if input_size %} {{ input_size }}{% endif
%}">{{ crispy_prepended_text|safe }}</span>{% endif %}
{% crispy_field field %}
- {% if crispy_appended_text %}<span class="input-group{% if
active %} active{% endif %}{% if input_size %} {{ input_size }}{% endif %}">{{
crispy_appended_text|safe }}</span>{% endif %}
- {% else %}
- <div class="input-group">
- {% if crispy_prepended_text %}<span
class="input-group-addon{% if active %} active{% endif %}{% if input_size %} {{
input_size }}{% endif %}">{{ crispy_prepended_text|safe }}</span>{% endif %}
- {% crispy_field field %}
- {% if crispy_appended_text %}<span
class="input-group-addon{% if active %} active{% endif %}{% if input_size %} {{
input_size }}{% endif %}">{{ crispy_appended_text|safe }}</span>{% endif %}
- </div>
- {% endif %}
+ {% if crispy_appended_text %}<span class="input-group-addon{%
if active %} active{% endif %}{% if input_size %} {{ input_size }}{% endif
%}">{{ crispy_appended_text|safe }}</span>{% endif %}
+ </div>
{% include 'bootstrap3/layout/help_text_and_errors.html' %}
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap3/layout/radioselect.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/radioselect.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap3/layout/radioselect.html
2018-03-05 15:49:56.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/layout/radioselect.html
2019-09-19 16:53:39.000000000 +0200
@@ -6,8 +6,8 @@
{% for choice in field.field.choices %}
{% if not inline_class %}<div class="radio">{% endif %}
- <label for="id_{{ field.id_for_label }}_{{ forloop.counter }}"
class="{% if inline_class %}radio-{{ inline_class }}{% endif %}">
- <input type="radio"{% if choice.0|stringformat:"s" ==
field.value|default_if_none:""|stringformat:"s" %} checked="checked"{% endif %}
name="{{ field.html_name }}" id="id_{{ field.id_for_label }}_{{ forloop.counter
}}" value="{{ choice.0|unlocalize }}" {{ field.field.widget.attrs|flatatt }}>{{
choice.1|unlocalize }}
+ <label for="id_{{ field.html_name }}_{{ forloop.counter }}" class="{%
if inline_class %}radio-{{ inline_class }}{% endif %}">
+ <input type="radio"{% 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 }}>{{
choice.1|unlocalize }}
</label>
{% if not inline_class %}</div>{% endif %}
{% endfor %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/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.7.2/crispy_forms/templates/bootstrap3/table_inline_formset.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/table_inline_formset.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap3/table_inline_formset.html
2017-10-17 16:10:19.000000000 +0200
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap3/table_inline_formset.html
2019-09-19 16:53:39.000000000 +0200
@@ -20,9 +20,9 @@
{% else %}
<tr>
{% for field in formset.forms.0 %}
- {% if field.label and not field|is_checkbox and not
field.is_hidden %}
+ {% if field.label and not field.is_hidden %}
<th for="{{ field.auto_id }}" class="control-label
{% if field.field.required %}requiredField{% endif %}">
- {{ field.label|safe }}{% if
field.field.required %}<span class="asteriskField">*</span>{% endif %}
+ {{ field.label|safe }}{% if
field.field.required and not field|is_checkbox %}<span
class="asteriskField">*</span>{% endif %}
</th>
{% endif %}
{% endfor %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/crispy_forms/templates/bootstrap3/uni_form.html
2016-01-07 21:15:59.000000000 +0100
+++
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 "bootstrap3/field.html" %}
+ {% include field_template %}
{% endfor %}
{% endspecialspaceless %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/accordion-group.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/accordion-group.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/accordion-group.html
2016-01-07 21:15:59.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/accordion-group.html
2019-09-19 16:53:39.000000000 +0200
@@ -1,11 +1,16 @@
-<div class="panel panel-default">
- <div class="panel-heading">
- <h4 class="panel-title">
- <a class="accordion-toggle" data-toggle="collapse"
data-parent="#{{ div.data_parent }}" href="#{{ div.css_id }}">{{ div.name }}</a>
- </h4>
+<div class="card mb-2">
+ <div class="card-header" role="tab">
+ <h5 class="mb-0">
+ <a data-toggle="collapse" href="#{{ div.css_id }}"
aria-expanded="true"
+ aria-controls="{{ div.css_id }}">
+ {{ div.name }}
+ </a>
+ </h5>
</div>
- <div id="{{ div.css_id }}" class="panel-collapse collapse{% if div.active
%} in{% endif %}" >
- <div class="panel-body">
+
+ <div id="{{ div.css_id }}" class="collapse{% if div.active %} show{% endif
%}" role="tabpanel"
+ aria-labelledby="{{ div.css_id }}" data-parent="#accordion">
+ <div class="card-body">
{{ fields|safe }}
</div>
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/accordion.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/accordion.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/accordion.html
2016-01-07 21:15:59.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/accordion.html
2019-09-19 16:53:39.000000000 +0200
@@ -1,3 +1,3 @@
-<div class="panel-group" id="{{ accordion.css_id }}">
+<div id="accordion" role="tablist">
{{ content|safe }}
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/errors.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/errors.html
--- old/django-crispy-forms-1.7.2/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.7.2/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.7.2/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.7.2/crispy_forms/templates/bootstrap4/field.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/field.html
--- old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/field.html
2018-03-09 15:40:03.000000000 +0100
+++ new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/field.html
2019-11-22 14:44:09.000000000 +0100
@@ -9,9 +9,9 @@
<div class="{% for offset in bootstrap_checkbox_offsets %}{{
offset }} {% endfor %}{{ field_class }}">
{% endif %}
{% endif %}
- <{% if tag %}{{ tag }}{% else %}div{% endif %} id="div_{{ field.auto_id
}}" class="{% if not field|is_checkbox %}form-group{% if 'form-horizontal' in
form_class %} row{% endif %}{% else %}form-check{% endif %}{% if wrapper_class
%} {{ wrapper_class }}{% endif %}{% if field.css_classes %} {{
field.css_classes }}{% endif %}">
+ <{% if tag %}{{ tag }}{% else %}div{% endif %} id="div_{{ field.auto_id
}}" class="{% if not field|is_checkbox %}form-group{% if 'form-horizontal' in
form_class %} row{% endif %}{% else %}{%if use_custom_control%}custom-control
custom-checkbox{% else %}form-check{% endif %}{% endif %}{% if wrapper_class %}
{{ wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes
}}{% endif %}">
{% if field.label and not field|is_checkbox and form_show_labels %}
- <label for="{{ field.id_for_label }}" class="col-form-label {{
label_class }}{% if field.field.required %} requiredField{% endif %}">
+ <label for="{{ field.id_for_label }}" class="{% if
'form-horizontal' in form_class %}col-form-label {% endif %}{{ label_class }}{%
if field.field.required %} requiredField{% endif %}">
{{ field.label|safe }}{% if field.field.required %}<span
class="asteriskField">*</span>{% endif %}
</label>
{% endif %}
@@ -26,11 +26,17 @@
{% if not field|is_checkboxselectmultiple and not field|is_radioselect
%}
{% if field|is_checkbox and form_show_labels %}
- <label for="{{ field.id_for_label }}"
class="form-check-label{% if field.field.required %} requiredField{% endif %}">
+ {%if use_custom_control%}
+ {% crispy_field field 'class' 'custom-control-input' %}
+ {% else %}
{% crispy_field field 'class' 'form-check-input' %}
+ {% endif %}
+ <label for="{{ field.id_for_label }}" class="{%if
use_custom_control%}custom-control-label{% else %}form-check-label{% endif %}{%
if field.field.required %} requiredField{% endif %}">
{{ 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 and not field|is_clearable_file and
use_custom_control %}
+ {% include 'bootstrap4/layout/field_file.html' %}
{% else %}
<div class="{{ field_class }}">
{% crispy_field field %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple.html
2018-03-09 15:40:03.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple.html
2019-11-22 14:44:09.000000000 +0100
@@ -1,17 +1,26 @@
{% load crispy_forms_filters %}
{% load l10n %}
-<div class="{% if inline_class %}form-check{% endif %}{% if field_class %} {{
field_class }}{% endif %}"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}>
- {% include 'bootstrap4/layout/field_errors_block.html' %}
+<div class="{% if field_class %} {{ field_class }}{% endif %}"{% if flat_attrs
%} {{ flat_attrs|safe }}{% endif %}>
{% for choice in field.field.choices %}
- {% if not inline_class %}<div class="form-check">{% endif %}
- <label id="id_{{ field.id_for_label }}_{{ forloop.counter }}"
class="form-check-{% if inline_class %}{{ inline_class }}{% else %}label{%
endif %}" for="id_{{ field.html_name }}_{{ forloop.counter }}">
- <input type="checkbox" class="form-check-input"{% 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 }}>
+ <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 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>
- {% if not inline_class %}</div>{% endif %}
- {% endfor %}
+ {% if field.errors and forloop.last and not inline_class %}
+ {% include 'bootstrap4/layout/field_errors_block.html' %}
+ {% endif %}
+ </div>
+ {% endfor %}
+ {% if field.errors and inline_class %}
+ <div class="w-100 {%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 %}">
+ {# the following input is only meant to allow boostrap to render the
error message as it has to be after an invalid input. As the input has no name,
no data will be sent. #}
+ <input type="checkbox" class="custom-control-input {% if field.errors
%}is-invalid{%endif%}">
+ {% include 'bootstrap4/layout/field_errors_block.html' %}
+ </div>
+ {% endif %}
{% include 'bootstrap4/layout/help_text.html' %}
-</div>
+</div>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple_inline.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple_inline.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple_inline.html
2018-03-05 15:49:56.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/checkboxselectmultiple_inline.html
2019-10-21 16:35:18.000000000 +0200
@@ -4,7 +4,7 @@
<div id="div_{{ field.auto_id }}" class="form-group{% if 'form-horizontal'
in form_class %} row{% endif %}{% if wrapper_class %} {{ wrapper_class }}{%
endif %}{% if form_show_errors and field.errors %} has-danger{% endif %}{% if
field.css_classes %} {{ field.css_classes }}{% endif %}">
{% if field.label %}
- <label for="{{ field.auto_id }}" class="{{ label_class }}{% if
not inline_class %} col-form-label{% endif %}{% if field.field.required %}
requiredField{% endif %}">
+ <label for="{{ field.id_for_label }}" class="{{ label_class }}{%
if not inline_class %} col-form-label{% endif %}{% if field.field.required %}
requiredField{% endif %}">
{{ field.label|safe }}{% if field.field.required %}<span
class="asteriskField">*</span>{% endif %}
</label>
{% endif %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/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.7.2/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.7.2/crispy_forms/templates/bootstrap4/layout/field_file.html
1970-01-01 01:00:00.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/field_file.html
2019-11-22 14:44:09.000000000 +0100
@@ -0,0 +1,16 @@
+{% load crispy_forms_field %}
+
+<div class="custom-file {{ field_class }}">
+ {% 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.7.2/crispy_forms/templates/bootstrap4/layout/field_with_buttons.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/field_with_buttons.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/field_with_buttons.html
2018-03-09 15:40:03.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/field_with_buttons.html
2019-09-19 16:53:39.000000000 +0200
@@ -2,7 +2,7 @@
<div{% if div.css_id %} id="{{ div.css_id }}"{% endif %} class="form-group{%
if 'form-horizontal' in form_class %} row{% endif %}{% if wrapper_class %} {{
wrapper_class }}{% endif %}{% if form_show_errors and field.errors %}
has-danger{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif
%}{% if div.css_class %} {{ div.css_class }}{% endif %}" {{ div.flat_attrs|safe
}}>
{% if field.label and form_show_labels %}
- <label for="{{ field.id_for_label }}" class="col-form-label {{
label_class }}{% if field.field.required %} requiredField{% endif %}">
+ <label for="{{ field.id_for_label }}" class="{% if 'form-horizontal'
in form_class %}col-form-label {% endif %}{{ label_class }}{% if
field.field.required %} requiredField{% endif %}">
{{ field.label|safe }}{% if field.field.required %}<span
class="asteriskField">*</span>{% endif %}
</label>
{% endif %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/crispy_forms/templates/bootstrap4/layout/formactions.html
2018-03-05 15:49:56.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.7.2/crispy_forms/templates/bootstrap4/layout/prepended_appended_text.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/prepended_appended_text.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/prepended_appended_text.html
2018-03-05 15:49:56.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/prepended_appended_text.html
2019-09-19 16:53:39.000000000 +0200
@@ -6,33 +6,33 @@
<div id="div_{{ field.auto_id }}" class="form-group{% if wrapper_class %}
{{ wrapper_class }}{% endif %}{% if 'form-horizontal' in form_class %} row{%
endif %}{% if form_group_wrapper_class %} {{ form_group_wrapper_class }}{%
endif %}{% if form_show_errors and field.errors %} has-danger{% endif %}{% if
field.css_classes %} {{ field.css_classes }}{% endif %}">
{% if field.label and form_show_labels %}
- <label for="{{ field.id_for_label }}" class="col-form-label {{
label_class }}{% if field.field.required %} requiredField{% endif %}">
+ <label for="{{ field.id_for_label }}" class="{% if
'form-horizontal' in form_class %}col-form-label {% endif %}{{ label_class }}{%
if field.field.required %} requiredField{% endif %}">
{{ field.label|safe }}{% if field.field.required %}<span
class="asteriskField">*</span>{% endif %}
</label>
{% endif %}
<div class="{{ field_class }}">
- {% if field|is_select %}
- {% if crispy_prepended_text %}<span class="input-group{% if
active %} active{% endif %}{% if input_size %} {{ input_size }}{% endif %}">{{
crispy_prepended_text|safe }}</span>{% endif %}
+ <div class="input-group">
+ {% if crispy_prepended_text %}
+ <div class="input-group-prepend{% if active %} active{%
endif %}{% if input_size %} {{ input_size }}{% endif %}">
+ <span class="input-group-text">{{
crispy_prepended_text|safe }}</span>
+ </div>
+ {% endif %}
{% crispy_field field %}
- {% if crispy_appended_text %}<span class="input-group{% if
active %} active{% endif %}{% if input_size %} {{ input_size }}{% endif %}">{{
crispy_appended_text|safe }}</span>{% endif %}
- {% else %}
- <div class="input-group">
- {% if crispy_prepended_text %}
- <div class="input-group-prepend{% if active %} active{%
endif %}{% if input_size %} {{ input_size }}{% endif %}">
- <span class="input-group-text">{{
crispy_prepended_text|safe }}</span>
- </div>
- {% endif %}
- {% crispy_field field %}
- {% if crispy_appended_text %}
- <div class="input-group-append{% if active %} active{%
endif %}{% if input_size %} {{ input_size }}{% endif %}">
- <span class="input-group-text">{{
crispy_appended_text|safe }}</span>
- </div>
- {% endif %}
- </div>
- {% endif %}
-
- {% include 'bootstrap4/layout/help_text_and_errors.html' %}
+ {% if crispy_appended_text %}
+ <div class="input-group-append{% if active %} active{% endif
%}{% if input_size %} {{ input_size }}{% endif %}">
+ <span class="input-group-text">{{
crispy_appended_text|safe }}</span>
+ </div>
+ {% endif %}
+ {% if error_text_inline %}
+ {% include 'bootstrap4/layout/field_errors.html' %}
+ {% else %}
+ {% include 'bootstrap4/layout/field_errors_block.html' %}
+ {% endif %}
+ </div>
+ {% if not help_text_inline %}
+ {% include 'bootstrap4/layout/help_text.html' %}
+ {% endif %}
</div>
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/crispy_forms/templates/bootstrap4/layout/radioselect.html
2018-03-05 15:49:56.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/radioselect.html
2019-11-22 14:44:09.000000000 +0100
@@ -1,17 +1,26 @@
{% load crispy_forms_filters %}
{% load l10n %}
-<div class="{% if inline_class %}form-check{% endif %}{% if field_class %} {{
field_class }}{% endif %}"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}>
- {% include 'bootstrap4/layout/field_errors_block.html' %}
+<div class="{% if field_class %} {{ field_class }}{% endif %}"{% if flat_attrs
%} {{ flat_attrs|safe }}{% endif %}>
{% for choice in field.field.choices %}
- {% if not inline_class %}<div class="form-check">{% endif %}
- <label for="id_{{ field.id_for_label }}_{{ forloop.counter }}"
class="form-check-{% if inline_class %}{{ inline_class }}{% else %}label{%
endif %}">
- <input type="radio" class="form-check-input"{% if
choice.0|stringformat:"s" == field.value|default_if_none:""|stringformat:"s" %}
checked="checked"{% endif %} name="{{ field.html_name }}" id="id_{{
field.id_for_label }}_{{ forloop.counter }}" value="{{ choice.0|unlocalize }}"
{{ field.field.widget.attrs|flatatt }}>
+ <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 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>
- {% if not inline_class %}</div>{% endif %}
+ {% if field.errors and forloop.last and not inline_class %}
+ {% include 'bootstrap4/layout/field_errors_block.html' %}
+ {% endif %}
+ </div>
{% endfor %}
+ {% if field.errors and inline_class %}
+ <div class="w-100 {%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 %}">
+ {# the following input is only meant to allow boostrap to render the
error message as it has to be after an invalid input. As the input has no name,
no data will be sent. #}
+ <input type="checkbox" class="custom-control-input {% if field.errors
%}is-invalid{%endif%}">
+ {% include 'bootstrap4/layout/field_errors_block.html' %}
+ </div>
+ {% endif %}
{% include 'bootstrap4/layout/help_text.html' %}
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/radioselect_inline.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/radioselect_inline.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/radioselect_inline.html
2018-03-05 15:49:56.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/radioselect_inline.html
2019-10-21 16:35:18.000000000 +0200
@@ -4,7 +4,7 @@
<div id="div_{{ field.auto_id }}" class="form-group{% if 'form-horizontal'
in form_class %} row{% endif %}{% if wrapper_class %} {{ wrapper_class }}{%
endif %}{% if form_show_errors and field.errors %} has-danger{% endif %}{% if
field.css_classes %} {{ field.css_classes }}{% endif %}">
{% if field.label %}
- <label for="{{ field.auto_id }}" class="{{ label_class }}{% if
not inline_class %} col-form-label{% endif %}{% if field.field.required %}
requiredField{% endif %}">
+ <label for="{{ field.id_for_label }}" class="{{ label_class }}{%
if not inline_class %} col-form-label{% endif %}{% if field.field.required %}
requiredField{% endif %}">
{{ field.label|safe }}{% if field.field.required %}<span
class="asteriskField">*</span>{% endif %}
</label>
{% endif %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/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.7.2/crispy_forms/templates/bootstrap4/layout/tab.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/tab.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/tab.html
2016-01-07 21:15:59.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/tab.html
2019-09-19 16:53:39.000000000 +0200
@@ -1,6 +1,6 @@
<ul{% if tabs.css_id %} id="{{ tabs.css_id }}"{% endif %} class="nav nav-tabs">
{{ links|safe }}
</ul>
-<div class="tab-content panel-body">
+<div class="tab-content card-body">
{{ content|safe }}
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/uneditable_input.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/uneditable_input.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/layout/uneditable_input.html
2018-03-05 15:49:56.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/layout/uneditable_input.html
2019-09-19 16:53:39.000000000 +0200
@@ -2,7 +2,7 @@
<div id="div_{{ field.auto_id }}" class="form-group{% if 'form-horizontal' in
form_class %} row{% endif %}{% if form_show_errors and field.errors %} error{%
endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}">
- <label class="col-form-label {{ label_class }}{% if field.field.required
%} requiredField{% endif %}">{{ field.label|safe }}{% if field.field.required
%}<span class="asteriskField">*</span>{% endif %}</label>
+ <label class="{% if 'form-horizontal' in form_class %}col-form-label {%
endif %}{{ label_class }}{% if field.field.required %} requiredField{% endif
%}">{{ field.label|safe }}{% if field.field.required %}<span
class="asteriskField">*</span>{% endif %}</label>
<div class="{{ field_class }}">
{% crispy_field field 'disabled' 'disabled' %}
{% include 'bootstrap4/layout/help_text.html' %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/table_inline_formset.html
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/table_inline_formset.html
---
old/django-crispy-forms-1.7.2/crispy_forms/templates/bootstrap4/table_inline_formset.html
2018-03-05 15:49:56.000000000 +0100
+++
new/django-crispy-forms-1.8.1/crispy_forms/templates/bootstrap4/table_inline_formset.html
2019-09-19 16:53:39.000000000 +0200
@@ -20,9 +20,9 @@
{% else %}
<tr>
{% for field in formset.forms.0 %}
- {% if field.label and not field|is_checkbox and not
field.is_hidden %}
+ {% if field.label and not field.is_hidden %}
<th for="{{ field.auto_id }}"
class="col-form-label {% if field.field.required %}requiredField{% endif %}">
- {{ field.label|safe }}{% if
field.field.required %}<span class="asteriskField">*</span>{% endif %}
+ {{ field.label|safe }}{% if
field.field.required and not field|is_checkbox %}<span
class="asteriskField">*</span>{% endif %}
</th>
{% endif %}
{% endfor %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/crispy_forms/templates/bootstrap4/uni_form.html
2016-01-07 21:15:59.000000000 +0100
+++
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 "bootstrap4/field.html" %}
+ {% include field_template %}
{% endfor %}
{% endspecialspaceless %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/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.7.2/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.7.2/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.7.2/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.7.2/crispy_forms/templates/uni_form/uni_form.html
2016-01-07 21:15:59.000000000 +0100
+++ 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 "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.7.2/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.7.2/crispy_forms/templatetags/crispy_forms_field.py
2018-03-05 15:49:56.000000000 +0100
+++
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)
+
+
[email protected]
def is_multivalue(field):
return isinstance(field.field.widget, forms.MultiWidget)
@@ -128,14 +133,13 @@
css_class += ' form-control'
if field.errors:
css_class += ' form-control-danger'
-
+
if (
template_pack == 'bootstrap4'
- and not is_checkbox(field)
- and not is_file(field)
and not is_multivalue(field)
):
- css_class += ' form-control'
+ if not is_checkbox(field):
+ css_class += ' form-control'
if field.errors:
css_class += ' is-invalid'
@@ -143,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():
@@ -154,7 +158,7 @@
else:
widget.attrs[attribute_name] =
template.Variable(attribute).resolve(context)
- return field
+ return str(field)
@register.tag(name="crispy_field")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/crispy_forms/templatetags/crispy_forms_filters.py
2017-10-17 16:10:19.000000000 +0200
+++
new/django-crispy-forms-1.8.1/crispy_forms/templatetags/crispy_forms_filters.py
2019-11-22 14:44:09.000000000 +0100
@@ -5,9 +5,9 @@
from django.forms.formsets import BaseFormSet
from django.template import Context
from django.template.loader import get_template
-from django.utils.lru_cache import lru_cache
from django.utils.safestring import mark_safe
+from crispy_forms.compatibility import lru_cache
from crispy_forms.exceptions import CrispyError
from crispy_forms.utils import TEMPLATE_PACK, flatatt
@@ -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.7.2/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.7.2/crispy_forms/templatetags/crispy_forms_tags.py
2017-10-17 16:10:19.000000000 +0200
+++
new/django-crispy-forms-1.8.1/crispy_forms/templatetags/crispy_forms_tags.py
2019-11-22 14:44:09.000000000 +0100
@@ -3,9 +3,8 @@
from django.conf import settings
from django.forms.formsets import BaseFormSet
from django.template.loader import get_template
-from django.utils.lru_cache import lru_cache
-from crispy_forms.compatibility import string_types
+from crispy_forms.compatibility import lru_cache, string_types
from crispy_forms.helper import FormHelper
from crispy_forms.utils import TEMPLATE_PACK, get_template_pack
@@ -109,6 +108,7 @@
is_formset = isinstance(actual_form, BaseFormSet)
response_dict = self.get_response_dict(helper, context, is_formset)
node_context = context.__copy__()
+ node_context.update({'is_bound': actual_form.is_bound})
node_context.update(response_dict)
final_context = node_context.__copy__()
@@ -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.7.2/crispy_forms/tests/conftest.py
new/django-crispy-forms-1.8.1/crispy_forms/tests/conftest.py
--- old/django-crispy-forms-1.7.2/crispy_forms/tests/conftest.py
2017-10-17 16:10:19.000000000 +0200
+++ new/django-crispy-forms-1.8.1/crispy_forms/tests/conftest.py
2019-09-19 16:53:39.000000000 +0200
@@ -32,12 +32,12 @@
@pytest.fixture(autouse=True, params=('uni_form', 'bootstrap', 'bootstrap3',
'bootstrap4'))
def template_packs(request, settings):
- check_template_pack(request._pyfuncitem._obj, request.param)
+ check_template_pack(request.node, request.param)
settings.CRISPY_TEMPLATE_PACK = request.param
-def check_template_pack(function, template_pack):
- if hasattr(function, 'only'):
- mark = function.only
+def check_template_pack(node, template_pack):
+ mark = node.get_closest_marker('only')
+ if mark:
if template_pack not in mark.args:
pytest.skip('Requires %s template pack' % ' or '.join(mark.args))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/crispy_forms/tests/test_form_helper.py
2018-03-05 15:49:56.000000000 +0100
+++ new/django-crispy-forms-1.8.1/crispy_forms/tests/test_form_helper.py
2019-11-22 14:44:09.000000000 +0100
@@ -69,8 +69,10 @@
assert 'class="btn"' in html
assert 'btn btn-primary' in html
assert 'btn btn-inverse' in html
- assert len(re.findall(r'<input[^>]+> <', html)) == 8
-
+ if settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
+ assert len(re.findall(r'<input[^>]+> <', html)) == 9
+ else:
+ assert len(re.findall(r'<input[^>]+> <', html)) == 8
def test_invalid_form_method():
form_helper = FormHelper()
@@ -389,7 +391,7 @@
html = template.render(c)
assert html.count('<form') == 1
- assert html.count("<input type='hidden' name='csrfmiddlewaretoken'") == 1
+ assert html.count('csrfmiddlewaretoken') == 1
# Check formset management form
assert 'form-TOTAL_FORMS' in html
@@ -417,7 +419,7 @@
c = Context({'form': SampleForm(), 'form_helper': form_helper,
'csrf_token': _get_new_csrf_key()})
html = template.render(c)
- assert "<input type='hidden' name='csrfmiddlewaretoken'" in html
+ assert 'csrfmiddlewaretoken' in html
def test_CSRF_token_GET_form():
@@ -431,7 +433,7 @@
c = Context({'form': SampleForm(), 'form_helper': form_helper,
'csrf_token': _get_new_csrf_key()})
html = template.render(c)
- assert "<input type='hidden' name='csrfmiddlewaretoken'" not in html
+ assert 'csrfmiddlewaretoken' not in html
def test_disable_csrf():
@@ -500,6 +502,26 @@
assert html.count("<h1>Special custom field</h1>") == 2
+def test_helper_custom_field_template_no_layout():
+ form = SampleForm()
+ form.helper = FormHelper()
+ form.helper.field_template = 'custom_field_template.html'
+
+ html = render_crispy_form(form)
+ for field in form.fields:
+ assert html.count('id="div_id_%s"' % field) == 1
+ assert html.count("<h1>Special custom field</h1>") == len(form.fields)
+
+
+def test_helper_std_field_template_no_layout():
+ form = SampleForm()
+ form.helper = FormHelper()
+
+ html = render_crispy_form(form)
+ for field in form.fields:
+ assert html.count('id="div_id_%s"' % field) == 1
+
+
@only_uni_form
def test_form_show_errors():
form = SampleForm({
@@ -632,7 +654,7 @@
help_tag_name = 'div'
matches = re.findall(
- '<span id="error_\d_\w*" class="%s"' % help_class, html, re.MULTILINE
+ r'<span id="error_\d_\w*" class="%s"' % help_class, html, re.MULTILINE
)
assert len(matches) == 3
@@ -649,7 +671,7 @@
help_tag_name = 'p'
matches = re.findall(
- '<%s id="error_\d_\w*" class="%s"' % (help_tag_name, help_class),
+ r'<%s id="error_\d_\w*" class="%s"' % (help_tag_name, help_class),
html,
re.MULTILINE
)
@@ -657,7 +679,7 @@
@only_bootstrap3
-def test_error_and_help_inline():
+def test_error_and_help_inline_bootstrap3():
form = SampleForm({'email': 'invalidemail'})
form.helper = FormHelper()
form.helper.error_text_inline = False
@@ -682,7 +704,7 @@
# Check that error goes before help, otherwise CSS won't work
error_position = html.find('<span id="error_1_id_email"
class="help-inline">')
- help_position = html.find('<p id="hint_id_email" class="help-block">')
+ help_position = html.find('<div id="hint_id_email" class="help-block">')
assert error_position < help_position
@@ -788,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.7.2/crispy_forms/tests/test_layout.py
new/django-crispy-forms-1.8.1/crispy_forms/tests/test_layout.py
--- old/django-crispy-forms-1.7.2/crispy_forms/tests/test_layout.py
2018-03-05 15:49:56.000000000 +0100
+++ new/django-crispy-forms-1.8.1/crispy_forms/tests/test_layout.py
2019-11-22 14:44:09.000000000 +0100
@@ -6,7 +6,7 @@
import django
from django import forms
from django.forms.models import formset_factory, modelformset_factory
-from django.shortcuts import render_to_response
+from django.shortcuts import render
from django.template import Context, Template
from django.utils.translation import ugettext_lazy as _
@@ -207,6 +207,8 @@
if settings.CRISPY_TEMPLATE_PACK == 'uni_form':
assert 'class="formRow rows"' in html
+ elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
+ assert 'class="form-row rows"' in html
else:
assert 'class="row rows"' in html
assert 'Hello!' in html
@@ -249,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()
@@ -293,7 +332,7 @@
# Check form structure
assert html.count('<form') == 1
- assert html.count("<input type='hidden' name='csrfmiddlewaretoken'") == 1
+ assert html.count('csrfmiddlewaretoken') == 1
assert 'formsets-that-rock' in html
assert 'method="post"' in html
assert 'id="thisFormsetRocks"' in html
@@ -555,14 +594,62 @@
)
context = {'form': form}
- response = render_to_response('crispy_render_template.html', context)
+ response = render(
+ request=None,
+ template_name='crispy_render_template.html',
+ context=context
+ )
if settings.CRISPY_TEMPLATE_PACK == 'bootstrap':
assert response.content.count(b'checkbox inline') == 3
elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap3':
assert response.content.count(b'checkbox-inline') == 3
elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
- assert response.content.count(b'form-check-inline') == 3
+ assert response.content.count(b'custom-control-inline') == 3
+ assert response.content.count(b'custom-checkbox') > 0
+
+
+@only_bootstrap4
+def test_use_custom_control_is_used():
+ form = CheckboxesSampleForm()
+ form.helper = FormHelper()
+ form.helper.layout = Layout(
+ 'checkboxes',
+ InlineCheckboxes('alphacheckboxes'),
+ 'numeric_multiple_checkboxes'
+ )
+ # form.helper.use_custom_control take default value which is True
+
+ response = render(
+ request=None,
+ template_name='crispy_render_template.html',
+ context={'form': form}
+ )
+ assert response.content.count(b'custom-control-inline') == 3
+ assert response.content.count(b'custom-checkbox') == 9
+
+ form.helper.use_custom_control = True
+
+ response = render(
+ request=None,
+ template_name='crispy_render_template.html',
+ context={'form': form}
+ )
+ assert response.content.count(b'custom-control-inline') == 3
+ assert response.content.count(b'custom-checkbox') == 9
+
+ form.helper.use_custom_control = False
+
+ response = render(
+ request=None,
+ template_name='crispy_render_template.html',
+ context={'form': form}
+ )
+
+ assert response.content.count(b'custom-control-inline') == 0
+ assert response.content.count(b'form-check-inline') == 3
+ assert response.content.count(b'form-check') > 0
+ assert response.content.count(b'custom-checkbox') == 0
@only_bootstrap3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/tests/test_layout_objects.py
new/django-crispy-forms-1.8.1/crispy_forms/tests/test_layout_objects.py
--- old/django-crispy-forms-1.7.2/crispy_forms/tests/test_layout_objects.py
2018-03-09 15:40:03.000000000 +0100
+++ new/django-crispy-forms-1.8.1/crispy_forms/tests/test_layout_objects.py
2019-10-21 16:35:18.000000000 +0200
@@ -133,6 +133,17 @@
assert "Introduzca un valor correcto" in html
deactivate()
+def test_remove_labels():
+ form = SampleForm()
+ #remove boolean field as label is still printed in boostrap
+ del form.fields['is_company']
+
+ for fields in form:
+ fields.label = False
+
+ html = render_crispy_form(form)
+
+ assert '<label' not in html
@only_bootstrap
class TestBootstrapLayoutObjects(object):
@@ -152,7 +163,7 @@
html = render_crispy_form(form)
if settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
- assert 'class="form-check"' in html
+ assert 'class="custom-control-input"' in html
else:
assert 'class="radio"' in html
@@ -161,7 +172,7 @@
form.helper.layout = Layout('checkboxes')
html = render_crispy_form(form)
if settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
- assert 'class="form-check"' in html
+ assert 'class="custom-control-input"' in html
else:
assert 'class="checkbox"' in html
@@ -225,7 +236,7 @@
elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap3':
assert html.count('radio-inline"') == 2
elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
- assert html.count('form-check-inline"') == 2
+ assert html.count('custom-control-inline"') == 2
def test_accordion_and_accordiongroup(self, settings):
test_form = SampleForm()
@@ -249,10 +260,14 @@
assert html.count('<div class="accordion"') == 1
assert html.count('<div class="accordion-group">') == 2
assert html.count('<div class="accordion-heading">') == 2
- else:
+ elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap3':
assert html.count('<div class="panel panel-default"') == 2
assert html.count('<div class="panel-group"') == 1
assert html.count('<div class="panel-heading">') == 2
+ elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
+ assert html.count('<div id="accordion"') == 1
+ assert html.count('<div class="card mb-2"') == 2
+ assert html.count('<div class="card-header"') == 2
assert html.count('<div id="one"') == 1
assert html.count('<div id="two"') == 1
@@ -277,11 +292,13 @@
html = render_crispy_form(test_form)
if settings.CRISPY_TEMPLATE_PACK == 'bootstrap':
- accordion_class = "accordion-body"
- else:
- accordion_class = "panel-collapse"
+ accordion_class = "accordion-body collapse in"
+ elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap3':
+ accordion_class = "panel-collapse collapse in"
+ elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
+ accordion_class = "collapse show"
- assert html.count('<div id="one" class="%s collapse in"' %
accordion_class) == 1
+ assert html.count('<div id="one" class="%s"' % accordion_class) == 1
test_form.helper.layout = Layout(
Accordion(
@@ -481,7 +498,7 @@
if settings.CRISPY_TEMPLATE_PACK == 'bootstrap3':
assert html.count('checkbox-inline"') == 3
elif settings.CRISPY_TEMPLATE_PACK == 'bootstrap4':
- assert html.count('form-check-inline"') == 3
+ assert html.count('custom-control-inline"') == 3
def test_multiple_checkboxes_unique_ids(self):
test_form = CheckboxesSampleForm()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/crispy_forms/tests/test_tags.py
new/django-crispy-forms-1.8.1/crispy_forms/tests/test_tags.py
--- old/django-crispy-forms-1.7.2/crispy_forms/tests/test_tags.py
2018-03-05 15:49:56.000000000 +0100
+++ new/django-crispy-forms-1.8.1/crispy_forms/tests/test_tags.py
2019-10-21 16:35:18.000000000 +0200
@@ -14,6 +14,17 @@
from .forms import SampleForm
+def test_crispy_field():
+ template = Template("""
+ {% load crispy_forms_field %}
+ {% for field in form %}
+ {% crispy_field field %}
+ {% endfor %}
+ """)
+ html = template.render(Context({'form': SampleForm()}))
+ assert html.count('<input') == 8
+
+
def test_as_crispy_errors_form_without_non_field_errors():
template = Template("""
{% load crispy_forms_tags %}
@@ -89,7 +100,7 @@
c = Context({'field': "notafield"})
# Raises an AttributeError when tring to figure out how to render it
- # Not sure if this is exoected behavior -- @kavdev
+ # Not sure if this is expected behavior -- @kavdev
error_class = CrispyError if settings.DEBUG else AttributeError
with pytest.raises(error_class):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-crispy-forms-1.7.2/crispy_forms/utils.py
new/django-crispy-forms-1.8.1/crispy_forms/utils.py
--- old/django-crispy-forms-1.7.2/crispy_forms/utils.py 2017-10-17
16:10:19.000000000 +0200
+++ new/django-crispy-forms-1.8.1/crispy_forms/utils.py 2019-09-19
16:53:39.000000000 +0200
@@ -8,10 +8,9 @@
from django.template import Context
from django.template.loader import get_template
from django.utils.functional import SimpleLazyObject
-from django.utils.lru_cache import lru_cache
from .base import KeepContext
-from .compatibility import PY2, text_type
+from .compatibility import PY2, text_type, lru_cache
def get_template_pack():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/django_crispy_forms.egg-info/PKG-INFO
2018-03-09 15:47:00.000000000 +0100
+++ new/django-crispy-forms-1.8.1/django_crispy_forms.egg-info/PKG-INFO
2019-11-22 14:51:01.000000000 +0100
@@ -1,17 +1,16 @@
Metadata-Version: 1.1
Name: django-crispy-forms
-Version: 1.7.2
+Version: 1.8.1
Summary: Best way to have Django DRY forms
-Home-page: http://github.com/maraujop/django-crispy-forms
+Home-page: https://github.com/django-crispy-forms/django-crispy-forms
Author: Miguel Araujo
Author-email: [email protected]
License: MIT
-Description-Content-Type: UNKNOWN
Description: ===================
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
@@ -20,17 +19,17 @@
The best way to have Django_ DRY forms. Build programmatic reusable
layouts out of components, having full control of the rendered HTML without
writing HTML in templates. All this without breaking the standard way of doing
things in Django, so it plays nice with any other form application.
- `django-crispy-forms` supports Python 2.7/Python 3.3+ and Django
1.8/Django 1.10+
+ `django-crispy-forms` supports Python 2.7/Python 3.5+ and Django 1.11,
2.1, 2.2 and 3.0.
The application mainly provides:
* A filter named ``|crispy`` that will render elegant div based forms.
Think of it as the built-in methods: ``as_table``, ``as_ul`` and ``as_p``. You
cannot tune up the output, but it is easy to start using it.
* A tag named ``{% crispy %}`` that will render a form based on your
configuration and specific layout setup. This gives you amazing power without
much hassle, helping you save tons of time.
- Django-crispy-forms supports several frontend frameworks, such as
Twitter `Bootstrap`_ (versions 2 and 3), `Uni-form`_ and Foundation. You can
also easily adapt your custom company's one, creating your own, `see the docs`_
for more information. You can easily switch among them using
``CRISPY_TEMPLATE_PACK`` setting variable.
+ Django-crispy-forms supports several frontend frameworks, such as
Twitter `Bootstrap`_ (versions 2, 3, and 4), `Uni-form`_ and Foundation. You
can also easily adapt your custom company's one, creating your own, `see the
docs`_ for more information. You can easily switch among them using
``CRISPY_TEMPLATE_PACK`` setting variable.
.. _`Uni-form`: http://sprawsm.com/uni-form
- .. _`Bootstrap`: http://twitter.github.com/bootstrap/index.html
+ .. _`Bootstrap`: https://getbootstrap.com
.. _`see the docs`: https://django-crispy-forms.readthedocs.io
Authors
@@ -81,14 +80,20 @@
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
+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
+Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-crispy-forms-1.7.2/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.7.2/django_crispy_forms.egg-info/SOURCES.txt
2018-03-09 15:47:00.000000000 +0100
+++ 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,9 +105,11 @@
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
+crispy_forms/templates/bootstrap4/layout/field_file.html
crispy_forms/templates/bootstrap4/layout/field_with_buttons.html
crispy_forms/templates/bootstrap4/layout/fieldset.html
crispy_forms/templates/bootstrap4/layout/formactions.html
@@ -114,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
@@ -130,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.7.2/setup.cfg
new/django-crispy-forms-1.8.1/setup.cfg
--- old/django-crispy-forms-1.7.2/setup.cfg 2018-03-09 15:47:00.000000000
+0100
+++ new/django-crispy-forms-1.8.1/setup.cfg 2019-11-22 14:51:01.000000000
+0100
@@ -1,7 +1,7 @@
[metadata]
license-file = LICENSE.txt
-[wheel]
+[bdist_wheel]
universal = 1
[isort]
@@ -14,6 +14,10 @@
multi_line_output = 5
sections = FUTURE,STDLIB,THIRDPARTY,DJANGO,FIRSTPARTY,LOCALFOLDER
+[tool:pytest]
+markers =
+ only: Parametrized mark to limit a test to a single template pack
+
[coverage:run]
branch = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-crispy-forms-1.7.2/setup.py
new/django-crispy-forms-1.8.1/setup.py
--- old/django-crispy-forms-1.7.2/setup.py 2017-10-17 16:10:19.000000000
+0200
+++ new/django-crispy-forms-1.8.1/setup.py 2019-10-23 14:28:10.000000000
+0200
@@ -28,14 +28,20 @@
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Framework :: Django",
+ "Framework :: Django :: 1.11",
+ "Framework :: Django :: 2.1",
+ "Framework :: Django :: 2.2",
+ "Framework :: Django :: 3.0",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: JavaScript",
+ "Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
- "Programming Language :: Python :: 3.3",
- "Programming Language :: Python :: 3.4",
+ "Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
+ "Programming Language :: Python :: 3.7",
+ "Programming Language :: Python :: 3.8",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
"Topic :: Software Development :: Libraries :: Python Modules",
@@ -43,7 +49,7 @@
keywords=['forms', 'django', 'crispy', 'DRY'],
author='Miguel Araujo',
author_email='[email protected]',
- url='http://github.com/maraujop/django-crispy-forms',
+ url='https://github.com/django-crispy-forms/django-crispy-forms',
license='MIT',
packages=find_packages(exclude=['docs']),
include_package_data=True,