diff --git a/hshassets/forms/utils.py b/hshassets/forms/utils.py index 8bd4dc80d9e66923be0df9e98147dd8b86905a5f..50b9b5aa5d2db8e61ca05da6f35fba3d57b18322 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 9990c5375d8a2e0b34c4724df83b634e216e737d..3a216fd9c7ff31b876c0ec17d677a1da33ea1bca 100644 --- a/hshassets/templatetags/bulma.py +++ b/hshassets/templatetags/bulma.py @@ -1,6 +1,8 @@ from django import template from django.utils.safestring import mark_safe -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() @@ -16,8 +18,13 @@ 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 getattr(field.field.widget, 'input_type', None) not in ['checkbox', 'radio']: + + 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, widgets.Textarea): + widget_classes.append("textarea") # highlight fields with errors if field.errors: