diff --git a/.gitignore b/.gitignore index 95e4ff702..66f4cb2ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ *.pyc *.swp +node_modules +/netbox/project-static/.cache /netbox/netbox/configuration.py /netbox/netbox/ldap_config.py /netbox/reports/* diff --git a/README.md b/README.md index e35b72c2e..237673e6b 100644 --- a/README.md +++ b/README.md @@ -20,22 +20,26 @@ The complete documentation for NetBox can be found at [Read the Docs](https://ne ### Build Status -| | status | -|-------------|------------| -| **master** | ![Build status](https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master) | +| | status | +| ----------- | ------------------------------------------------------------------------------------------------- | +| **master** | ![Build status](https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master) | | **develop** | ![Build status](https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=develop) | ### Screenshots -![Screenshot of main page](docs/media/screenshot1.png "Main page") +![Screenshot of Main Page](docs/media/home-light.png "Main Page") --- -![Screenshot of rack elevation](docs/media/screenshot2.png "Rack elevation") +![Screenshot of Rack Elevation](docs/media/rack-dark.png "Rack Elevation") --- -![Screenshot of prefix hierarchy](docs/media/screenshot3.png "Prefix hierarchy") +![Screenshot of Prefix Hierarchy](docs/media/prefixes-light.png "Prefix Hierarchy") + +--- + +![Screenshot of Cable Tracing](docs/media/cable-dark.png "Cable Tracing") ## Installation diff --git a/docs/media/cable-dark.png b/docs/media/cable-dark.png new file mode 100644 index 000000000..cd23d6306 Binary files /dev/null and b/docs/media/cable-dark.png differ diff --git a/docs/media/cable-light.png b/docs/media/cable-light.png new file mode 100644 index 000000000..a7f7f7875 Binary files /dev/null and b/docs/media/cable-light.png differ diff --git a/docs/media/home-dark.png b/docs/media/home-dark.png new file mode 100644 index 000000000..9da11df79 Binary files /dev/null and b/docs/media/home-dark.png differ diff --git a/docs/media/home-light.png b/docs/media/home-light.png new file mode 100644 index 000000000..25d255ebf Binary files /dev/null and b/docs/media/home-light.png differ diff --git a/docs/media/prefixes-dark.png b/docs/media/prefixes-dark.png new file mode 100644 index 000000000..f4867764d Binary files /dev/null and b/docs/media/prefixes-dark.png differ diff --git a/docs/media/prefixes-light.png b/docs/media/prefixes-light.png new file mode 100644 index 000000000..30189a27d Binary files /dev/null and b/docs/media/prefixes-light.png differ diff --git a/docs/media/rack-dark.png b/docs/media/rack-dark.png new file mode 100644 index 000000000..a419f4c63 Binary files /dev/null and b/docs/media/rack-dark.png differ diff --git a/docs/media/rack-light.png b/docs/media/rack-light.png new file mode 100644 index 000000000..6308baf5b Binary files /dev/null and b/docs/media/rack-light.png differ diff --git a/docs/media/screenshot-cable.png b/docs/media/screenshot-cable.png new file mode 100644 index 000000000..ee4b9f2bf Binary files /dev/null and b/docs/media/screenshot-cable.png differ diff --git a/docs/media/screenshot-home.png b/docs/media/screenshot-home.png new file mode 100644 index 000000000..e6d326977 Binary files /dev/null and b/docs/media/screenshot-home.png differ diff --git a/docs/media/screenshot-prefixes.png b/docs/media/screenshot-prefixes.png new file mode 100644 index 000000000..55e5712eb Binary files /dev/null and b/docs/media/screenshot-prefixes.png differ diff --git a/docs/media/screenshot-rack.png b/docs/media/screenshot-rack.png new file mode 100644 index 000000000..d7aa31b5b Binary files /dev/null and b/docs/media/screenshot-rack.png differ diff --git a/docs/media/screenshot1.png b/docs/media/screenshot1.png deleted file mode 100644 index e25a5ed93..000000000 Binary files a/docs/media/screenshot1.png and /dev/null differ diff --git a/docs/media/screenshot2.png b/docs/media/screenshot2.png deleted file mode 100644 index bce0a3f5d..000000000 Binary files a/docs/media/screenshot2.png and /dev/null differ diff --git a/docs/media/screenshot3.png b/docs/media/screenshot3.png deleted file mode 100644 index 6cf67d8f7..000000000 Binary files a/docs/media/screenshot3.png and /dev/null differ diff --git a/docs/screenshots/index.md b/docs/screenshots/index.md new file mode 100644 index 000000000..b52119506 --- /dev/null +++ b/docs/screenshots/index.md @@ -0,0 +1,36 @@ +# Screenshots + +## Light Mode + +### Home Page + +![Home Page](../../media/home-light.png) + +### Rack Elevation + +![Rack Elevation](../../media/rack-light.png) + +### Prefixes + +![Prefixes](../../media/prefixes-light.png) + +### Cable Trace +![Cable Trace](../../media/cable-light.png) + +## Dark Mode + +### Home Page + +![Home Page](../../media/home-dark.png) + +### Rack Elevation + +![Rack Elevation](../../media/rack-dark.png) + +### Prefixes + +![Prefixes](../../media/prefixes-dark.png) + +### Cable Trace +![Cable Trace](../../media/cable-dark.png) + diff --git a/mkdocs.yml b/mkdocs.yml index fb5cf1890..62b11af5e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -6,6 +6,21 @@ python: - requirements: docs/requirements.txt theme: name: material + palette: + - scheme: default + toggle: + icon: material/lightbulb-outline + name: Switch to Dark Mode + - scheme: slate + toggle: + icon: material/lightbulb + name: Switch to Light Mode +extra: + social: + - icon: fontawesome/brands/github + link: https://github.com/netbox-community/netbox + - icon: fontawesome/brands/slack + link: https://slack.netbox.dev extra_css: - extra.css markdown_extensions: @@ -93,3 +108,4 @@ nav: - Version 2.2: 'release-notes/version-2.2.md' - Version 2.1: 'release-notes/version-2.1.md' - Version 2.0: 'release-notes/version-2.0.md' + - Screenshots: 'screenshots/index.md' diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 92e53c30f..c05ea4622 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -285,7 +285,7 @@ class CircuitSwapTerminations(generic.ObjectEditView): 'termination_a': circuit.termination_a, 'termination_z': circuit.termination_z, 'form': form, - 'panel_class': 'default', + 'panel_class': 'light', 'button_class': 'primary', 'return_url': circuit.get_absolute_url(), }) diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index 802bd4986..2483c8d12 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -169,7 +169,7 @@ class DeviceStatusChoices(ChoiceSet): STATUS_PLANNED: 'info', STATUS_STAGED: 'primary', STATUS_FAILED: 'danger', - STATUS_INVENTORY: 'default', + STATUS_INVENTORY: 'secondary', STATUS_DECOMMISSIONING: 'warning', } 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/dcim/forms.py b/netbox/dcim/forms.py index d6799b6c9..9f4916d4b 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -4605,6 +4605,10 @@ class DeviceVCMembershipForm(forms.ModelForm): # Require VC position (only required when the Device is a VirtualChassis member) self.fields['vc_position'].required = True + # Add bootstrap classes to form elements. + self.fields['vc_position'].widget.attrs = {'class': 'form-control'} + self.fields['vc_priority'].widget.attrs = {'class': 'form-control'} + # Validation of vc_position is optional. This is only required when adding a new member to an existing # VirtualChassis. Otherwise, vc_position validation is handled by BaseVCMemberFormSet. self.validate_vc_position = validate_vc_position diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 2582a7117..fa22dd5c0 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -26,17 +26,17 @@ CABLE_TERMINATION_PARENT = """ DEVICE_LINK = """ - {{ record.name|default:'Unnamed device' }} + {{ record.name|default:'Unnamed device' }} """ DEVICEBAY_STATUS = """ {% if record.installed_device_id %} - + {{ record.installed_device.get_status_display }} {% else %} - Vacant + Vacant {% endif %} """ @@ -60,7 +60,7 @@ INTERFACE_TAGGED_VLANS = """ POWERFEED_CABLE = """ {{ value }} - + """ @@ -72,7 +72,7 @@ POWERFEED_CABLETERMINATION = """ """ LOCATION_ELEVATIONS = """ - + """ @@ -83,205 +83,199 @@ LOCATION_ELEVATIONS = """ CONSOLEPORT_BUTTONS = """ {% if record.cable %} - + {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %} {% if perms.dcim.delete_cable %} - + {% endif %} {% elif perms.dcim.add_cable %} - - - {% if not record.mark_connected %} - - - - - {% else %} - - {% endif %} + + + + + + +{% else %} + {% endif %} """ CONSOLESERVERPORT_BUTTONS = """ {% if record.cable %} - + {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %} {% if perms.dcim.delete_cable %} - + {% endif %} {% elif perms.dcim.add_cable %} - - - {% if not record.mark_connected %} - - - - - {% else %} - - {% endif %} + + + + + + +{% else %} + {% endif %} """ POWERPORT_BUTTONS = """ {% if record.cable %} - + {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %} {% if perms.dcim.delete_cable %} - + {% endif %} {% elif perms.dcim.add_cable %} - - - {% if not record.mark_connected %} - - - - - {% else %} - - {% endif %} + + + + + + +{% else %} + {% endif %} """ POWEROUTLET_BUTTONS = """ {% if record.cable %} - + {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %} {% if perms.dcim.delete_cable %} - + {% endif %} {% elif perms.dcim.add_cable %} - - + + {% if not record.mark_connected %} - + {% else %} - + {% endif %} {% endif %} """ INTERFACE_BUTTONS = """ {% if perms.ipam.add_ipaddress %} - + {% endif %} {% if record.cable %} - + {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %} {% if perms.dcim.delete_cable %} - + {% endif %} {% elif record.is_connectable and perms.dcim.add_cable %} - - + + {% if not record.mark_connected %} - - - - + + + + {% else %} - + {% endif %} {% endif %} """ FRONTPORT_BUTTONS = """ {% if record.cable %} - + {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %} {% if perms.dcim.delete_cable %} - + {% endif %} {% elif perms.dcim.add_cable %} - - + + {% if not record.mark_connected %} - -