/* global wpforo, $wpf, wpforo_phrase, wpforo_load_hide */ /** * wpForo AI Chatbot JavaScript * * AI-powered chat functionality for the AI Assistant widget * Requires: frontend.js to be loaded first for $wpf, wpforo_phrase * * @since 3.0.0 */ $wpf(document).ready(function ($) { var wpforo_wrap = $('#wpforo-wrap'); var chatContainer = wpforo_wrap.find('.wpf-ai-chat'); if (!chatContainer.length) { return; } var chatNonce = chatContainer.data('nonce'); var currentConversationId = null; var isLoading = false; // ========================================================================= // HELPER FUNCTIONS // ========================================================================= /** * Format timestamp for display */ function formatTime(dateStr) { if (!dateStr) return ''; var date = new Date(dateStr); return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); } /** * Format date for conversation list */ function formatDate(dateStr) { if (!dateStr) return ''; var date = new Date(dateStr); var now = new Date(); var diff = now - date; var dayMs = 24 * 60 * 60 * 1000; if (diff < dayMs) { return wpforo_phrase('Today'); } else if (diff < 2 * dayMs) { return wpforo_phrase('Yesterday'); } else if (diff < 7 * dayMs) { return date.toLocaleDateString([], { weekday: 'short' }); } else { return date.toLocaleDateString([], { month: 'short', day: 'numeric' }); } } /** * Escape HTML for user-generated content */ function escapeHtml(text) { var div = document.createElement('div'); div.textContent = text; return div.innerHTML; } /** * Auto-resize textarea */ function autoResizeTextarea(textarea) { textarea.style.height = 'auto'; textarea.style.height = Math.min(textarea.scrollHeight, 120) + 'px'; } // ========================================================================= // CONVERSATIONS MANAGEMENT // ========================================================================= /** * Load conversations list */ function loadConversations() { var listContainer = chatContainer.find('.wpf-ai-chat-conversations'); listContainer.html('
' + wpforo_phrase('Start a new conversation or select an existing one') + '
' + '