Merge pull request #6327 from netbox-community/feature-ui

Add Basic Support for Smaller Screens in New UI
This commit is contained in:
Jeremy Stretch 2021-05-03 09:07:29 -04:00 committed by GitHub
commit 501a9a72fe
105 changed files with 383 additions and 352 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -51,6 +51,11 @@
line-height: $line-height-sm;
}
// Automatically space out adjacent columns.
.col:not(:last-child):not(:only-child) {
margin-bottom: $spacer;
}
body {
background-color: var(--nbx-body-bg);
color: var(--nbx-body-color);
@ -225,12 +230,6 @@ li.dropdown-item.dropdown-item-btns {
align-items: center;
}
@media (max-width: 767.98px) {
.sidebar {
top: 5rem;
}
}
.sidebar-sticky {
position: relative;
top: 0;
@ -258,6 +257,14 @@ nav.nav.nav-pills {
}
}
// Prevent scrolling of body content when nav menu is open on mobile.
.sidebar.collapse.show ~ .content-container {
@media (max-width: map.get($grid-breakpoints, 'md')) {
position: fixed;
overflow-y: hidden;
}
}
.sidebar {
position: fixed;
top: 0;
@ -266,9 +273,15 @@ nav.nav.nav-pills {
z-index: 100; /* Behind the navbar */
box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.1);
background-color: var(--nbx-sidebar-bg);
@media (max-width: map.get($grid-breakpoints, 'md')) {
top: 8.125rem;
}
.sidebar-nav-link {
color: var(--nbx-sidebar-link-color);
}
.accordion-body {
max-height: calc(100vh - 24rem);
overflow-y: auto;
@ -284,8 +297,15 @@ nav.nav.nav-pills {
}
}
}
// Ensure navigation accounts for the height of the header on mobile when nav is expanded.
&.collapse.show div.position-sticky {
@media (max-width: map.get($grid-breakpoints, 'md')) {
height: calc(100vh - 16.125rem);
overflow-y: auto;
}
}
div.position-sticky {
height: calc(100% - 8rem);
height: calc(100vh - 8rem);
}
div.sidebar-bottom {
padding-left: 0.5rem;

View File

@ -129,6 +129,10 @@ $nav-tabs-link-active-border-color: $gray-800 $gray-800 $nav-tabs-link-active-bg
$nav-pills-link-active-color: $component-active-color;
$nav-pills-link-active-bg: $component-active-bg;
$navbar-light-color: $gray-500;
$navbar-light-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>");
$navbar-light-toggler-border-color: $gray-700;
// Dropdowns
$dropdown-color: $body-color;
$dropdown-bg: $gray-900;

View File

@ -11,7 +11,7 @@
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 offset-md-3">
<div class="col col-md-6 offset-md-3">
<div class="card bg-danger mt-5">
<h5 class="card-header">
<i class="mdi mdi-alert"></i> Server Error

View File

@ -10,7 +10,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Circuit
@ -81,14 +81,14 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'circuits/inc/circuit_termination.html' with termination=termination_a side='A' %}
{% include 'circuits/inc/circuit_termination.html' with termination=termination_z side='Z' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Circuit Type
@ -35,13 +35,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Circuits

View File

@ -4,13 +4,13 @@
{% load plugins %}
{% block breadcrumbs %}
<li><a href="{% url 'circuits:provider_list' %}">Providers</a></li>
<li>{{ object }}</li>
<li class="breadcrumb-item"><a href="{% url 'circuits:provider_list' %}">Providers</a></li>
<li class="breadcrumb-item">{{ object }}</li>
{% endblock %}
{% block content %}
<div class="row">
<div class="col-md-4">
<div class="col col-md-4">
<div class="card">
<h5 class="card-header">
Provider
@ -54,7 +54,7 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='circuits:provider_list' %}
<div class="card">
@ -71,7 +71,7 @@
</div>
{% plugin_right_page object %}
</div>
<div class="col-md-8">
<div class="col col-md-8">
<div class="card">
<h5 class="card-header">
Circuits
@ -91,7 +91,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -11,7 +11,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Provider Network
@ -37,7 +37,7 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Comments
@ -56,7 +56,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Circuits
@ -69,7 +69,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -25,7 +25,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Cable
@ -73,7 +73,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='dcim:cable_list' %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Termination A
@ -94,7 +94,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -14,7 +14,7 @@
{{ field }}
{% endfor %}
<div class="row my-3">
<div class="col-md-5">
<div class="col col-md-5">
<div class="card h-100">
<h5 class="card-header">
A Side
@ -68,10 +68,10 @@
</div>
</div>
</div>
<div class="col-md-2 d-flex flex-column justify-content-center align-items-center">
<div class="col col-md-2 d-flex flex-column justify-content-center align-items-center">
<i class="mdi mdi-swap-horizontal-bold mdi-48px"></i>
</div>
<div class="col-md-5">
<div class="col col-md-5">
<div class="card h-100">
<h5 class="card-header">
B Side
@ -123,12 +123,12 @@
</div>
</div>
<div class="row my-3 justify-content-center">
<div class="col-md-8">
<div class="col col-md-8">
{% include 'dcim/inc/cable_form.html' %}
</div>
</div>
<div class="row my-3">
<div class="col-md-12 text-center">
<div class="col col-md-12 text-center">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_update" class="btn btn-primary">Connect</button>
</div>

View File

@ -7,7 +7,7 @@
{% block content %}
<div class="row">
<div class="col-md-5 col-sm-12">
<div class="col col-md-5">
<div class="cable-trace">
{% with traced_path=path.origin.trace %}
{% for near_end, cable, far_end in traced_path %}
@ -87,7 +87,7 @@
{% endwith %}
</div>
</div>
<div class="col-md-7 col-sm-12">
<div class="col col-md-7">
<div class="card">
<h5 class="card-header">

View File

@ -7,7 +7,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-9">
<div class="col col-md-9">
<div class="card">
<div class="card-body">
{% include 'responsive_table.html' %}
@ -15,7 +15,7 @@
</div>
{% include 'inc/paginator.html' with paginator=table.paginator page=table.page %}
</div>
<div class="col-md-3 float-end right-side-panel noprint">
<div class="col col-md-3 float-end right-side-panel noprint">
{% include 'inc/search_panel.html' %}
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Console Port
@ -49,7 +49,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Connection
@ -145,7 +145,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Console Server Port
@ -49,7 +49,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Connection
@ -145,7 +145,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -7,11 +7,11 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="details">
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Device
@ -228,7 +228,7 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% if object.powerports.exists and object.poweroutlets.exists %}
<div class="card">
<h5 class="card-header">
@ -369,7 +369,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="col col-md-10">
<div class="card">
<div class="card-overlay">
<div class="spinner-border" role="status">

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<div class="card-overlay d-none">
<div class="spinner-border" role="status">
@ -56,7 +56,7 @@
</div>
</div>
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<div class="card-overlay d-none">
<div class="spinner-border" role="status">

View File

@ -9,7 +9,7 @@
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="row">
<div class="col-md-8">
<div class="col col-md-8">
<div class="field-group">
<h4>{{ component_type|title }}</h4>
{% render_form form %}
@ -17,7 +17,7 @@
</div>
</div>
<div class="row my-3">
<div class="col-md-8 text-end">
<div class="col col-md-8 text-end">
{% block buttons %}
<a class="btn btn-outline-danger" href="{{ return_url }}">Cancel</a>
<button type="submit" name="_addanother" class="btn btn-outline-primary">

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Device Bay
@ -41,7 +41,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Installed Device
@ -73,7 +73,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -7,7 +7,7 @@
<form action="." method="post">
{% csrf_token %}
<div class="row mb-3">
<div class="col-md-6 col-md-offset-3">
<div class="col col-md-6 offset-md-3">
<div class="card">
<div class="card-header">{% block title %}Populate {{ device_bay }}{% endblock %}</div>
<div class="card-body">
@ -25,7 +25,7 @@
</div>
</div>
<div class="row">
<div class="col-md-6 text-end">
<div class="col col-md-6 text-end">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_update" class="btn btn-primary">Save</button>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Device Role
@ -51,13 +51,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Devices

View File

@ -58,7 +58,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Chassis
@ -133,7 +133,7 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='dcim:devicetype_list' %}
<div class="card">
@ -152,12 +152,12 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>
<div class="row my-3">
<div class="col-md-12">
<div class="col col-md-12">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" data-bs-target="#interfaces" role="tab" data-bs-toggle="tab">

View File

@ -9,7 +9,7 @@
<form action="." method="post">
{% csrf_token %}
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="col col-md-6">
<div class="field-group mb-3">
<h4>New {{ component_type }}</h4>
<div class="form-floating mb-3">
@ -19,7 +19,7 @@
{% render_form form %}
</div>
</div>
<div class="col-md-9 col-md-offset-3">
<div class="col col-md-9">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_update" class="btn btn-primary">Save</button>
</div>

View File

@ -10,7 +10,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Front Port
@ -56,7 +56,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Connection
@ -126,7 +126,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -19,7 +19,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Interface
@ -86,7 +86,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% if object.is_connectable %}
<div class="card">
<h5 class="card-header">
@ -267,7 +267,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
IP Addresses
@ -290,17 +290,17 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'panel_table.html' with table=vlan_table heading="VLANs" %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'panel_table.html' with table=child_interfaces_table heading="Child Interfaces" %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Inventory Item
@ -73,12 +73,12 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -12,7 +12,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Location
@ -58,7 +58,7 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
<div class="card">
<h5 class="card-header">
@ -80,7 +80,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Locations

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Manufacturer
@ -35,13 +35,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Device Types

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Platform
@ -53,13 +53,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Devices

View File

@ -16,7 +16,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Power Feed
@ -112,7 +112,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='dcim:powerfeed_list' %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Connection
@ -199,7 +199,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Power Outlet
@ -53,7 +53,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Connection
@ -123,7 +123,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -14,7 +14,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Power Panel
@ -42,14 +42,14 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='dcim:powerpanel_list' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row my-3">
<div class="col-md-12">
<div class="col col-md-12">
<form method="post">
{% csrf_token %}
<div class="card">

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Power Port
@ -53,7 +53,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Connection
@ -133,7 +133,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -33,7 +33,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Rack
@ -310,15 +310,15 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="row" style="margin-bottom: 20px">
<div class="col-md-6 col-sm-6 col-xs-12 text-center">
<div class="col col-md-6 col-sm-6 col-xs-12 text-center">
<div style="margin-left: 30px">
<h4>Front</h4>
{% include 'dcim/inc/rack_elevation.html' with face='front' %}
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12 text-center">
<div class="col col-md-6 col-sm-6 col-xs-12 text-center">
<div style="margin-left: 30px">
<h4>Rear</h4>
{% include 'dcim/inc/rack_elevation.html' with face='rear' %}
@ -373,7 +373,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -30,16 +30,16 @@
{% render_field form.width %}
{% render_field form.u_height %}
<div class="row mb-3">
<label class="col-md-3 col-form-label">Outer Dimensions</label>
<div class="col-md-3">
<label class="col col-md-3 col-form-label">Outer Dimensions</label>
<div class="col col-md-3">
{{ form.outer_width }}
<div class="form-text">Width</div>
</div>
<div class="col-md-3">
<div class="col col-md-3">
{{ form.outer_depth }}
<div class="form-text">Depth</div>
</div>
<div class="col-md-3">
<div class="col col-md-3">
{{ form.outer_unit }}
<div class="form-text">Unit</div>
</div>

View File

@ -24,8 +24,8 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col-md-3 float-end right-side-panel noprint">
<div class="col col-md-12">
<div class="col col-md-3 float-end right-side-panel noprint">
{% include 'inc/search_panel.html' %}
</div>
{% if page %}

View File

@ -12,7 +12,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Rack
@ -87,15 +87,15 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='dcim:rackreservation_list' %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="row" style="margin-bottom: 20px">
<div class="col-md-6 col-sm-6 col-xs-12 text-center">
<div class="col col-md-6 col-sm-6 col-xs-12 text-center">
<div style="margin-left: 30px">
<h4>Front</h4>
{% include 'dcim/inc/rack_elevation.html' with object=object.rack face='front' %}
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12 text-center">
<div class="col col-md-6 col-sm-6 col-xs-12 text-center">
<div style="margin-left: -30px">
<h4>Rear</h4>
{% include 'dcim/inc/rack_elevation.html' with object=object.rack face='rear' %}
@ -106,7 +106,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Rack Role
@ -41,13 +41,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Racks

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Rear Port
@ -49,7 +49,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Connection
@ -113,7 +113,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -12,7 +12,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Region
@ -49,7 +49,7 @@
{% include 'inc/custom_fields_panel.html' %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Child Regions
@ -69,7 +69,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Sites

View File

@ -16,7 +16,7 @@
{% block content %}
<div class="row">
<div class="col-md-7">
<div class="col col-md-7">
<div class="card">
<h5 class="card-header">
Site
@ -164,34 +164,34 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-5">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">
Stats
</h5>
<div class="card-body">
<div class="row">
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'dcim:rack_list' %}?site_id={{ object.pk }}" class="btn {% if stats.rack_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.rack_count }}</a></h2>
<p>Racks</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'dcim:device_list' %}?site_id={{ object.pk }}" class="btn {% if stats.device_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.device_count }}</a></h2>
<p>Devices</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'ipam:prefix_list' %}?site_id={{ object.pk }}" class="btn {% if stats.prefix_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.prefix_count }}</a></h2>
<p>Prefixes</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'ipam:vlan_list' %}?site_id={{ object.pk }}" class="btn {% if stats.vlan_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.vlan_count }}</a></h2>
<p>VLANs</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'circuits:circuit_list' %}?site_id={{ object.pk }}" class="btn {% if stats.circuit_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.circuit_count }}</a></h2>
<p>Circuits</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'virtualization:virtualmachine_list' %}?site_id={{ object.pk }}" class="btn {% if stats.vm_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.vm_count }}</a></h2>
<p>Virtual Machines</p>
</div>
@ -246,7 +246,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -12,7 +12,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Site Group
@ -49,7 +49,7 @@
{% include 'inc/custom_fields_panel.html' %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Child Groups
@ -69,7 +69,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Sites

View File

@ -22,7 +22,7 @@
{% block content %}
<div class="row">
<div class="col-md-4">
<div class="col col-md-4">
<div class="card">
<h5 class="card-header">
Virtual Chassis
@ -50,7 +50,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='dcim:virtualchassis_list' %}
{% plugin_left_page object %}
</div>
<div class="col-md-8">
<div class="col col-md-8">
<div class="card">
<h5 class="card-header">
Members
@ -87,7 +87,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -7,7 +7,7 @@
<form action="" method="post" enctype="multipart/form-data" class="form form-horizontal">
{% csrf_token %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">Add New Member</h5>
<div class="card-body">
@ -18,7 +18,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-6 text-end">
<div class="col col-md-6 text-end">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_addanother" class="btn btn-outline-primary">Add Another</button>
<button type="submit" name="_save" class="btn btn-primary">Save</button>

View File

@ -10,7 +10,7 @@
{{ pk_form.pk }}
{{ formset.management_form }}
<div class="row">
<div class="col-md-8">
<div class="col col-md-8">
<div class="card">
<h5 class="card-header">Virtual Chassis</h5>
<div class="card-body">
@ -91,7 +91,7 @@
</div>
</div>
<div class="row my-3">
<div class="col-md-8 col-md-offset-2 text-end">
<div class="col col-md-8 col col-md-offset-2 text-end">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
{% if vc_form.instance.pk %}
<button type="submit" name="_update" class="btn btn-primary">Update</button>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-5">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">
Config Context
@ -185,7 +185,7 @@
</div>
</div>
</div>
<div class="col-md-7">
<div class="col col-md-7">
<div class="card">
<div class="card-header">
<h5>Data</h5>

View File

@ -10,7 +10,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-4">
<div class="col col-md-4">
<div class="card">
<h5 class="card-header">
Journal Entry
@ -45,7 +45,7 @@
</div>
</div>
</div>
<div class="col-md-8">
<div class="col col-md-8">
<div class="card">
<h5 class="card-header">
Comments

View File

@ -6,7 +6,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Rendered Context
@ -17,7 +17,7 @@
</div>
</div>
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Local Context

View File

@ -8,7 +8,7 @@
{% block content %}
{% if perms.extras.add_journalentry %}
<form action="{% url 'extras:journalentry_add' %}" method="post" enctype="multipart/form-data">
<div class="col-md-9 col-md-offset-3">
<div class="col col-md-9">
<div class="field-group">
<h4>New Journal Entry</h4>
{% csrf_token %}
@ -18,14 +18,14 @@
{% render_field form.kind %}
{% render_field form.comments %}
</div>
<div class="col-md-12 col-md-offset-3 text-end my-3">
<div class="col col-md-12 text-end my-3">
<a href="{{ object.get_absolute_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" class="btn btn-primary">Save</button>
</div>
</div>
</form>
{% endif %}
<div class="col-md-9 col-md-offset-3 mb-3">
<div class="col col-md-9 mb-3">
{% include 'panel_table.html' %}
</div>
{% include 'inc/paginator.html' with paginator=table.paginator page=table.page %}

View File

@ -21,7 +21,7 @@
{% block header %}
<div class="row noprint">
<div class="col-sm-4 col-md-3">
<div class="col col-sm-4 col-md-3">
<form action="{% url 'extras:objectchange_list' %}" method="get">
<div class="input-group">
<input type="text" name="q" class="form-control" />
@ -38,7 +38,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-5">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">
Change
@ -89,7 +89,7 @@
</div>
</div>
</div>
<div class="col-md-7">
<div class="col col-md-7">
<div class="card">
<div class="card-header">
<h5 class="d-inline">Difference</h5>
@ -122,7 +122,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Pre-Change Data
@ -139,7 +139,7 @@
</div>
</div>
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Post-Change Data
@ -158,7 +158,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'panel_table.html' with table=related_changes_table heading='Related Changes' panel_class='default' %}
{% if related_changes_count > related_changes_table.rows|length %}
<div class="float-end">

View File

@ -32,7 +32,7 @@
</div>
{% endif %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% if report.result %}
Last run: <a href="{% url 'extras:report_result' job_result_pk=report.result.pk %}">
<strong>{{ report.result.created }}</strong>

View File

@ -5,7 +5,7 @@
{% block content %}
<div class="row">
<div class="col-md-9">
<div class="col col-md-9">
{% if reports %}
{% for module, module_reports in reports %}
<div class="card">
@ -85,7 +85,7 @@
</div>
{% endif %}
</div>
<div class="col-md-3">
<div class="col col-md-3">
{% if reports %}
<div class="card">
<div class="card-body">

View File

@ -11,7 +11,7 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<p>
Run: <strong>{{ result.created }}</strong>
{% if result.completed %}

View File

@ -29,7 +29,7 @@
<div class="tab-content py-3">
<div role="tabpanel" class="tab-pane active" id="run">
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
{% if not perms.extras.run_script %}
<div class="alert alert-warning">
<i class="mdi mdi-alert"></i>

View File

@ -5,7 +5,7 @@
{% block content %}
<div class="row">
<div class="col-md-9">
<div class="col col-md-9">
{% if scripts %}
{% for module, module_scripts in scripts.items %}
<h3><a name="module.{{ module }}"></a>{{ module|bettertitle }}</h3>
@ -49,7 +49,7 @@
</div>
{% endif %}
</div>
<div class="col-md-3">
<div class="col col-md-3">
{% if scripts %}
<div class="card">
<div class="card-body">

View File

@ -13,7 +13,7 @@
{% block content %}
<div class="row noprint">
<div class="col-md-12">
<div class="col col-md-12">
<nav class="breadcrumb-container" aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'extras:script_list' %}">Scripts</a></li>
@ -50,7 +50,7 @@
<div role="tabpanel" class="tab-pane active" id="log">
{% if result.completed %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Script Log
@ -87,7 +87,7 @@
</div>
{% else %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<div class="well">Pending Results</div>
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Tag
@ -50,13 +50,13 @@
</div>
</div>
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'panel_table.html' with table=items_table heading='Tagged Objects' %}
{% include 'inc/paginator.html' with paginator=items_table.paginator page=items_table.page %}
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'inc/paginator.html' with paginator=taggeditem_table.paginator page=taggeditem_table.page %}
</div>
</div>

View File

@ -14,12 +14,12 @@
{{ field }}
{% endfor %}
<div class="row">
<div class="col-md-7">
<div class="col col-md-7">
<div class="card">
{% include 'inc/table.html' %}
</div>
</div>
<div class="col-md-5">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">{{ model_name|title }} to Add</h5>
<div class="card-body">
@ -29,7 +29,7 @@
</div>
</div>
<div class="form-group text-end">
<div class="col-md-12">
<div class="col col-md-12">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_create" class="btn btn-primary">Create</button>
</div>

View File

@ -5,7 +5,7 @@
{% block content %}
<div class="row">
<div class="col-md-8">
<div class="col col-md-8">
<div class="alert alert-danger mb-3" role="alert">
<h4 class="alert-heading">Confirm Bulk Deletion</h4>
<hr />
@ -17,7 +17,7 @@
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="col col-md-8">
<div class="card">
<div class="card-body">
{% include 'inc/table.html' %}
@ -26,7 +26,7 @@
</div>
</div>
<div class="row mt-3">
<div class="col-md-8">
<div class="col col-md-8">
<form action="" method="post">
{% csrf_token %}
{% for field in form.hidden_fields %}

View File

@ -14,14 +14,14 @@
{{ field }}
{% endfor %}
<div class="row mb-3">
<div class="col-md-8">
<div class="col col-md-8">
<div class="card">
<div class="card-body">
{% include 'inc/table.html' %}
</div>
</div>
</div>
<div class="col-md-4">
<div class="col col-md-4">
<div class="card">
<h5 class="card-header">{% block form_title %}Attributes{% endblock %}</h5>
<div class="card-body">

View File

@ -6,7 +6,7 @@
{% block content %}
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="col col-md-8 offset-md-2">
<ul class="nav nav-tabs mb-3" role="tablist">
<li class="nav-item" role="presentation">
<a href="#csv" class="nav-link active" role="tab" data-bs-toggle="tab">CSV</a>
@ -18,7 +18,7 @@
{% csrf_token %}
{% render_form form %}
<div class="form-group">
<div class="col-md-12 text-end">
<div class="col col-md-12 text-end">
{% if return_url %}
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
{% endif %}
@ -28,7 +28,7 @@
</form>
{% if fields %}
<div class="row my-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
CSV Field Options

View File

@ -5,7 +5,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6 offset-md-3">
<div class="col col-md-6 offset-md-3">
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading">Confirm Bulk Removal</h4>
<p><strong>Warning:</strong> The following operation will remove {{ table.rows|length }} {{ obj_type_plural }} from {{ parent_obj }}.</p>
@ -15,7 +15,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<div class="card-body">
{% include 'inc/table.html' %}
@ -24,7 +24,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-6 offset-md-3">
<div class="col col-md-6 offset-md-3">
<form action="." method="post" class="form">
{% csrf_token %}
{% for field in form.hidden_fields %}

View File

@ -6,7 +6,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-7">
<div class="col col-md-7">
<div class="card">
<div class="card-body">
<table class="table">
@ -28,7 +28,7 @@
</div>
</div>
</div>
<div class="col-md-5">
<div class="col col-md-5">
<form action="" method="post" class="form form-horizontal">
{% csrf_token %}
<div class="card">
@ -37,7 +37,7 @@
{% render_form form %}
</div>
</div>
<div class="col-md-12 my-3 text-end">
<div class="col col-md-12 my-3 text-end">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_preview" class="btn btn-primary">Preview</button>
{% if '_preview' in request.POST and not form.errors %}

View File

@ -15,7 +15,7 @@
{% csrf_token %}
{% for field in form.hidden_fields %}{{ field }}{% endfor %}
<div class="row">
<div class="col-md-8 col-md-offset-3">
<div class="col col-md-8">
{% block tabs %}{% endblock %}
{% block form %}
{% if form.Meta.fieldsets %}
@ -51,7 +51,7 @@
</div>
</div>
<div class="row my-3">
<div class="col-md-8 col-md-offset-3 text-end">
<div class="col col-md-8 text-end">
{% block buttons %}
<a class="btn btn-outline-danger" href="{{ return_url }}">Cancel</a>
{% if obj.pk %}

View File

@ -6,12 +6,12 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-8 col-md-offset-2">
<div class="col col-md-8">
<form action="" method="post" class="form form-horizontal">
{% csrf_token %}
{% render_form form %}
<div class="form-group">
<div class="col-md-12 text-end">
<div class="col col-md-12 text-end">
{% if return_url %}
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
{% endif %}

View File

@ -56,17 +56,19 @@
{% endwith %}
{% endif %}
<div class="row mb-3">
<div class="{% if filter_form %}col-9{% else %}col-12{% endif %}">
<div class="col{% if filter_form %} col-md-9{% else %} col-md-12{% endif %}">
<div class="card">
<div class="card-header">
<div class="float-end col-md-2 noprint table-controls">
<div class="input-group input-group-sm">
<input type="text" class="form-control object-filter" placeholder="Filter" title="Filter text (regular expressions supported)" />
{% if request.user.is_authenticated and table_config_form %}
<button type="button" class="btn btn-outline-dark btn-sm" data-bs-toggle="modal" data-bs-target="#ObjectTable_config" title="Configure Table">
<i class="mdi mdi-table-eye"></i>
</button>
{% endif %}
<div class="row">
<div class="col col-md-2 offset-md-10 noprint table-controls">
<div class="input-group input-group-sm">
<input type="text" class="form-control object-filter" placeholder="Filter" title="Filter text (regular expressions supported)" />
{% if request.user.is_authenticated and table_config_form %}
<button type="button" class="btn btn-outline-dark btn-sm" data-bs-toggle="modal" data-bs-target="#ObjectTable_config" title="Configure Table">
<i class="mdi mdi-table-eye"></i>
</button>
{% endif %}
</div>
</div>
</div>
</div>
@ -102,7 +104,7 @@
</div>
</div>
{% if filter_form %}
<div class="col-3 noprint">
<div class="col col-md-3 noprint">
{% block sidebar %}{% endblock %}
{% include 'inc/search_panel.html' %}
</div>

View File

@ -1,33 +1,27 @@
{% extends 'layout.html' %}
{% load helpers %}
{% block title_container %}{% endblock %}
{% block content %}
<div class="stats-container">
<div class="row row-cols-auto masonry">
<div class="row masonry">
{% for section in stats %}
<div class="col col-4 my-2 masonry-item">
<div class="col col-sm-12 col-md-4 my-2 masonry-item">
<div class="card">
<h5 class="card-header text-primary">{{ section.label }}</h5>
<div class="card-body">
<div class="list-group list-group-flush">
{% for item in section.items %}
<a
href="{% url item.url %}"
class="list-group-item list-group-item-action"
>
<div
class="d-flex w-100 justify-content-between align-items-center"
>
<a href="{% url item.url %}" class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between align-items-center">
<div class="d-flex flex-column align-items-start">
<h6 class="mb-1">{{ item.label }}</h6>
{% if item.description %}
<small class="mb-1 text-muted">{{ item.description }}</small>
{% endif %}
</div>
<span class="badge bg-secondary rounded-pill"
>{{ item.count }}</span
>
<span class="badge bg-secondary rounded-pill">{{ item.count }}</span>
</div>
</a>
{% endfor %}

View File

@ -15,7 +15,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Aggregate
@ -64,19 +64,19 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='ipam:aggregate_list' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'utilities/obj_table.html' with table=prefix_table table_template='panel_table.html' heading='Child Prefixes' bulk_edit_url='ipam:prefix_bulk_edit' bulk_delete_url='ipam:prefix_bulk_delete' %}
</div>
</div>

View File

@ -13,7 +13,7 @@
{% block content %}
<div class="row">
<div class="col-md-4">
<div class="col col-md-4">
<div class="card">
<h5 class="card-header">
IP Address
@ -113,7 +113,7 @@
{% plugin_left_page object %}
</div>
<div class="col-md-8">
<div class="col col-md-8">
{% include 'panel_table.html' with table=parent_prefixes_table heading='Parent Prefixes' %}
{% if duplicate_ips_table.rows %}
{# Custom version of panel_table.html #}
@ -145,14 +145,14 @@
</div>
<div class="row my-3">
<div class="col-md-4">
<div class="col col-md-4">
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='ipam:ipaddress_list' %}
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -12,7 +12,7 @@
{{ field }}
{% endfor %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
{% include 'ipam/inc/ipadress_edit_header.html' with active_tab='assign' %}
<div class="card">
<h5 class="card-header">Select IP Address</h5>
@ -24,7 +24,7 @@
</div>
</div>
<div class="row mb-3">
<div class="col-md-6 text-end">
<div class="col col-md-6 text-end">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" class="btn btn-primary">Search</button>
</div>
@ -32,7 +32,7 @@
</form>
{% if table %}
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<h3>Search Results</h3>
{% include 'utilities/obj_table.html' with table_template='panel_table.html' %}
</div>

View File

@ -4,7 +4,7 @@
{% block content %}
<div class="row">
<div class="col-md-5">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">
Prefix
@ -109,7 +109,7 @@
{% include 'inc/custom_fields_panel.html' %}
{% plugin_left_page object %}
</div>
<div class="col-md-7">
<div class="col col-md-7">
{% if duplicate_prefix_table.rows %}
{% include 'panel_table.html' with table=duplicate_prefix_table heading='Duplicate Prefixes' %}
{% endif %}
@ -118,12 +118,12 @@
</div>
</div>
<div class="row my-3">
<div class="col-md-5">
<div class="col col-md-5">
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='ipam:prefix_list' %}
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -11,7 +11,7 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'utilities/obj_table.html' with table=ip_table table_template='panel_table.html' heading='IP Addresses' bulk_edit_url='ipam:ipaddress_bulk_edit' bulk_delete_url='ipam:ipaddress_bulk_delete' %}
</div>
</div>

View File

@ -18,7 +18,7 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'utilities/obj_table.html' with table=prefix_table table_template='panel_table.html' heading='Child Prefixes' bulk_edit_url='ipam:prefix_bulk_edit' bulk_delete_url='ipam:prefix_bulk_delete' parent=prefix %}
</div>
</div>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
RIR
@ -45,13 +45,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Aggregates

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Role
@ -39,13 +39,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Prefixes

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Route Target
@ -40,7 +40,7 @@
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="mb-4">
{% include 'panel_table.html' with table=importing_vrfs_table heading="Importing VRFs" %}
</div>
@ -49,15 +49,15 @@
</div>
</div>
<div class="row my-3">
<div class="col-md-6">
<div class="col col-md-6">
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='ipam:routetarget_list' %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -27,7 +27,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Service
@ -73,12 +73,12 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='ipam:service_list' %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -4,7 +4,7 @@
{% block content %}
<div class="row">
<div class="col-md-4">
<div class="col col-md-4">
<div class="card">
<h5 class="card-header">
VLAN
@ -81,7 +81,7 @@
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='ipam:vlan_list' %}
{% plugin_left_page object %}
</div>
<div class="col-md-8">
<div class="col col-md-8">
<div class="card">
<h5 class="card-header">
Prefixes
@ -102,7 +102,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -2,7 +2,7 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'utilities/obj_table.html' with table=members_table table_template='panel_table.html' heading='Device Interfaces' parent=vlan %}
</div>
</div>

View File

@ -2,7 +2,7 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% include 'utilities/obj_table.html' with table=members_table table_template='panel_table.html' heading='Virtual Machine Interfaces' parent=vlan %}
</div>
</div>

View File

@ -12,7 +12,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
VLAN Group
@ -47,13 +47,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
VLANs

View File

@ -12,7 +12,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
VRF
@ -65,14 +65,14 @@
{% include 'inc/custom_fields_panel.html' %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'panel_table.html' with table=import_targets_table heading="Import Route Targets" %}
{% include 'panel_table.html' with table=export_targets_table heading="Export Route Targets" %}
{% plugin_right_page object %}
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -2,43 +2,54 @@
{% load search_options %}
{% block head %}{% endblock %}
{% block layout %}
<div class="container-fluid">
<div class="row">
<nav
id="sidebar-menu"
class="col-md-3 col-lg-2 d-md-block sidebar collapse px-0"
>
<div class="position-sticky pt-3">
<a class="px-2 sidebar-logo" href="{% url 'home' %}">
{% load static %}
{% include 'logo.html' %}
</a>
<ul class="nav flex-column">
{% load nav %} {% nav %}
</ul>
</div>
{% include './bottom.html' %}
</nav>
<main class="col-md-9 ms-sm-auto col-lg-10 px-0">
<nav id="sidebar-menu" class="col-md-3 col-lg-2 d-md-block sidebar collapse px-0">
<div class="position-sticky pt-3">
<a class="px-2 sidebar-logo d-none d-md-flex" href="{% url 'home' %}">
{% load static %}
{% include 'logo.html' %}
</a>
<ul class="nav flex-column">
<div class="d-block d-md-none mx-1 my-3">
{% search_options %}
</div>
<div class="d-flex d-md-none mx-1 my-3 justify-content-end">
{% include './profile_button.html' %}
</div>
{% load nav %} {% nav %}
</ul>
</div>
{% include './bottom.html' %}
</nav>
<nav class="navbar navbar-light sticky-top flex-md-nowrap py-4 search container-fluid">
<button
type="button"
aria-expanded="false"
data-bs-toggle="collapse"
aria-controls="sidebarMenu"
data-bs-target="#sidebarMenu"
aria-label="Toggle navigation"
class="navbar-toggler position-absolute d-md-none collapsed"
>
<span class="navbar-toggler-icon"></span>
</button>
{% search_options %} {% include './profile_button.html' %}
<div class="d-md-none w-100 d-flex justify-content-between align-items-center my-3">
<a class="px-2 sidebar-logo d-block d-md-none" href="{% url 'home' %}">
{% include 'logo.html' %}
</a>
<button
type="button"
aria-expanded="false"
data-bs-toggle="collapse"
aria-controls="sidebar-menu"
data-bs-target="#sidebar-menu"
aria-label="Toggle Navigation"
class="navbar-toggler position-relative collapsed"
>
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="d-none d-md-flex w-100">
{% search_options %}
{% include './profile_button.html' %}
</div>
</nav>
<div class="px-4">
<div class="px-4 content-container">
{% block title_container %}
<div class="title-container">
<div id="content-title">

View File

@ -1,10 +1,10 @@
{% if request.user.is_authenticated %}
<div class="dropdown">
<span class="dropdown ms-0 ms-md-3">
<button
type="button"
aria-expanded="false"
data-bs-toggle="dropdown"
class="btn btn-outline-secondary dropdown-toggle ms-4"
class="btn btn-outline-secondary dropdown-toggle"
>
<i class="mdi mdi-account"></i>
<span id="navbar_user">{{ request.user|truncatechars:"30" }}</span>
@ -35,7 +35,7 @@
</a>
</li>
</ul>
</div>
</span>
{% else %}
<div>
<a

View File

@ -8,7 +8,7 @@
{% if request.GET.q %}
{% if results %}
<div class="row">
<div class="col-md-9">
<div class="col col-md-9">
{% for obj_type in results %}
<h3 id="{{ obj_type.name|lower }}">{{ obj_type.name|bettertitle }}</h3>
{% include 'panel_table.html' with table=obj_type.table %}
@ -22,7 +22,7 @@
</a>
{% endfor %}
</div>
<div class="col-md-3">
<div class="col col-md-3">
<h3 class="invisible">&nbsp;</h3>
<div class="card">
<h5 class="card-header">
@ -46,7 +46,7 @@
{% endif %}
{% else %}
<div class="row">
<div class="col-sm-4 col-sm-offset-4">
<div class="col-4 offset-4">
<form action="{% url 'search' %}" method="get" class="form form-horizontal">
<div class="card">
<h5 class="card-header">

View File

@ -1,5 +1,5 @@
<div class="row" style="padding-bottom: 20px">
<div class="col-md-12 text-center">
<div class="col col-md-12 text-center">
<form action="{% url 'search' %}" method="get" class="form-inline">
<input type="text" name="q" value="{{ request.GET.q }}" placeholder="Search" id="id_q" class="form-control" style="width: 350px" />
{{ search_form.obj_type }}

View File

@ -13,7 +13,7 @@
{% block content %}
<div class="row">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Secret Attributes
@ -42,7 +42,7 @@
{% include 'inc/custom_fields_panel.html' %}
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Secret Data
@ -52,9 +52,9 @@
{% csrf_token %}
</form>
<div class="row">
<div class="col-md-2">Secret</div>
<div class="col-md-6"><code id="secret_{{ object.pk }}">********</code></div>
<div class="col-md-4 text-end noprint">
<div class="col col-md-2">Secret</div>
<div class="col col-md-6"><code id="secret_{{ object.pk }}">********</code></div>
<div class="col col-md-4 text-end noprint">
<button class="btn btn-sm btn-success unlock-secret" secret-id="{{ object.pk }}">
<i class="mdi mdi-lock"></i> Unlock
</button>
@ -73,7 +73,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -61,7 +61,7 @@
<input class="form-control" value="********" id="secret_{{ obj.pk }}" />
<label class="required">Current Plain Text</label>
</div>
<div class="col-md-2 text-end">
<div class="col col-md-2 text-end">
<button class="btn btn-sm btn-success unlock-secret" data-secret-id="{{ obj.pk }}">
<i class="mdi mdi-lock"></i> Unlock
</button>

View File

@ -9,7 +9,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Secret Role
@ -35,13 +35,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Secrets

View File

@ -12,7 +12,7 @@
{% block content %}
<div class="row">
<div class="col-md-7">
<div class="col col-md-7">
<div class="card">
<h5 class="card-header">
Tenant
@ -52,53 +52,53 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-5">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">
Stats
</h5>
<div class="row card-body">
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'dcim:site_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.site_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.site_count }}</a></h2>
<p>Sites</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'dcim:rack_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.rack_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.rack_count }}</a></h2>
<p>Racks</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'dcim:rackreservation_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.rackreservation_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.rackreservation_count }}</a></h2>
<p>Rack reservations</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'dcim:device_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.device_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.device_count }}</a></h2>
<p>Devices</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'ipam:vrf_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.vrf_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.vrf_count }}</a></h2>
<p>VRFs</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'ipam:prefix_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.prefix_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.prefix_count }}</a></h2>
<p>Prefixes</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'ipam:ipaddress_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.ipaddress_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.ipaddress_count }}</a></h2>
<p>IP addresses</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'ipam:vlan_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.vlan_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.vlan_count }}</a></h2>
<p>VLANs</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'circuits:circuit_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.circuit_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.circuit_count }}</a></h2>
<p>Circuits</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'virtualization:virtualmachine_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.virtualmachine_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.virtualmachine_count }}</a></h2>
<p>Virtual machines</p>
</div>
<div class="col-md-4 text-center">
<div class="col col-md-4 text-center">
<h2><a href="{% url 'virtualization:cluster_list' %}?tenant_id={{ object.pk }}" class="stat-btn btn {% if stats.cluster_count %}btn-primary{% else %}btn-outline-dark{% endif %} btn-lg">{{ stats.cluster_count }}</a></h2>
<p>Clusters</p>
</div>
@ -108,7 +108,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -12,7 +12,7 @@
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Tenant Group
@ -48,13 +48,13 @@
</div>
{% plugin_left_page object %}
</div>
<div class="col-md-6">
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<div class="card-header">
Tenants

View File

@ -5,7 +5,7 @@
{% block usercontent %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% for token in tokens %}
<div class="card{% if token.is_expired %} bg-danger{% endif %}">
<div class="card-header">
@ -22,11 +22,11 @@
</div>
<div class="card-body">
<div class="row">
<div class="col-md-4">
<div class="col col-md-4">
<small class="text-muted">Created</small><br />
<span title="{{ token.created }}">{{ token.created|date }}</span>
</div>
<div class="col-md-4">
<div class="col col-md-4">
<small class="text-muted">Expires</small><br />
{% if token.expires %}
<span title="{{ token.expires }}">{{ token.expires|date }}</span>
@ -34,7 +34,7 @@
<span>Never</span>
{% endif %}
</div>
<div class="col-md-4">
<div class="col col-md-4">
<small class="text-muted">Create/Edit/Delete Operations</small><br />
{% if token.write_enabled %}
<span class="badge bg-success">Enabled</span>

View File

@ -3,7 +3,7 @@
{% block content %}
<div class="row mt-5">
<div class="col-md-6 offset-md-3">
<div class="col col-md-6 offset-md-3">
<form action="" method="post" class="form">
{% csrf_token %}
{% for field in form.hidden_fields %}

View File

@ -84,10 +84,10 @@
</div>
{% elif field|widget_type == 'selectmultiple' %}
<div class="row">
<label for="{{ field.id_for_label }}" class="form-label col-md-3{% if field.field.required %} required{% endif %}">
<label for="{{ field.id_for_label }}" class="form-label col col-md-3{% if field.field.required %} required{% endif %}">
{{ field.label }}
</label>
<div class="col-md-9">
<div class="col col-md-9">
{{ field }}
</div>
</div>

View File

@ -10,14 +10,14 @@
<div class="modal-body">
{% render_field table_config_form.available_columns %}
<div class="row my-3">
<div class="col-md-9 offset-md-3">
<div class="col col-md-9 offset-md-3">
<a class="btn btn-success btn-sm" id="add_columns"><i class="mdi mdi-arrow-down-bold"></i> Add Columns</a>
<a class="btn btn-danger btn-sm" id="remove_columns"><i class="mdi mdi-arrow-up-bold"></i> Remove Columns</a>
</div>
</div>
{% render_field table_config_form.columns %}
<div class="row my-3">
<div class="col-md-9 offset-md-3">
<div class="col col-md-9 offset-md-3">
<a class="btn btn-primary btn-sm" id="move-option-up" data-target="id_columns">
<i class="mdi mdi-arrow-up-bold"></i> Move Up
</a>

View File

@ -4,7 +4,7 @@
{% block content %}
<div class="row">
<div class="col-md-5">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">
Cluster
@ -74,7 +74,7 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>

View File

@ -3,7 +3,7 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Host Devices

View File

@ -3,7 +3,7 @@
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Virtual Machines

View File

@ -13,7 +13,7 @@
{{ field }}
{% endfor %}
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="col col-md-6 offset-md-3">
<div class="field-group">
<h4>Device Selection</h4>
{% render_form form %}
@ -21,7 +21,7 @@
</div>
</div>
<div class="row">
<div class="col-md-6 col-md-offset-3 text-end noprint">
<div class="col col-md-6 offset-md-3 text-end noprint">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_add" class="btn btn-primary">Add Devices</button>
</div>

Some files were not shown because too many files have changed in this diff Show More