Skip to content

Commit

Permalink
Merge pull request #14 from djk2/issue_8_7
Browse files Browse the repository at this point in the history
Support for bootstrap4 and Django 2.2
  • Loading branch information
djk2 committed Jan 24, 2020
2 parents f144e7a + 12d92f5 commit bd18074
Show file tree
Hide file tree
Showing 32 changed files with 839 additions and 197 deletions.
67 changes: 34 additions & 33 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,42 @@ language: python

matrix:
include:
- { python: 2.7, env: TOXENV=py27-dj_1.8-bootstrap_7.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.8-bootstrap_7.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap_7.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap_7.1-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap_8.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap_8.1-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap_8.2-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap_8.2-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap_7.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap_7.1-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap_8.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap_8.1-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap_8.2-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap_8.2-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap_7.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap_7.1-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap_8.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap_8.1-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap_8.2-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap_8.2-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap_7.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap_7.1-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap_8.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap_8.1-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap_8.2-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap_8.2-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.11-bootstrap_8.2-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.11-bootstrap_8.2-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.0-bootstrap_8.2-crispy_1.7-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.1-bootstrap_8.2-crispy_1.7-tests }
- { python: 2.7, env: TOXENV=py27-flake }
- { python: 3.6, env: TOXENV=py36-flake }

allow_failures:
- env: TOXENV=py27-dj_1.11-bootstrap_8.2-crispy_1.6-tests
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap3_7.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap3_7.1-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap3_8.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap3_8.1-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap3_8.2-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.9-bootstrap3_8.2-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap3_7.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap3_7.1-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap3_8.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap3_8.1-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap3_8.2-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.9-bootstrap3_8.2-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap3_7.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap3_7.1-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap3_8.1-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap3_8.1-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap3_8.2-crispy_1.5-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.10-bootstrap3_8.2-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap3_7.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap3_7.1-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap3_8.1-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap3_8.1-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap3_8.2-crispy_1.5-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.10-bootstrap3_8.2-crispy_1.6-tests }
- { python: 2.7, env: TOXENV=py27-dj_1.11-bootstrap3_8.2-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_1.11-bootstrap3_8.2-crispy_1.6-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.0-latest_bootstraps-crispy_1.7-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.0-latest_bootstraps-crispy_1.8-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.1-latest_bootstraps-crispy_1.7-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.1-latest_bootstraps-crispy_1.8-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.2-latest_bootstraps-crispy_1.7-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.2-latest_bootstraps-crispy_1.8-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.1-latest_bootstraps-crispy_1.8-tests }
- { python: 3.6, env: TOXENV=py36-dj_2.2-latest_bootstraps-crispy_1.8-tests }

install:
- pip install tox>=2.5.0
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# CHANGELOG for django-popup-view-field

## 0.6.0 (2020-01-23)

* Added support for Django 2.2

* Drop support for Django 1.8

* Added support for bootstrap4 (testing only with Django >= 2.1)

* Added setting DJANGO_POPUP_VIEW_FIELD_TEMPLATE_PACK

* Templates for widgets was splitted to blocks
(for easy customization). Now `PopupViewWidget` can use
template for bootstrap3 or template for bootstrap4

## 0.5.0 (2019-04-17)

* Support for Django 2.0 and 2.1
Expand Down
41 changes: 35 additions & 6 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,20 @@ You can create normal django View and load this view in dialog for form field.
- Support:

* Python: 2.7, 3.6
* Django: 1.8, 1.9, 1.10, 1.11, 2.0, 2.1
* Django: 1.9, 1.10, 1.11, 2.0, 2.1
* django-crispy-forms
* django-bootstrap3
* django-bootstrap4 (!Only for Django >= 2.1)

- Require:

* Django
* bootstrap3
* bootstrap3 or bootstrap4
* JQuery

- Recommended:

* django-bootstrap3 or
* django-bootstrap3 or django-bootstrap4
* django-crispy-forms

- Locale:
Expand All @@ -44,6 +45,8 @@ You can create normal django View and load this view in dialog for form field.

- Tested on browsers:

* OK - Chromium 79.0.3945.79 - Ubuntu 18.04
* OK - Firefox 72.0.1 (64 bity) - Ubuntu 18.04
* OK - Google Chrome 70.0 - Fedora 28
* OK - Firefox 62.0.3 - Fedora 28
* OK - Firefox 50.1.0 - Ubuntu 14.04
Expand Down Expand Up @@ -142,10 +145,13 @@ Add ``django_popup_view_field`` to your INSTALLED_APPS setting
...
]

# If you want use bootstrap4 then uncomment
# DJANGO_POPUP_VIEW_FIELD_TEMPLATE_PACK = 'bootstrap4'

**Warning**:
Is recommended use django-bootstrap3 or django-crispy-forms
to render forms and fields, but this is not necessary.
You can still write django templates using pure CSS from bootstrap3.
Is recommended use django-bootstrap3/django-bootstrap4 or django-crispy-forms
to render forms and fields, but this is not necessary.
You can still write django templates using pure CSS from bootstrap3/4.
More information about bootstrap forms in here: http://getbootstrap.com/css/#forms


Expand Down Expand Up @@ -197,6 +203,27 @@ Tag should be append before body close </body> tag and after jQuery and Bootstra
</html>


Settings
----------

DJANGO_POPUP_VIEW_FIELD_TEMPLATE_PACK
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Since version 0.6.0, django-popup-view-fields has built-in support for bootstrap4 also.
To enable support for `bootstrap4` you have to set `DJANGO_POPUP_VIEW_FIELD_TEMPLATE_PACK`
to "bootstrap4" value.

* `bootstrap3` - this setting will be load javascript and html templates for bootstrap3.
**This is a default value**

* `bootstrap4` - this setting will be load javascript and html templates for bootstrap4.

Value of DJANGO_POPUP_VIEW_FIELD_TEMPLATE_PACK is changing behavior
of '{% django_popup_view_field_javascript %}' tag and `PopupViewWidget` class.
Template `scripts_include.html` is using this flag to decide which template
and javascript will be load. `PopupViewWidget` class is using this flag to decide
which template for field should be load.


Simple Example
------------------------

Expand Down Expand Up @@ -618,4 +645,6 @@ Others

* More about django-bootstrap3 in here : http://django-bootstrap3.readthedocs.io/en/latest/

* More about django-bootstrap4 in here : https://django-bootstrap4.readthedocs.io/en/latest/

* Documentation prepared with the help of **Online reStructuredText editor** : http://rst.ninjs.org/
Binary file modified demo/db.sqlite3
Binary file not shown.
1 change: 1 addition & 0 deletions demo/demo/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@

# Require
'bootstrap3',
'bootstrap4',
'crispy_forms',

# Added extra
Expand Down
9 changes: 5 additions & 4 deletions demo/demo/templates/base.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{% load static %}
{% load bootstrap3 %}
{% load django_popup_view_field_tags %}

<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE|default:"en" }}">
<head>
Expand All @@ -11,7 +11,8 @@
<title>django-popup-view-field</title>

<!-- Bootstrap core CSS -->
{% bootstrap_css %}
{% block css %}
{% endblock css %}
</head>

<body>
Expand All @@ -21,8 +22,8 @@
</div>

<!-- Bootstrap core JS -->
<script type="text/javascript" src="{% bootstrap_jquery_url %}"></script>
{% bootstrap_javascript %}
{% block javascript %}
{% endblock javascript%}

{# ! This tag add all js scripts and template scripts to this template ! #}
{% django_popup_view_field_javascript %}
Expand Down
74 changes: 74 additions & 0 deletions demo/demo/templates/demo/demo_bootstrap_3.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{% extends "base.html" %}
{% load bootstrap3 %}
{% load crispy_forms_tags %}

{% block css %}
{% bootstrap_css %}
{% endblock css %}

{% block content %}

<h1> Demo - django-popup-view-field using bootstrap 3 </h1>

<div>
<ul class="nav nav-tabs" role="tablist" id="tabs" data-toggle="tab">
<li role="presentation" class="active">
<a href="#bootstrap" aria-controls="bootstrap" role="tab" data-toggle="tab">
<span class="glyphicon glyphicon-star"></span>
Form using django-bootstrap3
</a>
</li>

<li role="presentation">
<a href="#crispy" aria-controls="crispy" role="tab" data-toggle="tab">
<span class="glyphicon glyphicon-star"></span>
Form using Crispy forms + helper
</a>
</li>

<li role="presentation">
<a href="#crispy-helper" aria-controls="crispy-helper" role="tab" data-toggle="tab">
<span class="glyphicon glyphicon-star"></span>
Form using Crispy forms without helper
</a>
</li>
</ul>

{# ------------------------------- #}
<div class="tab-content">

<div class="tab-pane fade in active" id="bootstrap">
<h4> Render with django-bootstrap3 </h4>
<form action="." method="post" class="form">
{% csrf_token %}
{% bootstrap_form form_1 %}
{% buttons %}
<button type="submit" class="btn btn-primary">
{% bootstrap_icon "star" %} Submit
</button>
{% endbuttons %}
</form>
</div>

<div role="tabpanel" class="tab-pane fade" id="crispy">
<h4> Crispy + helper </h4>
{% crispy form_2 form_2.helper %}
</div>

<div role="tabpanel" class="tab-pane fade" id="crispy-helper">
<h4> Crispy without helper </h4>
{% crispy form_3 %}
</div>

</div>

</div>

{% endblock content %}

{% block javascript %}
<script type="text/javascript" src="{% bootstrap_jquery_url %}"></script>
{% bootstrap_javascript %}
{% endblock javascript %}


72 changes: 72 additions & 0 deletions demo/demo/templates/demo/demo_bootstrap_4.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
{% extends "base.html" %}
{% load bootstrap4 %}
{% load crispy_forms_tags %}

{% block css %}
{% bootstrap_css %}
{% endblock css %}

{% block content %}
<h1> Demo - django-popup-view-field using bootstrap 4 </h1>

<div>

<ul class="nav nav-tabs" id="tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="tab-bootstrap" data-toggle="tab" href="#bootstrap" role="tab" aria-controls="home" aria-selected="true">
<span class="glyphicon glyphicon-star"></span>
Form using django-bootstrap4
</a>
</li>

<li class="nav-item">
<a class="nav-link" id="tab-crispy" data-toggle="tab" href="#crispy">
<span class="glyphicon glyphicon-star"></span>
Form using Crispy forms + helper
</a>
</li>

<li class="nav-item">
<a class="nav-link" id="tab-crispy-helper" data-toggle="tab" href="#crispy-helper">
<span class="glyphicon glyphicon-star"></span>
Form using Crispy forms without helper
</a>
</li>
</ul>

{# ------------------------------- #}
<div class="tab-content">

<div class="tab-pane fade show active" id="bootstrap" role="tabpanel" aria-labelledby="home-tab">
<h4> Render with django-bootstrap4 </h4>
<form action="." method="post" class="form">
{% csrf_token %}
{% bootstrap_form form_1 %}
{% buttons %}
<button type="submit" class="btn btn-primary">
Submit
</button>
{% endbuttons %}
</form>
</div>

<div role="tabpanel" class="tab-pane fade" id="crispy">
<h4> Crispy + helper </h4>
{% crispy form_2 form_2.helper %}
</div>

<div role="tabpanel" class="tab-pane fade" id="crispy-helper">
<h4> Crispy without helper </h4>
{% crispy form_3 %}
</div>

</div>

</div>
{% endblock content %}

{% block javascript %}
{% bootstrap_javascript jquery='full'%}
{% endblock javascript %}


Loading

0 comments on commit bd18074

Please sign in to comment.