Mercurial Hosting > lang
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); |