1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-12-04 15:29:56 +00:00

allow tagField and parentField instead of tags

This commit is contained in:
pmario 2024-02-07 01:25:12 +01:00
parent 655f9616e8
commit a2afdc8c96
2 changed files with 29 additions and 16 deletions

View File

@ -19,37 +19,47 @@ tags: $:/tags/Macro
\procedure toc-open-icon() $:/core/images/down-arrow
\procedure toc-closed-icon() $:/core/images/right-arrow
\procedure toc-hide-field() toc-hide
\procedure toc-hide-field() toc-hide
\procedure toc-include-field() toc-include
\procedure toc-filter-field() toc-filter
\procedure toc-filter-field() toc-filter
<!-- helper functions for li class definitions -->
\function tf.toc-itemClassFilter() [<selectedTiddler>get[text]match<currentTiddler>then[toc-item-selected]else[toc-item]]
\function tf.toc-includeClass() [subfilter<tf.toc-include>match<currentTiddler>then[toc-item-include]]
\function tf.toc-filterClass() [subfilter<tf.toc-filter>match<currentTiddler>then[toc-item-filter]]
\function tf.toc-hideClass() [<tf.toc-hide>!is[blank]then[toc-item-hide]]
\function tf.toc-includeClass() [subfilter<tf.toc-include>match<currentTiddler>then[toc-item-include]]
\function tf.toc-filterClass() [subfilter<tf.toc-filter>match<currentTiddler>then[toc-item-filter]]
\function tf.toc-hideClass() [<tf.toc-hide>!is[blank]then[toc-item-hide]]
<!-- join the CSS definitions from above -->
\function tf.toc-itemClass() [<tf.toc-itemClassFilter>] [<tf.toc-includeClass>] [<tf.toc-filterClass>] [<tf.toc-hideClass>] +[join[ ]]
\function tf.toc-itemClass() [<tf.toc-itemClassFilter>] [<tf.toc-includeClass>] [<tf.toc-filterClass>] [<tf.toc-hideClass>] +[join[ ]]
<!-- the following 3 functions need to use <currentTiddler> -->
<!-- the following functions need to use <currentTiddler> -->
\function tf.toc-getHideText() [<currentTiddler>get<toc-hide-field>]
\function tf.toc-hideIsYes() [<currentTiddler>format:titlelist[]]
\function tf.toc-hideIsYes() [<currentTiddler>format:titlelist[]]
<!-- Special case, if toc-hide field is "yes", we need a currentTiddler *titlelist* -- otherwise return the content as text -->
\function tf.toc-hide() [<tf.toc-getHideText>match[yes]then<tf.toc-hideIsYes>] :else[<tf.toc-getHideText>]
\function tf.toc-hide() [<tf.toc-getHideText>match[yes]then<tf.toc-hideIsYes>] :else[<tf.toc-getHideText>]
<!-- tf.toc-include and tf.toc-filter need to use <tag> -->
\function tf.toc-include() [<tag>get<toc-include-field>]
\function tf.toc-filter() [<tag>get<toc-filter-field>]
\function tf.toc-include() [<tag>get<toc-include-field>]
\function tf.toc-filter() [<tag>get<toc-filter-field>]
<!-- Use a field instead of a tag -->
\procedure toc-filterDefault() [all[shadows+tiddlers]tag<tag>!has[draft.of]]
\procedure toc-filterParent() [has<parentField>!has[draft.of]] :filter[get<parentField>match<tag>]
\procedure toc-filterTagLike() [<tag>get<tagField>enlist-input[]]
<!-- activate the filterString depending on tagField, parentField or default. tagField takes precedence -->
\function tf.toc-filterString() [<tagField>!is[blank]then<toc-filterTagLike>] :else[<parentField>!is[blank]then<toc-filterParent>else<toc-filterDefault>]
<!-- define unique path based state title -->
\function tf.toc-newPath() [<path>addsuffix[/]addsuffix<tag>]
<!-- toc helper -->
\procedure toc-body(tag,sort:"",itemClassFilter,exclude,path)
<!-- Be aware: if parentField is set, the "tag" parameter contains the currentTiddler -->
<$set name=currentTiddler filter="[<parentField>!is[blank]then<tag>else<currentTiddler>]">
<ol class="tc-toc">
<!-- text substitution is needed for backwards compatibility -->
<$list filter=` [subfilter<tf.toc-filter>]
:else[all[shadows+tiddlers]tag<tag>!has[draft.of]$(sort)$]
:else[subfilter<tf.toc-filterString>$(sort)$]
[subfilter<tf.toc-include>] -[<tag>] -[subfilter<exclude>]`>
<%if [<currentTiddler>] -[subfilter<tf.toc-hide>] %>
<$let item=<<currentTiddler>> _path=<<tf.toc-newPath>> >
@ -75,13 +85,16 @@ tags: $:/tags/Macro
</$list>
</ol>
\end
<!-- -->
<!-- <$log tag=<<tag>> parentField=<<parentField>> toc-filter=<<toc-filter>> ct=<<currentTiddler>> captionField=<<captionField>>/> -->
<!-- -->
<!-- =============================================================
Simple toc macro which alwayse shows the full tree
This macro is _not_ used by other toc-macros
v5.3.4 itemClassFilter has been replaced by tf.toc-itemClassFilter
================================================================== -->
\procedure toc(tag, sort:"", itemClassFilter, exclude, captionField, captionFieldTemplate)
\procedure toc(tag, sort:"", itemClassFilter, exclude, tagField, parentField, captionField, captionFieldTemplate)
<$macrocall $name="toc-body" tag=<<tag>> sort=<<sort>> exclude=<<exclude>>/>
\end

View File

@ -1,5 +1,5 @@
created: 20140919155729620
modified: 20240206175037389
modified: 20240206175448578
tags: Macros [[Core Macros]]
title: Table-of-Contents Macros
type: text/vnd.tiddlywiki
@ -65,7 +65,7 @@ The difference between the last two has to do with what happens when the user cl
; template
: Optionally, the title of a tiddler to use as a [[template|TemplateTiddlers]] for transcluding the selected tiddler into the right-hand panel
!! Structure
!! Tiddler Fields
The top level of the tree consists of the tiddlers that carry a particular tag, known as the <<.def "root tag">>. Tiddlers tagged with any of those make up the next level down, and so on.