naive-ui/demo/utils/ComponentDemo.vue

145 lines
3.0 KiB
Vue
Raw Normal View History

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"
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" />
<slot name="demo" />
2020-11-03 15:10:29 +08:00
<template v-if="showCode" #footer>
<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'],
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-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
}
},
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') {
map.set(this.demoFileName, this.title)
2020-03-04 03:01:15 +08:00
} else {
map.delete(this.demoFileName)
2020-03-04 03:01:15 +08:00
}
} else {
map.set(this.demoFileName, this.title)
2020-03-04 03:01:15 +08:00
}
this.NDocumentation.anchorLinkMap = new Map(map)
2019-09-17 19:24:39 +08:00
}
}
}
</script>