diff --git a/index.php b/index.php index 9d224f3..735e443 100644 --- a/index.php +++ b/index.php @@ -53,30 +53,34 @@ const citation = document.createElement('blockquote'); citation.innerText = formulaireData.get('question'); conversation.appendChild(citation); - formulaire.reset(); - const requete = await fetch(formulaire.action, { - method: formulaire.method, - body: formulaireData - }); const paragraphe = document.createElement('p'); paragraphe.setAttribute('aria-busy', 'true'); conversation.appendChild(paragraphe); - const reponse = await requete.text(); - paragraphe.setAttribute('aria-busy', 'false'); - Array.from(reponse).forEach((lettre, i) => { - setTimeout(() => { - if (lettre == "\n") paragraphe.innerHTML += "
"; - else paragraphe.innerHTML += lettre; - }, i * 40); + + const requete = await fetch(formulaire.action, { + method: formulaire.method, + body: formulaireData }); - setTimeout(() => { - conversation.innerHTML += "

😸 Voulez-vous que je réponde à une autre question ?

"; - conversation.scrollTop = conversation.scrollHeight; - bouton.disabled = false; - bouton.setAttribute("aria-busy", false); - }, reponse.length * 40); + paragraphe.setAttribute('aria-busy', 'false'); + + const reader = requete.body.getReader(); + const decoder = new TextDecoder("utf-8"); + + while (true) { + const { value, done } = await reader.read(); + if (done) break; + const lettre = decoder.decode(value, { stream: true }); + if (lettre == "\n") paragraphe.innerHTML += "
"; + else paragraphe.innerHTML += lettre; + await new Promise(r => setTimeout(r, 0)); // micro pause pour rendre l'UI responsive + } + + conversation.innerHTML += "

😸 Voulez-vous que je réponde à une autre question ?

"; + conversation.scrollTop = conversation.scrollHeight; + bouton.disabled = false; + bouton.setAttribute("aria-busy", false); }); diff --git a/question.php b/question.php index 3e8e956..6c468a9 100644 --- a/question.php +++ b/question.php @@ -1 +1,20 @@ - \ No newline at end of file +