1( function() { 2 document.addEventListener( 'DOMContentLoaded', function() { 3 var filterBars = document.querySelectorAll( '.sin-events-filters' ); 4 5 filterBars.forEach( function( bar ) { 6 var buttons = bar.querySelectorAll( '.sin-filter-btn' ); 7 var targetId = bar.getAttribute( 'data-target' ); 8 var grid = document.getElementById( targetId ); 9 if ( ! grid ) return; 10 11 var cards = grid.querySelectorAll( '.sin-event-card' ); 12 13 buttons.forEach( function( btn ) { 14 btn.addEventListener( 'click', function() { 15 var filter = this.getAttribute( 'data-filter' ); 16 17 // Update active state 18 buttons.forEach( function( b ) { b.classList.remove( 'active' ); } ); 19 this.classList.add( 'active' ); 20 21 // Filter cards 22 var visibleCount = 0; 23 cards.forEach( function( card ) { 24 var cat = card.getAttribute( 'data-category' ) || ''; 25 if ( filter === 'all' || filter === 'upcoming' || cat === filter ) { 26 card.setAttribute( 'data-hidden', 'false' ); 27 card.style.display = ''; 28 visibleCount++; 29 } else { 30 card.setAttribute( 'data-hidden', 'true' ); 31 card.style.display = 'none'; 32 } 33 } ); 34 35 // Update count on "all" button 36 var allBtn = bar.querySelector( '[data-filter="all"]' ); 37 if ( ! allBtn ) allBtn = bar.querySelector( '.sin-filter-btn' ); 38 // Don't update count on category filter, only show total on "all" 39 } ); 40 } ); 41 } ); 42 } ); 43} )();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.