docs_vue2/one/build/remark-custom.js
2021-09-25 15:17:57 +08:00

46 lines
1.2 KiB
JavaScript

import tokenizer from './custom-block'
import visit from 'unist-util-visit'
import { render } from './page'
const NAME = 'customblock'
const typeMap = {
tip: 'info',
warning: 'warning'
}
export default function attacher () {
let proto = this.Parser.prototype
proto.blockTokenizers[NAME] = tokenizer
proto.interruptParagraph.push([NAME])
proto.interruptList.push([NAME])
proto.interruptBlockquote.push([NAME])
let methods = proto.blockMethods
methods.unshift(NAME)
return (tree, file) => {
let { path, data } = file
visit(tree, NAME, ({ className, value }, index, parent) => {
let { contents } = render(value, path, {})
if (typeMap[className]) {
if (!data.hasAlert) {
data.hasAlert = true
}
parent.children.splice(index, 1, {
type: 'html',
value: `<veui-alert ui="s" type="${typeMap[className]}">${contents}</veui-alert>`
})
} else {
className = className ? `${className} custom-block` : 'custom-block'
parent.children.splice(index, 1, {
type: 'html',
value: `<div class="${className}">${contents}</div>`
})
}
})
}
}