40 lines
		
	
	
		
			793 B
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			793 B
		
	
	
	
		
			Vue
		
	
	
| <template>
 | |
|   <div v-html="marked(text)" class="markdown" />
 | |
| </template>
 | |
| <script>
 | |
| import marked from 'marked'
 | |
| marked.setOptions({
 | |
|   renderer: new marked.Renderer(),
 | |
|   gfm: true,
 | |
|   tables: true,
 | |
|   breaks: true,
 | |
|   pedantic: true,
 | |
|   sanitize: true,
 | |
|   smartLists: true,
 | |
|   smartypants: true,
 | |
| })
 | |
| export default {
 | |
|   name: 'md',
 | |
|   props: {
 | |
|     cn: String,
 | |
|     us: String,
 | |
|   },
 | |
|   data () {
 | |
|     const { lang } = this.$route.params
 | |
|     let text = ''
 | |
|     const { cn, us } = this
 | |
|     if (this.$slots.default && this.$slots.default[0] && this.$slots.default[0].text) {
 | |
|       text = this.$slots.default[0].text
 | |
|     } else {
 | |
|       text = lang === 'cn' ? cn : us
 | |
|     }
 | |
|     text = text || ''
 | |
|     text = text.split('\n').map(t => t.trim()).join('\n')
 | |
|     return {
 | |
|       marked,
 | |
|       text,
 | |
|     }
 | |
|   },
 | |
| }
 | |
| </script>
 |