Files
penracourses/templates/question_table_view.html
T

64 lines
2.8 KiB
HTML

{% extends app_name|add:'/base.html' %}
{% load render_table from django_tables2 %}
{% block css %}
{% endblock %}
{% block content %}
<div id="view-filter-options">
<details class="filter">
<summary>
<h3>Filter questions</h3>
</summary>
<form action="" method="get">
{{ filter.form }}
<input class="btn btn-primary btn-sm mt-1 mb-1" type="submit" />
</form>
</details>
</div>
{% render_table table %}
<form id="bulk-delete-form" method="post" action="{% url app_name|add:':bulk_delete_questions' %}" hx-post="{% url app_name|add:':bulk_delete_questions' %}" hx-target="#bulk-delete-result" hx-swap="innerHTML">
{% csrf_token %}
<input type="hidden" name="app" value="{{ app_name }}">
<input type="hidden" name="selected" id="bulk-selected-input" value="">
<button id="button-bulk-delete" class="btn btn-danger btn-sm" type="submit">Delete selected</button>
<span id="bulk-delete-result" class="ms-2"></span>
</form>
<button id="button-select-add-exam"
data-exam_json_edit_url="{% url 'generic:generic_exam_json_edit' %}"
data-exam_list_url="{% url 'api-1:'|add:app_name|add:'_user_exams' %}"
data-type={{app_name}} data-csrf="{{ csrf_token}}">Add selected questions to
exam</button>
<button id="button-select-remove-questions"
data-question_bulk_delete_url="{% url app_name|add:':bulk_delete_questions' %}"
data-csrf="{{ csrf_token}}">Delete selected questions</button>
<div id="exam-options"></div>
{% endblock %}
{% block scripts %}
<script>
// When the user submits the bulk-delete form, gather selected checkboxes from the table
document.getElementById('bulk-delete-form').addEventListener('submit', function(e){
const selected = [];
document.querySelectorAll('input[type=checkbox][name="selection"]:checked, input[type=checkbox][name="selection[]"]:checked, input[type=checkbox][name="selection\[\]"]:checked').forEach(function(cb){
// many tables render checkbox inputs with value attribute as pk
if(cb.value) selected.push(cb.value);
else if(cb.dataset && cb.dataset.pk) selected.push(cb.dataset.pk);
});
// fallback: django-tables2 renders checkboxes with accessor name 'selection' and value
if(selected.length === 0){
// try to find inputs inside table
document.querySelectorAll('table input[type=checkbox]').forEach(function(cb){
if(cb.checked && cb.value) selected.push(cb.value);
});
}
document.getElementById('bulk-selected-input').value = selected.join(',');
// allow HTMX to submit
});
</script>
{% endblock %}