Skip to content

Commit 4d4fcff

Browse files
authored
Merge pull request #40 from ref-humbold/master
Handle classes for subwidgets in MultiWidget
2 parents 74f29aa + 8616253 commit 4d4fcff

File tree

1 file changed

+38
-8
lines changed

1 file changed

+38
-8
lines changed

materializecssform/templatetags/materializecss.py

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
register = template.Library()
1010

11+
1112
@register.filter
1213
def materializecss(element, options={}):
1314
# Set default values if none of them are set
@@ -38,16 +39,22 @@ def materializecss(element, options={}):
3839
return render(element, markup_classes)
3940

4041

42+
def _add_input_classes_widget(widget, field_errors):
43+
if _is_multi_widget(widget):
44+
for subwidget in widget.widgets:
45+
_add_input_classes_widget(subwidget, field_errors)
46+
elif not _is_checkbox_widget(widget) and not _is_multiple_checkbox_widget(widget) \
47+
and not _is_radio_widget(widget) and not _is_file_widget(widget):
48+
classes = widget.attrs.get('class', '')
49+
if config.MATERIALIZECSS_VALIDATION:
50+
classes += ' validate'
51+
if field_errors:
52+
classes += ' invalid'
53+
widget.attrs['class'] = classes
54+
4155

4256
def add_input_classes(field):
43-
if not is_checkbox(field) and not is_multiple_checkbox(field) and not is_radio(field) \
44-
and not is_file(field):
45-
field_classes = field.field.widget.attrs.get('class', '')
46-
if config.MATERIALIZECSS_VALIDATION:
47-
field_classes += ' validate'
48-
if field.errors:
49-
field_classes+= ' invalid'
50-
field.field.widget.attrs['class'] = field_classes
57+
_add_input_classes_widget(field.field.widget, field.errors)
5158

5259

5360
def render(element, markup_classes):
@@ -79,10 +86,31 @@ def render(element, markup_classes):
7986
return template.render(context)
8087

8188

89+
def _is_checkbox_widget(widget):
90+
return isinstance(widget, forms.CheckboxInput)
91+
92+
93+
def _is_multiple_checkbox_widget(widget):
94+
return isinstance(widget, forms.CheckboxSelectMultiple)
95+
96+
97+
def _is_radio_widget(widget):
98+
return isinstance(widget, forms.RadioSelect)
99+
100+
101+
def _is_file_widget(widget):
102+
return isinstance(widget, forms.FileInput)
103+
104+
105+
def _is_multi_widget(widget):
106+
return isinstance(widget, forms.MultiWidget)
107+
108+
82109
@register.filter
83110
def is_checkbox(field):
84111
return isinstance(field.field.widget, forms.CheckboxInput)
85112

113+
86114
@register.filter
87115
def is_textarea(field):
88116
return isinstance(field.field.widget, forms.Textarea)
@@ -97,10 +125,12 @@ def is_multiple_checkbox(field):
97125
def is_radio(field):
98126
return isinstance(field.field.widget, forms.RadioSelect)
99127

128+
100129
@register.filter
101130
def is_date_input(field):
102131
return isinstance(field.field, DateField)
103132

133+
104134
@register.filter
105135
def is_datetime_input(field):
106136
return isinstance(field.field, DateTimeField)

0 commit comments

Comments
 (0)