| document.addEventListener('DOMContentLoaded', () => { |
| |
| |
| const urlParams = new URLSearchParams(window.location.search); |
| const temaParam = urlParams.get('tema'); |
| if (temaParam) { |
| document.getElementById('tema-input').value = temaParam; |
| } |
|
|
| const form = document.getElementById('generate-form'); |
| const generateBtn = document.getElementById('generate-btn'); |
| const btnText = document.getElementById('btn-text'); |
| const btnSpinner = document.getElementById('btn-spinner'); |
| |
| const emptyState = document.getElementById('empty-state'); |
| const resultContainer = document.getElementById('result-container'); |
| const resultBadge = document.getElementById('result-badge'); |
| const resultText = document.getElementById('result-text'); |
| const analyticsContainer = document.getElementById('analytics-container'); |
| const visualizationContainer = document.getElementById('visualization-container'); |
|
|
| form.addEventListener('submit', async (e) => { |
| e.preventDefault(); |
|
|
| const tema = document.getElementById('tema-input').value.trim(); |
| const gaya = document.getElementById('gaya-input').value; |
|
|
| if (!tema) { |
| window.showToast('Tema tidak boleh kosong!', 'error'); |
| return; |
| } |
|
|
| |
| setLoadingState(true); |
|
|
| try { |
| const response = await fetch('/api/generate', { |
| method: 'POST', |
| headers: { |
| 'Content-Type': 'application/json' |
| }, |
| body: JSON.stringify({ tema, gaya }) |
| }); |
|
|
| if (!response.ok) { |
| throw new Error('Terjadi kesalahan pada server'); |
| } |
|
|
| const data = await response.json(); |
| |
| |
| displayResults(data); |
|
|
| } catch (error) { |
| console.error('Generation error:', error); |
| window.showToast(error.message || 'Gagal terhubung ke server', 'error'); |
| } finally { |
| |
| setLoadingState(false); |
| } |
| }); |
|
|
| function setLoadingState(isLoading) { |
| if (isLoading) { |
| generateBtn.disabled = true; |
| btnText.textContent = 'Memproses...'; |
| btnSpinner.classList.remove('hidden'); |
| |
| |
| resultContainer.classList.add('hidden'); |
| analyticsContainer.classList.add('hidden'); |
| visualizationContainer.classList.add('hidden'); |
| |
| |
| |
| emptyState.classList.add('hidden'); |
| } else { |
| generateBtn.disabled = false; |
| btnText.textContent = 'Generate Now'; |
| btnSpinner.classList.add('hidden'); |
| } |
| } |
|
|
| function displayResults(data) { |
| |
| resultBadge.textContent = `Tema: ${data.tema} | Gaya: ${data.gaya}`; |
| resultText.textContent = data.pantun; |
| |
| document.getElementById('stat-rima').textContent = data.pola_rima; |
| document.getElementById('stat-suku').textContent = data.suku_kata; |
| document.getElementById('stat-conf').textContent = `${(data.confidence * 100).toFixed(0)}%`; |
| document.getElementById('stat-sent').textContent = data.sentiment; |
|
|
| |
| resultContainer.classList.remove('hidden'); |
| resultContainer.classList.add('fade-in'); |
| |
| analyticsContainer.classList.remove('hidden'); |
| analyticsContainer.classList.add('fade-in'); |
| |
| visualizationContainer.classList.remove('hidden'); |
| visualizationContainer.classList.add('fade-in'); |
| |
| |
| emptyState.classList.add('hidden'); |
| |
| |
| setTimeout(() => { |
| resultContainer.classList.remove('fade-in'); |
| analyticsContainer.classList.remove('fade-in'); |
| visualizationContainer.classList.remove('fade-in'); |
| }, 500); |
| } |
| }); |
|
|