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
|
|
|
}"
|
|
|
|
>
|
2020-11-03 15:10:29 +08:00
|
|
|
<template #header>
|
2019-11-17 00:57:30 +08:00
|
|
|
<slot name="title" />
|
2019-12-22 23:19:08 +08:00
|
|
|
</template>
|
2020-11-03 15:10:29 +08:00
|
|
|
<template #header-extra>
|
2020-12-12 13:51:22 +08:00
|
|
|
<n-tooltip trigger="hover" :placement="'top'" :show-arrow="true">
|
2020-11-14 20:38:30 +08:00
|
|
|
<template #trigger>
|
2020-05-31 11:56:00 +08:00
|
|
|
<edit-on-github-button
|
2020-12-12 13:51:22 +08:00
|
|
|
style="padding: 0; margin-right: 6px"
|
2020-05-31 11:56:00 +08:00
|
|
|
size="tiny"
|
2020-09-04 01:06:39 +08:00
|
|
|
:relative-url="relativeUrl"
|
2020-05-31 11:56:00 +08:00
|
|
|
/>
|
|
|
|
</template>
|
2020-10-08 04:14:14 +08:00
|
|
|
{{ t('editOnGithub') }}
|
2020-05-31 11:56:00 +08:00
|
|
|
</n-tooltip>
|
|
|
|
<n-tooltip
|
2020-09-10 15:55:31 +08:00
|
|
|
ref="expandCodeButton"
|
2020-09-19 16:48:23 +08:00
|
|
|
trigger="hover"
|
2020-05-31 11:56:00 +08:00
|
|
|
:placement="'top'"
|
|
|
|
:show-arrow="true"
|
|
|
|
>
|
2020-11-14 20:38:30 +08:00
|
|
|
<template #trigger>
|
2020-05-31 11:56:00 +08:00
|
|
|
<n-button
|
2020-12-12 13:51:22 +08:00
|
|
|
style="padding: 0"
|
2020-05-31 11:56:00 +08:00
|
|
|
size="tiny"
|
|
|
|
text
|
|
|
|
@click="toggleCodeDisplay"
|
|
|
|
>
|
2020-11-03 15:10:29 +08:00
|
|
|
<template #icon>
|
2020-05-31 11:56:00 +08:00
|
|
|
<code-outline />
|
|
|
|
</template>
|
|
|
|
</n-button>
|
|
|
|
</template>
|
2020-10-08 04:14:14 +08:00
|
|
|
{{ !showCode ? t('show') : t('hide') }}
|
2020-05-31 11:56:00 +08:00
|
|
|
</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" />
|
2020-11-03 15:10:29 +08:00
|
|
|
<template v-if="showCode" #footer>
|
2020-10-30 15:31:20 +08:00
|
|
|
<n-scrollbar x-scrollable>
|
2019-09-27 15:56:33 +08:00
|
|
|
<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-09-10 15:55:31 +08:00
|
|
|
import { nextTick } from 'vue'
|
2020-11-07 00:07:02 +08:00
|
|
|
import { CodeOutline } from '@vicons/ionicons-v5'
|
2020-11-14 20:38:30 +08:00
|
|
|
import { i18n, useSiteDisplayMode } from '../util-composables'
|
2019-09-17 19:24:39 +08:00
|
|
|
|
|
|
|
export default {
|
2019-10-24 18:04:31 +08:00
|
|
|
components: {
|
2020-11-03 18:56:13 +08:00
|
|
|
CodeOutline
|
2019-10-24 18:04:31 +08:00
|
|
|
},
|
2020-12-12 13:51:22 +08:00
|
|
|
inject: ['NDocumentation'],
|
2020-09-03 23:02:40 +08:00
|
|
|
props: {
|
|
|
|
title: {
|
|
|
|
type: String,
|
|
|
|
required: true
|
|
|
|
},
|
|
|
|
demoFileName: {
|
|
|
|
type: String,
|
|
|
|
required: true
|
2020-09-03 23:40:38 +08:00
|
|
|
},
|
2020-09-04 01:06:39 +08:00
|
|
|
relativeUrl: {
|
2020-09-03 23:40:38 +08:00
|
|
|
type: String,
|
|
|
|
required: true
|
2020-09-03 23:02:40 +08:00
|
|
|
}
|
|
|
|
},
|
2020-09-27 22:27:25 +08:00
|
|
|
setup () {
|
|
|
|
return {
|
2020-11-14 20:38:30 +08:00
|
|
|
displayMode: useSiteDisplayMode(),
|
2020-12-12 13:51:22 +08:00
|
|
|
...i18n({
|
2020-10-08 04:14:14 +08:00
|
|
|
'zh-CN': {
|
2020-11-03 15:10:29 +08:00
|
|
|
show: '显示代码',
|
|
|
|
hide: '收起代码',
|
|
|
|
editOnGithub: '在 Github 上编辑'
|
2020-10-08 04:14:14 +08:00
|
|
|
},
|
|
|
|
'en-US': {
|
2020-11-03 15:10:29 +08:00
|
|
|
show: 'Show Code',
|
|
|
|
hide: 'Hide Code',
|
|
|
|
editOnGithub: 'Edit on Github'
|
2020-10-08 04:14:14 +08:00
|
|
|
}
|
2020-12-12 13:51:22 +08:00
|
|
|
})
|
2020-09-27 22:27:25 +08:00
|
|
|
}
|
|
|
|
},
|
2019-09-17 19:24:39 +08:00
|
|
|
data () {
|
|
|
|
return {
|
2020-11-14 20:38:30 +08:00
|
|
|
showCode: false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
isDebugDemo () {
|
2020-12-12 13:51:22 +08:00
|
|
|
return (
|
|
|
|
this.demoFileName &&
|
|
|
|
(~this.demoFileName.indexOf('debug') ||
|
|
|
|
~this.demoFileName.indexOf('Debug'))
|
|
|
|
)
|
2020-11-14 20:38:30 +08:00
|
|
|
},
|
|
|
|
isShow () {
|
|
|
|
return !(this.isDebugDemo && this.displayMode !== 'debug')
|
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 () {
|
2020-09-10 15:55:31 +08:00
|
|
|
nextTick(() => {
|
|
|
|
this.$refs.expandCodeButton.syncPosition()
|
2019-09-29 19:07:16 +08:00
|
|
|
})
|
2020-03-04 03:01:15 +08:00
|
|
|
},
|
2020-09-27 22:27:25 +08:00
|
|
|
displayMode () {
|
2020-03-04 03:01:15 +08:00
|
|
|
this.init()
|
2019-09-20 00:22:55 +08:00
|
|
|
}
|
|
|
|
},
|
2020-09-03 23:02:40 +08:00
|
|
|
created () {
|
2020-03-04 03:01:15 +08:00
|
|
|
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-09-03 17:02:31 +08:00
|
|
|
if (this.isDebugDemo) {
|
2020-09-27 22:27:25 +08:00
|
|
|
if (this.displayMode === 'debug') {
|
2020-09-03 23:02:40 +08:00
|
|
|
map.set(this.demoFileName, this.title)
|
2020-03-04 03:01:15 +08:00
|
|
|
} else {
|
2020-09-03 23:02:40 +08:00
|
|
|
map.delete(this.demoFileName)
|
2020-03-04 03:01:15 +08:00
|
|
|
}
|
|
|
|
} else {
|
2020-09-03 23:02:40 +08:00
|
|
|
map.set(this.demoFileName, this.title)
|
2020-03-04 03:01:15 +08:00
|
|
|
}
|
2020-09-03 23:02:40 +08:00
|
|
|
this.NDocumentation.anchorLinkMap = new Map(map)
|
2019-09-17 19:24:39 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|