Merge pull request 'dav_registration: change filter button logic from select buttons to OR' (#72) from filter_buttons into master
Reviewed-on: #72
This commit was merged in pull request #72.
This commit is contained in:
@@ -31,6 +31,10 @@ class ChoiceSet(object):
|
||||
else:
|
||||
return False
|
||||
|
||||
@property
|
||||
def codes(self):
|
||||
return self._codes
|
||||
|
||||
def get_label(self, code):
|
||||
return self._labels[code]
|
||||
|
||||
|
||||
@@ -18,16 +18,13 @@
|
||||
<table id="objects_table" class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="hidden">Sport</th>
|
||||
<th class="hidden">Level</th>
|
||||
<th><input type="text" id="searchfield" placeholder="{% trans 'Volltextsuche' %}"></th>
|
||||
<th class="hidden">Attributes</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for event in event_list %}
|
||||
<tr>
|
||||
<td class="hidden">{{ event.sport }}</td>
|
||||
<td class="hidden">{{ event.level }}</td>
|
||||
<td>
|
||||
<div class="pull-right" style="margin-left: 2em;">
|
||||
<a role="button" id="controlChevronCollapseDetails{{ event.id }}" data-toggle="collapse"
|
||||
@@ -122,42 +119,55 @@
|
||||
});
|
||||
</script>
|
||||
</td>
|
||||
<td class="hidden">{{ event.sport }},{{ event.level }},</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<script type="text/javascript">
|
||||
function filter_table(table, sport, level) {
|
||||
function filter_table(table, filter) {
|
||||
const sport_choices = ["B", "K", "M", "S", "W"];
|
||||
const level_choices = ["beginner", "advanced", "family"];
|
||||
var choices = sport_choices.concat(level_choices);
|
||||
var filter_cleaned = [];
|
||||
var filter_expr;
|
||||
|
||||
if(sport != "*")
|
||||
$("#btn-filter-" + sport).removeClass("btn-white");
|
||||
if(level != "*")
|
||||
$("#btn-filter-" + level).removeClass("btn-white");
|
||||
|
||||
if(sport == "*" && level == "*")
|
||||
$("#btn-filter-All").removeClass("btn-white");
|
||||
else
|
||||
if(filter.length > 0) {
|
||||
$("#btn-filter-All").addClass("btn-white");
|
||||
|
||||
for(let i in sport_choices) {
|
||||
if(sport != sport_choices[i])
|
||||
$("#btn-filter-" + sport_choices[i]).addClass("btn-white");
|
||||
}
|
||||
for(let i in level_choices) {
|
||||
if(level != level_choices[i])
|
||||
$("#btn-filter-" + level_choices[i]).addClass("btn-white");
|
||||
} else {
|
||||
$("#btn-filter-All").removeClass("btn-white");
|
||||
}
|
||||
|
||||
if(sport == "*")
|
||||
sport = ""
|
||||
table.column(0).search(sport).draw();
|
||||
for(let i in choices) {
|
||||
if(filter.indexOf(choices[i]) >= 0) {
|
||||
filter_cleaned.push(choices[i]);
|
||||
$("#btn-filter-" + choices[i]).removeClass("btn-white");
|
||||
} else {
|
||||
$("#btn-filter-" + choices[i]).addClass("btn-white");
|
||||
}
|
||||
}
|
||||
|
||||
if(level == "*")
|
||||
level = ""
|
||||
table.column(1).search(level).draw();
|
||||
};
|
||||
if(filter_cleaned.length > 0) {
|
||||
filter_expr = "(" + filter_cleaned.join("|") + "),";
|
||||
} else {
|
||||
filter_expr = "";
|
||||
}
|
||||
|
||||
table.column(1).search(filter_expr, true, false);
|
||||
table.draw();
|
||||
}
|
||||
function toggle_filter(table, filter, attribute) {
|
||||
let i = filter.indexOf(attribute);
|
||||
if(i >= 0)
|
||||
filter.splice(i, 1);
|
||||
else
|
||||
filter.push(attribute);
|
||||
filter_table(table, filter);
|
||||
}
|
||||
function reset_filter(table, filter) {
|
||||
filter.splice(0, filter.length);
|
||||
filter_table(table, filter);
|
||||
}
|
||||
$(document).ready( function () {
|
||||
var table = $("#objects_table").DataTable( {
|
||||
ordering: false,
|
||||
@@ -172,32 +182,33 @@
|
||||
zeroRecords: "{% trans 'Keine passenden Einträge.' %}",
|
||||
}
|
||||
} );
|
||||
var filter = ['{{ init_filter|join:"','" }}'];
|
||||
$("#btn-filter-All").on("click", function() {
|
||||
filter_table(table, "*", "*");
|
||||
reset_filter(table, filter);
|
||||
} );
|
||||
$("#btn-filter-B").on("click", function() {
|
||||
filter_table(table, "B", "*")
|
||||
toggle_filter(table, filter, "B");
|
||||
} );
|
||||
$("#btn-filter-K").on("click", function() {
|
||||
filter_table(table, "K", "*")
|
||||
toggle_filter(table, filter, "K");
|
||||
} );
|
||||
$("#btn-filter-M").on("click", function() {
|
||||
filter_table(table, "M", "*")
|
||||
toggle_filter(table, filter, "M");
|
||||
} );
|
||||
$("#btn-filter-S").on("click", function() {
|
||||
filter_table(table, "S", "*")
|
||||
toggle_filter(table, filter, "S");
|
||||
} );
|
||||
$("#btn-filter-W").on("click", function() {
|
||||
filter_table(table, "W", "*")
|
||||
toggle_filter(table, filter, "W");
|
||||
} );
|
||||
$("#btn-filter-family").on("click", function() {
|
||||
filter_table(table, "*", "family")
|
||||
toggle_filter(table, filter, "family");
|
||||
} );
|
||||
$("#searchfield").on( "keyup change", function() {
|
||||
table.column(2).search( this.value ).draw();
|
||||
table.column(0).search( this.value ).draw();
|
||||
} );
|
||||
$("#objects_table_filter").hide();
|
||||
filter_table(table, "{{ init_sport_filter|default:'*' }}", "{{ init_level_filter|default:'*' }}");
|
||||
filter_table(table, filter);
|
||||
} );
|
||||
</script>
|
||||
</div>
|
||||
|
||||
@@ -51,21 +51,16 @@ class EventListView(generic.ListView):
|
||||
|
||||
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
|
||||
if hasattr(self, 'init_level_filter'):
|
||||
context['init_level_filter'] = self.init_level_filter
|
||||
if hasattr(self, 'init_filter'):
|
||||
context['init_filter'] = self.init_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
|
||||
if 'level' in request.GET:
|
||||
level = request.GET['level']
|
||||
if (level, 'Bogus') in LEVEL_CHOICES:
|
||||
self.init_level_filter = level
|
||||
if 'filter' in request.GET:
|
||||
choices = SPORT_CHOICES.codes + LEVEL_CHOICES.codes
|
||||
filter_input = request.GET['filter'].split(',')
|
||||
filter_cleaned = list(set(filter_input) & set(choices))
|
||||
self.init_filter = filter_cleaned
|
||||
return super().get(request, *args, **kwargs)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user