comparison src/site.js @ 44:007856fd62c0

ruby fix
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 13 Aug 2025 08:50:33 +0900
parents 1d9d9786d76f
children fef7a5c65cfb
comparison
equal deleted inserted replaced
43:5ecfdf43f72d 44:007856fd62c0
128 128
129 // requires markdown-it 129 // requires markdown-it
130 130
131 let mdDiv = document.createElement('div'); 131 let mdDiv = document.createElement('div');
132 132
133 function toRuby(node) {
134 let type = node.nodeType;
135 if( type === Node.ELEMENT_NODE ) {
136 let name = node.tagName;
137 if( name === "PRE" || name === "CODE" )
138 return;
139 for( let child of node.childNodes ) {
140 toRuby(child);
141 }
142 } else if( type === Node.TEXT_NODE ) {
143 let text = node.nodeValue.replace(/\{([^{|}]+)\|([^{|}]+)\}/g, '<ruby>$1<rt>$2</rt></ruby>');
144 if( text !== node.nodeValue ) {
145 mdDiv.innerHTML = text;
146 while(mdDiv.firstChild) {
147 node.parentNode.insertBefore(mdDiv.firstChild, node);
148 }
149 node.remove();
150 }
151 }
152 }
153
133 function handleMarkdown(lang,voice) { 154 function handleMarkdown(lang,voice) {
134 let converter = window.markdownit({html: true}); 155 let converter = window.markdownit();
135 let divs = document.querySelectorAll('[markdown]'); 156 let divs = document.querySelectorAll('[markdown]');
136 for( let div of divs ) { 157 for( let div of divs ) {
137 let text = div.textContent; 158 div.innerHTML = converter.render(div.textContent);
138 text = text.replace(/\{([^{|}]+)\|([^{|}]+)\}/g, '<ruby>$1<rt>$2</rt></ruby>'); 159 toRuby(div);
139 text = converter.render(text);
140 div.innerHTML = text;
141 div.removeAttribute('markdown'); 160 div.removeAttribute('markdown');
142 let parent = div.parentNode; 161 let parent = div.parentNode;
143 if( parent.getAttribute('role')==='assistant' ) { 162 if( parent.getAttribute('role')==='assistant' ) {
144 mdDiv.innerHTML = text; 163 mdDiv.innerHTML = div.textContent;
145 let rts = mdDiv.querySelectorAll('rt'); 164 let rts = mdDiv.querySelectorAll('rt');
146 for( let rt of rts ) { 165 for( let rt of rts ) {
147 rt.remove(); 166 rt.remove();
148 } 167 }
149 //console.log(mdDiv.textContent); 168 //console.log(mdDiv.textContent);