Spaces:
Sleeping
Sleeping
File size: 2,240 Bytes
d3fc2f7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | {% extends "base.html" %}
{% block content %}
<header class="header">
<h2>{{ subject_label }} - {{ "Ilmu Pengetahuan Alam dan Sosial" if subject=='ipas'
else "Pendidikan Jasmani, Olahraga, dan Kesehatan" if subject=='penjas'
else "Pendidikan Pancasila dan Kewarganegaraan" }}</h2>
<a class="link" href="{{ url_for('subjects') }}">← Kembali ke Home</a>
</header>
<main class="main">
<div id="chat-box" class="chat-box">
<div class="msg bot">Halo! Selamat datang di chat mata pelajaran {{ subject_label }}. Ada yang bisa saya bantu?</div>
</div>
<div class="input-row">
<input id="message" type="text" placeholder="Ketik pesan Anda...">
<button id="send" class="btn">SEND</button>
</div>
</main>
<script>
const chatBox = document.getElementById('chat-box');
const msgInput = document.getElementById('message');
const sendBtn = document.getElementById('send');
function append(role, text) {
const item = document.createElement('div');
item.className = 'msg ' + role;
item.textContent = text;
chatBox.appendChild(item);
chatBox.scrollTop = chatBox.scrollHeight;
}
async function ask(text){
const res = await fetch('{{ url_for("ask", subject_key=subject) }}', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({message: text})
});
return await res.json();
}
// ✅ FIX: pastikan history selalu ada array valid
const history = {{ history|default([])|tojson|safe }};
for (const item of history) {
const div = document.createElement('div');
div.className = 'msg ' + item.role;
div.textContent = item.message;
chatBox.appendChild(div);
}
sendBtn.addEventListener('click', async () => {
const text = msgInput.value.trim();
if (!text) return;
append('user', text);
msgInput.value = '';
append('bot', '⏳ Sedang memikirkan jawaban...');
try {
const data = await ask(text);
chatBox.lastChild.textContent = data.ok ? data.answer : ('Error: ' + (data.error || 'unknown'));
} catch (e) {
chatBox.lastChild.textContent = 'Error jaringan.';
}
});
msgInput.addEventListener('keydown', (e) => {
if (e.key === 'Enter') sendBtn.click();
});
</script>
{% endblock %}
|