Spaces:
Running
Running
class RenderSymbols{ | |
constructor(){ | |
} | |
renderAll(elem){ | |
this.renderText(elem); | |
this.renderCode(elem); | |
this.renderMath(elem); | |
elem.scrollIntoView({behavior: "smooth", block: "end"}); | |
} | |
renderMath(elem) { | |
let content = elem.innerHTML; | |
MathJax.typesetPromise([elem]) | |
.then(() => { | |
}) | |
.catch((err) => { | |
}); | |
} | |
renderText(elem){ | |
elem.innerHTML = elem.innerHTML.replace(/<br\s*\/?>/g, '\n'); | |
elem.innerHTML = elem.innerHTML.replace(/\#\#\#(.*?)\#\#\#/g, '<span class="heading">$1</span>'); | |
elem.innerHTML = elem.innerHTML.replace(/\*\*\*(.*?)\*\*\*/g, '<span class="boldText">$1</span>'); | |
elem.innerHTML = elem.innerHTML.replace(/\*\*(.*?)\*\*/g, '<span class="subHeading">$1</span>'); | |
elem.innerHTML = elem.innerHTML.replace(/\n/g, '<br>'); | |
} | |
renderCode(element) { | |
let content = element.innerHTML; | |
if (content.includes("```") && content.split("```").length >= 3) { | |
content = content.replace(/```(\w*)<br>([\s\S]*?)```/g, (match, language, code) => { | |
code = code.replace(/<br>/g, '\n').trim(); | |
language = language.trim() || 'text'; | |
code = this.escapeHTML(code); | |
return `<pre class="code-block"><code class="language-${language}">${code}</code></pre>`; | |
}); | |
element.innerHTML = content; | |
element.querySelectorAll('code:not(.hljs)').forEach(block => { | |
hljs.highlightElement(block); | |
}); | |
} | |
} | |
escapeHTML(str) { | |
return str.replace(/[&<>"']/g, function (char) { | |
const map = { | |
'&': '&', | |
'<': '<', | |
'>': '>', | |
'"': '"', | |
"'": ''', | |
}; | |
return map[char] || char; | |
}); | |
} | |
} | |
export default RenderSymbols |