/** * Dieses Modul hat nur die Aufgabe den Filter-Zähler zu aktualisieren. * * D.h. es wird die Anzahl der aktiven Filter in einem Filter-Block angezeigt und bei Änderung aktualisiert. */ var FilterCountIndicator = (function ($) { "use strict"; var me = { storage: { $reveals: null }, init: function () { me.storage.$reveals = $('.filter-reveal'); if (me.storage.length === 0) { return; } // Initial Filter-Zähler füllen me.storage.$reveals.each(function () { me.countActiveFilters($(this)); }); me.registerEvents(); }, registerEvents: function () { // Bei Änderung der Filter-Elemente > Zähler aktualisieren me.storage.$reveals.each(function () { var $inputs = $(this).find('.filter-item').find('input'); $inputs.on('change keyup', function (event) { var $filterBlock = $(event.target).closest('.filter-block'); var isReveal = $filterBlock.hasClass('filter-reveal'); if (isReveal) { me.countActiveFilters($filterBlock) } }); }); }, /** * Filter-Zähler aktualisieren * * Methode durchläuft alle Input-Elemente eines Filter-Blocks, * zählt die aktiven Filter und aktualisiert den Filter-Zähler. * * @param {jQuery} $filterBlock Filter-Block als jQuery-Element */ countActiveFilters: function ($filterBlock) { var activeFilterCounter = 0; // Alle Form-Elemente im Filter-Block durchlaufen und zählen wieviele Filter aktiv sind $filterBlock.find('.filter-item').find('input').each(function () { var $formElem = $(this); var isCheckbox = $formElem.attr('type') === 'checkbox'; var value = isCheckbox ? $formElem.prop('checked') : $formElem.val(); if (value === true || value.length > 0) { activeFilterCounter++; } }); // Counter-Label erstellen/aktualisieren var $title = $filterBlock.find('.filter-title'); var $counter = $title.find('.filter-counter'); var titleHasCounter = $counter.length > 0; if (!titleHasCounter) { $counter = $('').addClass('filter-counter'); $title.append($counter); } $counter.html(activeFilterCounter); if (activeFilterCounter === 0) { $counter.hide(); } else { $counter.show(); } } }; return { init: me.init } })(jQuery); $(document).ready(function () { FilterCountIndicator.init(); });