def test_get_bootstrap_setting(self): self.assertIsNone(get_bootstrap_setting("SETTING_DOES_NOT_EXIST")) self.assertEqual( "not none", get_bootstrap_setting("SETTING_DOES_NOT_EXIST", "not none")) # Override a setting with self.settings( BOOTSTRAP4={"SETTING_DOES_NOT_EXIST": "exists now"}): self.assertEqual(get_bootstrap_setting("SETTING_DOES_NOT_EXIST"), "exists now")
def test_settings(self): self.assertIsNone(get_bootstrap_setting('SETTING_DOES_NOT_EXIST')) self.assertEqual( 'not none', get_bootstrap_setting('SETTING_DOES_NOT_EXIST', 'not none')) # Override a setting with self.settings( BOOTSTRAP4={'SETTING_DOES_NOT_EXIST': 'exists now'}): self.assertEqual(get_bootstrap_setting('SETTING_DOES_NOT_EXIST'), 'exists now')
def __init__(self, *args, **kwargs): self.layout = kwargs.get('layout', '') self.form_group_class = kwargs.get('form_group_class', FORM_GROUP_CLASS) self.field_class = kwargs.get('field_class', '') self.label_class = kwargs.get('label_class', '') self.show_help = kwargs.get('show_help', True) self.show_label = kwargs.get('show_label', True) self.exclude = kwargs.get('exclude', '') self.set_required = kwargs.get('set_required', True) self.set_disabled = kwargs.get('set_disabled', False) self.size = self.parse_size(kwargs.get('size', '')) self.horizontal_label_class = kwargs.get('horizontal_label_class', get_bootstrap_setting('horizontal_label_class')) self.horizontal_field_class = kwargs.get('horizontal_field_class', get_bootstrap_setting('horizontal_field_class'))
def bootstrap_setting(value): """ A simple way to read bootstrap settings in a template. Please consider this filter private for now, do not use it in your own templates. """ return get_bootstrap_setting(value)
def bootstrap_javascript(jquery=None): """ Return HTML for Bootstrap JavaScript. Adjust url in settings. If no url is returned, we don't want this statement to return any HTML. This is intended behavior. Default value: ``None`` This value is configurable, see Settings section **Tag name**:: bootstrap_javascript **Parameters**: :jquery: Truthy to include jQuery as well as Bootstrap **Usage**:: {% bootstrap_javascript %} **Example**:: {% bootstrap_javascript jquery=1 %} """ javascript = '' if jquery is None: jquery = get_bootstrap_setting('include_jquery', False) if jquery: url = bootstrap_jquery_url() if url: javascript += render_tag('script', attrs={'src': url}) url = bootstrap_javascript_url() if url: javascript += render_tag('script', attrs={'src': url}) return mark_safe(javascript)
def expected_js(self, tag): template = ( '<script src="{url}" integrity="{integrity}" crossorigin="{crossorigin}"></script>' ) setting = get_bootstrap_setting(tag + "_url") return template.format(**setting)
def __init__(self, field, *args, **kwargs): if not isinstance(field, BoundField): raise BootstrapError('Parameter "field" should contain a valid Django BoundField.') self.field = field super(FieldRenderer, self).__init__(*args, **kwargs) self.widget = field.field.widget self.is_multi_widget = isinstance(field.field.widget, MultiWidget) self.initial_attrs = self.widget.attrs.copy() self.field_help = text_value(mark_safe(field.help_text)) if self.show_help and field.help_text else '' self.field_errors = [conditional_escape(text_value(error)) for error in field.errors] if get_bootstrap_setting('set_placeholder'): self.placeholder = field.label else: self.placeholder = '' self.addon_before = kwargs.get('addon_before', self.widget.attrs.pop('addon_before', '')) self.addon_after = kwargs.get('addon_after', self.widget.attrs.pop('addon_after', '')) error_css_class = kwargs.get('error_css_class', None) required_css_class = kwargs.get('required_css_class', None) bound_css_class = kwargs.get('bound_css_class', None) if error_css_class is not None: self.error_css_class = error_css_class else: self.error_css_class = getattr( field.form, 'error_css_class', get_bootstrap_setting('error_css_class')) if required_css_class is not None: self.required_css_class = required_css_class else: self.required_css_class = getattr( field.form, 'required_css_class', get_bootstrap_setting('required_css_class')) if bound_css_class is not None: self.success_css_class = bound_css_class else: self.success_css_class = getattr( field.form, 'bound_css_class', get_bootstrap_setting('success_css_class')) if self.field.form.empty_permitted: self.set_required = False self.required_css_class = '' self.set_disabled = kwargs.get('set_disabled', False)
def is_widget_required_attribute(widget): if not get_bootstrap_setting('set_required'): return False if not widget.is_required: return False if isinstance(widget, (AdminFileWidget, HiddenInput, FileInput, CheckboxInput, CheckboxSelectMultiple)): return False return True
def render_field_and_label(field, label, field_class='', label_for=None, label_class='', layout='', **kwargs): if layout == 'horizontal': if not label_class: label_class = get_bootstrap_setting('horizontal_label_class') if not field_class: field_class = get_bootstrap_setting('horizontal_field_class') if not label: label = mark_safe(' ') label_class = add_css_class(label_class, 'col-form-label') html = field if field_class: html = '<div class="{klass}">{html}</div>'.format(klass=field_class, html=html) if label: html = render_label( label, label_for=label_for, label_class=label_class) + html return html
def expected_css(self, tag): template = '<link href="{href}" integrity="{integrity}" crossorigin="{crossorigin}" rel="stylesheet">' setting = get_bootstrap_setting(tag + '_url') return template.format(**setting)
def test_settings(self): self.assertIsNone(get_bootstrap_setting('SETTING_DOES_NOT_EXIST')) self.assertEqual('not none', get_bootstrap_setting('SETTING_DOES_NOT_EXIST', 'not none')) # Override a setting with self.settings(BOOTSTRAP4={'SETTING_DOES_NOT_EXIST': 'exists now'}): self.assertEqual(get_bootstrap_setting('SETTING_DOES_NOT_EXIST'), 'exists now')