12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import { isArray, ensureStartingSlash, removeExtention } from '../utils';
- export function isSideBarConfig(sidebar) {
- return sidebar === false || sidebar === 'auto' || isArray(sidebar);
- }
- export function isSideBarGroup(item) {
- return item.children !== undefined;
- }
- export function isSideBarEmpty(sidebar) {
- return isArray(sidebar) ? sidebar.length === 0 : !sidebar;
- }
- /**
- * Get the `SideBarConfig` from sidebar option. This method will ensure to get
- * correct sidebar config from `MultiSideBarConfig` with various path
- * combinations such as matching `guide/` and `/guide/`. If no matching config
- * was found, it will return `auto` as a fallback.
- */
- export function getSideBarConfig(sidebar, path) {
- if (isSideBarConfig(sidebar)) {
- return sidebar;
- }
- path = ensureStartingSlash(path);
- for (const dir in sidebar) {
- // make sure the multi sidebar key starts with slash too
- if (path.startsWith(ensureStartingSlash(dir))) {
- return sidebar[dir];
- }
- }
- return 'auto';
- }
- /**
- * Get flat sidebar links from the sidebar items. This method is useful for
- * creating the "next and prev link" feature. It will ignore any items that
- * don't have `link` property and removes `.md` or `.html` extension if a
- * link contains it.
- */
- export function getFlatSideBarLinks(sidebar) {
- return sidebar.reduce((links, item) => {
- if (item.link) {
- links.push({ text: item.text, link: removeExtention(item.link) });
- }
- if (isSideBarGroup(item)) {
- links = [...links, ...getFlatSideBarLinks(item.children)];
- }
- return links;
- }, []);
- }
|