comparison src/site.js @ 29:505185272dd7

edit chat
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 02 Aug 2025 22:39:48 -0600
parents 99b71a377f2c
children 1e7d855afde3
comparison
equal deleted inserted replaced
28:99b71a377f2c 29:505185272dd7
122 122
123 // requires markdown-it 123 // requires markdown-it
124 124
125 let mdDiv = document.createElement('div'); 125 let mdDiv = document.createElement('div');
126 126
127 function handleMarkdown() { 127 function handleMarkdown(lang) {
128 let converter = window.markdownit({html: true}); 128 let converter = window.markdownit({html: true});
129 let divs = document.querySelectorAll('[markdown]'); 129 let divs = document.querySelectorAll('[markdown]');
130 for( let div of divs ) { 130 for( let div of divs ) {
131 let text = div.textContent; 131 let text = div.textContent;
132 text = text.replace(/\{([^|}]+)\|([^|}]+)\}/g, '<ruby>$1<rt>$2</rt></ruby>'); 132 text = text.replace(/\{([^|}]+)\|([^|}]+)\}/g, '<ruby>$1<rt>$2</rt></ruby>');
133 text = converter.render(text); 133 text = converter.render(text);
134 if( div.getAttribute('role')==='assistant' ) { 134 if( lang && div.getAttribute('role')==='assistant' ) {
135 mdDiv.innerHTML = text; 135 mdDiv.innerHTML = text;
136 let rts = mdDiv.querySelectorAll('rt'); 136 let rts = mdDiv.querySelectorAll('rt');
137 for( let rt of rts ) { 137 for( let rt of rts ) {
138 rt.remove(); 138 rt.remove();
139 } 139 }
140 //console.log(mdDiv.textContent); 140 //console.log(mdDiv.textContent);
141 let lang = div.getAttribute('lang');
142 text += `\n<p><audio controls preload=none src="/tts.mp3?lang=${lang}&text=${encodeURIComponent(mdDiv.textContent)}"></audio></p>\n`; 141 text += `\n<p><audio controls preload=none src="/tts.mp3?lang=${lang}&text=${encodeURIComponent(mdDiv.textContent)}"></audio></p>\n`;
143 } 142 }
144 div.innerHTML = text; 143 div.innerHTML = text;
145 div.removeAttribute('markdown'); 144 div.removeAttribute('markdown');
146 } 145 }