mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-10-07 04:55:29 +00:00
* build: move frontend assets to Bootstrap 5.3 and Tom Select * feat: migrate templates and scripts to Bootstrap 5, dropping jQuery Templates - Rename Bootstrap 4 classes and data attributes (data-bs-*, ms-/me-/ps-/pe-, text-start/end, form-group -> mb-3, input-group wrappers removed, badges, custom controls -> form-check/form-select, media -> d-flex, btn-close, ...) - Dark mode now uses Bootstrap 5.3 colour modes (data-bs-theme on <html>), set from <head> to avoid a flash of the light theme - Remove the Bootstrap 4 /bootstrap/ demo page - Contextual table classes (table-success etc.) still work as plain backgrounds for the rigboard key JavaScript - Remove jQuery: src.js/interaction.js and every inline template script are rewritten in plain JS on top of small helpers (helpers.js, bundled with Bootstrap into jpop.js so inline scripts can use them) - Replace bootstrap-select/ajax-bootstrap-select with Tom Select. The remote search now sends the `q` parameter and reads `text`, which is what the API actually uses (the old picker sent `term` and read `label`) - HTML fragments are fetched with an X-Requested-With header so views keep rendering their modal variants, and fetched scripts are re-executed - Remove the Bootstrap 4 plugin script includes * fix: stop rigboard header buttons stretching to full width under Bootstrap 5 * fix: restore dark-mode brand colours and contextual table colours under Bootstrap 5 * fix: brighten dark-mode links and make coloured card outlines visible * fix: calendar layout and grid borders, navbar search button width, guard missing modal links * fix: readable text in dark-mode Tom Select inputs and placeholders, restore form-control column widths * build: split the Dockerfile into cached stages with prod and dev targets * deploy: make compose.yml development-only with live reload, and document it * fix: keep badge text colour for links inside badges * fix: restore table-bordered grid lines in dark mode * fix: include Bootstrap's progress styles and keep progress labels readable
196 lines
11 KiB
HTML
196 lines
11 KiB
HTML
{% extends is_ajax|yesno:'base_ajax.html,base_rigs.html' %}
|
||
{% load widget_tweaks %}
|
||
{% load static %}
|
||
{% load help_text from filters %}
|
||
{% load nice_errors from filters %}
|
||
|
||
{% block css %}
|
||
<link rel="stylesheet" href="{% static 'css/selects.css' %}"/>
|
||
{% endblock %}
|
||
|
||
{% block preload_js %}
|
||
<script src="{% static 'js/selects.js' %}"></script>
|
||
{% endblock %}
|
||
|
||
{% block js %}
|
||
|
||
<script>
|
||
function parseBool(str) {
|
||
return str.toLowerCase() == 'true';
|
||
}
|
||
function onRadioChange(names, handler) {
|
||
names.forEach(function (name) {
|
||
document.querySelectorAll('input[type=radio][name=' + name + ']').forEach(function (radio) {
|
||
radio.addEventListener('change', handler);
|
||
});
|
||
});
|
||
}
|
||
onRadioChange(['big_power'], function() {
|
||
document.getElementById('{{ form.power_mic.id_for_label }}').required = parseBool(this.value);
|
||
});
|
||
onRadioChange(['outside', 'generators', 'other_companies_power', 'nonstandard_equipment_power', 'multiple_electrical_environments'], function() {
|
||
document.getElementById('{{ form.power_notes.id_for_label }}').required = parseBool(this.value);
|
||
});
|
||
onRadioChange(['special_structures'], function() {
|
||
var field = document.getElementById('{{ form.persons_responsible_structures.id_for_label }}');
|
||
field.hidden = !parseBool(this.value);
|
||
field.required = parseBool(this.value);
|
||
document.querySelector('label[for={{ form.persons_responsible_structures.id_for_label }}]').hidden = !parseBool(this.value);
|
||
});
|
||
onRadioChange(['suspended_structures'], function() {
|
||
var field = document.getElementById('{{ form.rigging_plan.id_for_label }}');
|
||
field.hidden = !parseBool(this.value);
|
||
field.required = parseBool(this.value);
|
||
document.querySelector('label[for={{ form.rigging_plan.id_for_label }}]').hidden = !parseBool(this.value);
|
||
});
|
||
</script>
|
||
{% endblock %}
|
||
|
||
{% block content %}
|
||
<div class="col">
|
||
{% if form.errors %}
|
||
<div class="alert alert-danger alert-dismissable">
|
||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||
<dl>
|
||
{% with form|nice_errors as qq %}
|
||
{% for error_name,desc in qq.items %}
|
||
{% if error_name == 'General form errors' %}
|
||
{{ form.non_field_errors.0|safe }}
|
||
<div class="text-end">
|
||
{% render_field form.supervisor_consulted class+="form-check-input" form="form" %}<label class="form-check-label" for="{{ form.supervisor_consulted.id_for_label}}">Please confirm you've done so.</label><br>
|
||
<button class="btn btn-primary mt-2" type="submit" form="form"><span class="fas fa-thumbs-up"></span> Confirm</button>
|
||
</div>
|
||
{% else %}
|
||
<span class="row">
|
||
<dt class="col-4">{{error_name}}</dt>
|
||
<dd class="col-8">{{desc}}</dd>
|
||
</span>
|
||
{% endif %}
|
||
{% endfor %}
|
||
{% endwith %}
|
||
</dl>
|
||
</div>
|
||
{% endif %}
|
||
{% if edit %}
|
||
<form role="form" method="POST" action="{% url 'ra_edit' pk=object.pk %}" id="form">
|
||
{% else %}
|
||
<form role="form" method="POST" action="{% url 'event_ra' pk=event.pk %}" id="form">
|
||
{% endif %}
|
||
<input type="hidden" name="{{ form.event.name }}" id="{{ form.event.id_for_label }}"
|
||
value="{{event.pk}}"/>
|
||
{% csrf_token %}
|
||
<div class="row">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">General</div>
|
||
<div class="card-body">
|
||
<p><strong>If the answer is yes to any of the below, you must consult a supervisor and make sure all activities planned to be undertaken are sufficiently covered by health and safety documentation</strong></p>
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.nonstandard_equipment %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.nonstandard_use %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.contractors %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.other_companies %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.crew_fatigue %}
|
||
|
||
<label for="{{ form.general_notes.id_for_label }}">{{ form.general_notes.help_text }}</label>
|
||
{% render_field form.general_notes class+="form-control" %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row my-3">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">Power</div>
|
||
<div class="card-body">
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.big_power %}
|
||
<label for="{{ form.power_mic.id_for_label }}"
|
||
class="col col-form-label">{{ form.power_mic.help_text|safe }}</label>
|
||
<div class="col-6">
|
||
<select id="{{ form.power_mic.id_for_label }}" name="{{ form.power_mic.name }}" class="ts-select" data-live-search="true" data-sourceurl="{% url 'api_secure' model='profile' %}?fields=first_name,last_name,initials">
|
||
{% if power_mic %}
|
||
<option value="{{form.power_mic.value}}" selected="selected">{{ power_mic }}</option>
|
||
{% endif %}
|
||
</select>
|
||
</div>
|
||
<p class="pt-4"><strong>If the answer is yes to ANY of the below questions this is a Large Event and you <em>must</em> consult a power supervisor</strong></p>
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.outside %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.generators label="Will generators be used?" %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.other_companies_power %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.nonstandard_equipment_power %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.multiple_electrical_environments %}
|
||
<label for="{{ form.power_notes.id_for_label }}">{{ form.power_notes.help_text }}</label>
|
||
{% render_field form.power_notes class+="form-control" %}
|
||
<label for="{{ form.power_plan.id_for_label }}" class="mt-2">{{ form.power_plan.help_text|safe }}</label>
|
||
{% render_field form.power_plan class+="form-control" %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row my-3">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">Sound</div>
|
||
<div class="card-body">
|
||
<p><strong>If yes, consult a supervisor of sound</strong></p>
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.noise_monitoring %}
|
||
<label for="{{ form.sound_notes.id_for_label }}">{{ form.sound_notes.help_text }}</label>
|
||
{% render_field form.sound_notes class+="form-control" %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row my-3">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">Site Details</div>
|
||
<div class="card-body">
|
||
<p><strong>If yes to any of the below, a site visit must be conducted, and an assessment of the venue completed and added to TEC’s records</strong></p>
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.known_venue %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.safe_loading %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.safe_storage %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.area_outside_of_control %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.barrier_required %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.nonstandard_emergency_procedure %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row my-3">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">Structures</div>
|
||
<div class="card-body">
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.special_structures %}
|
||
<label for="{{ form.persons_responsible_structures.id_for_label }}" class="mt-3" hidden="true">{{ form.persons_responsible_structures.help_text }}</label>
|
||
{% render_field form.persons_responsible_structures class+="form-control mb-3" hidden="true" %}
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.suspended_structures %}
|
||
<label for="{{ form.rigging_plan.id_for_label }}" class="mt-2" hidden="true">{{ form.rigging_plan.help_text|safe }}</label>
|
||
{% render_field form.rigging_plan class+="form-control" hidden="true" %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row my-3">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">Venue Access</div>
|
||
<div class="card-body">
|
||
<p><strong>If yes to the below, ensure you have communicated with the client and secured all necessary access prior to the event commencing.</strong></p>
|
||
{% include 'partials/yes_no_radio.html' with formitem=form.parking_and_access %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row mt-3">
|
||
<div class="col-sm-12 text-end">
|
||
<div class="btn-group">
|
||
<button type="submit" class="btn btn-primary" title="Save"><i
|
||
class="fas fa-save"></i> Save
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
{% endblock %}
|