20
20
21
21
22
22
class BaseRenderer (object ):
23
-
24
23
def __init__ (self , * args , ** kwargs ):
25
24
self .layout = kwargs .get ('layout' , '' )
26
25
self .form_group_class = kwargs .get ('form_group_class' , FORM_GROUP_CLASS )
@@ -42,11 +41,11 @@ def parse_size(self, size):
42
41
return 'medium'
43
42
raise BootstrapError ('Invalid value "%s" for parameter "size".' % size )
44
43
45
- def get_size_class (self ):
44
+ def get_size_class (self , prefix = 'input' ):
46
45
if self .size == 'small' :
47
- return 'input -sm'
46
+ return prefix + ' -sm'
48
47
if self .size == 'large' :
49
- return 'input -lg'
48
+ return prefix + ' -lg'
50
49
return ''
51
50
52
51
@@ -80,6 +79,7 @@ def render_forms(self):
80
79
show_help = self .show_help ,
81
80
exclude = self .exclude ,
82
81
set_required = self .set_required ,
82
+ size = self .size ,
83
83
))
84
84
return '\n ' .join (rendered_forms )
85
85
@@ -124,6 +124,7 @@ def render_fields(self):
124
124
show_help = self .show_help ,
125
125
exclude = self .exclude ,
126
126
set_required = self .set_required ,
127
+ size = self .size ,
127
128
))
128
129
return '\n ' .join (rendered_fields )
129
130
@@ -146,10 +147,10 @@ def render_errors(self, type='all'):
146
147
if form_errors :
147
148
return get_template (
148
149
'bootstrap3/form_errors.html' ).render (Context ({
149
- 'errors' : form_errors ,
150
- 'form' : self .form ,
151
- 'layout' : self .layout ,
152
- }))
150
+ 'errors' : form_errors ,
151
+ 'form' : self .form ,
152
+ 'layout' : self .layout ,
153
+ }))
153
154
return ''
154
155
155
156
def render (self ):
@@ -187,7 +188,8 @@ def __init__(self, field, *args, **kwargs):
187
188
if required_css_class :
188
189
self .form_required_class = required_css_class
189
190
else :
190
- self .form_required_class = getattr (field .form , 'required_css_class' , get_bootstrap_setting ('required_css_class' ))
191
+ self .form_required_class = getattr (field .form , 'required_css_class' ,
192
+ get_bootstrap_setting ('required_css_class' ))
191
193
192
194
def restore_widget_attrs (self ):
193
195
self .widget .attrs = self .initial_attrs
@@ -199,7 +201,8 @@ def add_class_attrs(self):
199
201
CheckboxSelectMultiple ,
200
202
FileInput )):
201
203
classes = add_css_class (classes , 'form-control' )
202
- classes = add_css_class (classes , self .get_size_class ())
204
+ # For these widget types, add the size class here
205
+ classes = add_css_class (classes , self .get_size_class ())
203
206
self .widget .attrs ['class' ] = classes
204
207
205
208
def add_placeholder_attrs (self ):
@@ -208,9 +211,8 @@ def add_placeholder_attrs(self):
208
211
self .widget .attrs ['placeholder' ] = placeholder
209
212
210
213
def add_help_attrs (self ):
211
- title = self .widget .attrs .get ('title' , strip_tags (self .field_help ))
212
214
if not isinstance (self .widget , CheckboxInput ):
213
- self .widget .attrs ['title' ] = title
215
+ self .widget .attrs ['title' ] = self . widget . attrs . get ( ' title' , strip_tags ( self . field_help ))
214
216
215
217
def add_required_attrs (self ):
216
218
if self .set_required and is_widget_required_attribute (self .widget ):
@@ -223,10 +225,11 @@ def add_widget_attrs(self):
223
225
self .add_required_attrs ()
224
226
225
227
def list_to_class (self , html , klass ):
228
+ classes = add_css_class (klass , self .get_size_class ())
226
229
mapping = [
227
230
('<ul' , '<div' ),
228
231
('</ul>' , '</div>' ),
229
- ('<li' , '<div class="{klass}"' .format (klass = klass )),
232
+ ('<li' , '<div class="{klass}"' .format (klass = classes )),
230
233
('</li>' , '</div>' ),
231
234
]
232
235
for k , v in mapping :
@@ -271,7 +274,8 @@ def post_widget_render(self, html):
271
274
272
275
def wrap_widget (self , html ):
273
276
if isinstance (self .widget , CheckboxInput ):
274
- html = '<div class="checkbox">{content}</div>' .format (content = html )
277
+ checkbox_class = add_css_class ('checkbox' , self .get_size_class ())
278
+ html = '<div class="{klass}">{content}</div>' .format (klass = checkbox_class , content = html )
275
279
return html
276
280
277
281
def make_input_group (self , html ):
@@ -283,7 +287,9 @@ def make_input_group(self, html):
283
287
after = '<span class="input-group-addon">{addon}</span>' .format (
284
288
addon = self .addon_after ) if self .addon_after else ''
285
289
html = '<div class="input-group">{before}{html}{after}</div>' .format (
286
- before = before , after = after , html = html )
290
+ before = before ,
291
+ after = after ,
292
+ html = html )
287
293
return html
288
294
289
295
def append_to_field (self , html ):
@@ -347,6 +353,8 @@ def get_form_group_class(self):
347
353
form_group_class = add_css_class (form_group_class , 'has-error' )
348
354
elif self .field .form .is_bound :
349
355
form_group_class = add_css_class (form_group_class , 'has-success' )
356
+ if self .layout == 'horizontal' :
357
+ form_group_class = add_css_class (form_group_class , self .get_size_class (prefix = 'form-group' ))
350
358
return form_group_class
351
359
352
360
def wrap_label_and_field (self , html ):
@@ -359,9 +367,11 @@ def render(self):
359
367
# Hidden input requires no special treatment
360
368
if self .field .is_hidden :
361
369
return text_value (self .field )
370
+ # Render the widget
362
371
self .add_widget_attrs ()
363
372
html = self .field .as_widget (attrs = self .widget .attrs )
364
373
self .restore_widget_attrs ()
374
+ # Start post render
365
375
html = self .post_widget_render (html )
366
376
html = self .wrap_widget (html )
367
377
html = self .make_input_group (html )
0 commit comments