UNPKG

@eggjs/vuepress-theme-egg

Version:
52 lines (49 loc) 1.78 kB
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')), } ], ], }; };