Jacky Zhao
2025-03-14 da1b6b37fe2ee09359b532f0d2669975b4476c95
quartz/components/scripts/explorer.inline.ts
@@ -134,9 +134,9 @@
  }
  for (const child of node.children) {
    const childNode = child.data
      ? createFileNode(currentSlug, child)
      : createFolderNode(currentSlug, child, opts)
    const childNode = child.isFolder
      ? createFolderNode(currentSlug, child, opts)
      : createFileNode(currentSlug, child)
    ul.appendChild(childNode)
  }
@@ -161,7 +161,7 @@
    // Get folder state from local storage
    const storageTree = localStorage.getItem("fileTree")
    const serializedExplorerState = storageTree && opts.useSavedState ? JSON.parse(storageTree) : []
    const oldIndex = new Map(
    const oldIndex = new Map<string, boolean>(
      serializedExplorerState.map((entry: FolderState) => [entry.path, entry.collapsed]),
    )
@@ -186,10 +186,14 @@
    // Get folder paths for state management
    const folderPaths = trie.getFolderPaths()
    currentExplorerState = folderPaths.map((path) => ({
      path,
      collapsed: oldIndex.get(path) === true,
    }))
    currentExplorerState = folderPaths.map((path) => {
      const previousState = oldIndex.get(path)
      return {
        path,
        collapsed:
          previousState === undefined ? opts.folderDefaultState === "collapsed" : previousState,
      }
    })
    const explorerUl = explorer.querySelector(".explorer-ul")
    if (!explorerUl) continue
@@ -259,15 +263,17 @@
  await setupExplorer(currentSlug)
  // if mobile hamburger is visible, collapse by default
  for (const explorer of document.getElementsByClassName("mobile-explorer")) {
    if (explorer.checkVisibility()) {
  for (const explorer of document.getElementsByClassName("explorer")) {
    const mobileExplorer = explorer.querySelector(".mobile-explorer")
    if (!mobileExplorer) return
    if (mobileExplorer.checkVisibility()) {
      explorer.classList.add("collapsed")
      explorer.setAttribute("aria-expanded", "false")
    }
  }
  const hiddenUntilDoneLoading = document.querySelector(".mobile-explorer")
  hiddenUntilDoneLoading?.classList.remove("hide-until-loaded")
    mobileExplorer.classList.remove("hide-until-loaded")
  }
})
function setFolderState(folderElement: HTMLElement, collapsed: boolean) {