feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
import { FolderState } from "../ExplorerNode"
|
|
|
|
|
2025-02-03 15:25:42 +01:00
|
|
|
// Current state of folders
|
2024-01-29 00:56:12 -08:00
|
|
|
type MaybeHTMLElement = HTMLElement | undefined
|
|
|
|
let currentExplorerState: FolderState[]
|
2025-02-03 15:25:42 +01:00
|
|
|
|
2023-09-17 22:04:44 +02:00
|
|
|
const observer = new IntersectionObserver((entries) => {
|
|
|
|
// If last element is observed, remove gradient of "overflow" class so element is visible
|
2024-01-29 00:56:12 -08:00
|
|
|
const explorerUl = document.getElementById("explorer-ul")
|
|
|
|
if (!explorerUl) return
|
2023-09-17 22:04:44 +02:00
|
|
|
for (const entry of entries) {
|
|
|
|
if (entry.isIntersecting) {
|
2024-01-29 00:56:12 -08:00
|
|
|
explorerUl.classList.add("no-background")
|
2023-09-17 22:04:44 +02:00
|
|
|
} else {
|
2024-01-29 00:56:12 -08:00
|
|
|
explorerUl.classList.remove("no-background")
|
2023-09-17 22:04:44 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
function toggleExplorer(this: HTMLElement) {
|
2025-02-03 15:25:42 +01:00
|
|
|
// Toggle collapsed state of entire explorer
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
this.classList.toggle("collapsed")
|
2025-02-03 15:25:42 +01:00
|
|
|
|
|
|
|
// Toggle collapsed aria state of entire explorer
|
2024-08-08 21:07:47 -04:00
|
|
|
this.setAttribute(
|
|
|
|
"aria-expanded",
|
|
|
|
this.getAttribute("aria-expanded") === "true" ? "false" : "true",
|
|
|
|
)
|
2024-01-29 00:56:12 -08:00
|
|
|
|
2025-02-03 15:25:42 +01:00
|
|
|
const content = (
|
|
|
|
this.nextElementSibling?.nextElementSibling
|
|
|
|
? this.nextElementSibling.nextElementSibling
|
|
|
|
: this.nextElementSibling
|
|
|
|
) as MaybeHTMLElement
|
|
|
|
if (!content) return
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
content.classList.toggle("collapsed")
|
2025-02-03 15:25:42 +01:00
|
|
|
content.classList.toggle("explorer-viewmode")
|
|
|
|
|
|
|
|
// Prevent scroll under
|
|
|
|
if (document.querySelector("#mobile-explorer")) {
|
|
|
|
// Disable scrolling on the page when the explorer is opened on mobile
|
|
|
|
const bodySelector = document.querySelector("#quartz-body")
|
|
|
|
if (bodySelector) bodySelector.classList.toggle("lock-scroll")
|
|
|
|
}
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function toggleFolder(evt: MouseEvent) {
|
|
|
|
evt.stopPropagation()
|
2025-02-03 15:25:42 +01:00
|
|
|
|
|
|
|
// Element that was clicked
|
2024-01-29 00:56:12 -08:00
|
|
|
const target = evt.target as MaybeHTMLElement
|
|
|
|
if (!target) return
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
|
2025-02-03 15:25:42 +01:00
|
|
|
// Check if target was svg icon or button
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
const isSvg = target.nodeName === "svg"
|
2025-02-03 15:25:42 +01:00
|
|
|
|
|
|
|
// corresponding <ul> element relative to clicked button/folder
|
2024-01-29 00:56:12 -08:00
|
|
|
const childFolderContainer = (
|
|
|
|
isSvg
|
|
|
|
? target.parentElement?.nextSibling
|
|
|
|
: target.parentElement?.parentElement?.nextElementSibling
|
|
|
|
) as MaybeHTMLElement
|
|
|
|
const currentFolderParent = (
|
|
|
|
isSvg ? target.nextElementSibling : target.parentElement
|
|
|
|
) as MaybeHTMLElement
|
|
|
|
if (!(childFolderContainer && currentFolderParent)) return
|
2025-02-03 15:25:42 +01:00
|
|
|
// <li> element of folder (stores folder-path dataset)
|
2024-01-29 00:56:12 -08:00
|
|
|
childFolderContainer.classList.toggle("open")
|
2025-02-03 15:25:42 +01:00
|
|
|
|
|
|
|
// Collapse folder container
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
const isCollapsed = childFolderContainer.classList.contains("open")
|
|
|
|
setFolderState(childFolderContainer, !isCollapsed)
|
2025-02-03 15:25:42 +01:00
|
|
|
|
|
|
|
// Save folder state to localStorage
|
2024-01-29 00:56:12 -08:00
|
|
|
const fullFolderPath = currentFolderParent.dataset.folderpath as string
|
|
|
|
toggleCollapsedByPath(currentExplorerState, fullFolderPath)
|
|
|
|
const stringifiedFileTree = JSON.stringify(currentExplorerState)
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
localStorage.setItem("fileTree", stringifiedFileTree)
|
|
|
|
}
|
|
|
|
|
|
|
|
function setupExplorer() {
|
2025-02-03 15:25:42 +01:00
|
|
|
// Set click handler for collapsing entire explorer
|
|
|
|
const allExplorers = document.querySelectorAll(".explorer > button") as NodeListOf<HTMLElement>
|
|
|
|
|
|
|
|
for (const explorer of allExplorers) {
|
|
|
|
// Get folder state from local storage
|
|
|
|
const storageTree = localStorage.getItem("fileTree")
|
|
|
|
|
|
|
|
// Convert to bool
|
|
|
|
const useSavedFolderState = explorer?.dataset.savestate === "true"
|
|
|
|
|
|
|
|
if (explorer) {
|
|
|
|
// Get config
|
|
|
|
const collapseBehavior = explorer.dataset.behavior
|
|
|
|
|
|
|
|
// Add click handlers for all folders (click handler on folder "label")
|
|
|
|
if (collapseBehavior === "collapse") {
|
|
|
|
for (const item of document.getElementsByClassName(
|
|
|
|
"folder-button",
|
|
|
|
) as HTMLCollectionOf<HTMLElement>) {
|
|
|
|
window.addCleanup(() => explorer.removeEventListener("click", toggleExplorer))
|
|
|
|
item.addEventListener("click", toggleFolder)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add click handler to main explorer
|
|
|
|
window.addCleanup(() => explorer.removeEventListener("click", toggleExplorer))
|
|
|
|
explorer.addEventListener("click", toggleExplorer)
|
|
|
|
}
|
2024-01-29 00:56:12 -08:00
|
|
|
|
2025-02-03 15:25:42 +01:00
|
|
|
// Set up click handlers for each folder (click handler on folder "icon")
|
2024-01-29 00:56:12 -08:00
|
|
|
for (const item of document.getElementsByClassName(
|
2025-02-03 15:25:42 +01:00
|
|
|
"folder-icon",
|
2024-01-29 00:56:12 -08:00
|
|
|
) as HTMLCollectionOf<HTMLElement>) {
|
|
|
|
item.addEventListener("click", toggleFolder)
|
2024-02-01 20:07:14 -08:00
|
|
|
window.addCleanup(() => item.removeEventListener("click", toggleFolder))
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
}
|
|
|
|
|
2025-02-03 15:25:42 +01:00
|
|
|
// Get folder state from local storage
|
|
|
|
const oldExplorerState: FolderState[] =
|
|
|
|
storageTree && useSavedFolderState ? JSON.parse(storageTree) : []
|
|
|
|
const oldIndex = new Map(oldExplorerState.map((entry) => [entry.path, entry.collapsed]))
|
|
|
|
const newExplorerState: FolderState[] = explorer.dataset.tree
|
|
|
|
? JSON.parse(explorer.dataset.tree)
|
|
|
|
: []
|
|
|
|
currentExplorerState = []
|
|
|
|
|
|
|
|
for (const { path, collapsed } of newExplorerState) {
|
|
|
|
currentExplorerState.push({
|
|
|
|
path,
|
|
|
|
collapsed: oldIndex.get(path) ?? collapsed,
|
|
|
|
})
|
|
|
|
}
|
2024-01-29 00:56:12 -08:00
|
|
|
|
2025-02-03 15:25:42 +01:00
|
|
|
currentExplorerState.map((folderState) => {
|
|
|
|
const folderLi = document.querySelector(
|
|
|
|
`[data-folderpath='${folderState.path.replace("'", "-")}']`,
|
|
|
|
) as MaybeHTMLElement
|
|
|
|
const folderUl = folderLi?.parentElement?.nextElementSibling as MaybeHTMLElement
|
|
|
|
if (folderUl) {
|
|
|
|
setFolderState(folderUl, folderState.collapsed)
|
|
|
|
}
|
|
|
|
})
|
2024-01-29 00:56:12 -08:00
|
|
|
}
|
2025-02-03 15:25:42 +01:00
|
|
|
}
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
|
2025-02-03 15:25:42 +01:00
|
|
|
function toggleExplorerFolders() {
|
|
|
|
const currentFile = (document.querySelector("body")?.getAttribute("data-slug") ?? "").replace(
|
|
|
|
/\/index$/g,
|
|
|
|
"",
|
|
|
|
)
|
|
|
|
const allFolders = document.querySelectorAll(".folder-outer")
|
2024-01-29 00:56:12 -08:00
|
|
|
|
2025-02-03 15:25:42 +01:00
|
|
|
allFolders.forEach((element) => {
|
|
|
|
const folderUl = Array.from(element.children).find((child) =>
|
|
|
|
child.matches("ul[data-folderul]"),
|
|
|
|
)
|
2024-01-29 00:56:12 -08:00
|
|
|
if (folderUl) {
|
2025-02-03 15:25:42 +01:00
|
|
|
if (currentFile.includes(folderUl.getAttribute("data-folderul") ?? "")) {
|
|
|
|
if (!element.classList.contains("open")) {
|
|
|
|
element.classList.add("open")
|
|
|
|
}
|
|
|
|
}
|
2024-01-29 00:56:12 -08:00
|
|
|
}
|
|
|
|
})
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
window.addEventListener("resize", setupExplorer)
|
2025-02-03 15:25:42 +01:00
|
|
|
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
document.addEventListener("nav", () => {
|
2025-02-03 15:25:42 +01:00
|
|
|
const explorer = document.querySelector("#mobile-explorer")
|
|
|
|
if (explorer) {
|
|
|
|
explorer.classList.add("collapsed")
|
|
|
|
const content = explorer.nextElementSibling?.nextElementSibling as HTMLElement
|
|
|
|
if (content) {
|
|
|
|
content.classList.add("collapsed")
|
|
|
|
content.classList.toggle("explorer-viewmode")
|
|
|
|
}
|
|
|
|
}
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
setupExplorer()
|
2025-02-03 15:25:42 +01:00
|
|
|
|
2023-11-17 10:29:07 -08:00
|
|
|
observer.disconnect()
|
|
|
|
|
2023-09-17 22:04:44 +02:00
|
|
|
// select pseudo element at end of list
|
|
|
|
const lastItem = document.getElementById("explorer-end")
|
2023-11-17 10:29:07 -08:00
|
|
|
if (lastItem) {
|
|
|
|
observer.observe(lastItem)
|
|
|
|
}
|
2025-02-03 15:25:42 +01:00
|
|
|
|
|
|
|
// Hide explorer on mobile until it is requested
|
|
|
|
const hiddenUntilDoneLoading = document.querySelector("#mobile-explorer")
|
|
|
|
hiddenUntilDoneLoading?.classList.remove("hide-until-loaded")
|
|
|
|
|
|
|
|
toggleExplorerFolders()
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Toggles the state of a given folder
|
|
|
|
* @param folderElement <div class="folder-outer"> Element of folder (parent)
|
|
|
|
* @param collapsed if folder should be set to collapsed or not
|
|
|
|
*/
|
|
|
|
function setFolderState(folderElement: HTMLElement, collapsed: boolean) {
|
2024-01-29 00:56:12 -08:00
|
|
|
return collapsed ? folderElement.classList.remove("open") : folderElement.classList.add("open")
|
feat: implement file explorer component (closes #201) (#452)
* feat: add basic explorer structure„
* feat: integrate new component/plugin
* feat: add basic explorer structure
* feat: add sort to FileNodes
* style: improve style for explorer
* refactor: remove unused explorer plugin
* refactor: clean explorer structure, fix base (toc)
* refactor: clean css, respect displayClass
* style: add styling to chevron
* refactor: clean up debug statements
* refactor: remove unused import
* fix: clicking folder icon sometimes turns invisible
* refactor: clean css
* feat(explorer): add config for title
* feat: add config for folder click behavior
* fix: `no-pointer` not being set for all elements
new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer`
* fix: bug where nested folders got incorrect height
this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total
* feat: introduce `folderDefaultState` config
* feat: store depth for explorer nodes
* feat: implement option for collapsed state + bug fixes
folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working)
* fix: default folder icon rotation
* fix: hitbox problem with folder links, fix style
* fix: redirect url for nested folders
* fix: inconsistent behavior with 'collapseFolders' opt
* chore: add comments to `ExplorerNode`
* feat: save explorer state to local storage (not clean)
* feat: rework `getFolders()`, fix localstorage read + write
* feat: set folder state from localStorage
needs serious refactoring but functional (except folder icon orientation)
* fix: folder icon orientation after local storage
* feat: add config for `useSavedState`
* refactor: clean `explorer.inline.ts`
remove unused functions, comments, unused code, add types to EventHandler
* refactor: clean explorer
merge `isSvg` paths, remove console logs
* refactor: add documentation, remove unused funcs
* feat: rework folder collapse logic
use grids instead of jank scuffed solution with calculating total heights
* refactor: remove depth arg from insert
* feat: restore collapse functionality to clicks
allow folder icon + folder label to collapse folders again
* refactor: remove `pointer-event` jank
* feat: improve svg viewbox + remove unused props
* feat: use css selector to toggle icon
rework folder icon to work purely with css instead of JS manipulation
* refactor: remove unused cfg
* feat: move TOC to right sidebar
* refactor: clean css
* style: fix overflow + overflow margin
* fix: use `resolveRelative` to resolve file paths
* fix: `defaultFolderState` config option
* refactor: rename import, rename `folderLi` + ul
* fix: use `QuartzPluginData` type
* docs: add explorer documentation
2023-09-15 18:39:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Toggles visibility of a folder
|
|
|
|
* @param array array of FolderState (`fileTree`, either get from local storage or data attribute)
|
|
|
|
* @param path path to folder (e.g. 'advanced/more/more2')
|
|
|
|
*/
|
|
|
|
function toggleCollapsedByPath(array: FolderState[], path: string) {
|
|
|
|
const entry = array.find((item) => item.path === path)
|
|
|
|
if (entry) {
|
|
|
|
entry.collapsed = !entry.collapsed
|
|
|
|
}
|
|
|
|
}
|