@@ -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