2021-09-17 00:18:50 +08:00
|
|
|
import {
|
|
|
|
isActive,
|
|
|
|
normalize,
|
|
|
|
endingSlashRE,
|
|
|
|
isExternal,
|
|
|
|
} from 'vitepress/dist/client/theme-default/utils'
|
2021-09-24 01:19:18 +08:00
|
|
|
|
2021-09-17 00:18:50 +08:00
|
|
|
import type { Route } from 'vitepress'
|
|
|
|
|
|
|
|
export * from 'vitepress/dist/client/theme-default/utils'
|
|
|
|
|
|
|
|
export const throttleAndDebounce = (fn: () => any, delay: number) => {
|
|
|
|
let timeout: ReturnType<typeof setTimeout>
|
|
|
|
let called = false
|
|
|
|
return () => {
|
|
|
|
if (timeout) {
|
|
|
|
clearTimeout(timeout)
|
|
|
|
}
|
|
|
|
if (!called) {
|
|
|
|
fn()
|
|
|
|
called = true
|
|
|
|
setTimeout(() => {
|
|
|
|
called = false
|
|
|
|
}, delay)
|
|
|
|
} else {
|
|
|
|
timeout = setTimeout(fn, delay)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// When match === true, meaning `path` is a string for build regex
|
|
|
|
export const isActiveLink = (
|
|
|
|
route: Route,
|
|
|
|
pathPattern: string,
|
|
|
|
match?: boolean
|
|
|
|
) => {
|
|
|
|
if (!match) return isActive(route, pathPattern)
|
|
|
|
const regex = new RegExp(pathPattern)
|
|
|
|
|
|
|
|
return regex.test(normalize(`/${route.data.relativePath}`))
|
|
|
|
}
|
|
|
|
|
2021-09-18 00:34:56 +08:00
|
|
|
export function createGitHubUrl(
|
|
|
|
docsRepo: string,
|
|
|
|
docsDir: string,
|
|
|
|
docsBranch: string,
|
|
|
|
path: string,
|
|
|
|
folder = 'examples/',
|
|
|
|
ext = '.vue'
|
|
|
|
) {
|
2021-09-17 00:18:50 +08:00
|
|
|
const base = isExternal(docsRepo)
|
|
|
|
? docsRepo
|
|
|
|
: `https://github.com/${docsRepo}`
|
2021-09-19 00:12:50 +08:00
|
|
|
return `${base.replace(endingSlashRE, '')}/edit/${docsBranch}/${
|
|
|
|
docsDir ? `${docsDir.replace(endingSlashRE, '')}/` : ''
|
|
|
|
}${folder || ''}${path}${ext || ''}`
|
2021-09-17 00:18:50 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
export const isServer = typeof window === 'undefined'
|
2021-09-24 01:19:18 +08:00
|
|
|
|
|
|
|
export function createCrowdinUrl(targetLang: string) {
|
|
|
|
let translateLang = ''
|
|
|
|
// for zh-CN zh-HK zh-TW, maybe later we will have cases like Chinese lang
|
|
|
|
// for now we just keep it as simple as possible.
|
|
|
|
if (targetLang.startsWith('zh-')) {
|
|
|
|
translateLang = targetLang.split('-').join('').toLocaleLowerCase()
|
|
|
|
} else {
|
|
|
|
translateLang = targetLang.split('-').shift().toLocaleLowerCase()
|
|
|
|
}
|
|
|
|
return `https://crowdin.com/translate/element-plus/all/en-${translateLang}`
|
|
|
|
}
|