From 9071ca4bfdd6c52ec26ab968fe9b4143788c514f Mon Sep 17 00:00:00 2001 From: suspiciousRaccoon Date: Thu, 19 Dec 2024 20:01:21 -0300 Subject: [PATCH 1/4] Add new parameter for custom field valid and invalid classes --- src/django_bootstrap5/renderers.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/django_bootstrap5/renderers.py b/src/django_bootstrap5/renderers.py index 5ecd152f..ae8081b0 100644 --- a/src/django_bootstrap5/renderers.py +++ b/src/django_bootstrap5/renderers.py @@ -246,6 +246,9 @@ def __init__(self, field, **kwargs): else success_css_class ) + self.field_valid_class = kwargs.get("field_valid_class", "is-valid") + self.field_invalid_class = kwargs.get("field_invalid_class", "is-invalid") + @property def is_floating(self): return ( @@ -426,9 +429,9 @@ def get_errors_html(self): def get_server_side_validation_classes(self): """Return CSS classes for server-side validation.""" if self.field_errors: - return "is-invalid" + return self.field_invalid_class elif self.field.form.is_bound: - return "is-valid" + return self.field_valid_class return "" def get_inline_field_class(self): From 6fa52b4eda33102d5ca4a99257688e3556ccfb32 Mon Sep 17 00:00:00 2001 From: suspiciousRaccoon Date: Thu, 19 Dec 2024 20:20:38 -0300 Subject: [PATCH 2/4] Add tests --- tests/test_bootstrap_field.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/test_bootstrap_field.py b/tests/test_bootstrap_field.py index fc30ee98..63303531 100644 --- a/tests/test_bootstrap_field.py +++ b/tests/test_bootstrap_field.py @@ -50,6 +50,23 @@ def test_field_class(self): ) self.assertIn('class="form-control field-class-test"', html) + def test_valid_field_class(self): + form = SubjectTestForm({"subject": "valid_data"}) + form.is_valid() + html = self.render("{% bootstrap_field form.subject field_valid_class='custom-class' %}", {"form": form}) + self.assertNotIn('class="form-control is-valid"', html) + self.assertIn('class="form-control custom-class"', html) + + def test_invalid_field_class(self): + form = SubjectTestForm({"invalid_field": "invalid_data"}) + form.is_valid() + html = self.render( + "{% bootstrap_field form.subject field_invalid_class='custom-class' %}", + {"form": form}, + ) + self.assertNotIn('class="form-control is-invalid"', html) + self.assertIn('class="form-control custom-class"', html) + def test_xss_field(self): html = self.render("{% bootstrap_field form.xss_field %}", {"form": XssTestForm()}) self.assertIn('type="text"', html) From ecb9ec4b3b050c9853ae67153679367fb779f47e Mon Sep 17 00:00:00 2001 From: suspiciousRaccoon Date: Thu, 19 Dec 2024 20:29:29 -0300 Subject: [PATCH 3/4] Update bootstrap_field docstrings --- .../templatetags/django_bootstrap5.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/django_bootstrap5/templatetags/django_bootstrap5.py b/src/django_bootstrap5/templatetags/django_bootstrap5.py index be363f9f..179cf290 100644 --- a/src/django_bootstrap5/templatetags/django_bootstrap5.py +++ b/src/django_bootstrap5/templatetags/django_bootstrap5.py @@ -479,6 +479,16 @@ def bootstrap_field(field, **kwargs): :default: ``'has-success'``. Can be changed :doc:`settings` + field_valid_class + CSS class used by the field when it is valid + + :default: ``'is-valid'``. + + field_invalid_class + CSS class used by the field when it is invalid + + :default: ``'is-invalid'`` + **Usage**:: {% bootstrap_field field %} From 5721b973ae2048526552a5f95cfbedbac8ac93b1 Mon Sep 17 00:00:00 2001 From: suspiciousRaccoon Date: Thu, 19 Dec 2024 20:29:48 -0300 Subject: [PATCH 4/4] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20c75c38..3aafe6c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Remove `