mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-09 01:47:20 +08:00
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
import { useSiteData } from 'vitepress';
|
|
export const hashRE = /#.*$/;
|
|
export const extRE = /(index)?\.(md|html)$/;
|
|
export const endingSlashRE = /\/$/;
|
|
export const outboundRE = /^[a-z]+:/i;
|
|
export function withBase(path) {
|
|
return (useSiteData().value.base + path).replace(/\/+/g, '/');
|
|
}
|
|
export function isExternal(path) {
|
|
return outboundRE.test(path);
|
|
}
|
|
export function isActive(route, path) {
|
|
if (path === undefined) {
|
|
return false;
|
|
}
|
|
const routePath = normalize(route.path);
|
|
const pagePath = normalize(path);
|
|
return routePath === pagePath;
|
|
}
|
|
export function normalize(path) {
|
|
return decodeURI(path).replace(hashRE, '').replace(extRE, '');
|
|
}
|
|
export function joinUrl(base, path) {
|
|
const baseEndsWithSlash = base.endsWith('/');
|
|
const pathStartsWithSlash = path.startsWith('/');
|
|
if (baseEndsWithSlash && pathStartsWithSlash) {
|
|
return base.slice(0, -1) + path;
|
|
}
|
|
if (!baseEndsWithSlash && !pathStartsWithSlash) {
|
|
return `${base}/${path}`;
|
|
}
|
|
return base + path;
|
|
}
|
|
/**
|
|
* get the path without filename (the last segment). for example, if the given
|
|
* path is `/guide/getting-started.html`, this method will return `/guide/`.
|
|
* Always with a trailing slash.
|
|
*/
|
|
export function getPathDirName(path) {
|
|
const segments = path.split('/');
|
|
if (segments[segments.length - 1]) {
|
|
segments.pop();
|
|
}
|
|
return ensureEndingSlash(segments.join('/'));
|
|
}
|
|
export function ensureEndingSlash(path) {
|
|
return /(\.html|\/)$/.test(path) ? path : `${path}/`;
|
|
}
|