MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus Primatenwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
$(function() {
$(function() {
     $('table.filterable').each(function() {
     // Wir warten kurz, bis MediaWiki die Tabelle fertig gerendert hat
        var $table = $(this);
    mw.loader.using(['jquery.tablesorter'], function() {
        var $headerRow = $table.find('tr').first();
       
        var $filterRow = $('<tr class="filter-row"></tr>');
        $('table.filterable').each(function() {
        var $rows = $table.find('tbody > tr').not(':first');
            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);
                    }
                });


        $headerRow.find('th').each(function(index) {
                // Sortieren und hinzufügen
            var $filterCell = $('<th></th>');
                values.sort().forEach(function(val) {
            var $select = $('<select style="width: 100%;"><option value="">Alle</option></select>');
                    $select.append($('<option></option>').val(val).text(val));
           
                 });
            // Eindeutige Werte aus der Spalte sammeln
            var values = [];
            $rows.each(function() {
                var val = $(this).find('td').eq(index).text().trim();
                if (val && $.inArray(val, values) === -1) {
                    values.push(val);
                 }
            });


            // Werte sortieren und als Optionen hinzufügen
                 $select.on('change', function() {
            values.sort().forEach(function(val) {
                    filterTable($table);
                 $select.append($('<option></option>').val(val).html(val));
                });
            });


            $select.on('change', function() {
                $filterCell.append($select);
                 filterTable($table);
                 $filterRow.append($filterCell);
             });
             });


             $filterCell.append($select);
             // Filterzeile nach dem Header einfügen
             $filterRow.append($filterCell);
             $headerRow.after($filterRow);
         });
         });
        $headerRow.after($filterRow);
     });
     });


     function filterTable($table) {
     function filterTable($table) {
         var $rows = $table.find('tbody > tr').not(':first').not('.filter-row');
         var $rows = $table.find('tbody tr').not('.filter-row').not(function() {
            return $(this).find('th').length > 0;
        });
         var $selects = $table.find('.filter-row select');
         var $selects = $table.find('.filter-row select');


Zeile 52: Zeile 68:
                 }
                 }
             });
             });
             $row.toggle(showRow);
             $row.toggle(showRow);
         });
         });
     }
     }
});
});

Version vom 24. Februar 2026, 08:09 Uhr

$(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);
        });
    }
});