// Simple, Reliable Blog Search System - FIXED VERSION console.log('๐ธ Blog JavaScript loading...'); // Simple global search function that ALWAYS works window.blogSearch = function(searchTerm) { console.log('=== ๐ BLOG SEARCH STARTED ==='); console.log('Search term:', searchTerm); const articles = document.querySelectorAll('.blog-article'); const searchLower = (searchTerm || '').toLowerCase().trim(); let visibleCount = 0; console.log('Found', articles.length, 'articles to search through'); // Show all articles if no search term if (!searchLower) { console.log('No search term - showing all articles'); articles.forEach(function(article) { article.style.display = 'block'; visibleCount++; }); } else { // Search through articles articles.forEach(function(article, index) { const title = (article.getAttribute('data-title') || '').toLowerCase(); const author = (article.getAttribute('data-author') || '').toLowerCase(); const category = (article.getAttribute('data-category') || '').toLowerCase(); const matches = title.includes(searchLower) || author.includes(searchLower) || category.includes(searchLower); console.log(`Article ${index}: "${title}" | Category: "${category}" | Author: "${author}" | Matches: ${matches}`); if (matches) { article.style.display = 'block'; visibleCount++; console.log('โ SHOWING article:', title); } else { article.style.display = 'none'; console.log('โ HIDING article:', title); } }); } console.log('=== โ SEARCH COMPLETE ==='); console.log('Visible articles:', visibleCount); // Update search button icon const searchButton = document.getElementById('search-button'); if (searchButton) { if (searchLower) { searchButton.innerHTML = ''; console.log('Button changed to X (clear)'); } else { searchButton.innerHTML = ''; console.log('Button changed to search icon'); } } // Handle no results message const noResults = document.getElementById('no-results'); if (noResults) { if (visibleCount === 0 && searchLower) { noResults.classList.remove('hidden'); console.log('Showing no results message'); } else { noResults.classList.add('hidden'); console.log('Hiding no results message'); } } return visibleCount; }; // Category filter function window.categoryFilter = function(category) { console.log('=== ๐ CATEGORY FILTER ==='); console.log('Category:', category); const articles = document.querySelectorAll('.blog-article'); let visibleCount = 0; articles.forEach(function(article, index) { const articleCategory = (article.getAttribute('data-category') || '').toLowerCase(); const matches = category === 'all' || articleCategory.includes(category.toLowerCase()); console.log(`Article ${index}: Category "${articleCategory}" | Show: ${matches}`); if (matches) { article.style.display = 'block'; visibleCount++; } else { article.style.display = 'none'; } }); console.log('Category filter complete. Visible:', visibleCount); return visibleCount; }; // Clear search function window.clearBlogSearch = function() { console.log('๐งน Clearing search...'); const searchInput = document.getElementById('article-search'); if (searchInput) { searchInput.value = ''; console.log('Search input cleared'); } window.blogSearch(''); }; function init() { console.log('=== ๐ BLOG INIT STARTING ==='); // Get elements const searchInput = document.getElementById('article-search'); const searchButton = document.getElementById('search-button'); const articles = document.querySelectorAll('.blog-article'); const categoryButtons = document.querySelectorAll('.category-filter-btn'); console.log('Elements found:', { searchInput: !!searchInput, searchInputExists: searchInput ? 'YES' : 'NO', searchButton: !!searchButton, searchButtonExists: searchButton ? 'YES' : 'NO', articles: articles.length, categoryButtons: categoryButtons.length }); // CRITICAL: Set up search input with detailed logging if (searchInput) { console.log('โ Setting up search input...'); // Real-time search as user types searchInput.addEventListener('input', function(e) { console.log('๐ INPUT EVENT:', e.target.value); window.blogSearch(e.target.value); }); // Enter key search searchInput.addEventListener('keydown', function(e) { if (e.key === 'Enter') { e.preventDefault(); console.log('โจ๏ธ ENTER KEY PRESSED:', e.target.value); window.blogSearch(e.target.value); } }); console.log('โ Search input listeners added successfully!'); } else { console.error('โ CRITICAL ERROR: Search input element not found! ID: article-search'); } // Set up search button if (searchButton) { console.log('โ Setting up search button...'); searchButton.addEventListener('click', function(e) { e.preventDefault(); console.log('๐ SEARCH BUTTON CLICKED'); if (searchInput) { const currentValue = searchInput.value; if (currentValue.trim()) { console.log('Button search for:', currentValue); window.blogSearch(currentValue); } else { console.log('Button clear search'); window.clearBlogSearch(); } } }); console.log('โ Search button listener added successfully!'); } else { console.error('โ CRITICAL ERROR: Search button not found! ID: search-button'); } // Set up category buttons console.log('Setting up', categoryButtons.length, 'category buttons...'); categoryButtons.forEach(function(button, index) { const category = button.getAttribute('data-category'); console.log(`Category button ${index}: "${category}"`); button.addEventListener('click', function(e) { e.preventDefault(); console.log('๐ Category clicked:', category); // Update button styles categoryButtons.forEach(function(btn) { btn.classList.remove('active', 'bg-green-500', 'text-white'); btn.classList.add('bg-white/80', 'text-gray-700'); }); this.classList.add('active', 'bg-green-500', 'text-white'); this.classList.remove('bg-white/80', 'text-gray-700'); // Filter by category window.categoryFilter(category); }); }); // Set up article click handlers console.log('Setting up', articles.length, 'article click handlers...'); articles.forEach(function(article, index) { const title = article.getAttribute('data-title'); console.log(`Article ${index}: "${title}"`); article.style.cursor = 'pointer'; article.addEventListener('click', function(e) { // Don't open modal if clicking buttons if (e.target.tagName === 'BUTTON' || e.target.closest('button')) { return; } const title = this.getAttribute('data-title') || 'Article'; const author = this.getAttribute('data-author') || 'Author'; const category = this.getAttribute('data-category') || 'General'; const description = this.querySelector('p') ? this.querySelector('p').textContent : 'Article content'; console.log('Opening modal for:', title); window.openArticleModal(title, author, category, description); }); }); // Article modal function window.openArticleModal = function(title, author, category, description) { console.log('๐ Opening modal for:', title); const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4'; modal.innerHTML = '
By ' + author + '
' + 'Category: ' + category + '
' + '' + description + '
' + 'This comprehensive guide provides detailed information about ' + title.toLowerCase() + '. Perfect for guitar learners over 50 who want practical, easy-to-follow advice.
' + 'Remember, learning guitar at any age is a rewarding journey. Take your time, be patient with yourself, and celebrate every small victory along the way.
' + '