mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-10 20:26:48 +00:00
Three upstream rules in webvirtcloud.css set every page's layout
against Bootstrap 5.3:
- .container { max-width: 900px } held each page to 900px at any
screen width, below Bootstrap's own widths. Pages now take
Bootstrap's container widths up to its lg one, 960px, and stop
there on wider screens: its xl and xxl widths (1140px, 1320px) leave
the panel's forms and lists too wide;
- .page-header (margins of 5px 5px 20px 20px) put headings 20px right
of the content under them; its 14 uses are mb-3, flush with the
content (one carried Bootstrap 4's mr-auto, now me-auto);
- p { margin: 10px } indented every paragraph 10px from the content
beside it; paragraphs take Bootstrap's own bottom margin.
webvirtcloud.css keeps only what Bootstrap has no utility for: the
page width cap, the XML editor's place and height, the Tom Select
colour fix, the sortable table headers' arrows, the grouped VM list's
collapsed hosts and the charts' height.
162 lines
7.3 KiB
HTML
162 lines
7.3 KiB
HTML
{% extends "base.html" %}
|
|
{% load i18n %}
|
|
{% load static %}
|
|
{% load bootstrap_icons %}
|
|
|
|
{% block title %}{% trans "NWFilter" %}: {{ name }}{% endblock %}
|
|
|
|
{% block page_heading %}{% trans "NWFilter" %}: {{ name }}{% endblock page_heading %}
|
|
|
|
{% block content %}
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
{% include "computes/host_nav.html" with section="nwfilters" detail=True %}
|
|
</div>
|
|
</div>
|
|
|
|
<dl class="ms-3 row">
|
|
<dt class="col-4">{% trans "UUID" %}:</dt>
|
|
<dd class="col-8">{{ uuid }}</dd>
|
|
<dt class="col-4">{% trans "Name" %}:</dt>
|
|
<dd class="col-8">{{ name }}</dd>
|
|
</dl>
|
|
|
|
<div class="row">
|
|
<div class="d-grid col-lg-12">
|
|
<button class="btn btn-light mb-3" role="button" data-bs-toggle="collapse" data-bs-target="#collapseXML" aria-expanded="true" aria-controls="collapseXML">
|
|
<span>{% bs_icon 'chevron-down' %} </span>
|
|
{% trans 'XML' %}
|
|
</button>
|
|
<div class="collapse" id="collapseXML">
|
|
<div class="card card-body">
|
|
<form class="form" method="post" role="form">{% csrf_token %}
|
|
<div class="col-12 xmlheight">
|
|
<input type="hidden" name="edit_xml"/>
|
|
<textarea id="edit_editor">{{ xml }}</textarea>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary float-end" name="edit_nwfilter">
|
|
{% trans "Edit" %}
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<h5 class="mb-3 me-auto">{% trans "Filter References" %}
|
|
<form class="float-end" method="post" role="form" aria-label="Add NWFilter form">{% csrf_token %}
|
|
<div class="input-group">
|
|
<label class="input-group-text" for="nwfilter_select">{% trans "Filter" %}</label>
|
|
<select id="nwfilter_select" name="nwfilters_select" class="form-select">
|
|
<option value="" selected>{% trans 'None' %}</option>
|
|
{% for nwf in nwfilters_all %}
|
|
<option value="{{ nwf.name }}">{{ nwf.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<button type="submit" class="btn btn-success float-end" name="add_nwfilter_ref" title="{% trans "Add" %}">
|
|
<span aria-hidden="true">{% bs_icon 'plus-circle-fill' %} </span>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</h5>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-12 col-sm-12">
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-3 align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">#</th>
|
|
<th scope="col">{% trans "Reference" %}</th>
|
|
<th scope="col">{% trans "Action" %}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for ref in refs %}
|
|
<tr>
|
|
<th scope="row">{{ forloop.counter }}</th>
|
|
<td>{{ ref }}</td>
|
|
<td style="width:30px;">
|
|
<form action="" method="post" role="form" aria-label="Delete NWFilter form">{% csrf_token %}
|
|
<input type="hidden" name="ref" value="{{ ref }}">
|
|
<button type="submit" class="btn btn-sm btn-danger" name="del_nwfilter_ref" title="{% trans "Delete" %}" data-confirm="{% blocktrans with ref=ref %}Remove the reference to {{ ref }}? Its rules no longer apply through this filter.{% endblocktrans %}" onclick="return confirm(this.dataset.confirm)">
|
|
{% bs_icon 'trash' %}
|
|
</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
{% include 'add_nwf_rule.html' %}
|
|
<h5 class="mb-3">{% trans "Rules" %}</h5>
|
|
|
|
<div class="table-responsive">
|
|
<table class="table table-hover align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">{% trans "Rule" %}</th>
|
|
<th scope="col" class="text-nowrap">{% trans "Action Type" %}</th>
|
|
<th scope="col">{% trans "Direction" %}</th>
|
|
<th scope="col">{% trans "Priority" %}</th>
|
|
<th scope="col">{% trans "Statematch" %}</th>
|
|
<th scope="col">{% trans "Directives" %}</th>
|
|
<th scope="col" style="width:30px;">{% trans "Action" %}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for rule in rules %}
|
|
<tr>
|
|
<th scope="row">{{ forloop.counter }}</th>
|
|
<td>{{ rule.action }}</td>
|
|
<td>{{ rule.direction }}</td>
|
|
<td>{{ rule.priority }}</td>
|
|
<td>{{ rule.statematch }}</td>
|
|
<td>{{ rule.directives }}</td>
|
|
<td>
|
|
<form action="" method="post" role="form" aria-label="Delete NWFilter rule">{% csrf_token %}
|
|
<input type="hidden" name="index" value="{{ rule.index }}">
|
|
<input type="hidden" name="action" value="{{ rule.action }}">
|
|
<input type="hidden" name="direction" value="{{ rule.direction }}">
|
|
<input type="hidden" name="priority" value="{{ rule.priority }}">
|
|
<button type="submit" class="btn btn-sm btn-danger" name="del_nwfilter_rule" title="{% trans 'Delete' %}" data-confirm="{% trans "Delete this rule? Interfaces that use the filter no longer get it." %}" onclick="return confirm(this.dataset.confirm)">
|
|
{% bs_icon 'trash' %}
|
|
</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block script %}
|
|
<script src="{% static 'js/ace/ace.js' %}"></script>
|
|
<script>
|
|
var editor = ace.edit("edit_editor");
|
|
editor.getSession().setMode("ace/mode/xml");
|
|
|
|
var edit_input = $('input[name="edit_xml"]');
|
|
editor.getSession().on("change",function () {
|
|
edit_input.val(editor.getSession().getValue());
|
|
});
|
|
|
|
var rule_editor = ace.edit("rule_editor");
|
|
rule_editor.getSession().setMode("ace/mode/xml");
|
|
|
|
var rule_input = $('input[name="nwfilterrule_xml"]');
|
|
rule_editor.getSession().on("change",function () {
|
|
rule_input.val(rule_editor.getSession().getValue());
|
|
});
|
|
</script>
|
|
|
|
{% endblock %}
|