From f8025018887e60b3100bd8465687ce782b6550e4 Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 25 May 2025 21:03:25 +0200 Subject: [PATCH] feat: implement category tabs with filtering for content listing page --- layouts/_default/list.html | 47 ++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/layouts/_default/list.html b/layouts/_default/list.html index 18df6af..eefc513 100644 --- a/layouts/_default/list.html +++ b/layouts/_default/list.html @@ -1,5 +1,17 @@ {{ define "main" }} -
+{{/* Pass the current section to the JavaScript via data attributes */}} +{{/* Also add a data attribute mapping section names to category names */}} +
{{ $categories := slice "Books" "Movies" "TV Series" "Recipes" "YouTube" "Music" "Concerts" }} {{ range $i, $cat := $categories }}
{{ $cat }}
@@ -19,7 +31,20 @@ document.addEventListener('DOMContentLoaded', function() { const originalTabs = Array.from(tabsContainer.querySelectorAll('.tab')); // Tabs defined in HTML const cardsContainer = document.getElementById('cards'); const allCards = Array.from(cardsContainer.children); - const currentSectionTitle = tabsContainer.getAttribute('data-current-section-title'); + + // Get the current section and section-to-category mappings + const currentSection = tabsContainer.getAttribute('data-current-section'); + let sectionMappings = {}; + try { + sectionMappings = JSON.parse(tabsContainer.getAttribute('data-section-mappings')); + } catch (e) { + console.error('Error parsing section mappings:', e); + } + + // Map the current section to its corresponding category + const currentCategory = sectionMappings[currentSection] || null; + + // Get all category values from the tabs const knownCategories = originalTabs.map(tab => tab.getAttribute('data-tab')); // Create and prepend the "All" tab @@ -31,6 +56,8 @@ document.addEventListener('DOMContentLoaded', function() { // Function to activate a tab and filter cards function activateTabAndFilter(selectedCategory) { + console.log('Filtering by category:', selectedCategory); + // Update active state for all tabs document.querySelectorAll('#tabs .tab').forEach(t => { if (t.getAttribute('data-tab') === selectedCategory) { @@ -41,20 +68,30 @@ document.addEventListener('DOMContentLoaded', function() { }); // Filter cards + let visibleCount = 0; allCards.forEach(card => { if (selectedCategory === 'all') { card.style.display = ''; + visibleCount++; } else { const cardCategory = card.getAttribute('data-category'); - card.style.display = (cardCategory === selectedCategory) ? '' : 'none'; + console.log('Card category:', cardCategory, 'Selected:', selectedCategory); + const isVisible = (cardCategory === selectedCategory); + card.style.display = isVisible ? '' : 'none'; + if (isVisible) visibleCount++; } }); + console.log('Visible cards after filtering:', visibleCount); } // Determine initial category to display let initialCategoryToDisplay = 'all'; - if (currentSectionTitle && knownCategories.includes(currentSectionTitle)) { - initialCategoryToDisplay = currentSectionTitle; + + // If we're on a section page and we have a mapping for this section, + // use the corresponding category + if (currentSection && currentCategory && knownCategories.includes(currentCategory)) { + initialCategoryToDisplay = currentCategory; + console.log('Initial category set to', initialCategoryToDisplay, 'based on section', currentSection); } // Attach click listeners to all tabs (including the new "All" tab)