88
99register = template .Library ()
1010
11+
1112@register .filter
1213def 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
4256def 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
5360def 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
83110def is_checkbox (field ):
84111 return isinstance (field .field .widget , forms .CheckboxInput )
85112
113+
86114@register .filter
87115def is_textarea (field ):
88116 return isinstance (field .field .widget , forms .Textarea )
@@ -97,10 +125,12 @@ def is_multiple_checkbox(field):
97125def is_radio (field ):
98126 return isinstance (field .field .widget , forms .RadioSelect )
99127
128+
100129@register .filter
101130def is_date_input (field ):
102131 return isinstance (field .field , DateField )
103132
133+
104134@register .filter
105135def is_datetime_input (field ):
106136 return isinstance (field .field , DateTimeField )
0 commit comments