Ejemplo n.º 1
0
def render_alert(content, alert_type=None, dismissable=True):
    """
    Render a Bootstrap alert
    """
    button = ''
    if not alert_type:
        alert_type = 'info'
    css_classes = ['alert', 'alert-' + text_value(alert_type)]
    if dismissable:
        css_classes.append('alert-dismissable fade in')
        button = """
                <button type="button"
                        class="close"
                        data-dismiss="alert"
                        aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                </button>
                 """
    button_placeholder = '__BUTTON__'
    return mark_safe(
        render_tag(
            'div',
            attrs={
                'class': ' '.join(css_classes),
                'role': 'alert'
            },
            content=button_placeholder + text_value(content),
        ).replace(button_placeholder, button))
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
 def get_label_class(self):
     label_class = self.label_class
     if not label_class and self.layout == 'horizontal':
         label_class = self.horizontal_label_class
     label_class = text_value(label_class)
     if not self.show_label:
         label_class = add_css_class(label_class, 'sr-only')
     return add_css_class(label_class, 'col-form-label')
 def render(self):
     # Hidden input requires no special treatment
     if self.field.is_hidden:
         return text_value(self.field)
     # Render the widget
     self.add_widget_attrs()
     html = self.field.as_widget(attrs=self.widget.attrs)
     return html
Ejemplo n.º 5
0
 def parse_size(self, size):
     size = text_value(size).lower().strip()
     if size in ('sm', 'small'):
         return 'small'
     if size in ('lg', 'large'):
         return 'large'
     if size in ('md', 'medium'):
         return 'medium'
     raise BootstrapError('Invalid value "%s" for parameter "size" (expected "sm", "md" "lg" or "").' % size)
Ejemplo n.º 6
0
def render_button(content,
                  button_type=None,
                  icon=None,
                  button_class='',
                  size='',
                  href='',
                  name=None,
                  value=None,
                  title=None):
    attrs = {}
    classes = add_css_class('btn', button_class)
    size = text_value(size).lower().strip()
    if size == 'xs':
        classes = add_css_class(classes, 'btn-xs')
    elif size == 'sm' or size == 'small':
        classes = add_css_class(classes, 'btn-sm')
    elif size == 'lg' or size == 'large':
        classes = add_css_class(classes, 'btn-lg')
    elif size == 'md' or size == 'medium':
        pass
    elif size:
        raise BootstrapError(
            'Parameter "size" should be "xs", "sm", "lg" or empty ("{}" given).'
            .format(size))
    if button_type:
        if button_type == 'submit':
            classes = add_css_class(classes, 'btn-primary')
            attrs['class'] = 'btn btn-primary'
        elif button_type == 'reset':
            attrs['class'] = 'btn btn-warning'
        elif button_type not in ('reset', 'button', 'link'):
            raise BootstrapError(
                'Parameter "button_type" should be "submit", "reset", "button", "link" or empty ("{}" given).'
                .format(button_type))
        attrs['type'] = button_type
        icon_content = render_icon(icon) if icon else ''
        if href:
            attrs['href'] = href
            tag = 'a'
        else:
            tag = 'button'
        if name:
            attrs['name'] = name
        if value:
            attrs['value'] = value
        if title:
            attrs['title'] = title
        return render_tag(tag,
                          attrs=attrs,
                          content=mark_safe(
                              text_concat(icon_content, content,
                                          separator=' ')))
Ejemplo n.º 7
0
def render_alert(content, alert_type=None, dismissable=True):
    """
    Render a Bootstrap alert
    Port from bootstrap4, as it is bit buggy, and don't allow mark_safe
    """
    button = ""
    if not alert_type:
        alert_type = "info"
    css_classes = ["alert", "alert-" + text_value(alert_type)]
    if dismissable:
        css_classes.append("alert-dismissable")
        button = ('<button type="button" class="close" ' +
                  'data-dismiss="alert" aria-label="{}">&times;</button>')
        button = button.format(_("close"))
    button_placeholder = mark_safe("__BUTTON__")
    return mark_safe(
        render_tag(
            "div",
            attrs={
                "class": " ".join(css_classes),
                "role": "alert"
            },
            content=button_placeholder + text_value(content),
        ).replace(button_placeholder, button))
Ejemplo n.º 8
0
def render_label(content, label_for=None, label_class=None, label_title='', optional=False):
    """
    Render a label with content
    """
    attrs = {}
    if label_for:
        attrs['for'] = label_for
    if label_class:
        attrs['class'] = label_class
    if label_title:
        attrs['title'] = label_title
    builder = '<{tag}{attrs}>{content}{opt}</{tag}>'
    return format_html(
        builder,
        tag='label',
        attrs=mark_safe(flatatt(attrs)) if attrs else '',
        opt=mark_safe('<br><span class="optional">{}</span>'.format(pgettext('form', 'Optional'))) if optional else '',
        content=text_value(content),
    )
Ejemplo n.º 9
0
 def _render(self):
     # See if we're not excluded
     if self.field.name in self.exclude.replace(' ', '').split(','):
         return ''
     # Hidden input requires no special treatment
     if self.field.is_hidden:
         return text_value(self.field)
     # Render the widget
     self.add_widget_attrs()
     html = self.field.as_widget(attrs=self.widget.attrs)
     self.restore_widget_attrs()
     # Start post render
     html = self.post_widget_render(html)
     html = self.wrap_widget(html)
     html = self.make_input_group(html)
     html = self.append_to_field(html)
     html = self.wrap_field(html)
     html = self.add_label(html)
     html = self.wrap_label_and_field(html)
     return html
Ejemplo n.º 10
0
def render_label(content,
                 label_for=None,
                 label_class=None,
                 label_title="",
                 optional=False):
    """Render a label with content."""
    attrs = {}
    if label_for:
        attrs["for"] = label_for
    if label_class:
        attrs["class"] = label_class
    if label_title:
        attrs["title"] = label_title
    builder = "<{tag}{attrs}>{content}{opt}</{tag}>"
    return format_html(
        builder,
        tag="label",
        attrs=mark_safe(flatatt(attrs)) if attrs else "",
        opt=mark_safe('<br><span class="optional">{}</span>'.format(
            pgettext("form", "Optional"))) if optional else "",
        content=text_value(content),
    )
 def test_text_value(self):
     self.assertEqual(text_value(''), "")
     self.assertEqual(text_value(' '), " ")
     self.assertEqual(text_value(None), "")
     self.assertEqual(text_value(1), "1")
Ejemplo n.º 12
0
 def render_management_form(self):
     return text_value(self.formset.management_form)