1
0
Fork 0
mirror of https://github.com/Luzifer/wiki.git synced 2025-01-02 00:41:21 +00:00
wiki/src/markdown.vue

61 lines
1 KiB
Vue
Raw Normal View History

<template>
<!-- eslint-disable-next-line vue/no-v-html -->
<div v-html="render" />
</template>
<script>
import showdown from 'showdown'
const classMap = {
table: 'table',
}
const htmlClassBindings = Object.keys(classMap)
.map(key => ({
regex: new RegExp(`<${key}(.*)>`, 'g'),
replace: `<${key} class="${classMap[key]}" $1>`,
type: 'output',
}))
export default {
data() {
return {
render: '',
}
},
emits: ['rendered'],
name: 'WikiMarkdown',
props: {
content: {
default: '',
type: String,
},
prerender: {
default: null,
type: Function,
},
},
watch: {
content(to) {
let content = to
if (this.prerender) {
content = this.prerender(content)
}
const converter = new showdown.Converter({
extensions: [...htmlClassBindings],
tables: true,
})
converter.setFlavor('github')
this.render = converter.makeHtml(content)
this.$emit('rendered')
},
},
}
</script>