2019-09-29 17:54:20 +08:00
|
|
|
<i18n>
|
|
|
|
{
|
2019-12-23 16:31:26 +08:00
|
|
|
"zh-CN": {
|
2019-09-29 17:54:20 +08:00
|
|
|
"show": "显示代码",
|
2020-03-11 20:46:45 +08:00
|
|
|
"hide": "收起代码",
|
|
|
|
"editOnGithub": "在 Github 上编辑"
|
2019-09-29 17:54:20 +08:00
|
|
|
},
|
2019-12-23 16:31:26 +08:00
|
|
|
"en-US": {
|
2019-09-29 17:54:20 +08:00
|
|
|
"show": "Show Code",
|
2020-03-11 20:46:45 +08:00
|
|
|
"hide": "Hide Code",
|
|
|
|
"editOnGithub": "Edit on Github"
|
2019-09-29 17:54:20 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
</i18n>
|
|
|
|
|
2019-09-17 19:24:39 +08:00
|
|
|
<template>
|
2019-12-22 23:19:08 +08:00
|
|
|
<n-card
|
2020-03-04 03:01:15 +08:00
|
|
|
v-if="isShow"
|
2019-12-22 23:19:08 +08:00
|
|
|
class="demo-card"
|
|
|
|
:segmented="{
|
|
|
|
footer: true
|
2019-09-17 19:24:39 +08:00
|
|
|
}"
|
2019-12-22 23:19:08 +08:00
|
|
|
:content-style="contentStyle"
|
2019-09-17 19:24:39 +08:00
|
|
|
>
|
2019-12-22 23:19:08 +08:00
|
|
|
<template v-slot:header>
|
2019-11-17 00:57:30 +08:00
|
|
|
<slot name="title" />
|
2019-12-22 23:19:08 +08:00
|
|
|
</template>
|
2020-03-09 17:18:01 +08:00
|
|
|
|
2019-12-22 23:19:08 +08:00
|
|
|
<template v-slot:header-extra>
|
2020-05-31 11:56:00 +08:00
|
|
|
<n-tooltip
|
|
|
|
:delay="300"
|
|
|
|
:placement="'top'"
|
|
|
|
:show-arrow="true"
|
|
|
|
>
|
|
|
|
<template v-slot:activator>
|
|
|
|
<edit-on-github-button
|
|
|
|
style="padding: 0; margin-right: 6px;"
|
|
|
|
size="tiny"
|
|
|
|
:url="url"
|
|
|
|
/>
|
|
|
|
</template>
|
|
|
|
{{ $t('editOnGithub') }}
|
|
|
|
</n-tooltip>
|
|
|
|
<n-tooltip
|
|
|
|
:delay="300"
|
|
|
|
:placement="'top'"
|
|
|
|
:show-arrow="true"
|
|
|
|
:controller="controller"
|
|
|
|
>
|
|
|
|
<template v-slot:activator>
|
|
|
|
<n-button
|
|
|
|
style="padding: 0;"
|
|
|
|
size="tiny"
|
|
|
|
text
|
|
|
|
icon-depth="tertiary"
|
|
|
|
@click="toggleCodeDisplay"
|
|
|
|
>
|
|
|
|
<template v-slot:icon>
|
|
|
|
<code-outline />
|
|
|
|
</template>
|
|
|
|
</n-button>
|
|
|
|
</template>
|
|
|
|
{{ !showCode ? $t('show') : $t('hide') }}
|
|
|
|
</n-tooltip>
|
2019-12-22 23:19:08 +08:00
|
|
|
</template>
|
|
|
|
<slot name="content" />
|
2020-01-05 15:20:35 +08:00
|
|
|
<slot name="demo" />
|
2019-12-23 22:18:04 +08:00
|
|
|
<template v-if="showCode" v-slot:footer>
|
2019-09-27 15:56:33 +08:00
|
|
|
<n-scrollbar>
|
|
|
|
<slot name="code" />
|
|
|
|
</n-scrollbar>
|
2019-12-22 23:19:08 +08:00
|
|
|
</template>
|
|
|
|
</n-card>
|
2019-09-17 19:24:39 +08:00
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
2020-03-11 20:46:45 +08:00
|
|
|
import codeOutline from '../../src/_icons/code-outline'
|
2020-03-04 18:22:25 +08:00
|
|
|
import { state } from '../store'
|
2020-03-16 15:58:39 +08:00
|
|
|
import camelCase from 'lodash/camelCase'
|
2019-09-17 19:24:39 +08:00
|
|
|
|
|
|
|
export default {
|
2019-10-24 18:04:31 +08:00
|
|
|
components: {
|
2020-03-19 13:26:06 +08:00
|
|
|
codeOutline
|
2019-10-24 18:04:31 +08:00
|
|
|
},
|
2019-10-14 17:49:23 +08:00
|
|
|
inject: {
|
|
|
|
NDocumentation: {
|
|
|
|
default: null
|
|
|
|
}
|
|
|
|
},
|
2019-09-17 19:24:39 +08:00
|
|
|
data () {
|
|
|
|
return {
|
2019-09-20 00:22:55 +08:00
|
|
|
showCode: false,
|
2019-12-22 23:19:08 +08:00
|
|
|
contentStyle: null,
|
2020-03-04 03:01:15 +08:00
|
|
|
controller: {},
|
|
|
|
isShow: true,
|
|
|
|
name: '',
|
2020-03-04 18:22:25 +08:00
|
|
|
isDebug: false,
|
|
|
|
state: state
|
2020-03-04 03:01:15 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
mode () {
|
2020-03-04 18:22:25 +08:00
|
|
|
return this.state.mode
|
2020-03-09 17:18:01 +08:00
|
|
|
},
|
2020-03-11 20:46:45 +08:00
|
|
|
url () {
|
2020-03-19 13:26:06 +08:00
|
|
|
const relativePath = this.NDocumentation.url.replace('index.md', camelCase(this.name) + '.md')
|
2020-03-16 13:01:13 +08:00
|
|
|
return relativePath
|
2019-09-17 19:24:39 +08:00
|
|
|
}
|
|
|
|
},
|
2019-09-20 00:22:55 +08:00
|
|
|
watch: {
|
2019-09-29 19:07:16 +08:00
|
|
|
showCode () {
|
2019-12-22 23:19:08 +08:00
|
|
|
this.contentStyle = {
|
|
|
|
transition: 'none'
|
|
|
|
}
|
2019-09-29 19:07:16 +08:00
|
|
|
this.$nextTick().then(() => {
|
|
|
|
this.controller.updatePosition()
|
2019-12-22 23:19:08 +08:00
|
|
|
this.contentStyle = null
|
2019-09-29 19:07:16 +08:00
|
|
|
})
|
2020-03-04 03:01:15 +08:00
|
|
|
},
|
|
|
|
mode () {
|
|
|
|
this.init()
|
2019-09-20 00:22:55 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
mounted () {
|
2020-03-04 03:01:15 +08:00
|
|
|
this.name = this.$el.id
|
|
|
|
this.init()
|
2019-09-20 00:22:55 +08:00
|
|
|
},
|
2019-09-17 19:24:39 +08:00
|
|
|
methods: {
|
2019-09-20 00:22:55 +08:00
|
|
|
toggleCodeDisplay () {
|
2019-09-17 19:24:39 +08:00
|
|
|
this.showCode = !this.showCode
|
2020-03-04 03:01:15 +08:00
|
|
|
},
|
|
|
|
init () {
|
|
|
|
const map = this.NDocumentation.anchorLinkMap
|
2020-03-05 13:46:19 +08:00
|
|
|
this.isDebug = this.name && (~this.name.indexOf('debug') || ~this.name.indexOf('Debug'))
|
2020-03-04 03:01:15 +08:00
|
|
|
if (this.isDebug) {
|
|
|
|
if (this.mode === 'debug') {
|
|
|
|
this.isShow = true
|
|
|
|
map.set(this.name, String(this.$scopedSlots.title()[0].text).trim())
|
|
|
|
} else {
|
|
|
|
this.isShow = false
|
|
|
|
map.delete(this.name)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
map.set(this.name, String(this.$scopedSlots.title()[0].text).trim())
|
|
|
|
}
|
|
|
|
this.NDocumentation.anchorLinkMap = new Map(map, this.$scopedSlots.title()[0].text.trim())
|
2019-09-17 19:24:39 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|