mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Clean up spacing for nav pills Markdown fields should default to using monospace font Wrap action buttons in object page header Fix page link style for non-HTMX paginators Clean up styling of Markdown preview widget Fix spacing around placeholder text for empty panel tables Remove obsolete templates Tweak checkbox input spacing Fix toggling of clear button for quick search Fix positioning of quick search filter dropdown Fix positioning of 'highlight device' button Fix styling for custom field group names Widen buttons on nav menu items Restyle the login page Fix active nav-pill background color in dark mode Fix spacing around 'map' button for sites
80 lines
2.0 KiB
Python
80 lines
2.0 KiB
Python
from django import forms
|
|
|
|
__all__ = (
|
|
'ArrayWidget',
|
|
'ChoicesWidget',
|
|
'ClearableFileInput',
|
|
'MarkdownWidget',
|
|
'NumberWithOptions',
|
|
'SlugWidget',
|
|
)
|
|
|
|
|
|
class ClearableFileInput(forms.ClearableFileInput):
|
|
"""
|
|
Override Django's stock ClearableFileInput with a custom template.
|
|
"""
|
|
template_name = 'widgets/clearable_file_input.html'
|
|
|
|
|
|
class MarkdownWidget(forms.Textarea):
|
|
"""
|
|
Provide a live preview for Markdown-formatted content.
|
|
"""
|
|
template_name = 'widgets/markdown_input.html'
|
|
|
|
def __init__(self, attrs=None):
|
|
# Markdown fields should use monospace font
|
|
default_attrs = {
|
|
"class": "font-monospace",
|
|
}
|
|
if attrs:
|
|
default_attrs.update(attrs)
|
|
|
|
super().__init__(default_attrs)
|
|
|
|
|
|
class NumberWithOptions(forms.NumberInput):
|
|
"""
|
|
Number field with a dropdown pre-populated with common values for convenience.
|
|
"""
|
|
template_name = 'widgets/number_with_options.html'
|
|
|
|
def __init__(self, options, attrs=None):
|
|
self.options = options
|
|
super().__init__(attrs)
|
|
|
|
def get_context(self, name, value, attrs):
|
|
context = super().get_context(name, value, attrs)
|
|
context['widget']['options'] = self.options
|
|
return context
|
|
|
|
|
|
class SlugWidget(forms.TextInput):
|
|
"""
|
|
Subclass TextInput and add a slug regeneration button next to the form field.
|
|
"""
|
|
template_name = 'widgets/sluginput.html'
|
|
|
|
|
|
class ArrayWidget(forms.Textarea):
|
|
"""
|
|
Render each item of an array on a new line within a textarea for easy editing/
|
|
"""
|
|
def format_value(self, value):
|
|
if value is None or not len(value):
|
|
return None
|
|
return '\n'.join(value)
|
|
|
|
|
|
class ChoicesWidget(forms.Textarea):
|
|
"""
|
|
Render each key-value pair of a dictionary on a new line within a textarea for easy editing.
|
|
"""
|
|
def format_value(self, value):
|
|
if not value:
|
|
return None
|
|
if type(value) is list:
|
|
return '\n'.join([f'{k}:{v}' for k, v in value])
|
|
return value
|