MediaWiki:Common.js
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Ctrl+F5 oder Ctrl+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Ctrl+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Ctrl+F5 drücken oder Ctrl drücken und gleichzeitig Aktualisieren anklicken
- Opera: Ctrl+F5
$(function() {
// Wir warten kurz, bis MediaWiki die Tabelle fertig gerendert hat
mw.loader.using(['jquery.tablesorter'], function() {
$('table.filterable').each(function() {
var $table = $(this);
// Wir suchen alle echten Datenzeilen (ignorieren den Header)
var $rows = $table.find('tbody tr').not(function() {
return $(this).find('th').length > 0;
});
var $headerRow = $table.find('tr').first();
var $filterRow = $('<tr class="filter-row"></tr>');
$headerRow.find('th').each(function(index) {
var $filterCell = $('<th style="background:#f2f2f2;"></th>');
var $select = $('<select style="width: 100%; min-width: 60px;"><option value="">(Alle)</option></select>');
// Klick-Event stoppen, damit die Tabelle nicht sortiert wird, wenn man das Menü öffnet
$select.on('click mousedown', function(e) {
e.stopPropagation();
});
// Werte sammeln
var values = [];
$rows.each(function() {
var text = $(this).find('td').eq(index).text().trim();
if (text !== "" && $.inArray(text, values) === -1) {
values.push(text);
}
});
// Sortieren und hinzufügen
values.sort().forEach(function(val) {
$select.append($('<option></option>').val(val).text(val));
});
$select.on('change', function() {
filterTable($table);
});
$filterCell.append($select);
$filterRow.append($filterCell);
});
// Filterzeile nach dem Header einfügen
$headerRow.after($filterRow);
});
});
function filterTable($table) {
var $rows = $table.find('tbody tr').not('.filter-row').not(function() {
return $(this).find('th').length > 0;
});
var $selects = $table.find('.filter-row select');
$rows.each(function() {
var $row = $(this);
var showRow = true;
$selects.each(function(index) {
var filterValue = $(this).val();
var cellValue = $row.find('td').eq(index).text().trim();
if (filterValue !== "" && cellValue !== filterValue) {
showRow = false;
return false;
}
});
$row.toggle(showRow);
});
}
});