diff --git a/netbox/dcim/elevations.py b/netbox/dcim/elevations.py index 93c44f087..8571c6684 100644 --- a/netbox/dcim/elevations.py +++ b/netbox/dcim/elevations.py @@ -64,7 +64,7 @@ class RackElevationSVG: drawing = svgwrite.Drawing(size=(width, height)) # add the stylesheet - with open('{}/css/rack_elevation.css'.format(settings.STATICFILES_DIRS[0])) as css_file: + with open('{}/rack_elevation.css'.format(settings.STATIC_ROOT)) as css_file: drawing.defs.add(drawing.style(css_file.read())) # add gradients diff --git a/netbox/utilities/forms/fields.py b/netbox/utilities/forms/fields.py index 5f1e06c3b..6cf773170 100644 --- a/netbox/utilities/forms/fields.py +++ b/netbox/utilities/forms/fields.py @@ -214,7 +214,7 @@ class CommentField(forms.CharField): widget = forms.Textarea default_label = '' # TODO: Port Markdown cheat sheet to internal documentation - default_helptext = ' '\ + default_helptext = ' '\ ''\ 'Markdown syntax is supported' @@ -390,7 +390,8 @@ class JSONField(_JSONField): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not self.help_text: - self.help_text = 'Enter context data in JSON format.' + + self.help_text = 'Enter context data in JSON format.' self.widget.attrs['placeholder'] = '' def prepare_value(self, value): diff --git a/netbox/utilities/forms/forms.py b/netbox/utilities/forms/forms.py index e674afdf7..27609bbdf 100644 --- a/netbox/utilities/forms/forms.py +++ b/netbox/utilities/forms/forms.py @@ -4,6 +4,8 @@ import re import yaml from django import forms +from .widgets import APISelect, APISelectMultiple, StaticSelect2 + __all__ = ( 'BootstrapMixin', @@ -28,18 +30,28 @@ class BootstrapMixin(forms.BaseForm): forms.CheckboxInput, forms.ClearableFileInput, forms.FileInput, - forms.RadioSelect + forms.RadioSelect, + APISelect, + APISelectMultiple, + StaticSelect2, ] for field_name, field in self.fields.items(): + if field.widget.__class__ not in exempt_widgets: css = field.widget.attrs.get('class', '') field.widget.attrs['class'] = ' '.join([css, 'form-control']).strip() + if field.required and not isinstance(field.widget, forms.FileInput): field.widget.attrs['required'] = 'required' - if 'placeholder' not in field.widget.attrs: + + if 'placeholder' not in field.widget.attrs and field.label is not None: field.widget.attrs['placeholder'] = field.label + if field.widget.__class__ == forms.CheckboxInput: + css = field.widget.attrs.get('class', '') + field.widget.attrs['class'] = ' '.join((css, 'form-check-input')).strip() + class ReturnURLForm(forms.Form): """ diff --git a/netbox/utilities/templates/widgets/select_speed.html b/netbox/utilities/templates/widgets/select_speed.html index 8e259ca8d..9b8399ed6 100644 --- a/netbox/utilities/templates/widgets/select_speed.html +++ b/netbox/utilities/templates/widgets/select_speed.html @@ -1,20 +1 @@ -