-
Notifications
You must be signed in to change notification settings - Fork 313
Expand file tree
/
Copy pathmd-to-vue.js
More file actions
94 lines (80 loc) · 2.03 KB
/
md-to-vue.js
File metadata and controls
94 lines (80 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import matter from 'gray-matter';
export default function mdToVue(options) {
const mdSegment = customRender(options);
if (mdSegment.isDesign) {
return `
<template>
<div name="DESIGN">${mdSegment.docMd}</div>
</template>
`;
}
let docHeader = '';
if (mdSegment.tdDocHeader) {
docHeader = `
<td-doc-header
slot="doc-header"
ref="tdDocHeader"
spline="${mdSegment.spline}"
>
</td-doc-header>`;
}
const sfc = `
<template>
<td-doc-content ref="tdDocContent" page-status="hidden">
${docHeader}
<div name="DOC">${mdSegment.docMd}</div>
<td-doc-footer slot="doc-footer"></td-doc-footer>
</td-doc-content>
</template>
<script>
import Prismjs from 'prismjs';
export default {
computed: {
tab: {
get() {
return this.$route.query.tab || 'demo';
},
set(v) {
if (this.$route.query.tab !== v)
this.$router.push({ query: { tab: v } });
}
},
},
mounted() {
const { tdDocContent, tdDocHeader } = this.$refs;
if (tdDocHeader) {
tdDocHeader.docInfo = {
title: \`${mdSegment.title}\`,
desc: \`${mdSegment.description}\`,
};
}
Prismjs.highlightAll();
this.$emit('loaded', () => {
tdDocContent.pageStatus = 'show';
});
},
};
</script>
`;
return sfc;
}
// 解析 markdown 内容
function customRender({ source, md }) {
const { content, data } = matter(source);
// console.log('data', data);
// md top data
const pageData = {
spline: '',
toc: true,
title: '',
description: '',
tdDocHeader: true,
...data,
};
const mdSegment = {
...pageData,
// eslint-disable-next-line no-useless-call
docMd: md.render.call(md, `${pageData.toc ? '[toc]\n' : ''}${content}`).html,
};
return mdSegment;
}