Add basic support for smaller screens

This commit is contained in:
checktheroads 2021-04-30 15:55:37 -07:00
parent 58e1a1f1d8
commit 460a203c29
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

@ -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=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