|
1 | 1 | const {resolve} = require('path'); |
2 | 2 |
|
3 | | -module.exports = ({defaults}) => { |
4 | | - function render(md) { |
5 | | - const fence = md.renderer.rules.fence; |
6 | | - md.renderer.rules.fence = (...args) => { |
7 | | - const [tokens, idx] = args; |
8 | | - const token = tokens[idx]; |
9 | | - const lang = token.info.trim(); |
| 3 | +function render({renderer}) { |
| 4 | + const fence = renderer.rules.fence; |
| 5 | + renderer.rules.fence = (...args) => { |
| 6 | + const [tokens, idx] = args; |
| 7 | + const token = tokens[idx]; |
| 8 | + const lang = token.info.trim(); |
10 | 9 |
|
11 | | - if (!(/ chart-editor( |$)/).test(lang)) { |
12 | | - return fence(...args); |
13 | | - } |
| 10 | + return (/ chart-editor( |$)/).test(lang) ? |
| 11 | + `<chart-editor :code="\`${token.content}\`"/>` : |
| 12 | + fence(...args); |
| 13 | + }; |
| 14 | +} |
| 15 | + |
| 16 | +function importsScripts(imports) { |
| 17 | + const names = imports.map(([, name]) => name).filter((name) => !!name); |
| 18 | + const lines = imports.map(([file, name]) => { |
| 19 | + const path = `@docs/${file}`; |
| 20 | + return name ? |
| 21 | + `import * as ${name} from '${path}'` : |
| 22 | + `import '${path}'`; |
| 23 | + }); |
14 | 24 |
|
15 | | - return `<chart-editor :code="\`${token.content}\`"/>`; |
16 | | - }; |
17 | | - } |
| 25 | + return ` |
| 26 | + import Vue from 'vue'; |
| 27 | + ${lines.join(';\n')}; |
18 | 28 |
|
| 29 | + const imports = { |
| 30 | + ${names.join(',\n')} |
| 31 | + } |
| 32 | +
|
| 33 | + Vue.mixin({ |
| 34 | + created() { |
| 35 | + this.$chart = this.$chart || {}; |
| 36 | + this.$chart.imports = imports; |
| 37 | + } |
| 38 | + }) |
| 39 | + `; |
| 40 | +} |
| 41 | + |
| 42 | +module.exports = ({imports}) => { |
19 | 43 | return { |
20 | 44 | name: 'vuepress-plugin-chart-editor', |
21 | 45 | enhanceAppFiles: [ |
22 | | - { |
23 | | - name: 'chart-defaults', |
24 | | - content: ` |
25 | | - import Chart from 'chart.js'; |
26 | | - Chart.helpers.merge(Chart.defaults, ${JSON.stringify(defaults)}); |
27 | | - ` |
28 | | - }, |
29 | 46 | resolve(__dirname, 'global.js'), |
30 | 47 | resolve(__dirname, 'enhancer.js'), |
| 48 | + { |
| 49 | + content: importsScripts(imports), |
| 50 | + name: 'chart-imports', |
| 51 | + } |
31 | 52 | ], |
32 | 53 | chainWebpack: (config) => { |
33 | 54 | config.merge({ |
34 | 55 | externals: { |
35 | 56 | moment: 'moment', |
36 | 57 | }, |
| 58 | + resolve: { |
| 59 | + alias: { |
| 60 | + '@docs': resolve(__dirname, '../../../'), |
| 61 | + } |
| 62 | + } |
37 | 63 | }); |
38 | 64 | }, |
39 | 65 | chainMarkdown: (config) => { |
|
0 commit comments