Skip to content

Commit cd5c287

Browse files
committed
Fix sizing issues
1 parent c9d5213 commit cd5c287

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

bootstrap3/renderers.py

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121

2222
class BaseRenderer(object):
23-
2423
def __init__(self, *args, **kwargs):
2524
self.layout = kwargs.get('layout', '')
2625
self.form_group_class = kwargs.get('form_group_class', FORM_GROUP_CLASS)
@@ -42,11 +41,11 @@ def parse_size(self, size):
4241
return 'medium'
4342
raise BootstrapError('Invalid value "%s" for parameter "size".' % size)
4443

45-
def get_size_class(self):
44+
def get_size_class(self, prefix='input'):
4645
if self.size == 'small':
47-
return 'input-sm'
46+
return prefix + '-sm'
4847
if self.size == 'large':
49-
return 'input-lg'
48+
return prefix + '-lg'
5049
return ''
5150

5251

@@ -80,6 +79,7 @@ def render_forms(self):
8079
show_help=self.show_help,
8180
exclude=self.exclude,
8281
set_required=self.set_required,
82+
size=self.size,
8383
))
8484
return '\n'.join(rendered_forms)
8585

@@ -124,6 +124,7 @@ def render_fields(self):
124124
show_help=self.show_help,
125125
exclude=self.exclude,
126126
set_required=self.set_required,
127+
size=self.size,
127128
))
128129
return '\n'.join(rendered_fields)
129130

@@ -146,10 +147,10 @@ def render_errors(self, type='all'):
146147
if form_errors:
147148
return get_template(
148149
'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+
}))
153154
return ''
154155

155156
def render(self):
@@ -187,7 +188,8 @@ def __init__(self, field, *args, **kwargs):
187188
if required_css_class:
188189
self.form_required_class = required_css_class
189190
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'))
191193

192194
def restore_widget_attrs(self):
193195
self.widget.attrs = self.initial_attrs
@@ -199,7 +201,8 @@ def add_class_attrs(self):
199201
CheckboxSelectMultiple,
200202
FileInput)):
201203
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())
203206
self.widget.attrs['class'] = classes
204207

205208
def add_placeholder_attrs(self):
@@ -208,9 +211,8 @@ def add_placeholder_attrs(self):
208211
self.widget.attrs['placeholder'] = placeholder
209212

210213
def add_help_attrs(self):
211-
title = self.widget.attrs.get('title', strip_tags(self.field_help))
212214
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))
214216

215217
def add_required_attrs(self):
216218
if self.set_required and is_widget_required_attribute(self.widget):
@@ -223,10 +225,11 @@ def add_widget_attrs(self):
223225
self.add_required_attrs()
224226

225227
def list_to_class(self, html, klass):
228+
classes = add_css_class(klass, self.get_size_class())
226229
mapping = [
227230
('<ul', '<div'),
228231
('</ul>', '</div>'),
229-
('<li', '<div class="{klass}"'.format(klass=klass)),
232+
('<li', '<div class="{klass}"'.format(klass=classes)),
230233
('</li>', '</div>'),
231234
]
232235
for k, v in mapping:
@@ -271,7 +274,8 @@ def post_widget_render(self, html):
271274

272275
def wrap_widget(self, html):
273276
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)
275279
return html
276280

277281
def make_input_group(self, html):
@@ -283,7 +287,9 @@ def make_input_group(self, html):
283287
after = '<span class="input-group-addon">{addon}</span>'.format(
284288
addon=self.addon_after) if self.addon_after else ''
285289
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)
287293
return html
288294

289295
def append_to_field(self, html):
@@ -347,6 +353,8 @@ def get_form_group_class(self):
347353
form_group_class = add_css_class(form_group_class, 'has-error')
348354
elif self.field.form.is_bound:
349355
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'))
350358
return form_group_class
351359

352360
def wrap_label_and_field(self, html):
@@ -359,9 +367,11 @@ def render(self):
359367
# Hidden input requires no special treatment
360368
if self.field.is_hidden:
361369
return text_value(self.field)
370+
# Render the widget
362371
self.add_widget_attrs()
363372
html = self.field.as_widget(attrs=self.widget.attrs)
364373
self.restore_widget_attrs()
374+
# Start post render
365375
html = self.post_widget_render(html)
366376
html = self.wrap_widget(html)
367377
html = self.make_input_group(html)

0 commit comments

Comments
 (0)