title: $:/core/macros/tree
tags: $:/tags/Macro
\define leaf-link(full-title,chunk,separator: "/")
<$link to=<<__full-title__>>><$text text=<<__chunk__>>/>$link>
\end
\define leaf-node(prefix,chunk)
<$list filter="[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]" variable="full-title">
<$list filter="[removeprefix<__prefix__>]" variable="chunk">
{{$:/core/images/file}} <$macrocall $name="leaf-link" full-title=<> chunk=<>/>
$list>
$list>
\end
\define branch-node(prefix,chunk,separator: "/")
<$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>
<$reveal type="nomatch" stateTitle=<> text="show">
<$button setTitle=<> setTo="show" class="tc-btn-invisible">
{{$:/core/images/folder}} <$text text=<<__chunk__>>/>
$button>
$reveal>
<$reveal type="match" stateTitle=<> text="show">
<$button setTitle=<> setTo="hide" class="tc-btn-invisible">
{{$:/core/images/folder}} <$text text=<<__chunk__>>/>
$button>
$reveal>
(<$count filter="[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]"/>)
<$reveal type="match" stateTitle=<> text="show">
<$macrocall $name="tree-node" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>
$reveal>
$set>
\end
\define tree-node(prefix,separator: "/")
<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]" variable="chunk">
<$macrocall $name="leaf-node" prefix=<<__prefix__>> chunk=<> separator=<<__separator__>>/>
$list>
<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]" variable="chunk">
<$macrocall $name="branch-node" prefix=<<__prefix__>> chunk=<> separator=<<__separator__>>/>
$list>
\end
\define tree(prefix: "$:/",separator: "/")
<$text text=<<__prefix__>>/>
<$macrocall $name="tree-node" prefix=<<__prefix__>> separator=<<__separator__>>/>
\end