// Sentence Converter Widget JavaScript window.SentenceConverterWidget = (function () { function initializeWidget(containerId) { console.log('🚀 Inicializando SentenceConverterWidget em:', containerId); const container = document.getElementById(containerId); if (!container) { console.error('❌ Container não encontrado:', containerId); return false; } const widget = container.querySelector('[data-converter-id="sentence-converter"]'); if (!widget) { console.error('❌ Widget não encontrado no container'); return false; } // Buscar configuração const configScript = widget.querySelector('#widget-config'); let config = {}; if (configScript) { try { config = JSON.parse(configScript.textContent); console.log('✅ Configuração carregada:', config); } catch (e) { console.warn('⚠️ Erro ao parsear configuração, usando fallback'); config = getFallbackConfig(); } } else { console.warn('⚠️ Configuração não encontrada, usando fallback'); config = getFallbackConfig(); } // Elementos do widget const elements = { inputText: widget.querySelector('#inputText'), outputText: widget.querySelector('#outputText'), convertBtn: widget.querySelector('#convertBtn'), copyBtn: widget.querySelector('#copyBtn'), clearBtn: widget.querySelector('#clearBtn'), charCount: widget.querySelector('#charCount'), status: widget.querySelector('#conversionStatus') }; // Verificar se todos os elementos existem const missingElements = Object.entries(elements) .filter(([key, element]) => !element) .map(([key]) => key); if (missingElements.length > 0) { console.error('❌ Elementos não encontrados:', missingElements); return false; } console.log('✅ Todos os elementos encontrados'); // Event Listeners setupEventListeners(elements, config); console.log('✅ SentenceConverterWidget inicializado com sucesso!'); return true; } function setupEventListeners(elements, config) { const { inputText, outputText, convertBtn, copyBtn, clearBtn, charCount, status } = elements; // Contador de caracteres inputText.addEventListener('input', function () { charCount.textContent = this.value.length; console.log('📝 Caracteres digitados:', this.value.length); }); // Converter texto convertBtn.addEventListener('click', async function () { console.log('🔄 Iniciando conversão...'); const text = inputText.value.trim(); if (!text) { showStatus(status, config.messages.enterText || 'Por favor, digite algum texto.', 'warning'); return; } // UI Loading state convertBtn.disabled = true; const originalText = convertBtn.innerHTML; convertBtn.innerHTML = '' + (config.messages.converting || 'Convertendo...'); try { const formData = new FormData(); formData.append('TextInput', text); formData.append('Language', config.language || 'pt'); console.log('📤 Enviando requisição para /api/converter/convert'); const response = await fetch('/api/converter/convert', { method: 'POST', body: formData }); const result = await response.json(); console.log('📥 Resposta recebida:', result); if (result.success) { outputText.value = result.outputText; copyBtn.disabled = false; showStatus(status, config.messages.success || 'Conversão realizada com sucesso!', 'success'); console.log('✅ Conversão bem-sucedida'); } else { showStatus(status, 'Erro: ' + result.message, 'danger'); console.error('❌ Erro na conversão:', result.message); } } catch (error) { showStatus(status, config.messages.connectionError || 'Erro de conexão. Tente novamente.', 'danger'); console.error('❌ Erro de conexão:', error); } finally { convertBtn.disabled = false; convertBtn.innerHTML = originalText; } }); // Copiar resultado copyBtn.addEventListener('click', async function () { try { await navigator.clipboard.writeText(outputText.value); showStatus(status, config.messages.copied || 'Texto copiado para a área de transferência!', 'success'); console.log('📋 Texto copiado com sucesso'); } catch (error) { showStatus(status, config.messages.copyError || 'Erro ao copiar texto.', 'danger'); console.error('❌ Erro ao copiar:', error); } }); // Limpar campos clearBtn.addEventListener('click', function () { inputText.value = ''; outputText.value = ''; copyBtn.disabled = true; charCount.textContent = '0'; status.innerHTML = ''; console.log('🧹 Campos limpos'); }); console.log('🎯 Event listeners configurados'); } function showStatus(statusElement, message, type) { statusElement.innerHTML = ` `; setTimeout(() => { statusElement.innerHTML = ''; }, 5000); } function getFallbackConfig() { return { language: 'pt', convertButtonText: 'Converter Texto', messages: { enterText: 'Por favor, digite algum texto.', converting: 'Convertendo...', success: 'Conversão realizada com sucesso!', copied: 'Texto copiado para a área de transferência!', connectionError: 'Erro de conexão. Tente novamente.', copyError: 'Erro ao copiar texto.' } }; } // API pública return { init: initializeWidget, version: '1.0.0' }; })(); // Auto-inicializar se encontrar widgets na página // Auto-inicializar se encontrar widgets na página (para uso standalone) document.addEventListener('DOMContentLoaded', function () { // Só auto-inicializar se não estivermos em um sistema de módulos if (!window.ModuleLoader && !window.ModuleSystem) { const widgets = document.querySelectorAll('[data-converter-id="sentence-converter"]'); widgets.forEach((widget, index) => { const containerId = widget.closest('[id]')?.id || `widget-container-${index}`; if (!widget.closest('[id]')) { widget.parentElement.id = containerId; } window.SentenceConverterWidget.init(containerId); }); } });