Skip to content

Commit 96c86bf

Browse files
authored
Update script.js
1 parent 0bf33a6 commit 96c86bf

File tree

1 file changed

+26
-24
lines changed

1 file changed

+26
-24
lines changed

script.js

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -76,34 +76,36 @@ function streamMessage(cssClass, text) {
7676
msg.classList.add("message", cssClass);
7777
chat.appendChild(msg);
7878

79-
// Splits tekst in regels
80-
const lines = text.split("\n").filter(line => line.trim() !== "");
81-
82-
const isNumberedList = lines.length > 1 && lines.every(line => /^\d+\.\s+/.test(line.trim()));
83-
const isBulletedList = lines.length > 1 && lines.every(line => /^[-*]\s+/.test(line.trim()));
84-
85-
if (isNumberedList || isBulletedList) {
86-
const listElement = document.createElement(isNumberedList ? "ol" : "ul");
87-
msg.appendChild(listElement);
88-
let i = 0;
79+
// Vervang **...** door <strong>...</strong>
80+
const formattedText = text.replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>");
81+
82+
// Detecteer inline genummerde lijst: "1. ..., 2. ..., 3. ..."
83+
const listPattern = /(?:^|\s)(\d+\.\s.*?)(?=\s\d+\.\s|$)/gs;
84+
const matches = [...formattedText.matchAll(listPattern)];
85+
86+
if (matches.length >= 2) {
87+
// Introductietekst vóór de eerste lijst
88+
const introText = formattedText.split(matches[0][0])[0].trim();
89+
if (introText) {
90+
const p = document.createElement("p");
91+
p.innerHTML = introText;
92+
msg.appendChild(p);
93+
}
8994

90-
const interval = setInterval(() => {
91-
if (i < lines.length) {
92-
const li = document.createElement("li");
93-
li.textContent = lines[i].replace(/^(\d+\.\s+|[-*]\s+)/, "").trim();
94-
listElement.appendChild(li);
95-
chat.scrollTop = chat.scrollHeight;
96-
i++;
97-
} else {
98-
clearInterval(interval);
99-
}
100-
}, 200);
95+
const ol = document.createElement("ol");
96+
matches.forEach(match => {
97+
const itemText = match[1].replace(/^\d+\.\s*/, "").trim();
98+
const li = document.createElement("li");
99+
li.innerHTML = itemText;
100+
ol.appendChild(li);
101+
});
102+
msg.appendChild(ol);
101103
} else {
102-
// Toon gewone tekst met typewriter-effect
104+
// Geen inline genummerde lijst → toon tekst met stream effect
103105
let index = 0;
104106
const interval = setInterval(() => {
105-
if (index < text.length) {
106-
msg.textContent += text.charAt(index++);
107+
if (index < formattedText.length) {
108+
msg.innerHTML += formattedText.charAt(index++);
107109
chat.scrollTop = chat.scrollHeight;
108110
} else {
109111
clearInterval(interval);

0 commit comments

Comments
 (0)