mirror of
https://github.com/tusen-ai/naive-ui.git
synced 2024-12-09 04:31:35 +08:00
179 lines
4.0 KiB
JavaScript
179 lines
4.0 KiB
JavaScript
import { computed, ref, watch } from 'vue'
|
|
import { useMemo } from 'vooks'
|
|
import {
|
|
NConfigProvider,
|
|
darkTheme,
|
|
enUS,
|
|
zhCN,
|
|
dateEnUS,
|
|
dateZhCN,
|
|
useOsTheme
|
|
} from 'naive-ui'
|
|
import { TsConfigProvider } from '../../themes/tusimple/src'
|
|
import { i18n, useIsXs } from '../utils/composables'
|
|
import {
|
|
createDocumentationMenuOptions,
|
|
createComponentMenuOptions
|
|
} from './menu-options'
|
|
import hljs from './hljs'
|
|
|
|
let route = null
|
|
let router = null
|
|
|
|
export function initRouter (_router, _route) {
|
|
route = _route
|
|
router = _router
|
|
localeNameRef = useMemo({
|
|
get () {
|
|
return route.path.startsWith('/zh-CN') ? 'zh-CN' : 'en-US'
|
|
},
|
|
set (locale) {
|
|
router.push(changeLangInPath(route.fullPath, locale))
|
|
}
|
|
})
|
|
watch(localeNameRef, (value) => {
|
|
// defined in index.html
|
|
window.deriveTitleFromLocale(value)
|
|
})
|
|
dateLocaleRef = useMemo(() => {
|
|
return route.path.startsWith('/zh-CN') ? dateZhCN : dateEnUS
|
|
})
|
|
rawThemeNameRef = useMemo(() => route.params.theme)
|
|
themeNameRef = useMemo({
|
|
get () {
|
|
switch (route.params.theme) {
|
|
case 'os-theme':
|
|
return osThemeRef.value
|
|
case 'dark':
|
|
return 'dark'
|
|
default:
|
|
return 'light'
|
|
}
|
|
},
|
|
set (theme) {
|
|
router.push(changeThemeInPath(route.fullPath, theme))
|
|
}
|
|
})
|
|
}
|
|
|
|
// display mode
|
|
const _displayModeRef = ref(window.localStorage.getItem('mode') ?? 'debug')
|
|
const displayModeRef = computed({
|
|
get () {
|
|
return _displayModeRef.value
|
|
},
|
|
set (value) {
|
|
_displayModeRef.value = value
|
|
window.localStorage.setItem('mode', value)
|
|
}
|
|
})
|
|
|
|
// locale
|
|
let localeNameRef = null
|
|
const localeRef = computed(() => {
|
|
return localeNameRef.value === 'zh-CN' ? zhCN : enUS
|
|
})
|
|
|
|
// useMemo
|
|
let dateLocaleRef = null
|
|
|
|
// theme
|
|
const osThemeRef = useOsTheme()
|
|
let themeNameRef = null
|
|
let rawThemeNameRef = null // could be `os-theme`
|
|
const themeRef = computed(() => {
|
|
const { value } = themeNameRef
|
|
return value === 'dark' ? darkTheme : null
|
|
})
|
|
|
|
// config provider
|
|
const configProviderNameRef = ref(process.env.TUSIMPLE ? 'tusimple' : 'default')
|
|
const configProviderRef = computed(() => {
|
|
return configProviderNameRef.value === 'tusimple'
|
|
? TsConfigProvider
|
|
: NConfigProvider
|
|
})
|
|
|
|
// options
|
|
const docOptionsRef = computed(() =>
|
|
createDocumentationMenuOptions({
|
|
theme: rawThemeNameRef.value,
|
|
lang: localeNameRef.value,
|
|
mode: displayModeRef.value
|
|
})
|
|
)
|
|
const componentOptionsRef = computed(() =>
|
|
createComponentMenuOptions({
|
|
theme: rawThemeNameRef.value,
|
|
lang: localeNameRef.value,
|
|
mode: displayModeRef.value
|
|
})
|
|
)
|
|
const flattenedDocOptionsRef = computed(() => {
|
|
const flattenedItems = []
|
|
const traverse = (items) => {
|
|
if (!items) return
|
|
items.forEach((item) => {
|
|
if (item.children) traverse(item.children)
|
|
else flattenedItems.push(item)
|
|
})
|
|
}
|
|
traverse(docOptionsRef.value)
|
|
traverse(componentOptionsRef.value)
|
|
return flattenedItems
|
|
})
|
|
|
|
export function siteSetup () {
|
|
i18n.provide(computed(() => localeNameRef.value))
|
|
const isXsRef = useIsXs()
|
|
return {
|
|
themeEditorStyle: computed(() => {
|
|
return isXsRef.value ? 'right: 18px; bottom: 24px;' : undefined
|
|
}),
|
|
configProvider: configProviderRef,
|
|
hljs,
|
|
themeName: themeNameRef,
|
|
theme: themeRef,
|
|
locale: localeRef,
|
|
dateLocale: dateLocaleRef
|
|
}
|
|
}
|
|
|
|
function changeLangInPath (path, lang) {
|
|
const langReg = /^\/(zh-CN|en-US)\//
|
|
return path.replace(langReg, `/${lang}/`)
|
|
}
|
|
|
|
function changeThemeInPath (path, theme) {
|
|
const themeReg = /(^\/[^/]+\/)([^/]+)/
|
|
return path.replace(themeReg, '$1' + theme)
|
|
}
|
|
|
|
export function useDisplayMode () {
|
|
return displayModeRef
|
|
}
|
|
|
|
export function useLocaleName () {
|
|
return localeNameRef
|
|
}
|
|
|
|
export function useThemeName () {
|
|
return themeNameRef
|
|
}
|
|
|
|
export function useDocOptions () {
|
|
return docOptionsRef
|
|
}
|
|
|
|
export function useComponentOptions () {
|
|
return componentOptionsRef
|
|
}
|
|
|
|
export function useFlattenedDocOptions () {
|
|
return flattenedDocOptionsRef
|
|
}
|
|
|
|
export function useConfigProviderName () {
|
|
return configProviderNameRef
|
|
}
|