element-plus/docs/.vitepress/vitepress/utils.ts
2021-09-18 00:34:56 +08:00

65 lines
1.4 KiB
TypeScript

import {
isActive,
normalize,
endingSlashRE,
isExternal,
} from 'vitepress/dist/client/theme-default/utils'
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}`))
}
export function createGitHubUrl(
docsRepo: string,
docsDir: string,
docsBranch: string,
path: string,
folder = 'examples/',
ext = '.vue'
) {
const base = isExternal(docsRepo)
? docsRepo
: `https://github.com/${docsRepo}`
return (
base.replace(endingSlashRE, '') +
`/edit` +
`/${docsBranch}/` +
(docsDir ? docsDir.replace(endingSlashRE, '') + '/' : '') +
`${folder ? folder : ''}` +
path +
`${ext ? ext : ''}`
)
}
export const isServer = typeof window === 'undefined'