From 0483303177c8a8f389b5fc3af632facfa2dde8b9 Mon Sep 17 00:00:00 2001
From: Tim Fechner <tim.fechner@hs-hannover.de>
Date: Wed, 6 Dec 2017 17:03:22 +0100
Subject: [PATCH] Add more widgets that needs class="input"

---
 hshassets/forms/utils.py        | 15 ++++++++++++++-
 hshassets/templatetags/bulma.py | 12 ++++++++----
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/hshassets/forms/utils.py b/hshassets/forms/utils.py
index 8bd4dc80..50b9b5aa 100644
--- a/hshassets/forms/utils.py
+++ b/hshassets/forms/utils.py
@@ -1,6 +1,7 @@
 from django.utils.safestring import mark_safe
 from django.utils.html import format_html, format_html_join
 from django.template import defaulttags
+from django.forms import widgets
 
 
 def render_form_field(field, label=None):
@@ -88,7 +89,12 @@ class BulmaFieldMarkup(object):
     @classmethod
     def select(cls, field, content):
         """Dropdowns have an extra wrapping <div class="select">"""
-        return cls.label(field.label, cls.div_control(format_html('<div class="select">{}</div>', content)))
+        if isinstance(field.field.widget, widgets.SelectMultiple):
+            css_classes = 'select is-multiple'
+        else:
+            css_classes = 'select'
+
+        return cls.label(field.label, cls.div_control(format_html('<div class="{}">{}</div>', css_classes, content)))
 
     @classmethod
     def checkbox(cls, field, content):
@@ -142,3 +148,10 @@ def render_form_errors(errors):
         """,
         error_tags=error_tags,
     )
+
+
+def instance_of(field_widget, widget_list):
+    for widget in widget_list:
+        if isinstance(field_widget, widget):
+            return True
+    return False
diff --git a/hshassets/templatetags/bulma.py b/hshassets/templatetags/bulma.py
index 9f78852d..3a216fd9 100644
--- a/hshassets/templatetags/bulma.py
+++ b/hshassets/templatetags/bulma.py
@@ -1,7 +1,8 @@
 from django import template
 from django.utils.safestring import mark_safe
-from django.forms.widgets import TextInput, Textarea
-from hshassets.forms.utils import render_form_field, render_form_generics, render_form_errors
+from django.forms import widgets
+
+from hshassets.forms.utils import render_form_field, render_form_generics, render_form_errors, instance_of
 from hshassets.forms.elements import Field
 
 register = template.Library()
@@ -17,9 +18,12 @@ def bulma_form_fields(form):
         widget_classes = list()
 
         # not every form element in bulma has the 'input' css class, so we need to differ here
-        if isinstance(field.field.widget, TextInput):
+
+        field_widget = field.field.widget
+
+        if instance_of(field_widget, [widgets.TextInput, widgets.NumberInput, widgets.EmailInput, widgets.URLInput, widgets.PasswordInput]):
             widget_classes.append("input")
-        elif isinstance(field.field.widget, Textarea):
+        elif isinstance(field.field.widget, widgets.Textarea):
             widget_classes.append("textarea")
 
         # highlight fields with errors
-- 
GitLab