Mercurial Hosting > lang
diff 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 |
line wrap: on
line diff
--- a/src/site.js Mon Aug 11 10:34:01 2025 +0900 +++ b/src/site.js Wed Aug 13 08:50:33 2025 +0900 @@ -130,18 +130,37 @@ let mdDiv = document.createElement('div'); +function toRuby(node) { + let type = node.nodeType; + if( type === Node.ELEMENT_NODE ) { + let name = node.tagName; + if( name === "PRE" || name === "CODE" ) + return; + for( let child of node.childNodes ) { + toRuby(child); + } + } else if( type === Node.TEXT_NODE ) { + let text = node.nodeValue.replace(/\{([^{|}]+)\|([^{|}]+)\}/g, '<ruby>$1<rt>$2</rt></ruby>'); + if( text !== node.nodeValue ) { + mdDiv.innerHTML = text; + while(mdDiv.firstChild) { + node.parentNode.insertBefore(mdDiv.firstChild, node); + } + node.remove(); + } + } +} + function handleMarkdown(lang,voice) { - let converter = window.markdownit({html: true}); + let converter = window.markdownit(); let divs = document.querySelectorAll('[markdown]'); for( let div of divs ) { - let text = div.textContent; - text = text.replace(/\{([^{|}]+)\|([^{|}]+)\}/g, '<ruby>$1<rt>$2</rt></ruby>'); - text = converter.render(text); - div.innerHTML = text; + div.innerHTML = converter.render(div.textContent); + toRuby(div); div.removeAttribute('markdown'); let parent = div.parentNode; if( parent.getAttribute('role')==='assistant' ) { - mdDiv.innerHTML = text; + mdDiv.innerHTML = div.textContent; let rts = mdDiv.querySelectorAll('rt'); for( let rt of rts ) { rt.remove();