mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-06-18 03:19:55 +00:00
![Jermolene](/assets/img/avatar_default.png)
By almost entirely eliminating text subsitution, we can avoid the situations where special characters in tags or titles gets the macro confused. These are quite intricate changes, and so I'd appreciate any help reviewing and testing, many thanks. Fixes #3427
206 lines
9.5 KiB
Plaintext
206 lines
9.5 KiB
Plaintext
title: $:/core/macros/toc
|
|
tags: $:/tags/Macro
|
|
|
|
\define toc-caption()
|
|
<$set name="tv-wikilinks" value="no">
|
|
<$transclude field="caption">
|
|
<$view field="title"/>
|
|
</$transclude>
|
|
</$set>
|
|
\end
|
|
|
|
\define toc-body(tag,sort:"",itemClassFilter,exclude,path)
|
|
<ol class="tc-toc">
|
|
<$list filter="""[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] $exclude$""">
|
|
<$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}} excluded="""$exclude$ -[<__tag__>]""">
|
|
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item" value="toc-item-selected">
|
|
<li class=<<toc-item-class>>>
|
|
<$list filter="[all[current]toc-link[no]]" emptyMessage="<$link><$view field='caption'><$view field='title'/></$view></$link>">
|
|
<<toc-caption>>
|
|
</$list>
|
|
<$macrocall $name="toc-body" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>
|
|
</li>
|
|
</$set>
|
|
</$vars>
|
|
</$list>
|
|
</ol>
|
|
\end
|
|
|
|
\define toc(tag,sort:"",itemClassFilter:" ")
|
|
<$macrocall $name="toc-body" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />
|
|
\end
|
|
|
|
\define toc-linked-expandable-body(tag,sort:"",itemClassFilter,exclude,path)
|
|
<!-- helper function -->
|
|
<$wikify name="toc-state" text="""
|
|
<$macrocall $name="qualify" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}} />
|
|
""">
|
|
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item" value="toc-item-selected">
|
|
<li class=<<toc-item-class>>>
|
|
<$link>
|
|
<$reveal type="nomatch" state=<<toc-state>> text="open">
|
|
<$button set=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
|
|
{{$:/core/images/right-arrow}}
|
|
</$button>
|
|
</$reveal>
|
|
<$reveal type="match" state=<<toc-state>> text="open">
|
|
<$button set=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
|
|
{{$:/core/images/down-arrow}}
|
|
</$button>
|
|
</$reveal>
|
|
<<toc-caption>>
|
|
</$link>
|
|
<$reveal type="match" state=<<toc-state>> text="open">
|
|
<$macrocall $name="toc-expandable" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>
|
|
</$reveal>
|
|
</li>
|
|
</$set>
|
|
</$wikify>
|
|
\end
|
|
|
|
\define toc-unlinked-expandable-body(tag,sort:"",itemClassFilter:" ",exclude,path)
|
|
<!-- helper function -->
|
|
<$wikify name="toc-state" text="""
|
|
<$macrocall $name="qualify" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}} />
|
|
""">
|
|
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item" value="toc-item-selected">
|
|
<li class=<<toc-item-class>>>
|
|
<$reveal type="nomatch" state=<<toc-state>> text="open">
|
|
<$button set=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
|
|
{{$:/core/images/right-arrow}}
|
|
<<toc-caption>>
|
|
</$button>
|
|
</$reveal>
|
|
<$reveal type="match" state=<<toc-state>> text="open">
|
|
<$button set=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
|
|
{{$:/core/images/down-arrow}}
|
|
<<toc-caption>>
|
|
</$button>
|
|
</$reveal>
|
|
<$reveal type="match" state=<<toc-state>> text="open">
|
|
<$macrocall $name="toc-expandable" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>
|
|
</$reveal>
|
|
</li>
|
|
</$set>
|
|
</$wikify>
|
|
\end
|
|
|
|
\define toc-expandable-empty-message()
|
|
<$macrocall $name="toc-linked-expandable-body" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>
|
|
\end
|
|
|
|
\define toc-expandable(tag,sort:"",itemClassFilter:" ",exclude,path)
|
|
<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> excluded="""$exclude$ -[<__tag__>]""" path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>
|
|
<ol class="tc-toc toc-expandable">
|
|
<$list filter="""[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$] -[<__tag__>] $exclude$""">
|
|
<$list filter="[all[current]toc-link[no]]" emptyMessage=<<toc-expandable-empty-message>> >
|
|
<$macrocall $name="toc-unlinked-expandable-body" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter="""itemClassFilter""" exclude=<<excluded>> path=<<path>> />
|
|
</$list>
|
|
</$list>
|
|
</ol>
|
|
</$vars>
|
|
\end
|
|
|
|
\define toc-linked-selective-expandable-body(tag,sort:"",itemClassFilter:" ",exclude,path)
|
|
<$wikify name="toc-state" text="""
|
|
<$macrocall $name="qualify" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}} />
|
|
""">
|
|
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item" value="toc-item-selected" >
|
|
<li class=<<toc-item-class>>>
|
|
<$link>
|
|
<$list filter="[all[current]tagging[]limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>">
|
|
<$reveal type="nomatch" state=<<toc-state>> text="open">
|
|
<$button set=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
|
|
{{$:/core/images/right-arrow}}
|
|
</$button>
|
|
</$reveal>
|
|
<$reveal type="match" state=<<toc-state>> text="open">
|
|
<$button set=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
|
|
{{$:/core/images/down-arrow}}
|
|
</$button>
|
|
</$reveal>
|
|
</$list>
|
|
<<toc-caption>>
|
|
</$link>
|
|
<$reveal type="match" state=<<toc-state>> text="open">
|
|
<$macrocall $name="toc-selective-expandable" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>
|
|
</$reveal>
|
|
</li>
|
|
</$set>
|
|
</$wikify>
|
|
\end
|
|
|
|
\define toc-unlinked-selective-expandable-body(tag,sort:"",itemClassFilter:" ",exclude,path)
|
|
<$wikify name="toc-state" text="""
|
|
<$macrocall $name="qualify" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}} />
|
|
""">
|
|
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item" value="toc-item-selected">
|
|
<li class=<<toc-item-class>>>
|
|
<$list filter="[all[current]tagging[]limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>">
|
|
<$reveal type="nomatch" state=<<toc-state>> text="open">
|
|
<$button set=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
|
|
{{$:/core/images/right-arrow}}
|
|
<<toc-caption>>
|
|
</$button>
|
|
</$reveal>
|
|
<$reveal type="match" state=<<toc-state>> text="open">
|
|
<$button set=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
|
|
{{$:/core/images/down-arrow}}
|
|
<<toc-caption>>
|
|
</$button>
|
|
</$reveal>
|
|
</$list>
|
|
<$reveal type="match" state=<<toc-state>> text="open">
|
|
<$macrocall $name="toc-selective-expandable" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>
|
|
</$reveal>
|
|
</li>
|
|
</$set>
|
|
</$wikify>
|
|
\end
|
|
|
|
\define toc-selective-expandable-empty-message()
|
|
<$macrocall $name="toc-linked-selective-expandable-body" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>
|
|
\end
|
|
|
|
\define toc-selective-expandable(tag,sort:"",itemClassFilter,exclude,path)
|
|
<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> excluded="""$exclude$ -[<__tag__>]""" path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>
|
|
<ol class="tc-toc toc-selective-expandable">
|
|
<$list filter="""[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$] -[<__tag__>] $exclude$""">
|
|
<$list filter="[all[current]toc-link[no]]" variable="ignore" emptyMessage=<<toc-selective-expandable-empty-message>> >
|
|
<$macrocall $name=toc-unlinked-selective-expandable-body tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>> >
|
|
</$list>
|
|
</$list>
|
|
</ol>
|
|
</$vars>
|
|
\end
|
|
|
|
\define toc-tabbed-external-nav(tag,sort:"",selectedTiddler:"$:/temp/toc/selectedTiddler",unselectedText,missingText,template:"")
|
|
<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>
|
|
<div class="tc-tabbed-table-of-contents">
|
|
<$linkcatcher to=<<__selectedTiddler__>>>
|
|
<div class="tc-table-of-contents">
|
|
<$macrocall $name="toc-selective-expandable" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter="[all[current]field:title<__selectedTiddler__>]"/>
|
|
</div>
|
|
</$linkcatcher>
|
|
<div class="tc-tabbed-table-of-contents-content">
|
|
<$reveal state=<<__selectedTiddler__>> type="nomatch" text="">
|
|
<$transclude mode="block" tiddler=<<__template__>>>
|
|
<h1><<toc-caption>></h1>
|
|
<$transclude mode="block">$missingText$</$transclude>
|
|
</$transclude>
|
|
</$reveal>
|
|
<$reveal state=<<__selectedTiddler__>> type="match" text="">
|
|
$unselectedText$
|
|
</$reveal>
|
|
</div>
|
|
</div>
|
|
</$tiddler>
|
|
\end
|
|
|
|
\define toc-tabbed-internal-nav(tag,sort:"",selectedTiddler:"$:/temp/toc/selectedTiddler",unselectedText,missingText,template:"")
|
|
<$linkcatcher to=<<__selectedTiddler__>>>
|
|
<$macrocall $name="toc-tabbed-external-nav" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>
|
|
</$linkcatcher>
|
|
\end
|
|
|