/** * AI Search Engine v2 - Main JavaScript File * Enhanced with better error handling and debugging */ jQuery(document).ready(function($) { // Variables let searchTimeout; let currentPage = 1; let currentSearchTerm = ''; let isLoading = false; // ============================================ // EVENT HANDLERS // ============================================ // Auto-search με καθυστέρηση $('#ai-search-input').on('input', function() { const searchTerm = $(this).val().trim(); if (searchTerm.length < 2) { $('#search-results').html(`

🔍 Πληκτρολογήστε τουλάχιστον 2 χαρακτήρες για αναζήτηση...

`); $('#ai-answer').hide(); return; } clearTimeout(searchTimeout); // Show typing indicator $('#search-results').html(`

Πληκτρολογείτε: "${searchTerm}"

`); searchTimeout = setTimeout(function() { performSearch(searchTerm, 1); }, 500); }); // Manual search με κλικ $('#ai-search-button').on('click', function() { const searchTerm = $('#ai-search-input').val().trim(); if (searchTerm.length >= 2) { performSearch(searchTerm, 1); } else { showAlert('Παρακαλώ εισάγετε τουλάχιστον 2 χαρακτήρες για αναζήτηση.', 'warning'); $('#ai-search-input').focus(); } }); // Enter key support $('#ai-search-input').on('keypress', function(e) { if (e.which === 13) { // Enter key const searchTerm = $(this).val().trim(); if (searchTerm.length >= 2) { performSearch(searchTerm, 1); } } }); // AI Answer button $('#get-ai-answer').on('click', function() { const searchTerm = $('#ai-search-input').val().trim(); if (searchTerm.length < 2) { showAlert('Παρακαλώ εισάγετε τουλάχιστον 2 χαρακτήρες για να ρωτήσετε την AI.', 'warning'); return; } getAIAnswer(searchTerm); }); // Dark mode toggle $('#dark-mode-toggle').on('click', function() { $('body').toggleClass('dark-mode-active'); $(this).toggleClass('active'); // Αποθήκευση στην τοπική αποθήκη const isDark = $('body').hasClass('dark-mode-active'); localStorage.setItem('ai_search_dark_mode', isDark ? 'dark' : 'light'); // Αλλαγή εικονιδίου $(this).html(isDark ? '☀️' : '🌙'); }); // ============================================ // CORE FUNCTIONS // ============================================ /** * Εκτέλεση αναζήτησης */ function performSearch(searchTerm, page) { if (isLoading) return; currentSearchTerm = searchTerm; currentPage = page; isLoading = true; // Εμφάνιση loading indicator $('#search-results').html(`

🔍 Αναζήτηση για: "${searchTerm}"

Παρακαλώ περιμένετε...

`); // Καταγραφή για debugging console.log('🔍 Starting search for:', searchTerm, 'Page:', page); $.ajax({ url: ai_search_vars.ajax_url, type: 'POST', data: { action: 'ai_search', search_term: searchTerm, page: page, nonce: ai_search_vars.nonce }, timeout: 15000, // 15 second timeout success: function(response) { console.log('✅ Search response:', response); if (response.success) { displayResults(response.data); updatePagination(response.data); // Αποθήκευση στατιστικού saveSearchStat(searchTerm); // Εμφάνιση πληροφοριών αναζήτησης showSearchInfo(response.data); } else { displayNoResults(searchTerm, 'Σφάλμα από το διακομιστή'); console.error('❌ Server error:', response.data); } }, error: function(xhr, status, error) { console.error('❌ AJAX Error:', { status: status, error: error, response: xhr.responseText }); displayNoResults(searchTerm, 'Σφάλμα σύνδεσης'); // Προσπάθεια fallback if (status === 'timeout') { showAlert('Η αναζήτηση χρειάστηκε πολύ χρόνο. Παρακαλώ δοκιμάστε ξανά.', 'error'); } }, complete: function() { isLoading = false; } }); } /** * Εμφάνιση αποτελεσμάτων */ function displayResults(data) { let resultsHtml = ''; if (data.results.length === 0) { resultsHtml = createNoResultsHTML(); } else { resultsHtml += `

✅ Βρέθηκαν ${data.total_results} αποτελέσματα

Μέθοδος: ${data.method || 'αναζήτηση'}
`; data.results.forEach(function(result, index) { const animationDelay = (index * 0.1) + 's'; resultsHtml += `

${result.title}

${result.categories ? ` 🏷️ ${result.categories} ` : ''} 📄 ${result.type} 📅 ${result.date}
👁️ Προβολή
`; }); // Προσθήκη debugging info αν υπάρχει if (data.search_method) { resultsHtml += `
Debug: ${data.search_method}
`; } } $('#search-results').html(resultsHtml); // Προσθήκη event listeners για buttons $('.copy-link').on('click', function() { const url = $(this).data('url'); navigator.clipboard.writeText(url).then(function() { showAlert('Ο σύνδεσμος αντιγράφηκε!', 'success'); }); }); $('.result-link').on('click', function(e) { console.log('Clicked result:', $(this).text()); // Μπορούμε να καταγράφουμε analytics εδώ }); } /** * HTML όταν δεν υπάρχουν αποτελέσματα */ function createNoResultsHTML() { return `
😔

Δεν βρέθηκαν αποτελέσματα για "${currentSearchTerm}"

💡 Προτάσεις για καλύτερη αναζήτηση:

⚡ Γρήγορες αναζητήσεις:

🤖 Βοήθεια από την AI:

Μπορείτε να ρωτήσετε την τεχνητή νοημοσύνη για:

`; } /** * Εμφάνιση μηνύματος όταν δεν υπάρχουν αποτελέσματα */ function displayNoResults(searchTerm, reason) { $('#search-results').html(`
⚠️

Πρόβλημα με την αναζήτηση για "${searchTerm}"

Αιτία: ${reason}

Αν το πρόβλημα παραμένει, ελέγξτε:

`); } /** * Ενημέρωση pagination */ function updatePagination(data) { let paginationHtml = ''; if (data.total_pages > 1) { paginationHtml = '
'; // Προηγούμενη σελίδα if (data.current_page > 1) { paginationHtml += ` `; } // Αριθμοί σελίδων let startPage = Math.max(1, data.current_page - 2); let endPage = Math.min(data.total_pages, data.current_page + 2); // Πρώτη σελίδα if (startPage > 1) { paginationHtml += ``; if (startPage > 2) paginationHtml += `...`; } // Κεντρικές σελίδες for (let i = startPage; i <= endPage; i++) { if (i === data.current_page) { paginationHtml += `${i}`; } else { paginationHtml += ``; } } // Τελευταία σελίδα if (endPage < data.total_pages) { if (endPage < data.total_pages - 1) paginationHtml += `...`; paginationHtml += ``; } // Επόμενη σελίδα if (data.current_page < data.total_pages) { paginationHtml += ` `; } paginationHtml += '
'; // Προσθήκη page info paginationHtml += `
Σελίδα ${data.current_page} από ${data.total_pages} (${data.total_results} αποτελέσματα)
`; } $('#search-pagination').html(paginationHtml); // Εκδήλωση κλικ σε pagination buttons $('.page-button').on('click', function() { const page = $(this).data('page'); performSearch(currentSearchTerm, page); // Scroll στο top των αποτελεσμάτων $('html, body').animate({ scrollTop: $('#search-results').offset().top - 100 }, 300); }); } /** * Λήψη απάντησης από AI */ function getAIAnswer(searchTerm) { if (isLoading) return; isLoading = true; $('#ai-answer').html(`

🤖 Η AI σκέφτεται...

Ανάλυση της αναζήτησης: "${searchTerm}"

Αυτό μπορεί να πάρει λίγα δευτερόλεπτα
`).show(); console.log('🧠 Requesting AI answer for:', searchTerm); $.ajax({ url: ai_search_vars.ajax_url, type: 'POST', data: { action: 'get_ai_answer', search_term: searchTerm, nonce: ai_search_vars.nonce }, timeout: 30000, // 30 seconds for AI success: function(response) { console.log('✅ AI response:', response); if (response.success) { $('#ai-answer').html(`
🤖

AI Απάντηση για: "${response.data.search_term}"

${response.data.answer}
`); // Auto scroll στην απάντηση $('html, body').animate({ scrollTop: $('#ai-answer').offset().top - 50 }, 500); } else { $('#ai-answer').html(`
⚠️

Δεν ήταν δυνατή η λήψη απάντησης

${response.data || 'Το API key μπορεί να μην είναι σωστά ρυθμισμένο.'}

⚙️ Ρυθμίσεις
`); } }, error: function(xhr, status, error) { console.error('❌ AI Error:', error); $('#ai-answer').html(`
🔌

Σφάλμα Σύνδεσης με AI

Δεν ήταν δυνατή η σύνδεση με τον διακομιστή AI.

Σφάλμα: ${error}

Βεβαιωθείτε ότι:

`); }, complete: function() { isLoading = false; } }); } /** * Αποθήκευση στατιστικών */ function saveSearchStat(searchTerm) { // Ασύγχρονη αποστολή - δεν περιμένουμε response $.ajax({ url: ai_search_vars.ajax_url, type: 'POST', data: { action: 'save_search_stat', search_term: searchTerm, nonce: ai_search_vars.nonce }, // Αδιάφορο αν αποτύχει error: function() { console.log('Statistics save failed (not critical)'); } }); } /** * Εμφάνιση πληροφοριών αναζήτησης */ function showSearchInfo(data) { // Μπορούμε να προσθέσουμε επιπλέον πληροφορίες if (data.total_results > 0) { const infoHtml = `
💡 Βρήκατε αυτό που ψάχνατε; Αν όχι, δοκιμάστε την AI ή αλλάξτε τους όρους αναζήτησης.
`; $('#search-results').append(infoHtml); } } /** * Εμφάνιση alert μηνύματος */ function showAlert(message, type = 'info') { const alertClass = { 'success': 'alert-success', 'error': 'alert-error', 'warning': 'alert-warning', 'info': 'alert-info' }[type] || 'alert-info'; const alertHtml = `
${message}
`; // Προσθήκη alert $('.ai-search-container').prepend(alertHtml); // Αυτόματη απόκρυψη μετά από 5 δευτερόλεπτα setTimeout(() => { $('.ai-alert').fadeOut(300, function() { $(this).remove(); }); }, 5000); // Κλείσιμο με κλικ $('.alert-close').on('click', function() { $(this).parent().fadeOut(300, function() { $(this).remove(); }); }); } // ============================================ // HELPER FUNCTIONS // ============================================ // Global functions για χρήση σε onclick handlers window.retrySearch = function(searchTerm) { performSearch(searchTerm || currentSearchTerm, 1); }; window.simplifySearch = function(searchTerm) { // Απλοποίηση αναζήτησης - πάρτε μόνο την πρώτη λέξη const words = searchTerm.split(' '); if (words.length > 1) { const simpleTerm = words[0]; $('#ai-search-input').val(simpleTerm); performSearch(simpleTerm, 1); showAlert(`Απλοποίηση σε: "${simpleTerm}"`, 'info'); } }; // Quick search buttons $(document).on('click', '.quick-search', function() { const term = $(this).data('term'); $('#ai-search-input').val(term); performSearch(term, 1); }); // ============================================ // INITIALIZATION // ============================================ // Έλεγχος για προηγούμενη ρύθμιση dark mode const savedMode = localStorage.getItem('ai_search_dark_mode'); if (savedMode === 'dark') { $('body').addClass('dark-mode-active'); $('#dark-mode-toggle').addClass('active').html('☀️'); } // Initial instruction $('#search-results').html(`
🔍

Καλωσήρθατε στην Έξυπνη Αναζήτηση

Πληκτρολογήστε παραπάνω για να ξεκινήσει η αναζήτηση.

📋 Παραδείγματα αναζήτησης:

✨ Δυνατότητες:

`); // Example search buttons $('.example-search').on('click', function() { const term = $(this).data('term'); $('#ai-search-input').val(term); performSearch(term, 1); }); // Debug mode (απενεργοποιημένο από default) const debugMode = false; if (debugMode) { console.log('🔧 AI Search Debug Mode Enabled'); console.log('AJAX URL:', ai_search_vars.ajax_url); console.log('Nonce:', ai_search_vars.nonce); } // Keyboard shortcuts $(document).on('keydown', function(e) { // Ctrl/Cmd + F για focus στο search input if ((e.ctrlKey || e.metaKey) && e.key === 'f') { e.preventDefault(); $('#ai-search-input').focus().select(); } // Escape για clear if (e.key === 'Escape') { $('#ai-search-input').val('').focus(); } // Ctrl/Cmd + Enter για AI if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') { e.preventDefault(); $('#get-ai-answer').click(); } }); // Focus στο input όταν φορτώνει η σελίδα setTimeout(() => { $('#ai-search-input').focus(); }, 500); }); // Global error handler window.addEventListener('error', function(e) { console.error('Global error:', e.error); }); apotelesmata – Σελίδα 2 – Διαποίμανση

Δεν βρέθηκαν αποτελέσματα.