blog-tiddly wiki根据tiddler tag自动生成时间线
将以下代码直接复制粘贴进tiddler的内容框内:
\define timeline-r-title() <$view field="title"/> \define timeline-r-link() <$link to={{!!title}}><<timeline-r-title>></$link> <$vars ctags={{{ [<currentTiddler>tags[]compare:string:ne[时间线]sort[]join[,]] }}} > <div class="tc-timeline-r"> <$list filter="[all[tiddlers]] :filter[tags[]compare:string:ne[时间线]sort[]join[,]regexp<ctags>] +[has[date]sort[date]limit[100]eachday[date]]"> <div class="tc-menu-list-item"> <$view field="date" format="date" template="YYYY年0MM月0DD日"/> <$list filter="[all[tiddlers]] :filter[tags[]compare:string:ne[时间线]sort[]join[,]regexp<ctags>] +[sameday:date{!!date}sort[date]]"> <div class="tc-menu-list-subitem"> <$link to={{!!title}}><$view field="title"/></$link> </div> </$list> </div> </$list> </div> </$vars>
原理解析:
代码主题来自于官方的 timeline
宏,仅做部分修改。这里我为当前tiddler添加了一个时间线的标签以快速查找类似的时间线视图,如果不需要的话可删除 compare:string:ne[时间线]
部分。
首先匹配出当前tiddler的所有不含“时间线”的标签,并将其排序后拼凑成一个字符串变量 ctags
。
<$vars ctags={{{ [<currentTiddler>tags[]compare:string:ne[时间线]sort[]join[,]] }}} >
然后开始生成列表,逐一检查所有tiddler,然后将其不含“时间线”的标签排序后拼凑成一个字符串,并检测其中是否包含 ctags
的数值。若有,则证明该tiddler包含有我们当前tiddler的tag。开始匹配日期、数量相关。
<$list filter="[all[tiddlers]] :filter[tags[]compare:string:ne[时间线]sort[]join[,]regexp<ctags>] +[has[date]sort[date]limit[100]eachday[date]]">
其余原理与官方 timeline
宏一致,不再赘述。