feat: katex in markdown preview + xss fix for svg

This commit is contained in:
NGPixel
2020-03-06 14:31:05 -05:00
parent 4398573645
commit 830f51664c
3 changed files with 175 additions and 2 deletions

View File

@@ -214,10 +214,14 @@ import mdSup from 'markdown-it-sup'
import mdSub from 'markdown-it-sub'
import mdMark from 'markdown-it-mark'
import mdImsize from 'markdown-it-imsize'
import katex from 'katex'
// Prism (Syntax Highlighting)
import Prism from 'prismjs'
// Helpers
import katexHelper from './common/katex'
// ========================================
// INIT
// ========================================
@@ -278,6 +282,35 @@ md.renderer.rules.paragraph_open = injectLineNumbers
md.renderer.rules.heading_open = injectLineNumbers
md.renderer.rules.blockquote_open = injectLineNumbers
// ========================================
// KATEX
// ========================================
md.inline.ruler.after('escape', 'katex_inline', katexHelper.katexInline)
md.renderer.rules.katex_inline = (tokens, idx) => {
try {
return katex.renderToString(tokens[idx].content, {
displayMode: false
})
} catch (err) {
console.warn(err)
return tokens[idx].content
}
}
md.block.ruler.after('blockquote', 'katex_block', katexHelper.katexBlock, {
alt: [ 'paragraph', 'reference', 'blockquote', 'list' ]
})
md.renderer.rules.katex_block = (tokens, idx) => {
try {
return `<p>` + katex.renderToString(tokens[idx].content, {
displayMode: true
}) + `</p>`
} catch (err) {
console.warn(err)
return tokens[idx].content
}
}
// ========================================
// Vue Component
// ========================================