dav_registration: added filter function to select single sport

This commit is contained in:
2023-02-19 19:23:14 +01:00
parent 9abde3ca18
commit af2ec6d344
4 changed files with 58 additions and 3 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -5,16 +5,26 @@
{% block page-container-fluid %}
<div>
<div style="float: right;">
<button id="btn-filter-All" type="button" class="btn btn-xs btn-green">Alle Touren</button>
<button id="btn-filter-B" type="button" class="btn btn-xs btn-sport-B btn-white">Bergsteigen</button>
<button id="btn-filter-K" type="button" class="btn btn-xs btn-sport-K btn-white">Klettern</button>
<button id="btn-filter-M" type="button" class="btn btn-xs btn-sport-M btn-white">Mountainbike</button>
<button id="btn-filter-S" type="button" class="btn btn-xs btn-sport-S btn-white">Ski</button>
<button id="btn-filter-W" type="button" class="btn btn-xs btn-sport-W btn-white">Wandern</button>
</div>
<h3 class="top-most">{% trans 'Touren & Kurse' %}</h3>
<table id="objects_table" class="table table-bordered table-hover">
<thead>
<tr>
<th class="hidden">Sport</th>
<th><input type="text" id="searchfield" placeholder="{% trans 'Volltextsuche' %}"></th>
</tr>
</thead>
<tbody>
{% for event in event_list %}
<tr>
<td class="hidden">{{ event.sport }}</td>
<td>
<div class="pull-right" style="margin-left: 2em;">
<a role="button" id="controlChevronCollapseDetails{{ event.id }}" data-toggle="collapse"
@@ -110,6 +120,20 @@
</tbody>
</table>
<script type="text/javascript">
function filter_sport(table, sport) {
const sports = ["All", "B", "K", "M", "S", "W"];
var search = sport;
for(let i in sports) {
if(sport != sports[i])
$("#btn-filter-" + sports[i]).addClass("btn-white");
}
$("#btn-filter-" + sport).removeClass("btn-white");
if(sport == "All")
search = "";
table.column(0).search(search).draw();
}
$(document).ready( function () {
var table = $("#objects_table").DataTable( {
ordering: false,
@@ -124,12 +148,29 @@
zeroRecords: "{% trans 'Keine passenden Einträge.' %}",
}
} );
$("#btn-filter-All").on("click", function() {
filter_sport(table, "All");
} );
$("#btn-filter-B").on("click", function() {
filter_sport(table, "B");
} );
$("#btn-filter-K").on("click", function() {
filter_sport(table, "K");
} );
$("#btn-filter-M").on("click", function() {
filter_sport(table, "M");
} );
$("#btn-filter-S").on("click", function() {
filter_sport(table, "S");
} );
$("#btn-filter-W").on("click", function() {
filter_sport(table, "W");
} );
$("#searchfield").on( "keyup change", function() {
table
.search( this.value )
.draw();
table.column(1).search( this.value ).draw();
} );
$("#objects_table_filter").hide();
filter_sport(table, "{{ init_sport_filter|default:'All' }}");
} );
</script>
</div>

View File

@@ -8,6 +8,7 @@ from django.urls import reverse_lazy
from django.utils.translation import ugettext as _
from django.views import generic
from dav_events.choices import SPORT_CHOICES
from dav_events.models.event import Event
from .forms import RegistrationForm
@@ -44,6 +45,19 @@ class EventListView(generic.ListView):
return qs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if hasattr(self, 'init_sport_filter'):
context['init_sport_filter'] = self.init_sport_filter
return context
def get(self, request, *args, **kwargs):
if 'sport' in request.GET:
sport = request.GET['sport']
if (sport, 'Bogus') in SPORT_CHOICES:
self.init_sport_filter = sport
return super().get(request, *args, **kwargs)
class EventDetailView(generic.DetailView):
model = Event