/** * 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 – Διαποίμανση

«Τι περιμένει ο άνθρωπος στον κόσμο, σα γεράσει μόνο το χάρο μια βραδιά να τονε ξεκουράσει»

Διάφορα (33)Ταινίες (1)✍️ Στέφανος Χ. Κουμαρόπουλος (45) 💬 0 👁️ 1225

Προτείνουμε την παρακολούθηση της κινηματογραφικής ταινίας για τον Άγιο Νεκτάριο με τίτλο: «Ο άνθρωπος του Θεού»,

Πρόκειται για δοκίμια κοινωνικής ευαισθητοποίησης, που εκπέμπουν ένα ρεαλιστικό μήνυμα ελπίδας.

Η συνέντευξη που ακολουθεί πραγματοποιήθηκε στις 19 Νοεμβρίου του 2000 κατόπιν προσωπικής μου παρακλήσεως. Η Αγία Μητέρα, (Α.Μ.) Ηγουμένη Ιεράς Μονής δέχτηκε να μου παραχωρήσει συνέντευξη με τον όρο να εξασφαλίσω την ανωνυμία της και την ευχαριστώ.

Οι εκδόσεις Ακρίτας, διοργάνωσαν εκδήλωση τιμής και μνήμης στο πρόσωπο του μακαριστού Ιερέα και Θεολόγου π. Μιχαήλ Καρδαμάκη, με αφορμή την δεύτερη έκδοση του βιβλίου του: Στην Παναγία, Λόγοι σκέψεις με αφορμή την Θεοτόκο. Η εκδήλωση πραγματοποιήθηκε στις 19 Νοεμβρίου 2022, στο Πνευματικό κέντρο του Ιερού Ναού Αγίου Παντελεήμονος Ιλισσού, Καλλιρρόης 19, στην Αθήνα.

ΣΤΟΝ ΑΓΙΟ ΠΟΡΦΥΡΙΟ

Εις Μνημόσυνον: Γεώργιος Παπαγεωργίου (1959-2022). Πριν από λίγο καιρό συγκεντρωθήκαμε στο Κοιμητήριο του Χολαργού,τη Μεγάλη Τρίτη 19 Απριλίου 2022...

Θα προσπαθήσω να περιγράψω τί με έκανε να αναζητώ κάθε Τετάρτη βράδυ στις 9 να ακούσω τον πατέρα Ανανία Κουστένη...

ΜΕ ΑΦΟΡΜΗ το Ευρωπαϊκό έτος Νεολαίας (2022), προτείνουμε για μελέτη το τεύχος 161 της Σύναξης αφιερωμένο στα Παιδιά, κρατώντας στη μνήμη μας ένα παλαιότερο Διεθνές Έτος Νεότητος (1985) και παράθεση ενός άρθρου του Α. Μ. Σταυροπούλου με τίτλο Ένα έτος μία πρόκληση.

Διάφορα (33)Ποίηση (5)✍️ Στέφανος Χ. Κουμαρόπουλος (45) 💬 0 👁️ 885

Οἱ Δοκιμές τοῦ Στάθη Κ. Γιαννῆ (συλλογή ποιημάτων, Αθήνα 2022, 58 σ.) Δρ. Παιδαγωγικῶν, πρ. Σχολικοῦ Συμβούλου καί Ἁγιογράφου...