Skip to content

Commit d60a3a2

Browse files
authored
Update script.js
1 parent 94382ba commit d60a3a2

File tree

1 file changed

+49
-46
lines changed

1 file changed

+49
-46
lines changed

script.js

Lines changed: 49 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const input = document.getElementById("user-input");
44

55
let threadId = null;
66

7-
// Openingsbericht bij het laden van de pagina
7+
// Welkomstbericht bij laden
88
window.onload = () => {
99
const welkomstHTML = `
1010
Welkom bij <strong>Indicatiehulp.ai</strong>!<br>
@@ -76,14 +76,41 @@ function streamMessage(cssClass, text) {
7676
msg.classList.add("message", cssClass);
7777
chat.appendChild(msg);
7878

79-
// **...** omzetten naar <strong>...</strong>
80-
let formattedText = text.replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>");
79+
// Opschoning & HTML formatting
80+
let formattedText = text
81+
.replace(/\[\d+:\d+source\]/g, "") // bronverwijzingen weghalen
82+
.replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>") // **vet**
83+
.replace(
84+
/(https?:\/\/[^\s<>]+)/g,
85+
'<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>'
86+
); // Links klikbaar maken
87+
88+
const lines = formattedText.split("\n").filter(line => line.trim() !== "");
89+
const isNumberedList = lines.length > 1 && lines.every(line => /^\d+\.\s+/.test(line));
90+
const isBulletedList = lines.length > 1 && lines.every(line => /^[-*]\s+/.test(line));
91+
92+
if (isNumberedList || isBulletedList) {
93+
const listElement = document.createElement(isNumberedList ? "ol" : "ul");
94+
msg.appendChild(listElement);
95+
let i = 0;
96+
const interval = setInterval(() => {
97+
if (i < lines.length) {
98+
const li = document.createElement("li");
99+
li.innerHTML = lines[i].replace(/^(\d+\.\s+|[-*]\s+)/, "").trim();
100+
listElement.appendChild(li);
101+
chat.scrollTop = chat.scrollHeight;
102+
i++;
103+
} else {
104+
clearInterval(interval);
105+
}
106+
}, 200);
107+
return;
108+
}
81109

82-
// Inline bullets detecteren en splitsen
83-
if (/(?:^|\s)[\-*]\s/.test(formattedText)) {
84-
// Probeer bulletlijst uit inline te extraheren
85-
const parts = formattedText.split(/(?=[\-*]\s)/g);
86-
if (parts.length >= 2) {
110+
// Inline bulletlijst detectie: "- <strong>item</strong>"
111+
if (/\-\s+<strong>.*?<\/strong>/.test(formattedText)) {
112+
const parts = formattedText.split(/-\s+(?=<strong>)/g);
113+
if (parts.length > 2) {
87114
const intro = parts[0].trim();
88115
if (intro) {
89116
const p = document.createElement("p");
@@ -92,50 +119,26 @@ function streamMessage(cssClass, text) {
92119
}
93120

94121
const ul = document.createElement("ul");
95-
parts.slice(1).forEach(part => {
96-
const clean = part.replace(/^[-*]\s*/, "").trim();
97-
if (clean) {
98-
const li = document.createElement("li");
99-
li.innerHTML = clean;
100-
ul.appendChild(li);
101-
}
122+
parts.slice(1).forEach(item => {
123+
const li = document.createElement("li");
124+
li.innerHTML = item.trim();
125+
ul.appendChild(li);
102126
});
103127
msg.appendChild(ul);
104128
chat.scrollTop = chat.scrollHeight;
105129
return;
106130
}
107131
}
108132

109-
// Inline genummerde lijst detecteren
110-
const listPattern = /(?:^|\s)(\d+\.\s.*?)(?=\s\d+\.\s|$)/gs;
111-
const matches = [...formattedText.matchAll(listPattern)];
112-
113-
if (matches.length >= 2) {
114-
const introText = formattedText.split(matches[0][0])[0].trim();
115-
if (introText) {
116-
const p = document.createElement("p");
117-
p.innerHTML = introText;
118-
msg.appendChild(p);
133+
// Default: typ-animatie met inline HTML
134+
let index = 0;
135+
const interval = setInterval(() => {
136+
if (index < formattedText.length) {
137+
msg.innerHTML += formattedText.charAt(index++);
138+
chat.scrollTop = chat.scrollHeight;
139+
} else {
140+
clearInterval(interval);
119141
}
120-
121-
const ol = document.createElement("ol");
122-
matches.forEach(match => {
123-
const itemText = match[1].replace(/^\d+\.\s*/, "").trim();
124-
const li = document.createElement("li");
125-
li.innerHTML = itemText;
126-
ol.appendChild(li);
127-
});
128-
msg.appendChild(ol);
129-
} else {
130-
// Geen lijst – gewoon streamen
131-
let index = 0;
132-
const interval = setInterval(() => {
133-
if (index < formattedText.length) {
134-
msg.innerHTML += formattedText.charAt(index++);
135-
chat.scrollTop = chat.scrollHeight;
136-
} else {
137-
clearInterval(interval);
138-
}
139-
}, 15);
140-
}
142+
}, 15);
141143
}
144+

0 commit comments

Comments
 (0)