@@ -48,9 +48,9 @@ form.addEventListener("submit", async (e) => {
4848
4949 const data = await response . json ( ) ;
5050 threadId = data . thread_id ;
51- streamMessage ( "agent-message" , data . reply ) ;
51+ renderMessage ( "agent-message" , data . reply ) ;
5252 } catch ( err ) {
53- streamMessage ( "agent-message" , "Er ging iets mis." ) ;
53+ renderMessage ( "agent-message" , "Er ging iets mis." ) ;
5454 console . error ( "Fout in fetch:" , err ) ;
5555 }
5656} ) ;
@@ -71,74 +71,38 @@ function appendFormattedMessage(cssClass, htmlContent) {
7171 chat . scrollTop = chat . scrollHeight ;
7272}
7373
74- function streamMessage ( cssClass , text ) {
74+ function renderMessage ( cssClass , text ) {
7575 const msg = document . createElement ( "div" ) ;
7676 msg . classList . add ( "message" , cssClass ) ;
7777 chat . appendChild ( msg ) ;
7878
79- // Opschoning & HTML formatting
8079 let formattedText = text
81- . replace ( / \[ \d + : \d + † s o u r c e \] / g, "" ) // bronverwijzingen weghalen
82- . replace ( / \* \* ( .* ?) \* \* / g, "<strong>$1</strong>" ) // **vet **
80+ . replace ( / \[ \d + : \d + † s o u r c e \] / g, "" ) // bronnen verwijderen
81+ . replace ( / \* \* ( .* ?) \* \* / g, "<strong>$1</strong>" ) // **vetgedrukt **
8382 . replace (
8483 / ( h t t p s ? : \/ \/ [ ^ \s < > ] + ) / g,
8584 '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>'
86- ) ; // Links klikbaar maken
85+ ) ; // klikbare links
8786
8887 const lines = formattedText . split ( "\n" ) . filter ( line => line . trim ( ) !== "" ) ;
8988 const isNumberedList = lines . length > 1 && lines . every ( line => / ^ \d + \. \s + / . test ( line ) ) ;
9089 const isBulletedList = lines . length > 1 && lines . every ( line => / ^ [ - * • ] \s + / . test ( line ) ) ;
9190
9291 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- }
109-
110- // Inline bulletlijst detectie: "- <strong>item</strong>"
111- if ( / \- \s + < s t r o n g > .* ?< \/ s t r o n g > / . test ( formattedText ) ) {
112- const parts = formattedText . split ( / - \s + (? = < s t r o n g > ) / g) ;
113- if ( parts . length > 2 ) {
114- const intro = parts [ 0 ] . trim ( ) ;
115- if ( intro ) {
116- const p = document . createElement ( "p" ) ;
117- p . innerHTML = intro ;
118- msg . appendChild ( p ) ;
119- }
120-
121- const ul = document . createElement ( "ul" ) ;
122- parts . slice ( 1 ) . forEach ( item => {
123- const li = document . createElement ( "li" ) ;
124- li . innerHTML = item . trim ( ) ;
125- ul . appendChild ( li ) ;
126- } ) ;
127- msg . appendChild ( ul ) ;
128- chat . scrollTop = chat . scrollHeight ;
129- return ;
130- }
92+ const list = document . createElement ( isNumberedList ? "ol" : "ul" ) ;
93+ lines . forEach ( line => {
94+ const li = document . createElement ( "li" ) ;
95+ li . innerHTML = line . replace ( / ^ ( \d + \. \s + | [ - * • ] \s + ) / , "" ) . trim ( ) ;
96+ list . appendChild ( li ) ;
97+ } ) ;
98+ msg . appendChild ( list ) ;
99+ } else {
100+ const p = document . createElement ( "p" ) ;
101+ p . innerHTML = formattedText . replace ( / \n / g, "<br>" ) ;
102+ msg . appendChild ( p ) ;
131103 }
132104
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 ) ;
141- }
142- } , 15 ) ;
105+ chat . scrollTop = chat . scrollHeight ;
143106}
144107
108+
0 commit comments