UNPKG

@neosjs/vitepress-theme

Version:

NeosJS VitePress theme

65 lines (64 loc) 1.96 kB
import { isActive } from "../shared.mjs"; import { ensureStartingSlash } from "./utils.mjs"; export function getSidebar(_sidebar, path) { if (Array.isArray(_sidebar)) return addBase(_sidebar); if (_sidebar == null) return []; path = ensureStartingSlash(path); const dir = Object.keys(_sidebar).sort((a, b) => { return b.split("/").length - a.split("/").length; }).find((dir2) => { return path.startsWith(ensureStartingSlash(dir2)); }); const sidebar = dir ? _sidebar[dir] : []; return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base); } export function getSidebarGroups(sidebar) { const groups = []; let lastGroupIndex = 0; for (const index in sidebar) { const item = sidebar[index]; if (item.items) { lastGroupIndex = groups.push(item); continue; } if (!groups[lastGroupIndex]) { groups.push({ items: [] }); } groups[lastGroupIndex].items.push(item); } return groups; } export function getFlatSideBarLinks(sidebar) { const links = []; function recursivelyExtractLinks(items) { for (const item of items) { if (item.text && item.link) { links.push({ text: item.text, link: item.link, docFooterText: item.docFooterText }); } if (item.items) { recursivelyExtractLinks(item.items); } } } recursivelyExtractLinks(sidebar); return links; } export function hasActiveLink(path, items) { if (Array.isArray(items)) { return items.some((item) => hasActiveLink(path, item)); } return isActive(path, items.link) ? true : items.items ? hasActiveLink(path, items.items) : false; } function addBase(items, _base) { return [...items].map((_item) => { const item = { ..._item }; const base = item.base || _base; if (base && item.link) item.link = base + item.link; if (item.items) item.items = addBase(item.items, base); return item; }); }