mirror of
https://gitee.com/wot-design-uni/wot-design-uni.git
synced 2025-12-06 17:18:40 +08:00
59 lines
1.6 KiB
JavaScript
59 lines
1.6 KiB
JavaScript
const hljs = require('highlight.js')
|
|
const MarkdownIt = require('markdown-it')
|
|
const markdownItContainer = require('markdown-it-container')
|
|
const markdownItAnchor = require('markdown-it-anchor')
|
|
const slugify = require('transliteration').slugify
|
|
|
|
const md = new MarkdownIt({
|
|
html: true,
|
|
highlight: function (str, lang) {
|
|
str = str.replace(/</g, '<')
|
|
str = str.replace(/>/g, '>')
|
|
|
|
if (lang && hljs.getLanguage(lang)) {
|
|
try {
|
|
return '<pre class="hljs language-' + lang + '"><code>' + hljs.highlight(lang, str, true).value + '</code></pre>'
|
|
} catch (__) {}
|
|
}
|
|
return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>'
|
|
}
|
|
})
|
|
.use(markdownItContainer, 'warning')
|
|
.use(markdownItContainer, 'error')
|
|
.use(markdownItContainer, 'info')
|
|
.use(markdownItAnchor, {
|
|
level: 2,
|
|
slugify,
|
|
permalink: true,
|
|
permalinkBefore: true
|
|
})
|
|
|
|
module.exports = (source) => {
|
|
const content = md.render(source)
|
|
let scriptStart = content.indexOf('<script>')
|
|
let scriptEnd = 0
|
|
let pageScript
|
|
let pageHtml = []
|
|
|
|
if (scriptStart > -1) {
|
|
scriptEnd = content.indexOf('</script>') + '</script>'.length
|
|
pageScript = content.slice(scriptStart, scriptEnd)
|
|
} else {
|
|
scriptStart = 0
|
|
}
|
|
|
|
pageHtml.push(content.slice(0, scriptStart))
|
|
pageHtml.push(content.slice(scriptEnd))
|
|
|
|
let output = pageHtml.join('').replace(/\{/g, '<span>{</span>').replace(/\}/g, '<span>}</span>')
|
|
|
|
return `
|
|
<template>
|
|
<section class="markdown-content">
|
|
${output}
|
|
</section>
|
|
</template>
|
|
${pageScript}
|
|
`
|
|
}
|