From e34ec60f7284a98136c21b0106203183774fc14e Mon Sep 17 00:00:00 2001
From: Bryan Brancotte <bryan.brancotte@pasteur.fr>
Date: Tue, 29 Jan 2019 13:42:54 +0100
Subject: [PATCH] bootstrap handle checkbox input as bootstrap wants to

---
 ippisite/ippidb/templatetags/customtags.py | 28 ++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/ippisite/ippidb/templatetags/customtags.py b/ippisite/ippidb/templatetags/customtags.py
index 0fa52dde..de063e75 100644
--- a/ippisite/ippidb/templatetags/customtags.py
+++ b/ippisite/ippidb/templatetags/customtags.py
@@ -1,7 +1,7 @@
 import logging
 
 from django import template
-from django.forms import BoundField
+from django.forms import BoundField, widgets
 from django.utils.safestring import mark_safe
 
 register = template.Library()
@@ -17,17 +17,37 @@ def url_replace(request, field, value):
 
 @register.filter
 def bootstrap(object):
+    ret = []
     if isinstance(object, BoundField):
         field = object
-        attrs = {"class": "form-control" + (" is-invalid" if field.errors else "")}
-        ret = []
+        attrs = field.field.widget.attrs
+        css_classes = set(attrs.get("class", "").split(" "))
+        if field.errors:
+            css_classes.add("is-invalid")
+        print(type(field.field.widget))
+        if isinstance(field.field.widget, widgets.CheckboxInput):
+            wrapping_classes = "form-check"
+            label_classes = "form-check-label"
+            css_classes.add("form-check-input")
+        else:
+            wrapping_classes = "input_field form-group"
+            label_classes = "form-control-placeholder"
+            css_classes.add("form-control")
+        attrs["class"] = " ".join(css_classes)
+        ret.append('<div class="%s">' % wrapping_classes)
         ret.append(field.as_widget(attrs=attrs))
-        ret.append("""<label class="form-control-placeholder">%s</label>""" % field.label)
+        ret.append("""<label class="%s">%s</label>""" % (label_classes, field.label))
         if field.errors:
             for e in field.errors:
                 ret.append("""<div class="invalid-feedback">%s</div>""" % e)
+        ret.append('</div>')
         return mark_safe("".join(ret))
     else:
         logger.error("Can't bootstrapize object of class %s" % str(type(object)))
 
     return object
+
+
+@register.filter('startswith')
+def startswith(text, starts):
+    return bootstrap(text.startswith(starts))
-- 
GitLab