feat: katex in markdown preview + xss fix for svg
This commit is contained in:
@@ -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
|
||||
// ========================================
|
||||
|
Reference in New Issue
Block a user