@@ -76,36 +76,44 @@ function streamMessage(cssClass, text) {
7676 msg . classList . add ( "message" , cssClass ) ;
7777 chat . appendChild ( msg ) ;
7878
79- const lines = text . split ( "\n" ) . filter ( line => line . trim ( ) !== "" ) ;
80-
81- const isNumberedList = lines . length > 1 && lines . every ( line => / ^ \d + \. \s + / . test ( line . trim ( ) ) ) ;
82- const isBulletedList = lines . length > 1 && lines . every ( line => / ^ [ - * • ] \s + / . test ( line . trim ( ) ) ) ;
83-
84- if ( isNumberedList || isBulletedList ) {
85- const listElement = document . createElement ( isNumberedList ? "ol" : "ul" ) ;
86- msg . appendChild ( listElement ) ;
87- let i = 0 ;
88-
89- const interval = setInterval ( ( ) => {
90- if ( i < lines . length ) {
91- const li = document . createElement ( "li" ) ;
92- li . textContent = lines [ i ] . replace ( / ^ ( \d + \. \s + | [ - * • ] \s + ) / , "" ) . trim ( ) ;
93- listElement . appendChild ( li ) ;
94- chat . scrollTop = chat . scrollHeight ;
95- i ++ ;
96- } else {
97- clearInterval ( interval ) ;
98- }
99- } , 200 ) ;
100- } else {
101- let index = 0 ;
102- const interval = setInterval ( ( ) => {
103- if ( index < text . length ) {
104- msg . textContent += text . charAt ( index ++ ) ;
105- chat . scrollTop = chat . scrollHeight ;
106- } else {
107- clearInterval ( interval ) ;
108- }
109- } , 15 ) ;
79+ // Genummerde lijst detectie: 1. ... 2. ... 3. ...
80+ const numberedPattern = / (?: ^ | \s ) ( \d + ) \. \s + ( [ ^ \d \. \n ] + ) / g;
81+ let matches = [ ...text . matchAll ( numberedPattern ) ] ;
82+
83+ if ( matches . length >= 2 ) {
84+ const list = document . createElement ( "ol" ) ;
85+ matches . forEach ( match => {
86+ const li = document . createElement ( "li" ) ;
87+ li . textContent = match [ 2 ] . trim ( ) ;
88+ list . appendChild ( li ) ;
89+ } ) ;
90+ msg . appendChild ( list ) ;
91+ return ;
11092 }
93+
94+ // Bulletlijst detectie: - ... of • ...
95+ const bulletPattern = / (?: ^ | \s ) [ \- • * ] \s + ( [ ^ \- • \n ] + ) / g;
96+ matches = [ ...text . matchAll ( bulletPattern ) ] ;
97+
98+ if ( matches . length >= 2 ) {
99+ const list = document . createElement ( "ul" ) ;
100+ matches . forEach ( match => {
101+ const li = document . createElement ( "li" ) ;
102+ li . textContent = match [ 1 ] . trim ( ) ;
103+ list . appendChild ( li ) ;
104+ } ) ;
105+ msg . appendChild ( list ) ;
106+ return ;
107+ }
108+
109+ // Geen lijst → toon als streaming tekst
110+ let index = 0 ;
111+ const interval = setInterval ( ( ) => {
112+ if ( index < text . length ) {
113+ msg . textContent += text . charAt ( index ++ ) ;
114+ chat . scrollTop = chat . scrollHeight ;
115+ } else {
116+ clearInterval ( interval ) ;
117+ }
118+ } , 15 ) ;
111119}
0 commit comments