@eggjs/vuepress-theme-egg
Version:
VuePress theme for Egg.js
52 lines (49 loc) • 1.78 kB
JavaScript
const container = require('markdown-it-container');
const fs = require('fs');
const { path } = require('@vuepress/shared-utils');
// Theme API.
module.exports = () => {
return {
extendMarkdown: md => {
md.set({
linkify: true
});
// open image in new tab
md.renderer.rules.image = (tokens, idx) => {
const token = tokens[idx];
const src = token.attrs[token.attrIndex('src')][1];
const alt = token.content;
const altList = alt.split(':');
const srcStr = src.startsWith('/') ? `:src="$withBase('${src}')"` : `src="${src}"`;
return '<a target="_blank" class="md-img-wrapper" rel="noopener noreferrer">' +
`<img ${srcStr} alt="${altList[0]}" class="${altList.slice(1).join(' ')}" onload="this.parentNode.href=this.src">` +
'</a>';
};
// add custom block container
const containerName = 'block';
md.use(container, 'block', {
render(tokens, idx) {
const token = tokens[idx];
const info = token.info.trim().slice(containerName.length).trim();
return token.nesting === 1 ?
`<div class="block-container ${info}">\n` :
'</div>\n';
},
});
},
plugins: [
['@vuepress/active-header-links'],
['@vuepress/plugin-nprogress'],
[require('./plugins/extract')],
[ 'container', { type: 'tip', defaultTitle: { '/zh/': '提示' } }],
[ 'container', { type: 'warning', defaultTitle: { '/zh/': '注意' } }],
[ 'container', { type: 'danger', defaultTitle: { '/zh/': '警告' } }],
[
'fulltext-search',
{
hooks: fs.readFileSync(path.resolve(__dirname, './plugins/fullsearch/hooks.js')),
}
],
],
};
};