@starzkg/vuepress-plugin-page-info
Version:
A comment plugin for vuepress
73 lines (72 loc) • 2.85 kB
JavaScript
import { useIconPrefix, useLocaleConfig, useThemePluginConfig, } from '@starzkg/vuepress-shared/lib/esm/client';
import { usePageData, usePageFrontmatter } from '@vuepress/client';
import { computed, defineComponent, h, resolveComponent } from 'vue';
import { commentOptions, pageInfoI18n } from '../define';
import AuthorInfo from './AuthorInfo';
import CategoryInfo from './CategoryInfo';
import DateInfo from './DateInfo';
import PageViewInfo from './PageViewInfo';
import ReadingTimeInfo from './ReadingTimeInfo';
import TagInfo from './TagInfo';
import WordInfo from './WordInfo';
import 'balloon-css/balloon.css';
export default defineComponent({
name: 'PageInfo',
components: {
AuthorInfo,
CategoryInfo,
DateInfo,
PageViewInfo,
ReadingTimeInfo,
TagInfo,
WordInfo,
},
setup() {
const page = usePageData();
const frontmatter = usePageFrontmatter();
const themePluginConfig = useThemePluginConfig('comment');
const iconPrefix = useIconPrefix();
const config = computed(() => {
const themeConfig = themePluginConfig.value.pageInfo;
const pluginConfig = commentOptions.pageInfo;
const pageConfig = frontmatter.value.pageInfo;
return pageConfig === false
? false
: Array.isArray(pageConfig)
? pageConfig
: pluginConfig === false
? false
: Array.isArray(pluginConfig)
? pluginConfig
: themeConfig === false
? false
: Array.isArray(themeConfig)
? themeConfig
: ['Author', 'PageView', 'Date', 'Category', 'Tag', 'ReadingTime'];
});
const isOriginal = computed(() => frontmatter.value.original);
const i18n = useLocaleConfig(pageInfoI18n);
return () => h('div', { class: 'page-title' }, [
h('h1', [
frontmatter.value.icon
? h('i', {
class: [
'iconfont',
`${iconPrefix.value}${frontmatter.value.icon}`,
],
})
: null,
page.value.title,
]),
config.value
? h('div', { class: 'page-info' }, [
isOriginal.value
? h('span', { class: 'origin' }, i18n.value.origin)
: null,
config.value.map((item) => h(resolveComponent(`${item}-info`))),
])
: null,
h('hr'),
]);
},
});