nimiq-vitepress-theme
Version:
Nimiq UI theme for VitePress
51 lines (50 loc) • 2.09 kB
JavaScript
import { useData, useRoute, withBase } from "vitepress";
import { computed } from "vue";
import { useCurrentModule } from "./useCurrentModule.mjs";
export function useBreadcrumbs() {
const { currentDocModule } = useCurrentModule();
const route = useRoute();
const { frontmatter } = useData();
const showBreadcrumbs = computed(() => {
if (frontmatter.value.breadcrumbs !== void 0)
return frontmatter.value.breadcrumbs;
if (frontmatter.value.layout === "home")
return false;
return true;
});
const breadcrumbs = computed(() => {
const items = [];
if (!currentDocModule.value)
return items;
items.push({
text: currentDocModule.value.text,
link: currentDocModule.value.subpath
});
const currentSidebar = currentDocModule.value.sidebar.find((section) => {
return section.items.some(
(item) => item.link && (`${withBase(item.link)}/` === route.path || withBase(item.link) === route.path) || item.items?.some((subitem) => `${withBase(subitem.link)}/` === route.path || withBase(subitem.link) === route.path)
);
});
if (currentSidebar?.label)
items.push({ text: currentSidebar.label });
const parentItem = currentSidebar?.items.find(
(item) => item.items?.some((subitem) => `${withBase(subitem.link)}/` === route.path || withBase(subitem.link) === route.path)
);
if (parentItem)
items.push({ text: parentItem.text });
const currentItem = currentSidebar?.items.find(
(item) => item.link && (withBase(item.link) === route.path || `${withBase(item.link)}/` === route.path)
) || currentSidebar?.items.find((item) => item.items?.some(
(subitem) => subitem.link && (withBase(subitem.link) === route.path || `${withBase(subitem.link)}/` === route.path)
))?.items?.find(
(subitem) => subitem.link && (withBase(subitem.link) === route.path || `${withBase(subitem.link)}/` === route.path)
);
if (currentItem)
items.push({ text: currentItem.text });
return items;
});
return {
breadcrumbs,
showBreadcrumbs
};
}