feat(explorer): highlight current path in explorer

This commit is contained in:
saberzero1 2025-03-01 14:58:20 +01:00
parent b050162f82
commit ac9db622ff
No known key found for this signature in database
5 changed files with 14 additions and 0 deletions

View File

@ -27,6 +27,7 @@ Component.Explorer({
folderClickBehavior: "collapse", // what happens when you click a folder ("link" to navigate to folder page on click or "collapse" to collapse folder on click) folderClickBehavior: "collapse", // what happens when you click a folder ("link" to navigate to folder page on click or "collapse" to collapse folder on click)
folderDefaultState: "collapsed", // default state of folders ("collapsed" or "open") folderDefaultState: "collapsed", // default state of folders ("collapsed" or "open")
useSavedState: true, // whether to use local storage to save "state" (which folders are opened) of explorer useSavedState: true, // whether to use local storage to save "state" (which folders are opened) of explorer
highlightCurrentPath: true, // whether to highlight the current file in the explorer
// Sort order: folders first, then files. Sort folders and files alphabetically // Sort order: folders first, then files. Sort folders and files alphabetically
sortFn: (a, b) => { sortFn: (a, b) => {
... // default implementation shown later ... // default implementation shown later

View File

@ -13,6 +13,7 @@ const defaultOptions = {
folderClickBehavior: "collapse", folderClickBehavior: "collapse",
folderDefaultState: "collapsed", folderDefaultState: "collapsed",
useSavedState: true, useSavedState: true,
highlightCurrentPath: true,
mapFn: (node) => { mapFn: (node) => {
return node return node
}, },
@ -92,6 +93,7 @@ export default ((userOpts?: Partial<Options>) => {
data-behavior={opts.folderClickBehavior} data-behavior={opts.folderClickBehavior}
data-collapsed={opts.folderDefaultState} data-collapsed={opts.folderDefaultState}
data-savestate={opts.useSavedState} data-savestate={opts.useSavedState}
data-highlightpath={opts.highlightCurrentPath}
data-tree={jsonTree} data-tree={jsonTree}
data-mobile={true} data-mobile={true}
aria-controls="explorer-content" aria-controls="explorer-content"
@ -119,6 +121,7 @@ export default ((userOpts?: Partial<Options>) => {
data-behavior={opts.folderClickBehavior} data-behavior={opts.folderClickBehavior}
data-collapsed={opts.folderDefaultState} data-collapsed={opts.folderDefaultState}
data-savestate={opts.useSavedState} data-savestate={opts.useSavedState}
data-highlightpath={opts.highlightCurrentPath}
data-tree={jsonTree} data-tree={jsonTree}
data-mobile={false} data-mobile={false}
aria-controls="explorer-content" aria-controls="explorer-content"

View File

@ -16,6 +16,7 @@ export interface Options {
folderDefaultState: "collapsed" | "open" folderDefaultState: "collapsed" | "open"
folderClickBehavior: "collapse" | "link" folderClickBehavior: "collapse" | "link"
useSavedState: boolean useSavedState: boolean
highlightCurrentPath: boolean
sortFn: (a: FileNode, b: FileNode) => number sortFn: (a: FileNode, b: FileNode) => number
filterFn: (node: FileNode) => boolean filterFn: (node: FileNode) => boolean
mapFn: (node: FileNode) => void mapFn: (node: FileNode) => void

View File

@ -169,6 +169,7 @@ window.addEventListener("resize", setupExplorer)
document.addEventListener("nav", () => { document.addEventListener("nav", () => {
const explorer = document.querySelector("#mobile-explorer") const explorer = document.querySelector("#mobile-explorer")
const currentPath = document.getElementsByTagName("body")[0].getAttribute("data-slug") ?? ""
if (explorer) { if (explorer) {
explorer.classList.add("collapsed") explorer.classList.add("collapsed")
const content = explorer.nextElementSibling?.nextElementSibling as HTMLElement const content = explorer.nextElementSibling?.nextElementSibling as HTMLElement
@ -176,6 +177,10 @@ document.addEventListener("nav", () => {
content.classList.add("collapsed") content.classList.add("collapsed")
content.classList.toggle("explorer-viewmode") content.classList.toggle("explorer-viewmode")
} }
const currentPathInExplorer = document.querySelector(`a[data-for="${currentPath}"]`)
if (currentPathInExplorer) {
currentPathInExplorer.classList.add("highlight-path")
}
} }
setupExplorer() setupExplorer()

View File

@ -158,6 +158,10 @@ button#desktop-explorer {
> #explorer-ul { > #explorer-ul {
max-height: none; max-height: none;
} }
.highlight-path {
color: var(--tertiary);
}
} }
svg { svg {