migrate templates to bootstrap 5

This commit is contained in:
checktheroads 2021-04-18 16:42:28 -07:00
parent 4b0d5815c0
commit f7c1bc71d9
39 changed files with 462 additions and 473 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -410,3 +410,29 @@ table th {
margin-top: 2rem;
text-align: center;
}
pre.change-data {
padding-left: 0;
padding-right: 0;
& > span {
display: block;
padding-left: $spacer;
padding-right: $spacer;
&.added {
background-color: rgba($green, 0.4);
}
&.removed {
background-color: rgba($red, 0.4);
}
}
}
pre.change-diff {
border-color: transparent;
&.change-removed {
background-color: rgba($red, 0.4);
}
&.change-added {
background-color: rgba($green, 0.4);
}
}

View File

@ -4,23 +4,19 @@
<head>
<title>Server Error</title>
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'materialdesignicons-5.4.55/css/materialdesignicons.min.css' %}">
<link rel="stylesheet" href="{% static 'netbox.css'%}" />
<meta charset="UTF-8">
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="panel panel-danger" style="margin-top: 200px">
<div class="panel-heading">
<strong>
<i class="mdi mdi-alert"></i>
Server Error
</strong>
</div>
<div class="panel-body">
<div class="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
</h5>
<div class="card-body">
{% block message %}
<p>
There was a problem with your request. Please contact an administrator.
@ -38,7 +34,7 @@ NetBox version: {{ netbox_version }}</pre>
<p>
If further assistance is required, please post to the <a href="https://groups.google.com/g/netbox-discuss">NetBox mailing list</a>.
</p>
<div class="text-right">
<div class="text-end">
<a href="{% url 'home' %}" class="btn btn-primary">Home Page</a>
</div>
</div>

View File

@ -3,9 +3,8 @@
{% load plugins %}
{% block breadcrumbs %}
{{ block.super }}
<li><a href="{% url 'dcim:device_consoleports' pk=object.device.pk %}">Console Ports</a></li>
<li>{{ object }}</li>
<li class="breadcrumb-item"><a href="{% url 'dcim:device_consoleports' pk=object.device.pk %}">Console Ports</a></li>
<li class="breadcrumb-item">{{ object }}</li>
{% endblock %}
{% block content %}
@ -64,7 +63,7 @@
<th scope="row">Cable</th>
<td>
<a href="{{ object.cable.get_absolute_url }}">{{ object.cable }}</a>
<a href="{% url 'dcim:consoleport_trace' pk=object.pk %}" class="btn btn-primary btn-xs" title="Trace">
<a href="{% url 'dcim:consoleport_trace' pk=object.pk %}" class="btn btn-primary btn-sm lh-1" title="Trace">
<i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
</a>
</td>
@ -94,9 +93,9 @@
<th scope="row">Path Status</th>
<td>
{% if object.path.is_active %}
<span class="label label-success">Reachable</span>
<span class="badge bg-success">Reachable</span>
{% else %}
<span class="label label-danger">Not Reachable</span>
<span class="badge bg-danger">Not Reachable</span>
{% endif %}
</td>
</tr>
@ -106,11 +105,11 @@
<div class="text-muted">
Not Connected
{% if perms.dcim.add_cable %}
<div class="dropdown">
<div class="dropdown float-end">
<button type="button" class="btn btn-primary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
<span class="mdi mdi-ethernet-cable" aria-hidden="true"></span> Connect
</button>
<ul class="dropdown-menu dropdown-menu-right">
<ul class="dropdown-menu dropdown-menu-end">
<li>
<a
class="dropdown-item"

View File

@ -3,9 +3,8 @@
{% load plugins %}
{% block breadcrumbs %}
{{ block.super }}
<li><a href="{% url 'dcim:device_consoleserverports' pk=object.device.pk %}">Console Server Ports</a></li>
<li>{{ object }}</li>
<li class="breadcrumb-item"><a href="{% url 'dcim:device_consoleserverports' pk=object.device.pk %}">Console Server Ports</a></li>
<li class="breadcrumb-item">{{ object }}</li>
{% endblock %}
{% block content %}
@ -64,7 +63,7 @@
<th scope="row">Cable</th>
<td>
<a href="{{ object.cable.get_absolute_url }}">{{ object.cable }}</a>
<a href="{% url 'dcim:consoleserverport_trace' pk=object.pk %}" class="btn btn-primary btn-xs" title="Trace">
<a href="{% url 'dcim:consoleserverport_trace' pk=object.pk %}" class="btn btn-primary btn-sm lh-1" title="Trace">
<i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
</a>
</td>

View File

@ -8,10 +8,10 @@
{% csrf_token %}
<div class="card">
<div class="card-header">
<h5>Console Ports</h5>
<h5 class="d-inline">Console Ports</h5>
<div class="float-end noprint">
{% if request.user.is_authenticated %}
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#DeviceConsolePortTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
<button type="button" class="btn btn-outline-dark btn-sm" data-bs-toggle="modal" data-bs-target="#DeviceConsolePortTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
{% endif %}
</div>
</div>

View File

@ -8,10 +8,10 @@
{% csrf_token %}
<div class="card">
<div class="card-header">
<h5>Console Server Ports</h5>
<h5 class="d-inline">Console Server Ports</h5>
<div class="float-end noprint">
{% if request.user.is_authenticated %}
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#DeviceConsoleServerPortTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
<button type="button" class="btn btn-outline-dark btn-sm" data-bs-toggle="modal" data-bs-target="#DeviceConsoleServerPortTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
{% endif %}
</div>
</div>

View File

@ -8,10 +8,10 @@
{% csrf_token %}
<div class="card">
<div class="card-header">
<h5>Device Bays</h5>
<h5 class="d-inline">Device Bays</h5>
<div class="float-end noprint">
{% if request.user.is_authenticated %}
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#DeviceDeviceBayTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
<button type="button" class="btn btn-outline-dark btn-sm" data-bs-toggle="modal" data-bs-target="#DeviceDeviceBayTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
{% endif %}
</div>
</div>

View File

@ -8,10 +8,10 @@
{% csrf_token %}
<div class="card">
<div class="card-header">
<h5>Inventory Items</h5>
<h5 class="d-inline">Inventory Items</h5>
<div class="float-end noprint">
{% if request.user.is_authenticated %}
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#DeviceInventoryItemTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
<button type="button" class="btn btn-outline-dark btn-sm" data-bs-toggle="modal" data-bs-target="#DeviceInventoryItemTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
{% endif %}
</div>
</div>

View File

@ -8,10 +8,10 @@
{% csrf_token %}
<div class="card">
<div class="card-header">
<h5>Power Outlets</h5>
<div class="float-right noprint">
<h5 class="d-inline">Power Outlets</h5>
<div class="float-end noprint">
{% if request.user.is_authenticated %}
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#DevicePowerOutletTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
<button type="button" class="btn btn-outline-dark btn-sm" data-bs-toggle="modal" data-bs-target="#DevicePowerOutletTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
{% endif %}
</div>
</div>
@ -38,7 +38,7 @@
{% if perms.dcim.add_poweroutlet %}
<div class="float-end">
<a href="{% url 'dcim:poweroutlet_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-primary btn-sm">
<i class="bi bi-plus" aria-hidden="true"></i> Add power outlets
<i class="bi bi-plus" aria-hidden="true"></i> Add Power Outlets
</a>
</div>
{% endif %}

View File

@ -8,10 +8,10 @@
{% csrf_token %}
<div class="card">
<div class="card-header">
<h5>Power Ports</h5>
<h5 class="d-inline">Power Ports</h5>
<div class="float-end noprint">
{% if request.user.is_authenticated %}
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#DevicePowerPortTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
<button type="button" class="btn btn-outline-dark btn-sm" data-bs-toggle="modal" data-bs-target="#DevicePowerPortTable_config" title="Configure table"><i class="mdi mdi-cog"></i> Configure</button>
{% endif %}
</div>
</div>

View File

@ -26,7 +26,7 @@
{% render_field form.rack %}
{% if obj.device_type.is_child_device and obj.parent_bay %}
<div class="form-group">
<label class="col-md-3 control-label">Parent device</label>
<label class="col-md-3 control-label">Parent Device</label>
<div class="col-md-9">
<p class="form-control-static">
<a href="{% url 'dcim:device' pk=obj.parent_bay.device.pk %}">{{ obj.parent_bay.device }}</a>
@ -34,12 +34,12 @@
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">Parent bay</label>
<label class="col-md-3 control-label">Parent Bay</label>
<div class="col-md-9">
<p class="form-control-static">
{{ obj.parent_bay.name }}
{% if perms.dcim.change_devicebay %}
<a href="{% url 'dcim:devicebay_depopulate' pk=obj.parent_bay.pk %}" class="btn btn-danger btn-xs">
<a href="{% url 'dcim:devicebay_depopulate' pk=obj.parent_bay.pk %}" class="btn btn-danger btn-sm">
<i class="mdi mdi-close-thick" aria-hidden="true" title="Remove device"></i> Remove
</a>
{% endif %}

View File

@ -37,17 +37,17 @@
{% if not obj.untagged_vlan and not tagged_vlans %}
<tr>
<td colspan="4" class="text-muted text-center">
No VLANs assigned
No VLANs Assigned
</td>
</tr>
{% else %}
<tr>
<td colspan="2"></td>
<td>
<a href="#" id="clear_untagged_vlan" class="btn btn-warning btn-xs">Clear</a>
<a href="#" id="clear_untagged_vlan" class="btn btn-outline-warning btn-sm">Clear</a>
</td>
<td>
<a href="#" id="clear_tagged_vlans" class="btn btn-warning btn-xs">Clear All</a>
<a href="#" id="clear_tagged_vlans" class="btn btn-warning btn-sm">Clear All</a>
</td>
</tr>
{% endif %}

View File

@ -129,7 +129,7 @@
<th scope="row">Cable</th>
<td>
<a href="{{ object.cable.get_absolute_url }}">{{ object.cable }}</a>
<a href="{% url 'dcim:powerfeed_trace' pk=object.pk %}" class="btn btn-primary btn-xs" title="Trace">
<a href="{% url 'dcim:powerfeed_trace' pk=object.pk %}" class="btn btn-primary btn-sm lh-1" title="Trace">
<i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
</a>
</td>

View File

@ -281,12 +281,12 @@
</td>
<td class="text-end noprint">
{% if perms.dcim.change_rackreservation %}
<a href="{% url 'dcim:rackreservation_edit' pk=resv.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-warning btn-xs" title="Edit reservation">
<a href="{% url 'dcim:rackreservation_edit' pk=resv.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-warning btn-sm" title="Edit Reservation">
<i class="mdi mdi-pencil" aria-hidden="true"></i>
</a>
{% endif %}
{% if perms.dcim.delete_rackreservation %}
<a href="{% url 'dcim:rackreservation_delete' pk=resv.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-danger btn-sm" title="Delete reservation">
<a href="{% url 'dcim:rackreservation_delete' pk=resv.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-danger btn-sm" title="Delete Reservation">
<i class="mdi mdi-trash-can-outline" aria-hidden="true"></i>
</a>
{% endif %}

View File

@ -1,25 +1,31 @@
{% extends 'base.html' %}
{% extends 'layout.html' %}
{% load helpers %}
{% load static %}
{% block content %}
<div class="btn-toolbar pull-right noprint" role="toolbar">
<button class="btn btn-default toggle-images" selected="selected">
{% block title %}Rack Elevations{% endblock %}
{% block controls %}
<div class="container mb-2 mx-0">
<div class="d-flex flex-wrap justify-content-end">
<button class="btn btn-sm btn-outline-dark toggle-images m-1" selected="selected">
<span class="mdi mdi mdi-checkbox-marked-circle-outline" aria-hidden="true"></span> Show Images
</button>
<div class="btn-group" role="group">
<a href="{% url 'dcim:rack_elevation_list' %}{% querystring request face='front' %}" class="btn btn-default{% if rack_face == 'front' %} active{% endif %}">Front</a>
<a href="{% url 'dcim:rack_elevation_list' %}{% querystring request face='rear' %}" class="btn btn-default{% if rack_face == 'rear' %} active{% endif %}">Rear</a>
<div class="btn-group btn-group-sm m-1" role="group">
<a href="{% url 'dcim:rack_elevation_list' %}{% querystring request face='front' %}" class="btn btn-outline-secondary{% if rack_face == 'front' %} active{% endif %}">Front</a>
<a href="{% url 'dcim:rack_elevation_list' %}{% querystring request face='rear' %}" class="btn btn-outline-secondary{% if rack_face == 'rear' %} active{% endif %}">Rear</a>
</div>
<div class="btn-group btn-group-sm m-1" role="group">
<a href="{% url 'dcim:rack_elevation_list' %}{% querystring request reverse=None %}" class="btn btn-outline-secondary{% if not reverse %} active{% endif %}">Normal</a>
<a href="{% url 'dcim:rack_elevation_list' %}{% querystring request reverse='true' %}" class="btn btn-outline-secondary{% if reverse %} active{% endif %}">Reversed</a>
</div>
<div class="btn-group" role="group">
<a href="{% url 'dcim:rack_elevation_list' %}{% querystring request reverse=None %}" class="btn btn-default{% if not reverse %} active{% endif %}">Normal</a>
<a href="{% url 'dcim:rack_elevation_list' %}{% querystring request reverse='true' %}" class="btn btn-default{% if reverse %} active{% endif %}">Reversed</a>
</div>
</div>
<h1>{% block title %}Rack Elevations{% endblock %}</h1>
{% endblock %}
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="col-md-3 pull-right right-side-panel noprint">
<div class="col-md-3 float-end right-side-panel noprint">
{% include 'inc/search_panel.html' %}
</div>
{% if page %}
@ -30,7 +36,7 @@
<div class="text-center">
<strong><a href="{% url 'dcim:rack' pk=rack.pk %}">{{ rack.name }}</a></strong>
{% if rack.role %}
<br /><small class="label" style="color: {{ rack.role.color|fgcolor }}; background-color: #{{ rack.role.color }}">{{ rack.role }}</small>
<br /><span class="badge my-3" style="color: {{ rack.role.color|fgcolor }}; background-color: #{{ rack.role.color }}">{{ rack.role }}</span>
{% endif %}
{% if rack.facility_id %}
<br /><small class="text-muted">{{ rack.facility_id }}</small>
@ -51,12 +57,8 @@
<br />
{% include 'inc/paginator.html' %}
{% else %}
<p>No racks found</p>
<p>No Racks Found</p>
{% endif %}
</div>
</div>
{% endblock %}
{% block javascript %}
<script src="{% static 'js/rack_elevations.js' %}?v{{ settings.VERSION }}"></script>
{% endblock %}

View File

@ -91,7 +91,7 @@
<th scope="row">Physical Address</th>
<td>
{% if object.physical_address %}
<div class="pull-right noprint">
<div class="float-end noprint">
<a href="{{ settings.MAPS_URL }}{{ object.latitude }},{{ object.longitude }}" target="_blank" class="btn btn-primary btn-sm">
<i class="mdi mdi-map-marker"></i> Map it
</a>
@ -110,7 +110,7 @@
<th scope="row">GPS Coordinates</th>
<td>
{% if object.latitude and object.longitude %}
<div class="pull-right noprint">
<div class="float-end noprint">
<a href="{{ settings.MAPS_URL }}{{ object.latitude }},{{ object.longitude }}" target="_blank" class="btn btn-primary btn-sm">
<i class="mdi mdi-map-marker"></i> Map it
</a>

View File

@ -42,7 +42,7 @@
</h5>
{% for context in source_contexts %}
<div class="card-body">
<div class="pull-right">
<div class="float-end">
<span class="text-muted">{{ context.weight }}</span>
</div>
<a href="{{ context.get_absolute_url }}"><strong>{{ context.name }}</strong></a>

View File

@ -3,21 +3,24 @@
{% block title %}{{ object }}{% endblock %}
{% block breadcrumb_main %}
<nav class="breadcrumb-container" aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'extras:objectchange_list' %}">Change Log</a></li>
{% if object.related_object.get_absolute_url %}
<li class="breadcrumb-item"><a href="{{ object.related_object.get_absolute_url }}changelog/">{{ object.related_object }}</a></li>
{% elif object.changed_object.get_absolute_url %}
<li class="breadcrumb-item"><a href="{{ object.changed_object.get_absolute_url }}changelog/">{{ object.changed_object }}</a></li>
{% elif object.changed_object %}
<li class="breadcrumb-item">{{ object.changed_object }}</li>
{% endif %}
<li class="breadcrumb-item">{{ object }}</li>
</ol>
</nav>
{% endblock %}
{% block header %}
<div class="row noprint">
<div class="col-sm-8 col-md-9">
<ol class="breadcrumb">
<li><a href="{% url 'extras:objectchange_list' %}">Change Log</a></li>
{% if object.related_object.get_absolute_url %}
<li><a href="{{ object.related_object.get_absolute_url }}changelog/">{{ object.related_object }}</a></li>
{% elif object.changed_object.get_absolute_url %}
<li><a href="{{ object.changed_object.get_absolute_url }}changelog/">{{ object.changed_object }}</a></li>
{% elif object.changed_object %}
<li>{{ object.changed_object }}</li>
{% endif %}
<li>{{ object }}</li>
</ol>
</div>
<div class="col-sm-4 col-md-3">
<form action="{% url 'extras:objectchange_list' %}" method="get">
<div class="input-group">
@ -34,7 +37,7 @@
{% endblock %}
{% block content %}
<div class="row">
<div class="row mb-3">
<div class="col-md-5">
<div class="card">
<h5 class="card-header">
@ -43,31 +46,31 @@
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<td>Time</td>
<th scope="row">Time</th>
<td>
{{ object.time }}
</td>
</tr>
<tr>
<td>User</td>
<th scope="row">User</th>
<td>
{{ object.user|default:object.user_name }}
</td>
</tr>
<tr>
<td>Action</td>
<th scope="row">Action</th>
<td>
{{ object.get_action_display }}
</td>
</tr>
<tr>
<td>Object Type</td>
<th scope="row">Object Type</th>
<td>
{{ object.changed_object_type }}
</td>
</tr>
<tr>
<td>Object</td>
<th scope="row">Object</th>
<td>
{% if object.changed_object.get_absolute_url %}
<a href="{{ object.changed_object.get_absolute_url }}">{{ object.changed_object }}</a>
@ -77,7 +80,7 @@
</td>
</tr>
<tr>
<td>Request ID</td>
<th scope="row">Request ID</th>
<td>
{{ object.request_id }}
</td>
@ -85,15 +88,17 @@
</table>
</div>
</div>
</div>
<div class="col-md-7">
<div class="card">
<div class="card-header">
<h5>Difference</h5>
<div class="btn-group btn-group-xs pull-right noprint">
<a {% if prev_change %}href="{% url 'extras:objectchange' pk=prev_change.pk %}"{% else %}disabled{% endif %} class="btn btn-default">
<span class="mdi mdi-chevron-left" aria-hidden="true"></span> Previous
<h5 class="d-inline">Difference</h5>
<div class="btn-group btn-group-sm float-end noprint">
<a {% if prev_change %}href="{% url 'extras:objectchange' pk=prev_change.pk %}"{% else %}disabled{% endif %} class="btn btn-outline-secondary">
<i class="mdi mdi-chevron-left" aria-hidden="true"></i> Previous
</a>
<a {% if next_change %}href="{% url 'extras:objectchange' pk=next_change.pk %}"{% else %}disabled{% endif %} class="btn btn-default">
Next <span class="mdi mdi-chevron-right" aria-hidden="true"></span>
<a {% if next_change %}href="{% url 'extras:objectchange' pk=next_change.pk %}"{% else %}disabled{% endif %} class="btn btn-outline-secondary">
Next <i class="mdi mdi-chevron-right" aria-hidden="true"></i>
</a>
</div>
</div>
@ -101,20 +106,22 @@
{% if diff_added == diff_removed %}
<span class="text-muted" style="margin-left: 10px;">
{% if object.action == 'create' %}
Object created
Object Created
{% elif object.action == 'delete' %}
Object deleted
Object Deleted
{% else %}
No changes
No Changes
{% endif %}
</span>
{% else %}
<pre style="background-color: #ffdce0;">{{ diff_removed|render_json }}</pre>
<pre style="background-color: #cdffd8;">{{ diff_added|render_json }}</pre>
<pre class="change-diff change-removed">{{ diff_removed|render_json }}</pre>
<pre class="change-diff change-added">{{ diff_added|render_json }}</pre>
{% endif %}
</div>
</div>
</div>
</div>
<div class="row mb-3">
<div class="col-md-6">
<div class="card">
<h5 class="card-header">
@ -122,8 +129,8 @@
</h5>
<div class="card-body">
{% if object.prechange_data %}
<pre>{% for k, v in object.prechange_data.items %}{% spaceless %}
<span{% if k in diff_removed %} style="background-color: #ffdce0"{% endif %}>{{ k }}: {{ v|render_json }}</span>
<pre class="change-data">{% for k, v in object.prechange_data.items %}{% spaceless %}
<span{% if k in diff_removed %} class="removed"{% endif %}>{{ k }}: {{ v|render_json }}</span>
{% endspaceless %}{% endfor %}
</pre>
{% else %}
@ -132,7 +139,6 @@
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<h5 class="card-header">
@ -140,8 +146,8 @@
</h5>
<div class="card-body">
{% if object.postchange_data %}
<pre>{% for k, v in object.postchange_data.items %}{% spaceless %}
<span{% if k in diff_added %} style="background-color: #cdffd8"{% endif %}>{{ k }}: {{ v|render_json }}</span>
<pre class="change-data">{% for k, v in object.postchange_data.items %}{% spaceless %}
<span{% if k in diff_added %} class="added"{% endif %}>{{ k }}: {{ v|render_json }}</span>
{% endspaceless %}{% endfor %}
</pre>
{% else %}
@ -150,14 +156,15 @@
</div>
</div>
</div>
<div class="row">
</div>
<div class="row mb-3">
<div class="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="pull-right">
<a href="{% url 'extras:objectchange_list' %}?request_id={{ object.request_id }}" class="btn btn-primary">See all {{ related_changes_count|add:"1" }} changes</a>
<div class="float-end">
<a href="{% url 'extras:objectchange_list' %}?request_id={{ object.request_id }}" class="btn btn-primary">See All {{ related_changes_count|add:"1" }} Changes</a>
</div>
{% endif %}
</div>
</div>
</div>
{% endblock %}

View File

@ -1,20 +1,24 @@
{% extends 'base.html' %}
{% extends 'layout.html' %}
{% load helpers %}
{% block title %}{{ report.name }}{% endblock %}
{% block header %}
<div class="row noprint">
<div class="col-md-12">
{% block breadcrumb_main %}
<nav class="breadcrumb-container" aria-label="breadcrumb">
<ol class="breadcrumb">
<li><a href="{% url 'extras:report_list' %}">Reports</a></li>
<li><a href="{% url 'extras:report_list' %}#module.{{ report.module }}">{{ report.module|bettertitle }}</a></li>
<li>{{ report.name }}</li>
<li class="breadcrumb-item"><a href="{% url 'extras:report_list' %}">Reports</a></li>
<li class="breadcrumb-item"><a href="{% url 'extras:report_list' %}#module.{{ report.module }}">{{ report.module|bettertitle }}</a></li>
<li class="breadcrumb-item">{{ report.name }}</li>
</ol>
</div>
</div>
{% if perms.extras.run_report %}
<div class="pull-right noprint">
</nav>
{% endblock %}
{% block content %}
{% if report.description %}
<p class="text-muted">{{ report.description }}</p>
{% endif %}
{% if perms.extras.run_report %}
<div class="float-end noprint">
<form action="{% url 'extras:report' module=report.module name=report.class_name %}" method="post">
{% csrf_token %}
<button type="submit" name="_run" class="btn btn-primary">
@ -25,16 +29,9 @@
{% endif %}
</button>
</form>
</div>
{% endif %}
<h1 class="title">{{ report.name }}</h1>
{% if report.description %}
<p class="lead">{{ report.description }}</p>
{% endif %}
{% endblock %}
{% block content %}
<div class="row">
</div>
{% endif %}
<div class="row">
<div class="col-md-12">
{% if report.result %}
Last run: <a href="{% url 'extras:report_result' job_result_pk=report.result.pk %}">
@ -42,5 +39,5 @@
</a>
{% endif %}
</div>
</div>
</div>
{% endblock %}

View File

@ -5,10 +5,12 @@
{% block content %}
<div class="row">
<div class="col-md-8">
<div class="col-md-9">
{% if reports %}
{% for module, module_reports in reports %}
<h3><a name="module.{{ module }}"></a>{{ module|bettertitle }}</h3>
<div class="card">
<h5 class="card-header"><a name="module.{{ module }}"></a>{{ module|bettertitle }}</h3>
<div class="card-body">
<table class="table table-hover table-headings reports">
<thead>
<tr>
@ -71,6 +73,8 @@
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endfor %}
{% else %}
<div class="alert alert-info" role="alert">
@ -81,7 +85,7 @@
</div>
{% endif %}
</div>
<div class="col-md-4">
<div class="col-md-3">
{% if reports %}
<div class="card">
<div class="card-body">

View File

@ -5,14 +5,18 @@
{% block title %}{{ report.name }} - {{ result.get_status_display }}{% endblock %}
{% block content %}
<div class="row">
<span id="jobId" data-value="{{ result.pk }}" style="display: none;"></span>
<span id="jobComplete" data-value="{{ result.completed }}" style="display: none;"></span>
<div class="row">
<div class="col-md-12">
<p>
Run: <strong>{{ result.created }}</strong>
{% if result.completed %}
Duration: <strong>{{ result.duration }}</strong>
{% else %}
<img id="pending-result-loader" src="{% static 'img/ajax-loader.gif' %}" />
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
{% endif %}
<span id="pending-result-label">{% include 'extras/inc/job_label.html' with result=result %}</span>
</p>
@ -26,11 +30,11 @@
{% for method, data in result.data.items %}
<tr>
<td><code><a href="#{{ method }}">{{ method }}</a></code></td>
<td class="text-right report-stats">
<label class="badge bg-success">{{ data.success }}</label>
<label class="badge bg-info">{{ data.info }}</label>
<label class="badge bg-warning">{{ data.warning }}</label>
<label class="badge bg-danger">{{ data.failure }}</label>
<td class="text-end report-stats">
<span class="badge bg-success">{{ data.success }}</span>
<span class="badge bg-info">{{ data.info }}</span>
<span class="badge bg-warning">{{ data.warning }}</span>
<span class="badge bg-danger">{{ data.failure }}</span>
</td>
</tr>
{% endfor %}
@ -83,22 +87,10 @@
<div class="well">Pending results</div>
{% endif %}
</div>
</div>
</div>
{% endblock %}
{% block javascript %}
<script type="text/javascript">
{% if not result.completed %}
var pending_result_id = {{ result.pk }};
{% else %}
var pending_result_id = null;
{% endif %}
function jobTerminatedAction(){
refreshWindow();
}
</script>
<script src="{% static 'js/job_result.js' %}?v{{ settings.VERSION }}"
onerror="window.location='{% url 'media_failure' %}?filename=js/job_result.js'"></script>
<script src="{% static 'jobs.js' %}?v{{ settings.VERSION }}"
onerror="window.location='{% url 'media_failure' %}?filename=jobs.js'"></script>
{% endblock %}

View File

@ -20,14 +20,6 @@
</div>
</div>
<div class="col-md-5">
{% if form.non_field_errors %}
<div class="panel bg-danger">
<h5 class="card-header">Errors</h5>
<div class="card-body">
{{ form.non_field_errors }}
</div>
</div>
{% endif %}
<div class="card">
<h5 class="card-header">{{ model_name|title }} to Add</h5>
<div class="card-body">
@ -36,10 +28,10 @@
{% endfor %}
</div>
</div>
<div class="form-group text-right">
<div class="form-group text-end">
<div class="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>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -2,16 +2,9 @@
{% load helpers %}
{% load form_helpers %}
{% block title %}Editing {{ table.rows|length }} {{ obj_type_plural|bettertitle }}{% endblock %}
{% block content %}
<h1>{% block title %}Editing {{ table.rows|length }} {{ obj_type_plural|bettertitle }}{% endblock %}</h1>
{% if form.errors %}
<div class="card bg-danger">
<h5 class="card-header">Errors</h5>
<div class="card-body">
{{ form.errors }}
</div>
</div>
{% endif %}
<form action="" method="post" class="form form-horizontal">
{% csrf_token %}
{% if request.POST.return_url %}
@ -27,14 +20,6 @@
</div>
</div>
<div class="col-md-4">
{% if form.non_field_errors %}
<div class="card bg-danger">
<h5 class="card-header">Errors</h5>
<div class="card-body">
{{ form.non_field_errors }}
</div>
</div>
{% endif %}
<div class="card">
<h5 class="card-header">{% block form_title %}Attributes{% endblock %}</h5>
<div class="card-body">
@ -47,10 +32,10 @@
{% endfor %}
</div>
</div>
<div class="form-group text-right">
<div class="form-group text-end">
<div class="col-md-12">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_apply" class="btn btn-primary">Apply</button>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -1,30 +1,22 @@
{% extends 'base.html' %}
{% extends 'layout.html' %}
{% load helpers %}
{% load form_helpers %}
{% block title %}{{ obj_type|bettertitle }} Import{% endblock %}
{% block content %}
<h1>{% block title %}{{ obj_type|bettertitle }} Import{% endblock %}</h1>
{% block tabs %}{% endblock %}
<div class="row">
<div class="row mb-3">
<div class="col-md-8 col-md-offset-2">
{% if form.non_field_errors %}
<div class="panel panel-danger">
<div class="panel-heading"><strong>Errors</strong></div>
<div class="panel-body">
{{ form.non_field_errors }}
</div>
</div>
{% endif %}
<form action="" method="post" class="form form-horizontal">
{% csrf_token %}
{% render_form form %}
<div class="form-group">
<div class="col-md-12 text-right">
<button type="submit" name="_create" class="btn btn-primary">Submit</button>
<button type="submit" name="_addanother" class="btn btn-primary">Submit and Import Another</button>
<div class="col-md-12 text-end">
{% if return_url %}
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
{% endif %}
<button type="submit" name="_addanother" class="btn btn-outline-primary">Submit & Import Another</button>
<button type="submit" name="_create" class="btn btn-primary">Submit</button>
</div>
</div>
</form>

View File

@ -9,6 +9,7 @@
{% block controls %}
<div class="container mb-2 mx-0">
<div class="d-flex flex-wrap justify-content-end">
{% block extra_controls %}{% endblock %}
{% if permissions.add and 'add' in action_buttons %}
{% add_button content_type.model_class|validated_viewname:"add" %}
{% endif %}
@ -21,7 +22,6 @@
<div class="d-flex flex-shrink-1">
{% if request.user.is_authenticated and table_config_form %}
<button
type="button"
class="btn btn-sm btn-outline-secondary m-1"

View File

@ -1,13 +1,14 @@
{% extends 'base.html' %}
{% extends 'layout.html' %}
{% block title %}Import Completed{% endblock %}
{% block content %}
<h1>{% block title %}Import Completed{% endblock %}</h1>
{% include 'responsive_table.html' %}
{% if return_url %}
<a href="{{ return_url }}" class="btn btn-outline-dark">View All</a>
{% endif %}
<a href="{{ request.path }}" class="btn btn-primary">
<span class="mdi mdi-database-import-outline" aria-hidden="true"></span>
Import more
Import More
</a>
{% if return_url %}
<a href="{{ return_url }}" class="btn btn-default">View All</a>
{% endif %}
{% endblock %}

View File

@ -15,14 +15,14 @@
</td>
<td>{{ attachment.size|filesizeformat }}</td>
<td>{{ attachment.created }}</td>
<td class="text-right noprint">
<td class="text-end noprint">
{% if perms.extras.change_imageattachment %}
<a href="{% url 'extras:imageattachment_edit' pk=attachment.pk %}" class="btn btn-warning btn-sm" title="Edit image">
<a href="{% url 'extras:imageattachment_edit' pk=attachment.pk %}" class="btn btn-warning btn-sm" title="Edit Image">
<i class="bi bi-pencil-fill" aria-hidden="true"></i>
</a>
{% endif %}
{% if perms.extras.delete_imageattachment %}
<a href="{% url 'extras:imageattachment_delete' pk=attachment.pk %}" class="btn btn-danger btn-sm" title="Delete image">
<a href="{% url 'extras:imageattachment_delete' pk=attachment.pk %}" class="btn btn-danger btn-sm" title="Delete Image">
<i class="bi bi-trash-fill" aria-hidden="true"></i>
</a>
{% endif %}

View File

@ -8,10 +8,10 @@
{% if not menu_item.permissions or request.user|has_perms:menu_item.permissions %}
<li>
{% if menu_item.buttons %}
<div class="buttons pull-right">
<div class="buttons float-end">
{% for button in menu_item.buttons %}
{% if not button.permissions or request.user|has_perms:button.permissions %}
<a href="{% url button.link %}" class="btn btn-xs btn-{{ button.color }}" title="{{ button.title }}"><i class="{{ button.icon_class }}"></i></a>
<a href="{% url button.link %}" class="btn btn-sm btn-{{ button.color }}" title="{{ button.title }}"><i class="{{ button.icon_class }}"></i></a>
{% endif %}
{% endfor %}
</div>

View File

@ -10,18 +10,18 @@
{% endfor %}
</td>
<td>{{ service.description }}</td>
<td class="text-right noprint">
<a href="{% url 'ipam:service_changelog' pk=service.pk %}" class="btn btn-default btn-sm" title="Change log">
<td class="text-end noprint">
<a href="{% url 'ipam:service_changelog' pk=service.pk %}" class="btn btn-sm btn-outline-secondary" title="Change Log">
<i class="bi bi-clock-history"></i>
</a>
{% if perms.ipam.change_service %}
<a href="{% url 'ipam:service_edit' pk=service.pk %}?return_url={{ service.parent.get_absolute_url }}" class="btn btn-info btn-sm" title="Edit service">
<a href="{% url 'ipam:service_edit' pk=service.pk %}?return_url={{ service.parent.get_absolute_url }}" class="btn btn-warning btn-sm" title="Edit Service">
<i class="bi bi-pencil-fill"></i>
</a>
{% endif %}
{% if perms.ipam.delete_service %}
<a href="{% url 'ipam:service_delete' pk=service.pk %}?return_url={{ service.parent.get_absolute_url }}" class="btn btn-danger btn-sm">
<i class="bi bi-trash-fill" title="Delete service"></i>
<i class="bi bi-trash-fill" title="Delete Service"></i>
</a>
{% endif %}
</td>

View File

@ -122,7 +122,7 @@
Duplicate IP Addresses
{% if more_duplicate_ips %}
<div class="float-end">
<a type="button" class="btn btn-primary btn-xs"
<a type="button" class="btn btn-primary btn-sm"
{% if object.vrf %}
href="{% url 'ipam:ipaddress_list' %}?address={{ object.address.ip }}&vrf_id={{ object.vrf.pk }}"
{% else %}

View File

@ -1,20 +1,17 @@
{% extends 'generic/object_list.html' %}
{% load helpers %}
{% block buttons %}
<div class="btn-group" role="group">
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="max_length" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
{% block extra_controls %}
<div class="dropdown m-1">
<button class="btn btn-sm btn-outline-secondary dropdown-toggle" type="button" id="max_length" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Max Length{% if "mask_length__lte" in request.GET %}: {{ request.GET.mask_length__lte }}{% endif %}
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="max_length">
{% for i in "4,8,12,16,20,24,28,32,40,48,56,64"|split %}
<li><a href="{% url 'ipam:prefix_list' %}{% querystring request mask_length__lte=i page=1 %}">
<li><a class="dropdown-item" href="{% url 'ipam:prefix_list' %}{% querystring request mask_length__lte=i page=1 %}">
{{ i }} {% if request.GET.mask_length__lte == i %}<i class="mdi mdi-check-bold"></i>{% endif %}
</a></li>
{% endfor %}
</ul>
</div>
</div>
{% endblock %}

View File

@ -1,13 +1,13 @@
{% extends 'generic/object_list.html' %}
{% block buttons %}
{% block extra_controls %}
{% if request.GET.family == '6' %}
<a href="{% url 'ipam:rir_list' %}" class="btn btn-default">
<a href="{% url 'ipam:rir_list' %}" class="btn btn-sm btn-outline-secondary m-1">
<span class="mdi mdi-table" aria-hidden="true"></span>
IPv4 Stats
</a>
{% else %}
<a href="{% url 'ipam:rir_list' %}?family=6{% if request.GET %}&{{ request.GET.urlencode }}{% endif %}" class="btn btn-default">
<a href="{% url 'ipam:rir_list' %}?family=6{% if request.GET %}&{{ request.GET.urlencode }}{% endif %}" class="btn btn-sm btn-outline-secondary m-1">
<span class="mdi mdi-table" aria-hidden="true"></span>
IPv6 Stats
</a>
@ -16,8 +16,8 @@
{% block sidebar %}
{% if request.GET.family == '6' %}
<div class="alert alert-info">
<i class="bi bi-info-circle"></i> Numbers shown indicate /64 prefixes.
<div class="alert alert-info small">
<i class="mdi mdi-information-outline"></i> Numbers shown indicate /64 prefixes.
</div>
{% endif %}
{% endblock %}

View File

@ -2,20 +2,20 @@
<form id="secret_form">
{% csrf_token %}
</form>
<table class="table table-hover panel-body">
<table class="table table-hover">
{% for secret in secrets %}
<tr>
<td><a href="{% url 'secrets:secret' pk=secret.pk %}">{{ secret.role }}</a></td>
<td>{{ secret.name }}</td>
<td id="secret_{{ secret.pk }}">********</td>
<td class="text-right noprint">
<button class="btn btn-xs btn-success unlock-secret" secret-id="{{ secret.pk }}">
<td class="text-end noprint">
<button class="btn btn-sm btn-success unlock-secret" secret-id="{{ secret.pk }}">
<i class="mdi mdi-lock"></i> Unlock
</button>
<button class="btn btn-xs btn-default copy-secret collapse" secret-id="{{ secret.pk }}" data-clipboard-target="#secret_{{ secret.pk }}">
<button class="btn btn-sm btn-outline-dark copy-secret collapse" secret-id="{{ secret.pk }}" data-clipboard-target="#secret_{{ secret.pk }}">
<i class="mdi mdi-content-copy"></i> Copy
</button>
<button class="btn btn-xs btn-danger lock-secret collapse" secret-id="{{ secret.pk }}">
<button class="btn btn-sm btn-danger lock-secret collapse" secret-id="{{ secret.pk }}">
<i class="mdi mdi-lock-open"></i> Lock
</button>
</td>
@ -23,7 +23,7 @@
{% endfor %}
</table>
{% else %}
<div class="panel-body text-muted">
<div class="text-muted">
None found
</div>
{% endif %}

View File

@ -54,7 +54,7 @@
<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-right noprint">
<div class="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>

View File

@ -17,7 +17,7 @@
<i class="mdi mdi-key"></i>
<samp><span id="token_{{ token.pk }}">{{ token.key }}</span></samp>
{% if token.is_expired %}
<span class="label label-danger">Expired</span>
<span class="badge bg-danger">Expired</span>
{% endif %}
</div>
<div class="card-body">
@ -35,11 +35,11 @@
{% endif %}
</div>
<div class="col-md-4">
<small class="text-muted">Create/edit/delete operations</small><br />
<small class="text-muted">Create/Edit/Delete Operations</small><br />
{% if token.write_enabled %}
<span class="label label-success">Enabled</span>
<span class="badge bg-success">Enabled</span>
{% else %}
<span class="label label-danger">Disabled</span>
<span class="badge bg-danger">Disabled</span>
{% endif %}
</div>
</div>

View File

@ -30,7 +30,7 @@
<pre class="copyable">{{ object.public_key }}</pre>
<hr />
{% if object.session_key %}
<div class="pull-right noprint">
<div class="float-end noprint">
<a href="{% url 'user:sessionkey_delete' %}" class="btn btn-danger">
<span class="mdi mdi-trash-can-outline" aria-hidden="true"></span>
Delete Session Key

View File

@ -1,21 +1,21 @@
{% extends 'base.html' %}
{% extends 'layout.html' %}
{% load form_helpers %}
{% block content %}
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="col-md-6 offset-md-3">
<form action="" method="post" class="form">
{% csrf_token %}
{% for field in form.hidden_fields %}
{{ field }}
{% endfor %}
<div class="panel panel-{{ panel_class|default:"danger" }}">
<div class="panel-heading">{% block title %}{% endblock %}</div>
<div class="panel-body">
<div class="card bg-{{ panel_class|default:"danger" }}">
<h5 class="card-header">{% block title %}{% endblock %}</h5>
<div class="card-body">
{% block message %}<p>Are you sure?</p>{% endblock %}
<div class="text-right">
<div class="text-end">
<a href="{{ return_url }}" class="btn btn-outline-dark">Cancel</a>
<button type="submit" name="_confirm" class="btn btn-{{ button_class|default:"danger" }}">Confirm</button>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>