Closed dongrentianyu closed 1 year ago
Name | Link |
---|---|
Latest commit | eacdc25af655966249e28418281aed68a73bf2c1 |
Latest deploy log | https://app.netlify.com/sites/itkg/deploys/6484a8b9c9152000086fdc38 |
Deploy Preview | https://deploy-preview-21--itkg.netlify.app |
Preview on mobile | Toggle QR Code...Use your smartphone camera to open QR code link. |
To edit notification comments on pull requests, go to your Netlify site settings.
好像概念没有放到concept文件夹下。上面的checks不通过不知道什么原因。
不通过是因为你没设置token,我也不知道咋搞。
所以现在是PPT还保留着,只不过是把首页换成新的结构了,对吧?
这样有时候别人演示的时候还可以用PPT,有人直接点进来翻看的时候可以看首页这款
https://github.com/github/docs/issues/14626
这里有提问,但感觉没提出解决办法。
找了一圈没找到合适的办法。我看有些提到应该要按https://[TOKEN]@github.com[USER]/[REPO]
。我发现这是之前乱码的情况,原来里面的乱码就是token,但现在我可能要得重新申请一个token了。因为之前token只出现一个值的那个好像被我删除了。我想了想还是不搞了,万一等下又搞错了。还挺麻烦的。
PPT和文字稿都新建了条目放在index文件下面。这样别人想看文字稿或者要给别人讲用到PPT时就可以点开去查看。
梳理人生意义那块,有一部分ppt内容,我删除了,改用toc目录来实现。点击就看到内容了。
类似这样。
应该能合并吧,如果checks不通过不能合并的话,通知我一下,我再搞一搞这个token。这个token还挺麻烦的,搞半天都不知道怎么搞。我现在推送中文教程的内容,每次更新都会是带上token的,我要删除token然后重新配置才行,所以我现在不敢乱动这个token。
但我刚刚发现一个问题,就是好像放在usage文件夹里的,用TOC打开,好像就会移到tiddlers文件夹里去。当时确实没想到这个问题。
应该要先合并这个,我修改aggregation插件内容,才能提交pr吧?不然下次还是会带上这些修改的吧?不确定。
我忽然发现编辑文档应该用vscode编辑,不能用太记打开。不然太记老是会把文档移到其他文件夹里去。而且更重要的是看不到插件的内容了。因为插件内容放在外面去了。第一次提交时好像是在vscode里修改编辑的,所以就没问题。
对的,我一般是编辑完再手动挪回去。想自动挪可以写filesystempath,我懒得写哈哈
你都挪好了吗,可以合并了吗?
PPT版应该还是可以正常演示的对吧
你可以基于我的仓库master分支重新开个分支,这样就不会带上这个分支的内容了
可以合并,但ppt内容只有概念和设计思路。其他条目没做ppt版本。其实我一直觉得在太微里用ppt不够吸引人。直接用库克马那种形式才有小册子的感觉。而且ppt老是显示内容不全。
不能直接在太记里编辑还是有一点麻烦的。因为不看界面编辑,总感觉把握不准的样子。可能是还不习惯。
主要是说之前有几个PPT,现在就有几个就行,没删就好,也没删里面的页面就好
你这个现在有冲突了,你得先合并一下主分支
现在能合并吗?虽然checks并没有完全通过。
这个token真麻烦。先这样吧,等明天起来再看看是什么问题,不然真要崩溃了。
那个应该是github Actions设置的问题
你看看demo网站再检测一下有没有别的问题
好像xp那个也一起带上去了。这样也好,不用再提交pr了。
但问题itonnote主题插件影响了旁边的排序按钮。不过我切换到其他主题也不能正常显示出来,比如图二的。所以这个问题还有待研究一下。
现在还有问题,我看还需要修复一下。因为时常会显示不出来。或者排序按钮没有。但我还找不到问题是什么。
找半天没找到问题。f12检查发现好像是样式隐藏了按钮,但没找到什么样式隐藏的。
找到问题了。问题挺复杂。
第一是安装插件时,不会附带安装其他插件。像xp的那个aggregation插件和日历插件好像都可能会没有附带安装上。这个不知道是为什么。
第二是当时xp作者给我的是一个json文件。我拖到wiki里就是三个条目。后面我是把这三个条目的tid文件导出放到插件里的。但我发现这样好像不起作用。还需要重新导入一遍json文件才行,不然按钮显示不了。所以是不是要删除这三个文件,直接附带一个json文件?
第三个问题就是itonnote主题插件会影响。去除排序按钮。因为这些按钮的class样式都是”tc-search“。
插件目前好像只会安装一个层级,不会无限层级安装,这个可以去核心反应一下bug,我其实一直知道这个,但还没去提issue,你要不去提一个看看,练练英文?
例子就是安装itkg插件的时候依赖了很多插件,他们还有依赖的插件就不会被装上。
理论上只要这几个条目正常加载,他们就会生效啊,太威力,你只要是笔记,而且带有正确的标签就会生效,可以看看他们是不是正确被加载了。
还有如果主题有问题的话,可以去改改那个主题。反正都适配一下挺好的,其实主题有很多地方要改的,比如说之前介绍那个挺好看的,krystal横向的布局主题,其实有空我也要去适配一下。
但现在有一个问题是,我刚试着修复了一下,但我需要提交上来才能看到修复有没有成功。我不能在本地看到我修复后的效果。因为没成功我就不提交了。
不用啊,你本地先 pnpm i 然后 pnpm dev
应该是没有生效。但我不明白为什么没有生效。
反正你开个新分支,新pr吧。
没生效的问题,实在不行就直接传json也无所谓。我觉得可能是有些元信息在你导出的时候丢失了但其实原来的这个json里面有
不用啊,你本地先 pnpm i 然后 pnpm dev
在命令行执行吗?执行”pnpm i“没有效果。
非常迷惑,我把xp插件放进去,把json文件也放进去了。这下直接不生效了。
可当我把那个json文件拖进去时一下子就生效了。没想明白是因为什么。
我大概是排查不出问题了。就不管是怎样处理,只要把json文件拖进去才能实现。直接放到插件里面都实现不了。或者直接把这个json文件放到demo里去,那也可以实现。或者把tid条目放到demo文件夹里去都可以实现。但唯独放到src文件夹里实现不了。我猜测这是因为插件最终会打包成一个json文件,但不明白的是为什么用tid条目放到src文件里不行。
首先你要装PnpM和node
json的问题,你把json和弄出来的tid都贴上来看看,就放代码块里,我们一眼可能就看出问题了。
pnpm已经装了。所以才能不停地尝试。json代码和tid的代码我对比过应该是没有问题的。不过还是可以贴一下代码看看情况。下面是json的代码。里面有三个文件,所以很长。
[
{
"created": "20230402014525104",
"title": "$:/aggregation/macros",
"tags": "$:/tags/Macro $:/tags/Macro/Aggregation $:/tags/XpPreview",
"text": "\\define aggregation(filter,state:\"aggregation-state\", defaultFields:\"tbl-expand title\",class:\"w-100\",paginationButton:\"yes\",rowsButton:\"no\",viewButton:\"yes\",tiddler, searchClass:\"xp-search-aggregation\", cardTemplate:\"$:/aggregation-card-template\", tocTemplate, promptTiddler:\"$:/aggregation/prompt\")\n\\import $:/aggregation/macros/definitions\n\\whitespace trim\n<$list filter=\"\"\"$filter$ +[limit[1]]\"\"\" emptyMessage=\"{{$promptTiddler$}}\" variable=\"ignore\">\n<span class=\"xp-search $searchClass$\">\nSearch  \n<$select\n tiddler=\"\"\"$:/config/xp/$state$/SearchScope\"\"\"\n default=\"+[search<userInput>]\"\n tooltip=\"Choosing the Search Scope\"\n class=\"xp-aggregation-select\">\n <option value=\"+[search:*<userInput>]\"> all fields</option>\n <option value=\"+[search:*:literal,casesensitive<userInput>]\"> all exact match</option>\n <option value=\"+[search:-text,*<userInput>]\"> all except text</option>\n <option value=\"+[search<userInput>]\"> title text tags</option>\n <option value=\"+[search:title,caption<userInput>]\"> title caption</option>\n</$select>\n<i class='tc-small-gap-left'/>\n<$macrocall\n $name=\"keyboard-driven-input\"\n tiddler=\"\"\"$:/temp/search/$state$\"\"\"\n type=\"search\"\n tag=\"input\"\n focus={{$:/config/xp/aggregation/SearchAutoFocus}}\n inputCancelActions=\"\"\"<$action-deletetiddler $filter=\"[[$:/state/filter/$state$]get[checktiddler]enlist-input[]]\"/><$action-deletetiddler $filter=\"$:/temp/search/$state$ $:/state/filter/$state$ $:/temp/xp/$state$/Field $:/temp/xp/$state$/Date $:/temp/xp/$state$/FieldValue\"/>\"\"\"\n/>\n</span>\n<i class='tc-tiny-gap-left'/>\n<$let userInput={{{ [[$:/temp/search/$state$]get[text]] }}}\n searchRun={{{ [[$:/config/xp/$state$/SearchScope]has[text]get[text]] ~\"+[search<userInput>]\" }}}\n timeRun={{{ [[$:/state/filter/$state$]get[filter]] }}}\n sortRun={{{ [[$:/temp/xp/$state$/Sorting]is[tiddler]get[text]] }}}\n fieldRun={{{ [[$:/temp/xp/$state$/Field]has[filter]get[filter]] }}}\n valueRun={{{ [[$:/temp/xp/$state$/FieldValue]has[filter]get[filter]] }}}\n resultCount=\"<$count filter=<<searchFilter>>/>\"\n sortState={{{ [[$:/state/dynamictables/$state$/sortby]has[title]] ~$:/temp/xp/$state$/Sorting }}}\n tempTableSort=\"\"\"$:/state/dynamictables/$state$/sortby\"\"\"\n sortIndex={{{ [[$:/state/dynamictables/$state$/sortby]getindex[sortIndex]] }}}\n storeTitle=\"\"\"$:/temp/search/$state$\"\"\"\n filterState=\"\"\"$:/state/filter/$state$\"\"\"\n fieldTiddler=\"\"\"$:/temp/xp/$state$/Field\"\"\"\n dateTiddler=\"\"\"$:/temp/xp/$state$/Date\"\"\"\n valueTiddler=\"\"\"$:/temp/xp/$state$/FieldValue\"\"\"\n sortTiddler=\"\"\"$:/temp/xp/$state$/Sorting\"\"\"\n defaultView=\"\"\"$:/config/xp/$state$/DefaultView\"\"\"\n readingMode=\"\"\"$:/config/xp/$state$/ReadingMode\"\"\"\n sourceMode=\"\"\"$:/config/xp/$state$/SourceMode\"\"\"\n tocSwitchTid=\"\"\"$:/temp/xp/$state$/aggregation-toc\"\"\"\n config-base=\"\"\"$:/config/xp/$state$/TableFields/Visibility/\"\"\"\n navTiddler={{{ [<__tiddler__>has[title]] ~[<currentTiddler>] }}}>\n<span class=\"tc-search\">\n<$reveal state=<<filterState>> type=\"nomatch\" text=\"yes\">\n<$button set=<<filterState>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/xp/images/filter}}\n</$button>\n</$reveal>\n<$set name=\"stateTiddler\" filter=\"[<storeTitle>!is[missing]has[text]]\" value=<<storeTitle>> emptyValue=<<filterState>>>\n<$reveal state=<<stateTiddler>> type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-deletetiddler $filter=\"[[$:/state/filter/$state$]get[checktiddler]enlist-input[]]\"/>\n<$action-deletetiddler $filter=\"$:/temp/search/$state$ $:/state/filter/$state$ $:/temp/xp/$state$/Field $:/temp/xp/$state$/Date $:/temp/xp/$state$/FieldValue\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".$searchClass$ input\"\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$set>\n<$list filter=\"[<__viewButton__>match[yes]]\" variable=\"ignore\">\n<$reveal state=<<readingMode>> type=\"nomatch\" text=\"on\">\n<<toggleViewButton>>\n</$reveal>\n</$list>\n<<sortingButton>>\n<<toggleReadingMode>>\n<<viewSource>>\n<<tocSwitch>>\n</span>\n<$wikify text=<<target-filter-code>> name=\"targetFilter\">\n<$set name=\"searchFilter\" filter=\"[<filterState>has[list]]\" value=<<targetFilter>> emptyValue={{{ [<__filter__>addsuffix[ ]addsuffix<searchRun>addsuffix<timeRun>addsuffix<fieldRun>addsuffix<valueRun>addsuffix<sortRun>] }}}>\n<$set name=\"stateTiddler\" filter=\"[<storeTitle>!is[missing]get[text]!is[blank]]\" value=<<storeTitle>> emptyValue=<<filterState>>>\n<$reveal state=<<stateTiddler>> type=\"nomatch\" text=\"\">\n<$reveal state=<<filterState>> type=\"nomatch\" text=\"yes\" animate=\"yes\">\n<span class=\"xp-search-results\"><<lingo System/Matches>></span>\n</$reveal>\n</$reveal>\n<$reveal state=<<filterState>> type=\"nomatch\" text=\"yes\" animate=\"yes\">\n<<unsortButton>>\n</$reveal>\n</$set>\n<$reveal state=<<filterState>> type=\"match\" text=\"yes\" animate=\"yes\">\n<div class=\"xp-wrapper-aggrfilter\">\n\nFiltered by Tag: <<deselectButton>>\n\n<div class=\"xp-aggrfilter-category\">\n<table>\n<tbody>\n<$list filter=\"\"\"$filter$ +[tags[]!is[system]limit[1]]\"\"\" variable=\"ignore\">\n<tr>\n<td><span class=\"xp-aggrfilter-category-title tc-muted\">Tags</span></td>\n<td>\n<span class=\"xp-aggrfilter-category-item\">\n<$list filter=\"\"\"$filter$ +[tags[]!is[system]sort[]]\"\"\" variable=\"currentItem\">\n<$macrocall $name=\"aggrfilteritem\" item=<<currentItem>>/>\n</$list>\n</span>\n</td>\n</tr>\n</$list>\n<$list filter=\"\"\"$filter$ +[tags[]is[system]limit[1]]\"\"\" variable=\"ignore\">\n<tr>\n<td><span class=\"xp-aggrfilter-category-title tc-muted\">$Tags</span></td>\n<td>\n<span class=\"xp-aggrfilter-category-item\">\n<$list filter=\"\"\"$filter$ +[tags[]is[system]sort[]]\"\"\" variable=\"currentItem\">\n<$macrocall $name=\"aggrfilteritem\" item=<<currentItem>>/>\n</$list>\n</span>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n</div>\n\nFiltered by Time / Field: <<resetFieldButton>>\n\n<div class=\"xp-aggrfilter-category\">\n<table>\n<tbody>\n<tr>\n<td>\n<span class=\"xp-aggrfilter-category-title tc-muted\">Time</span> \n<$select\n tiddler=<<filterState>>\n field=\"filter\"\n class=\"xp-aggregation-select\"\n actions=\"<$list filter='[<filterState>search:filter[regexp:created]]'><$action-setfield $tiddler=<<dateTiddler>> status='show'/></$list>\">\n <option value=\"\"> All</option>\n <option value=\"+[days:created[-1]]\"> Past 24 hours</option>\n <option value=\"+[days:created[-7]]\"> Past week</option>\n <option value=\"+[days:created[-30]]\"> Past month</option>\n <option value=\"+[days:created[-365]]\"> Past year</option>\n <option value=\"+[regexp:created[]]\"> Enter a date</option>\n</$select>\n</td>\n<$list filter=\"[<dateTiddler>is[tiddler]]\">\n<td>\n<span class=\"xp-aggrfilter-category-title tc-muted\">Date</span> \n<$vars pt=\" +[regexp:created[^\" st=\"]]\">\n<$macrocall\n $name=\"keyboard-driven-input\" \n tiddler=<<dateTiddler>>\n type=\"search\"\n tag=\"input\"\n size=7\n focus=\"no\"\n inputCancelActions=<<input-cancel-actions-date>>\n inputAcceptActions=<<input-accept-actions-date>>\n/>\n \n<$button> Enter\n<<input-accept-actions-date>>\n</$button>\n</$vars>\n</td>\n</$list>\n<$vars\n getField={{{ [<fieldTiddler>is[tiddler]get[text]] }}}\n getValue={{{ [<valueTiddler>is[tiddler]get[text]] }}}\n pt1=\"+[has:field[\"\n pt2=\"+[\"\n st=\"]]\"\n st2=\"[\"\n >\n<td>\n<span class=\"xp-aggrfilter-category-title tc-muted\"> Field </span> \n<$select\n tiddler=<<fieldTiddler>>\n tooltip=\"Choosing the Field\"\n class=\"xp-aggregation-select\"\n actions=\"<$action-setfield $tiddler=<<fieldTiddler>> filter={{{ [<fieldTiddler>get[text]addprefix<pt1>addsuffix<st>] }}}/><$action-deletetiddler $tiddler=<<valueTiddler>>/>\">\n <$list filter=\"\"\"$filter$ +[fields:exclude{$:/config/xp/aggregation/excluded-fields/filtering-button}]\"\"\">\n <option><$view field=\"title\"/></option>\n </$list>\n</$select>\n</td>\n<$list\n filter=\"\"\"$filter$ +[has<getField>limit[1]]\"\"\"\n emptyMessage=\"<$list filter='[<fieldTiddler>has[text]]'><td><span class='xp-aggrfilter-category-title tc-muted'> No value for this field </span></td></$list>\"\n variable=\"ignore\">\n<td>\n<span class=\"xp-aggrfilter-category-title tc-muted\"> Value </span> \n<$select\n tiddler=<<valueTiddler>>\n tooltip=\"Choosing the Value\"\n class=\"xp-aggregation-select\"\n actions=\"\"\"<$action-setfield $tiddler=<<valueTiddler>> filter={{{ [<getField>addprefix<pt2>addsuffix<st2>addsuffix{$:/temp/xp/$state$/FieldValue}addsuffix<st>] }}}/>\"\"\">\n <$list filter=\"\"\"$filter$ +[has<getField>each<getField>get<getField>!is[blank]]\"\"\">\n <option><$view field=\"title\"/></option>\n </$list>\n</$select>\n</td>\n</$list>\n</$vars>\n</tr>\n</tbody>\n</table>\n</div>\n\n</div>\n</$reveal>\n<$reveal state=<<filterState>> type=\"match\" text=\"yes\" animate=\"yes\">\n<<lingo System/Matches>>\n<<unsortButton>>\n</$reveal>\n\n<$reveal state=<<readingMode>> type=\"nomatch\" text=\"on\" animate=\"yes\">\n\n<!-- Show table -->\n<$reveal state=<<defaultView>> default=\"table\" type=\"match\" text=\"table\" animate=\"yes\">\n<$wikify name=\"dtableFields\" text=\"\"\"<$list filter=\"[list[$:/config/xp/$state$/TableFields]]\" variable=\"listField\"><$reveal type=\"match\" state=<<field-config-title>> text=\"show\"> <$text text={{{ [<listField>format:titlelist[]] }}}/> </$reveal></$list>\"\"\">\n<$set name=\"fields\" filter=\"[<dtableFields>is[blank]]\" value=<<__defaultFields__>> emptyValue=<<dtableFields>>>\n<$macrocall \n $name=\"aggregation-dtable\"\n filter=<<searchFilter>>\n fields=<<fields>>\n class=<<__class__>>\n stateTiddler=<<__state__>>\n paginationButton=<<__paginationButton__>>\n rowsButton=<<__rowsButton__>>\n/>\n</$set>\n</$wikify>\n</$reveal>\n\n<!-- Show card -->\n<$reveal state=<<defaultView>> default=\"table\" type=\"nomatch\" text=\"table\" animate=\"yes\">\n<div class=\"content\" style=\"padding-top:10px;\">\n<$list\n filter=<<searchFilter>>\n template=<<__cardTemplate__>>\n/>\n</div>\n</$reveal>\n\n</$reveal>\n\n<!-- Reading Mode -->\n<$reveal state=<<readingMode>> type=\"match\" text=\"on\" animate=\"yes\">\n<$list filter=\"\"\"$filter$ +[limit[1]]\"\"\" variable=\"ignore\">\n<$vars selectedTiddler=\"$:/temp/toc/selectedTiddler/$state$\" template=\"\" exclude=\"\">\n\n<div style=\"padding:10px 0;\">\n<$tiddler tiddler={{{ [<selectedTiddler>get[text]] }}}>\n<div class=\"tc-tabbed-table-of-contents\" style=\"\">\n<$list filter=\"[<tocSwitchTid>!text[hide]]\" variable=\"ignore\">\n <$linkcatcher to=<<selectedTiddler>>>\n <div class=\"tc-table-of-contents xp-aggregation-toc\">\n <$set name=\"excluded\" filter=\"[enlist<exclude>]\">\n <ol class=\"tc-toc toc-selective-expandable\">\n <$list filter=\"[subfilter<searchFilter>] -[enlist<exclude>]\">\n<$macrocall $name=\"toc-linked-selective-expandable-body\" itemClassFilter=\"[all[current]] -[<selectedTiddler>get[text]]\" exclude=<<excluded>>/>\n </$list>\n </ol>\n </$set>\n </div>\n </$linkcatcher>\n</$list>\n <div class=\"tc-tabbed-table-of-contents-content\">\n <$reveal stateTitle=<<selectedTiddler>> type=\"nomatch\" text=\"\">\n <$transclude mode=\"block\" tiddler=<<template>>>\n<$reveal state=<<sourceMode>> type=\"nomatch\" text=\"on\">\n <h1><$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link> <span class=\"tc-tiddler-controls\" style=\"font-size:0.73em !important;\"><$list filter=\"$:/core/ui/Buttons/new-here $:/core/ui/Buttons/clone $:/core/ui/Buttons/delete $:/core/ui/Buttons/edit\" variable=\"listItem\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$list></span></h1>\n ^^<i class=\"tc-muted\"><$view field=\"modified\" format=\"date\" template=\"DDth MMM YYYY at 0hh:0mm\">TBA</$view></i>^^\n <$transclude mode=\"block\"><p>Missing tiddler.</p></$transclude>\n</$reveal>\n<!-- Source Mode -->\n<$reveal state=<<sourceMode>> type=\"match\" text=\"on\">\n <h1><$link><$view field=\"title\"/></$link> <span class=\"tc-tiddler-controls\" style=\"font-size:0.73em !important;\"><$list filter=\"$:/core/ui/Buttons/new-here $:/core/ui/Buttons/clone $:/core/ui/Buttons/delete $:/core/ui/Buttons/edit\" variable=\"listItem\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$list></span></h1>\n ^^<i class=\"tc-muted\"><$view field=\"modified\" format=\"date\" template=\"DDth MMM YYYY at 0hh:0mm\">TBA</$view></i>^^\n <$codeblock code={{{ [<currentTiddler>get[text]] }}}><p>Missing tiddler.</p></$codeblock>\n</$reveal>\n </$transclude>\n<!-- Navigation -->\n<div class=\"xp-aggregation-toc-navigation\">\n <$list filter=\"[subfilter<searchFilter>] -[enlist<exclude>] +[after<currentTiddler>]\" variable=\"nextTiddler\">\n <$linkcatcher to=<<selectedTiddler>> actions=\"<$action-navigate $to=<<navTiddler>> $scroll='yes'/>\">\n ''NEXT''\n <div><$link to=<<nextTiddler>>><$text text=<<nextTiddler>>/></$link></div>\n </$linkcatcher>\n </$list>\n <$list filter=\"[subfilter<searchFilter>] -[enlist<exclude>] +[before<currentTiddler>]\" variable=\"prevTiddler\">\n <$linkcatcher to=<<selectedTiddler>> actions=\"<$action-navigate $to=<<navTiddler>> $scroll='yes'/>\">\n <div style=\"padding-top:7px;\">\n ''PREVIOUS''\n <div><$link to=<<prevTiddler>>><$text text=<<prevTiddler>>/></$link></div>\n </div>\n </$linkcatcher>\n </$list>\n</div>\n </$reveal>\n <$reveal stateTitle=<<selectedTiddler>> type=\"match\" text=\"\">\n <p>Select a topic in the table of contents. Click the arrow to expand a topic.</p>\n </$reveal>\n </div>\n</div>\n</$tiddler>\n</div>\n\n</$vars>\n</$list>\n</$reveal>\n\n</$set>\n</$wikify>\n</$let>\n</$list>\n\\end\n\n\n\\define aggregation-filtersearch(fields:\"tbl-expand title\", class:\"w-100\", state:\"aggregation-general\", paginationButton:\"yes\", rowsButton:\"no\", viewButton:\"yes\", searchClass:\"xp-search-aggregation\", cardTemplate:\"$:/aggregation-card-template\", tocTemplate, promptTiddler:\"$:/aggregation/prompt\")\n\\import $:/aggregation/macros/general\n\\whitespace trim\n<$list filter=<<aggr-has-tids>> emptyMessage=\"{{$promptTiddler$}}\" variable=\"ignore\">\n<span class=\"xp-search $searchClass$\">\nSearch   <<selectSearchScope>> <i class='tc-small-gap-right'/> <$macrocall $name=\"keyboard-driven-input\"\n tiddler=\"\"\"$:/temp/search/$state$\"\"\"\n type=\"search\"\n tag=\"input\"\n focus={{$:/config/xp/aggregation/SearchAutoFocus}}\n inputCancelActions=\"\"\"<$action-deletetiddler $filter=\"[[$:/state/filter/$state$]get[checktiddler]enlist-input[]]\"/><$action-deletetiddler $filter=\"$:/temp/search/$state$ $:/state/filter/$state$ $:/temp/xp/$state$/Field $:/temp/xp/$state$/Date $:/temp/xp/$state$/FieldValue\"/>\"\"\"/>\n</span>\n<i class='tc-tiny-gap-left'/>\n<$vars userInput={{{ [[$:/temp/search/$state$]get[text]] }}}\n timeRun={{{ [[$:/state/filter/$state$]get[filter]] }}}\n sortRun={{{ [[$:/temp/xp/$state$/Sorting]is[tiddler]get[text]] }}}\n fieldRun={{{ [[$:/temp/xp/$state$/Field]has[filter]get[filter]] }}}\n valueRun={{{ [[$:/temp/xp/$state$/FieldValue]has[filter]get[filter]] }}}\n resultCount=\"<$count filter=<<searchFilter>>/>\"\n sortState={{{ [[$:/state/dynamictables/$state$/sortby]is[tiddler]] ~$:/temp/xp/$state$/Sorting }}}\n tempTableSort=\"\"\"$:/state/dynamictables/$state$/sortby\"\"\"\n sortIndex={{{ [[$:/state/dynamictables/$state$/sortby]getindex[sortIndex]] }}}\n categoryPrefix=\"\"\"$:/config/xp/$state$/category/\"\"\"\n storeTitle=\"\"\"$:/temp/search/$state$\"\"\"\n filterState=\"\"\"$:/state/filter/$state$\"\"\"\n fieldTiddler=\"\"\"$:/temp/xp/$state$/Field\"\"\"\n dateTiddler=\"\"\"$:/temp/xp/$state$/Date\"\"\"\n valueTiddler=\"\"\"$:/temp/xp/$state$/FieldValue\"\"\"\n sortTiddler=\"\"\"$:/temp/xp/$state$/Sorting\"\"\"\n defaultView=\"\"\"$:/config/xp/$state$/DefaultView\"\"\"\n readingMode=\"\"\"$:/config/xp/$state$/ReadingMode\"\"\"\n sourceMode=\"\"\"$:/config/xp/$state$/SourceMode\"\"\"\n tocSwitchTid=\"\"\"$:/temp/xp/$state$/aggregation-toc\"\"\"\n config-base=\"\"\"$:/config/xp/$state$/TableFields/Visibility/\"\"\">\n<span class=\"tc-search\">\n<$reveal state=<<filterState>> type=\"nomatch\" text=\"yes\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=<<filterState>> text=\"yes\"/>\n{{$:/xp/images/filter}}\n</$button>\n</$reveal>\n<$set name=\"stateTiddler\" filter=\"[<storeTitle>!is[missing]has[text]]\" value=<<storeTitle>> emptyValue=<<filterState>>>\n<$reveal state=<<stateTiddler>> type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-deletetiddler $filter=\"[[$:/state/filter/$state$]get[checktiddler]enlist-input[]]\"/><$action-deletetiddler $filter=\"$:/temp/search/$state$ $:/state/filter/$state$ $:/temp/xp/$state$/Field $:/temp/xp/$state$/Date $:/temp/xp/$state$/FieldValue\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".$searchClass$ input\"\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$set>\n<$list filter=\"[<__viewButton__>match[yes]]\" variable=\"ignore\">\n<$reveal state=<<readingMode>> type=\"nomatch\" text=\"on\">\n<<toggleViewButton>>\n</$reveal>\n</$list>\n<<sortingButton>>\n<<toggleReadingMode>>\n<<viewSource>>\n<<tocSwitch>>\n</span>\n<$wikify text=<<alltagsfilter>> name=\"alltagsfilterwikified\">\n<$set name=\"searchFilter\" filter=\"[<filterState>has[list]]\" value=<<alltagsfilterwikified>> emptyValue={{{ [<configTiddler>get[text]addsuffix<timeRun>addsuffix<fieldRun>addsuffix<valueRun>addsuffix<sortRun>] }}}>\n<$set name=\"stateTiddler\" filter=\"[<storeTitle>!is[missing]get[text]!is[blank]]\" value=<<storeTitle>> emptyValue=<<filterState>>>\n<$reveal state=<<stateTiddler>> type=\"nomatch\" text=\"\">\n<$reveal state=<<filterState>> type=\"nomatch\" text=\"yes\" animate=\"yes\">\n<span class=\"xp-search-results\"><<lingo System/Matches>></span>\n</$reveal>\n</$reveal>\n<$reveal state=<<filterState>> type=\"nomatch\" text=\"yes\" animate=\"yes\">\n<<unsortButton>>\n</$reveal>\n</$set>\n<$reveal state=<<filterState>> type=\"match\" text=\"yes\" animate=\"yes\">\n<div class=\"xp-wrapper-aggrfilter\">\n\n<<filtered-by-tag>>\n\nFiltered by Time / Field: <<resetFieldButton>>\n\n<div class=\"xp-aggrfilter-category\">\n<table>\n<tbody>\n<tr>\n<<filtered-by-time>>\n<$vars getField={{{ [<fieldTiddler>is[tiddler]get[text]] }}} getValue={{{ [<valueTiddler>is[tiddler]get[text]] }}}\n pt1=\"+[has:field[\" pt2=\"+[\" st=\"]]\" st2=\"[\">\n<td>\n<span class=\"xp-aggrfilter-category-title tc-muted\"> Field </span> \n<$select tiddler=<<fieldTiddler>> tooltip=\"Choosing the Field\" class=\"xp-aggregation-select\" actions=\"\"\"<$action-setfield $tiddler=<<fieldTiddler>> filter={{{ [<fieldTiddler>get[text]addprefix<pt1>addsuffix<st>] }}}/><$action-deletetiddler $tiddler=<<valueTiddler>>/>\"\"\">\n<$list filter=\"[tag<aggregationTag>fields:exclude{$:/config/xp/aggregation/excluded-fields/filtering-button}]\">\n<option><$view field=\"title\"/></option>\n</$list>\n</$select>\n</td>\n<$list filter=\"[tag<aggregationTag>has{$:/temp/xp/$state$/Field}limit[1]]\" emptyMessage=\"\"\"<$list filter=\"[<fieldTiddler>has[text]]\"><td><span class=\"xp-aggrfilter-category-title tc-muted\"> No value for this field </span></td></$list>\"\"\" variable=\"ignore\">\n<td>\n<span class=\"xp-aggrfilter-category-title tc-muted\"> Value </span> \n<$select tiddler=<<valueTiddler>> tooltip=\"Choosing the Value\" class=\"xp-aggregation-select\" actions=\"\"\"<$action-setfield $tiddler=<<valueTiddler>> filter={{{ [<getField>addprefix<pt2>addsuffix<st2>addsuffix{$:/temp/xp/$state$/FieldValue}addsuffix<st>] }}}/>\"\"\">\n<$list filter=\"[tag<aggregationTag>has<getField>each<getField>get<getField>!is[blank]]\">\n<option><$view field=\"title\"/></option>\n</$list>\n</$select>\n</td>\n</$list>\n</$vars>\n</tr>\n</tbody>\n</table>\n</div>\n\n</div>\n</$reveal>\n<$reveal state=<<filterState>> type=\"match\" text=\"yes\" animate=\"yes\">\n<<lingo System/Matches>>\n<<unsortButton>>\n</$reveal>\n\n<$reveal state=<<readingMode>> type=\"nomatch\" text=\"on\" animate=\"yes\">\n\n<!-- Show table -->\n<$reveal state=<<defaultView>> default=\"table\" type=\"match\" text=\"table\" animate=\"yes\">\n<$macrocall \n $name=\"aggr-table\"\n filter=<<searchFilter>>\n fields=<<__fields__>>\n class=<<__class__>>\n stateTiddler=<<__state__>>\n paginationButton=<<__paginationButton__>>\n rowsButton=<<__rowsButton__>>\n/>\n</$reveal>\n\n<!-- Show card -->\n<$reveal state=<<defaultView>> default=\"table\" type=\"nomatch\" text=\"table\" animate=\"yes\">\n<div class=\"content\" style=\"padding-top:10px;\">\n<$list\n filter=<<searchFilter>>\n template=<<__cardTemplate__>>\n/>\n</div>\n</$reveal>\n\n</$reveal>\n\n<!-- Reading Mode -->\n<$reveal state=<<readingMode>> type=\"match\" text=\"on\" animate=\"yes\">\n<$list filter=\"[subfilter<searchFilter>limit[1]]\" variable=\"ignore\">\n\n<$macrocall\n $name=\"aggregation-toc\"\n filter=<<searchFilter>>\n selectedTiddler=\"\"\"$:/temp/toc/selectedTiddler/$state$\"\"\"\n template=<<__tocTemplate__>>\n sourceMode=<<sourceMode>>\n tocSwitchTid=<<tocSwitchTid>>\n/>\n\n</$list>\n</$reveal>\n\n</$set>\n</$wikify>\n</$vars>\n</$list>\n\\end\n\n\n\\define aggregation-table-dynamic(fields:\"tbl-expand title tags\",class:\"w-100\",state:\"aggregation\",storeTitle:\"$:/temp/search/aggregation/dtable\",searchClass:\"xp-search-aggregation\",promptTiddler:\"$:/aggregation/prompt\")\n\\import $:/aggregation/macros/general\n\\whitespace trim\n<$list filter=<<aggr-has-tids>> emptyMessage=\"{{$promptTiddler$}}\" variable=\"ignore\">\n<span class=\"xp-search $searchClass$\">\nSearch   <<selectSearchScope>> <i class='tc-small-gap-right'/> <$macrocall $name=\"keyboard-driven-input\"\n tiddler=<<__storeTitle__>>\n type=\"search\"\n tag=\"input\"\n focus={{$:/config/xp/aggregation/SearchAutoFocus}}\n inputCancelActions=<<__cancel-search-actions__>>/>\n<i class='tc-tiny-gap-left'/>\n<$reveal state=<<__storeTitle__>> type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".$searchClass$ input\"\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</span>\n<$vars userInput={{{ [<__storeTitle__>get[text]] }}}\n aggrFilter={{{ [<configTiddler>get[text]] }}}\n resultCount=\"<$count filter=<<aggrFilter>>/>\">\n<$reveal state=<<__storeTitle__>> type=\"nomatch\" text=\"\">\n<span class=\"xp-search-results\"><<lingo System/Matches>></span>\n</$reveal>\n\n<$macrocall\n $name=\"table-dynamic\"\n filter=<<aggrFilter>>\n fields=\"$fields$\"\n class=\"$class$\"\n stateTiddler=\"$state$\"\n emptyMessage=\" \"\n/>\n\n</$vars>\n</$list>\n\\end\n\n\n\\define aggregation-list-thumbnails(width:\"220\",height:\"123\",storeTitle:\"$:/temp/search/aggregation/thumbnails\",searchClass:\"xp-search-aggregation\",tagbar:\"yes\",promptTiddler:\"$:/aggregation/prompt\")\n\\import $:/aggregation/macros/general\n\\whitespace trim\n<$list filter=<<aggr-has-tids>> emptyMessage=\"{{$promptTiddler$}}\" variable=\"ignore\">\n\n<$reveal default=\"$tagbar$\" type=\"nomatch\" text=\"no\">\n<<aggrTagbar>>\n</$reveal>\n\n<span class=\"xp-search $searchClass$\">\nSearch   <<selectSearchScope>> <i class='tc-small-gap-right'/> <$macrocall $name=\"keyboard-driven-input\"\n tiddler=<<__storeTitle__>>\n type=\"search\"\n tag=\"input\"\n focus={{$:/config/xp/aggregation/SearchAutoFocus}}\n inputCancelActions=<<__cancel-search-actions__>>/>\n<i class='tc-tiny-gap-left'/>\n<$reveal state=<<__storeTitle__>> type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".$searchClass$ input\"\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</span>\n<$vars userInput={{{ [<__storeTitle__>get[text]] }}}\n aggrFilter={{{ [<configTiddler>get[text]] }}}\n resultCount=\"<$count filter=<<aggrFilter>>/>\">\n<$reveal state=<<__storeTitle__>> type=\"nomatch\" text=\"\">\n<span class=\"xp-search-results\"><<lingo System/Matches>></span>\n</$reveal>\n\n<div style=\"font-size:0.7em;text-align:left;margin-top:2em;margin-bottom:2em;\">\n<$macrocall\n $name=\"list-thumbnails\"\n filter=<<aggrFilter>>\n width=\"$width$\"\n height=\"$height$\"\n/>\n</div>\n\n</$vars>\n</$list>\n\\end\n\n\n\\define aggregation-list-links(storeTitle:\"$:/temp/search/aggregation/links\",searchClass:\"xp-search-aggregation\",tagbar:\"yes\",promptTiddler:\"$:/aggregation/prompt\")\n\\import $:/aggregation/macros/general\n\\whitespace trim\n<$list filter=<<aggr-has-tids>> emptyMessage=\"{{$promptTiddler$}}\" variable=\"ignore\">\n\n<$reveal default=\"$tagbar$\" type=\"nomatch\" text=\"no\">\n<<aggrTagbar>>\n</$reveal>\n\n<span class=\"xp-search $searchClass$\">\nSearch   <<selectSearchScope>><i class='tc-small-gap-right'/> <$macrocall $name=\"keyboard-driven-input\"\n tiddler=<<__storeTitle__>>\n type=\"search\"\n tag=\"input\"\n focus={{$:/config/xp/aggregation/SearchAutoFocus}}\n inputCancelActions=<<__cancel-search-actions__>>/>\n<i class='tc-tiny-gap-left'/>\n<$reveal state=<<__storeTitle__>> type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".$searchClass$ input\"\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</span>\n<$vars userInput={{{ [<__storeTitle__>get[text]] }}}\n aggrFilter={{{ [<configTiddler>get[text]] }}}\n resultCount=\"<$count filter=<<aggrFilter>>/>\">\n<$reveal state=<<__storeTitle__>> type=\"nomatch\" text=\"\">\n<span class=\"xp-search-results\"><<lingo System/Matches>></span>\n</$reveal>\n<$reveal default=<<resultCount>> type=\"nomatch\" text=\"0\">\n<p>{{$:/language/xp/aggregation/ClickPopup}}</p>\n</$reveal>\n\n<div class=\"twocolumns\" style=\"padding:10px 28px;line-height:1.55;\">\n<$list filter=<<aggrFilter>> template=\"$:/templates/popup-caption-view\"/>\n</div>\n\n</$vars>\n</$list>\n\\end\n\n",
"modified": "20230402014525104"
},
{
"created": "20230402014534059",
"title": "$:/aggregation/macros/definitions",
"tags": "$:/tags/Macro/Aggregation $:/tags/XpPreview",
"text": "\\define lingo-base() $:/language/Search/\n\n\\define toggleViewButton()\n\\whitespace trim\n<$reveal state=<<defaultView>> default=\"table\" type=\"nomatch\" text=\"card\">\n<$button tooltip=\"Switching to card view\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-setfield $tiddler=<<defaultView>> text=\"card\"/>\n{{$:/xp/images/switch}}\n</$button>\n</$reveal>\n<$reveal state=<<defaultView>> type=\"match\" text=\"card\">\n<$button tooltip=\"Switching to table view\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-setfield $tiddler=<<defaultView>> text=\"table\"/>\n{{$:/xp/images/switch}}\n</$button>\n</$reveal>\n\\end\n\n\\define sortingButton()\n\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/xp/aggregation/sorting-button\">> tooltip=\"Sorted by field\" class=\"tc-btn-invisible\">\n{{$:/xp/images/sorting}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/xp/aggregation/sorting-button\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<$vars mainFilter={{{ [<filterTiddler>get[text]] }}} pt1=\"+[sort[\" pt2=\"+[!sort[\" st=\"]]\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<sortTiddler>> text=<<navigateTo>>/>\n <$list filter=\"[<navigateTo>prefix<pt1>]\" variable=\"ignore\">\n <$action-setfield $tiddler=<<tempTableSort>> $index=\"sortIndex\" $value={{{ [<navigateTo>removeprefix<pt1>removesuffix<st>] }}}/>\n <$action-setfield $tiddler=<<tempTableSort>> $index=\"hasnegate\" $value=\"false\"/>\n <$action-setfield $tiddler=<<tempTableSort>> $index=\"negate\" $value=\"\"/>\n </$list>\n <$list filter=\"[<navigateTo>prefix<pt2>]\" variable=\"ignore\">\n <$action-setfield $tiddler=<<tempTableSort>> $index=\"sortIndex\" $value={{{ [<navigateTo>removeprefix<pt2>removesuffix<st>] }}}/>\n <$action-setfield $tiddler=<<tempTableSort>> $index=\"hasnegate\" $value=\"true\"/>\n <$action-setfield $tiddler=<<tempTableSort>> $index=\"negate\" $value=\"!\"/>\n </$list>\"\"\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown xp-sorting-dropdown\">\n <div class=\"tc-dropdown-item\">Common</div>\n <$list filter=\"title caption modified modifier created creator\" variable=\"listField\">\n <$link to={{{ [<listField>addprefix<pt1>addsuffix<st>] }}}><$text text=<<listField>>/></$link>\n <$link to={{{ [<listField>addprefix<pt2>addsuffix<st>] }}}><$text text={{{ [<listField>addsuffix[↑]] }}}/></$link>\n </$list>\n <div class=\"tc-dropdown-item\">Other</div>\n <$list filter=\"[subfilter<__filter__>] +[fields[]sort[]] -[enlist{$:/config/xp/aggregation/excluded-fields/sorting-button}] -title -caption -modified -modifier -created -creator\" variable=\"listField\" emptyMessage=\"\"\"<p class=\"tc-muted\"> No fields</p>\"\"\">\n <$link to={{{ [<listField>addprefix<pt1>addsuffix<st>] }}}><$text text=<<listField>>/></$link>\n <$link to={{{ [<listField>addprefix<pt2>addsuffix<st>] }}}><$text text={{{ [<listField>addsuffix[↑]] }}}/></$link>\n </$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$vars>\n</$reveal>\n\\end\n\n\\define unsortButton()\n\\whitespace trim\n<$vars pt1=\"+[sort[\" pt2=\"+[!sort[\" st=\"]]\" btnClass=\"xp-aggrfilter-dynamic-btn\">\n<$reveal state=<<sortState>> type=\"nomatch\" text=\"\" animate=\"yes\">\n \n<$list filter=\"[<sortTiddler>search:text:literal<sortIndex>]\" variable=\"ignore\">\n<$list filter=\"[<sortTiddler>get[text]prefix<pt1>]\" variable=\"ignore\">\n<$button tooltip=\"Descending order\" class=<<btnClass>>>\n<$text text={{{ [<sortTiddler>get[text]removeprefix<pt1>removesuffix<st>] }}}/> ↓\n<$action-setfield $tiddler=<<tempTableSort>> $index=\"hasnegate\" $value=\"true\"/>\n<$action-setfield $tiddler=<<tempTableSort>> $index=\"negate\" $value=\"!\"/>\n<$action-setfield $tiddler=<<sortTiddler>> text={{{ [<sortTiddler>get[text]search-replace[sort[],[!sort[]] }}}/>\n</$button>\n</$list>\n<$list filter=\"[<sortTiddler>get[text]prefix<pt2>]\" variable=\"ignore\">\n<$button tooltip=\"Ascending order\" class=<<btnClass>>>\n<$text text={{{ [<sortTiddler>get[text]removeprefix<pt2>removesuffix<st>] }}}/> ↑\n<$action-setfield $tiddler=<<tempTableSort>> $index=\"hasnegate\" $value=\"false\"/>\n<$action-setfield $tiddler=<<tempTableSort>> $index=\"negate\" $value=\"\"/>\n<$action-setfield $tiddler=<<sortTiddler>> text={{{ [<sortTiddler>get[text]search-replace[!sort[],[sort[]] }}}/>\n</$button>\n</$list>\n</$list>\n<$button class=<<btnClass>>>\nunsort\n<$action-deletetiddler $filter=\"[<sortTiddler>] [<tempTableSort>]\"/>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\n\\define toggleReadingMode()\n\\whitespace trim\n<$reveal state=<<readingMode>> default=\"off\" type=\"nomatch\" text=\"on\">\n<$button tooltip=\"Turn on reading mode\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-setfield $tiddler=<<readingMode>> text=\"on\"/>\n{{$:/xp/images/readingmode}}\n</$button>\n</$reveal>\n<$reveal state=<<readingMode>> type=\"match\" text=\"on\">\n<$button tooltip=\"Turn off reading mode\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-deletetiddler $tiddler=<<readingMode>>/>\n{{$:/xp/images/readingmode-on}}\n</$button>\n</$reveal>\n\\end\n\n\\define viewSource()\n\\whitespace trim\n<$reveal state=<<readingMode>> type=\"match\" text=\"on\">\n<$reveal state=<<sourceMode>> default=\"off\" type=\"nomatch\" text=\"on\">\n<$button tooltip=\"Display source code\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-setfield $tiddler=<<sourceMode>> text=\"on\"/>\n{{$:/xp/images/sourcemode}}\n</$button>\n</$reveal>\n<$reveal state=<<sourceMode>> type=\"match\" text=\"on\">\n<$button tooltip=\"Turn off source mode\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-deletetiddler $tiddler=<<sourceMode>>/>\n{{$:/xp/images/sourcemode-on}}\n</$button>\n</$reveal>\n</$reveal>\n\\end\n\n\\define tocSwitch()\n\\whitespace trim\n<$reveal state=<<readingMode>> type=\"match\" text=\"on\">\n<$reveal state=<<tocSwitchTid>> default=\"show\" type=\"nomatch\" text=\"hide\">\n<$button tooltip=\"Hide toc\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-setfield $tiddler=<<tocSwitchTid>> text=\"hide\"/>\n{{$:/core/images/preview-open}}\n</$button>\n</$reveal>\n<$reveal state=<<tocSwitchTid>> type=\"match\" text=\"hide\">\n<$button tooltip=\"Show toc\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-setfield $tiddler=<<tocSwitchTid>> text=\"show\"/>\n{{$:/core/images/preview-closed}}\n</$button>\n</$reveal>\n</$reveal>\n\\end\n\n\\define target-filter-code(filter)\n<$vars L=\"tag[\" R=\"]\" lb=\" +[\">\n<$set filter=\"[list<filterState>addprefix<L>addsuffix<R>]+[join[]addprefix<lb>addprefix<__filter__>addsuffix<R>addsuffix<searchRun>addsuffix<timeRun>addsuffix<fieldRun>addsuffix<valueRun>addsuffix<sortRun>]\" name=\"target\" select=0>\n<$text text=<<target>>/>\n</$set>\n</$vars>\n\\end\n\n\\define aggrfilteritem(item:\"\")\n<$checkbox tiddler=<<qualify \"\"\"$:/temp/$item$\"\"\">> field=\"status\" checked=\"selected\" checkactions=<<checkactions \"\"\"$item$\"\"\">> uncheckactions=<<uncheckactions \"\"\"$item$\"\"\">> default=\"closed\"> <$text text=<<__item__>>/></$checkbox>\n\\end\n\n\\define checkactions(item:\"\")\n<$action-listops $tiddler=<<filterState>> $subfilter=\"[[$item$]]\"/>\n<$action-listops $tiddler=<<filterState>> $field=\"checktiddler\" $subfilter={{{ [<qualify \"\"\"$:/temp/$item$\"\"\">format:titlelist[]] }}}/>\n<$list filter=\"[list<filterState>!is[tag]]\" variable=\"missingItem\">\n<$action-listops $tiddler=<<filterState>> $subfilter=\"-[<missingItem>]\"/>\n</$list>\n\\end\n\n\\define uncheckactions(item:\"\")\n<$action-listops $tiddler=<<filterState>> $subfilter=\"-[[$item$]]\"/>\n<$list filter=\"[list<filterState>!is[tag]]\" variable=\"missingItem\">\n<$action-listops $tiddler=<<filterState>> $subfilter=\"-[<missingItem>]\"/>\n</$list>\n\\end\n\n\\define deselectButton()\n\\whitespace trim\n<$reveal default={{{ [list<filterState>count[]] }}} type=\"gt\" text=\"1\" animate=\"yes\">\n <$button class=\"xp-aggrfilter-dynamic-btn\">\n<$action-deletetiddler $filter=\"[<filterState>get[checktiddler]enlist-input[]]\"/>\n<$action-deletefield $tiddler=<<filterState>> list/>\ndeselect all\n</$button>\n</$reveal>\n\\end\n\n\\define resetFieldButton()\n\\whitespace trim\n<$list filter=\"[<fieldTiddler>has[text]] [<dateTiddler>is[tiddler]] [<filterState>has[filter]] +[limit[1]]\">\n <$button class=\"xp-aggrfilter-dynamic-btn\">\n<$action-deletetiddler $filter=\"[<fieldTiddler>] [<dateTiddler>] [<valueTiddler>]\"/>\n<$action-deletefield $tiddler=<<filterState>> filter/>\nreset\n</$button>\n</$list>\n\\end\n\n\\define input-accept-actions-date() <$action-setfield $tiddler=<<filterState>> filter={{{ [<dateTiddler>get[text]addprefix<pt>addsuffix<st>] }}}/>\n\n\\define input-cancel-actions-date() <$action-deletefield $tiddler=<<dateTiddler>> text/>\n\n\\define resetFieldsActions()\n<$action-setfield $tiddler=<<fieldsTiddler>> text=<<__defaultFields__>> list=<<__defaultFields__>>/>\n<$list filter=\"[subfilter<__filter__>] +[fields[]sort[]] -[enlist{$:/config/xp/aggregation/excluded-fields/dtable}] +[format:titlelist[]]\" variable=\"listField\">\n<$action-listops $tiddler=<<fieldsTiddler>> $subfilter=\"+[append<listField>]\"/>\n</$list>\n\\end\n\n\\define updateFieldsActions()\n<$action-setfield $tiddler=<<fieldsTiddler>> list={{{ [<fieldsTiddler>get[text]] }}}/>\n<$list filter=\"[subfilter<__filter__>] +[fields[]sort[]] -[enlist{$:/config/xp/aggregation/excluded-fields/dtable}] +[format:titlelist[]]\" variable=\"listField\">\n<$action-listops $tiddler=<<fieldsTiddler>> $subfilter=\"+[append<listField>]\"/>\n</$list>\n\\end\n\n\\define fields-checkactions()\n<$action-listops $tiddler=<<targetTiddler>> $field=\"text\" $subfilter=\"+[append<currentTiddler>]\"/>\n<<updateFieldsActions>>\n\\end\n\n\\define fields-uncheckactions()\n<$action-listops $tiddler=<<targetTiddler>> $field=\"text\" $subfilter=\"-[<currentTiddler>]\"/>\n<<updateFieldsActions>>\n\\end\n\n\\define tableFieldsButton()\n\\whitespace trim\n<$reveal state=<<fieldsState>> default=\"no\" type=\"nomatch\" text=\"yes\">\n<$button tooltip=\"Select dynamic table fields\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-setfield $tiddler=<<fieldsState>> text=\"yes\"/>\n<!-- 1st run: initialize data -->\n<$reveal state=<<fieldsTiddler>> type=\"match\" text=\"\">\n<<resetFieldsActions>>\n<$list filter=<<__defaultFields__>> variable=\"listField\">\n<$action-setfield $tiddler=<<field-config-title>> text=\"show\"/>\n</$list>\n</$reveal>\n<!-- Subsequent runs -->\n<$reveal state=<<fieldsTiddler>> type=\"nomatch\" text=\"\">\n<$reveal\n default={{{ [subfilter<__filter__>] +[fields[]] -[enlist<__defaultFields__>] -[enlist{$:/config/xp/aggregation/excluded-fields/dtable}] +[count[]] }}}\n type=\"nomatch\"\n text={{{ [list<fieldsTiddler>] -[enlist<__defaultFields__>] +[count[]] }}}>\n<<updateFieldsActions>>\n</$reveal></$reveal>\n{{$:/xp/images/dtable}}\n</$button>\n</$reveal>\n<$reveal state=<<fieldsState>> type=\"match\" text=\"yes\">\n<$button tooltip=\"Close selection panel\" class=\"tc-btn-invisible tc-btn-mini\">\n<$action-setfield $tiddler=<<fieldsState>> text=\"no\"/>\n{{$:/xp/images/dtable-panel}}\n</$button>\n</$reveal>\n\\end\n\n\\define resetFieldsButton()\n\\whitespace trim\n<$wikify name=\"defaultFieldsCount\" text=\"<$count filter='[enlist<__defaultFields__>]'/>\">\n<$vars\n comparingFields={{{ [enlist<__defaultFields__>] :filter[lookup<config-base>match[show]] +[count[]!match<defaultFieldsCount>] +[then[reset]] }}}\n otherFields={{{ [subfilter<__filter__>] +[fields[]] -[enlist<__defaultFields__>] :filter[lookup<config-base>match[show]] +[then[reset]] }}}>\n<$list filter=\"[<comparingFields>] [<otherFields>] +[match[reset]limit[1]]\" variable=\"ignore\">\n <$button class=\"xp-aggrfilter-dynamic-btn\">\n<!-- Delete config tiddlers -->\n<$action-deletetiddler $filter=\"[regexp[TableFields/Visibility]prefix[$:/config/]prefix<fieldsTiddler>prefix<config-base>]\"/>\n<$list filter=\"[enlist<__defaultFields__>]\" variable=\"listField\">\n<$action-setfield $tiddler=<<field-config-title>> text=\"show\"/>\n</$list>\n<!-- Reset fields -->\n<<resetFieldsActions>>\nreset\n</$button>\n</$list>\n</$vars>\n</$wikify>\n\\end\n\n\\define updateFieldsButton()\n\\whitespace trim\n<$reveal\n default={{{ [subfilter<__filter__>] +[fields[]] -[enlist<__defaultFields__>] -[enlist{$:/config/xp/aggregation/excluded-fields/dtable}] +[count[]] }}}\n type=\"nomatch\"\n text={{{ [list<fieldsTiddler>] -[enlist<__defaultFields__>] +[count[]] }}}>\n <$button class=\"xp-aggrfilter-dynamic-btn\">\n<<updateFieldsActions>>\nupdate\n</$button>\n</$reveal>\n\\end\n\n\\define aggregation-fields-draggable-config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n\\define aggregation-fields-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore<actionTiddler>,<currentTiddler>]\"/>\n<$reveal state=<<aggregation-fields-draggable-config-title>> type=\"match\" text=\"show\">\n<$action-listops $tiddler=<<targetTiddler>> $field=\"text\" $subfilter=\"+[insertbefore<actionTiddler>,<currentTiddler>]\"/>\n</$reveal>\n\\end\n\n\\define aggregation-fields-draggable(tiddler,field:\"list\",exclude,emptyMessage,itemTemplate,elementTag:\"div\",storyview:\"\")\n\\whitespace trim\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$list filter=\"[list[$tiddler$!!$field$]] -[enlist<__exclude__>]\" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>\n<$droppable actions=<<aggregation-fields-draggable-drop-actions>> enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<aggregation-fields-draggable-drop-actions>> tag=\"div\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$vars>\n\\end\n\n\\define aggregation-dtable-controls()\n\\whitespace trim\n<<toggle-edit-view-trim>>\n<span class=\"xp-controls\" style=\"padding-left:.25em;\">\n<<tableFieldsButton>>\n<$list filter=\"[<__paginationButton__>match[yes]]\" variable=ignore>\n<<toggle-pagination>>\n</$list>\n<$list filter=\"[<__rowsButton__>match[yes]]\" variable=ignore>\n<<footer-rows-button>>\n</$list>\n</span>\n\\end\n\n\\define aggregation-dtable(filter, fields:\"tbl-expand title\", indexes:\"\", sortOp:\"sort\", caption:\"\", class:\"w-100\", stateTiddler:\"aggregation-state\", editButton:\"yes\", paginationButton:\"yes\", rowsButton:\"no\", emptyMessage)\n\\import [[$:/tags/Table/Macro]tagging[]]\n<!--above commands import utility macros-->\n<$let\n fieldsTiddler=\"\"\"$:/config/xp/$stateTiddler$/TableFields\"\"\"\n fieldsState=\"\"\"$:/state/xp/$stateTiddler$/ModifyTableFields\"\"\"\n pageTiddler=\"\"\"$:/config/xp/$stateTiddler$/Pagination\"\"\"\n rowsTiddler=\"\"\"$:/config/xp/$stateTiddler$/FooterRows\"\"\"\n rowsState=\"\"\"$:/state/xp/$stateTiddler$/FooterRows\"\"\"\n footerTiddler=\"\"\"$:/keepstate/dynamictables/$stateTiddler$/footer\"\"\"\n\n inputFilter=\"[subfilter<__filter__>!has[draft.of]]\"\n sortType=<<__sortOp__>>\n pagination={{{ [<pageTiddler>is[tiddler]get[text]] ~no }}}\n footerRows={{{ [<rowsTiddler>is[tiddler]get[text]] ~0 }}}\n >\n<$set name=currentTable value=<<__stateTiddler__>> emptyValue=<<currentTiddler>> >\n<$reveal state=<<fieldsState>> type=\"match\" text=\"yes\" animate=\"yes\">\n<div class=\"xp-wrapper-aggrfilter\">\n\n<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$button set=<<fieldsState>> setTo=\"\" tooltip=\"Close panel\" aria-label=\"select table fields\" class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</div>\n</div>\n\n<span class=\"tc-muted\">Dynamic table Fields:</span> <<resetFieldsButton>><<updateFieldsButton>>\n\n<div class=\"xp-aggrfilter-category\">\n<div class=\"xp-aggrfilter-category-item\">\n<$macrocall\n $name=\"aggregation-fields-draggable\"\n tiddler=<<fieldsTiddler>>\n itemTemplate=\"$:/aggregation/fields-smart-mode/ItemTemplate\"\n exclude={{$:/config/xp/aggregation/excluded-fields/dtable}}\n/>\n</div>\n</div>\n\n</div>\n</$reveal>\n<!-- check what type of columns are sent, fileds or indexes (data tiddlers as records) -->\n<$set name=fieldOrIndex filter=\"[<__fields__>!is[blank]]\" value=\"field\" emptyValue=\"index\">\n<<check_tiddlers_type_for_table_from_indexes isEditable:\"$editButton$\">>\n<$set name=columns filter=\"[<fieldOrIndex>]-index\" value=<<__fields__>> emptyValue=<<__indexes__>> >\n<!--check input filter parameter-->\n<$list filter=\"[subfilter<inputFilter>limit[1]]\" emptyMessage=<<__emptyMessage__>> variable=ignore>\n<$set name=sortneg tiddler=<<tempTableSort>> index=\"negate\">\n<!--calculate the number of columns in edit and view mode -->\n<$set name=ncols filter=\"[<tempTableEdit>getindex[mode]match[edit]]\" value={{{ [subfilter<columnFilter>count[]] }}} emptyValue={{{ [subfilter<columnFilter>count[]subtract[1]] }}}>\n<div class=\"tbl-container\" style=\"max-width:100%;\">\n<table class=<<__class__>> style=\"caption-side:top\">\n<!-- reveal caption and edit button -------------------->\n<caption style=\"text-align:left;\">\n<$list filter=\"[<__editButton__>match[yes]]\" variable=ignore>\n<span style=\"padding-right:5px;padding-left:3px;\">\n<<aggregation-dtable-controls>>\n<<select-footer-rows>>\n</span>\n</$list>\n<$reveal state=<<rowsState>> type=\"nomatch\" text=\"yes\" animate=\"yes\">\n$caption$\n</$reveal></caption>\n\n<!-- create header -------------------->\n<thead>\n<<confirm-delete>>\n<tr>\n<$list filter=<<columnFilter>> variable=currentColumn>\n<$set name=\"headerLookup\" filter=\"[all[tiddlers+shadows]tag[$:/tags/Table/HeaderTemplate]contains:tbl-column-list<currentColumn>limit[1]get[title]]\" value=<<headerLookup>> emptyValue=\"$:/plugins/kookma/shiraz/templates/header/default\">\n <$transclude tiddler=<<headerLookup>> field=\"text\" mode=\"inline\"/>\n</$set>\n</$list>\n</tr>\n</thead>\n\n<!-- create footer -------------------->\n<$reveal type=\"gt\" default=<<footerRows>> text=\"0\" tag=\"tfoot\" class=\"shiraz-dtable-footer\">\n<tr><td colspan=<<ncols>> style=\"font-weight:bold;background-color:transparent;\">Numerical summary</td></tr>\n<$list filter=\"[range<footerRows>addprefix[footer-]]\" variable=footerRow>\n<tr>\n<$list filter=<<columnFilter>> variable=currentColumn>\n<$set name=\"footerLookup\" filter=\"[all[tiddlers+shadows]tag[$:/tags/Table/FooterTemplate]contains:tbl-column-list<currentColumn>limit[1]get[title]]\" value=<<footerLookup>> emptyValue=\"$:/plugins/kookma/shiraz/templates/footer/default\">\n<$transclude tiddler=<<footerLookup>> field=\"text\" mode=\"inline\"/>\n</$set>\n</$list>\n</tr>\n</$list>\n</$reveal>\n\n<!-- reveal main body of table (generate records) -------------------->\n<tbody>\n<$set name=tableBody filter=\"[<fieldOrIndex>]-index\" value=\"display_body_fields\" emptyValue=\"display_body_indexes\" >\n<!-- setup pagination variables -->\n<$vars total-entries={{{[subfilter<inputFilter>count[]] }}}\n\t\t\t page-number={{{[<pageStateTiddler>get[text]] ~[[1]]}}} \n\t\t\t entries-per-page={{{ [<entryPerPageStateTiddler>get[text]] ~[[25]] }}} >\n<$vars low={{{ [<page-number>subtract[1]multiply<entries-per-page>] }}} \n high={{{[<page-number>multiply<entries-per-page>] }}} >\t \n<$macrocall $name=<<tableBody>> />\n<!--on demand display the pagination row-->\n<$reveal type=\"match\" default=<<pagination>> text=\"yes\" tag=\"tr\" class=\"shiraz-dtable-page-footer\">\n<td colspan=<<ncols>> >\n<<prev-button>>\nDisplaying <$text text={{{[<low>add[1]]}}}/> through <$text text={{{ [<high>compare:number:lt<total-entries>then<high>else<total-entries>] }}}/> of <<total-entries>> Results | <<limit-entries>>\n<<next-button>>\n</td>\n</$reveal><!-- end of pagination ui -->\n</$vars>\n</$vars>\n</$set>\n</tbody>\n</table>\n</div><!-- container-->\n</$set>\n</$set>\n</$list><!--check input filter parameter-->\n</$set>\n</$set>\n</$set>\n</$let>\n\\end\n\n\n<pre><$view field=\"text\"/></pre>",
"modified": "20230402014534059"
},
{
"created": "20230402014552240",
"title": "$:/aggregation/fields-smart-mode/ItemTemplate",
"text": "<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<aggregation-fields-draggable-config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\" checkactions=<<fields-checkactions>> uncheckactions=<<fields-uncheckactions>>/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"title\"/></span>\n</$draggable>",
"tags": "$:/tags/XpPreview",
"modified": "20230402014552240"
}
]
其他三个tid文件代码
$:/aggregation/fields-smart-mode/ItemTemplate
的
created: 20230402014552240
modified: 20230402014552240
tags: $:/tags/XpPreview
title: $:/aggregation/fields-smart-mode/ItemTemplate
<$draggable tiddler=<<currentTiddler>>>
<$checkbox tiddler=<<aggregation-fields-draggable-config-title>> field="text" checked="show" unchecked="hide" default="hide" checkactions=<<fields-checkactions>> uncheckactions=<<fields-uncheckactions>>/> <span class="tc-icon-wrapper"> <$transclude field="title"/></span>
</$draggable>
$:/aggregation/macros/definitions
created: 20230402014534059
modified: 20230402014534059
tags: $:/tags/Macro/Aggregation $:/tags/XpPreview
title: $:/aggregation/macros/definitions
\define lingo-base() $:/language/Search/
\define toggleViewButton()
\whitespace trim
<$reveal state=<<defaultView>> default="table" type="nomatch" text="card">
<$button tooltip="Switching to card view" class="tc-btn-invisible tc-btn-mini">
<$action-setfield $tiddler=<<defaultView>> text="card"/>
{{$:/xp/images/switch}}
</$button>
</$reveal>
<$reveal state=<<defaultView>> type="match" text="card">
<$button tooltip="Switching to table view" class="tc-btn-invisible tc-btn-mini">
<$action-setfield $tiddler=<<defaultView>> text="table"/>
{{$:/xp/images/switch}}
</$button>
</$reveal>
\end
\define sortingButton()
\whitespace trim
<span class="tc-popup-keep">
<$button popup=<<qualify "$:/state/xp/aggregation/sorting-button">> tooltip="Sorted by field" class="tc-btn-invisible">
{{$:/xp/images/sorting}}
</$button>
</span>
<$reveal state=<<qualify "$:/state/xp/aggregation/sorting-button">> type="popup" position="below" animate="yes">
<$vars mainFilter={{{ [<filterTiddler>get[text]] }}} pt1="+[sort[" pt2="+[!sort[" st="]]">
<$set name="tv-show-missing-links" value="yes">
<$linkcatcher actions="""<$action-setfield $tiddler=<<sortTiddler>> text=<<navigateTo>>/>
<$list filter="[<navigateTo>prefix<pt1>]" variable="ignore">
<$action-setfield $tiddler=<<tempTableSort>> $index="sortIndex" $value={{{ [<navigateTo>removeprefix<pt1>removesuffix<st>] }}}/>
<$action-setfield $tiddler=<<tempTableSort>> $index="hasnegate" $value="false"/>
<$action-setfield $tiddler=<<tempTableSort>> $index="negate" $value=""/>
</$list>
<$list filter="[<navigateTo>prefix<pt2>]" variable="ignore">
<$action-setfield $tiddler=<<tempTableSort>> $index="sortIndex" $value={{{ [<navigateTo>removeprefix<pt2>removesuffix<st>] }}}/>
<$action-setfield $tiddler=<<tempTableSort>> $index="hasnegate" $value="true"/>
<$action-setfield $tiddler=<<tempTableSort>> $index="negate" $value="!"/>
</$list>""">
<div class="tc-block-dropdown-wrapper">
<div class="tc-block-dropdown tc-edit-type-dropdown xp-sorting-dropdown">
<div class="tc-dropdown-item">Common</div>
<$list filter="title caption modified modifier created creator" variable="listField">
<$link to={{{ [<listField>addprefix<pt1>addsuffix<st>] }}}><$text text=<<listField>>/></$link>
<$link to={{{ [<listField>addprefix<pt2>addsuffix<st>] }}}><$text text={{{ [<listField>addsuffix[↑]] }}}/></$link>
</$list>
<div class="tc-dropdown-item">Other</div>
<$list filter="[subfilter<__filter__>] +[fields[]sort[]] -[enlist{$:/config/xp/aggregation/excluded-fields/sorting-button}] -title -caption -modified -modifier -created -creator" variable="listField" emptyMessage="""<p class="tc-muted"> No fields</p>""">
<$link to={{{ [<listField>addprefix<pt1>addsuffix<st>] }}}><$text text=<<listField>>/></$link>
<$link to={{{ [<listField>addprefix<pt2>addsuffix<st>] }}}><$text text={{{ [<listField>addsuffix[↑]] }}}/></$link>
</$list>
</div>
</div>
</$linkcatcher>
</$set>
</$vars>
</$reveal>
\end
\define unsortButton()
\whitespace trim
<$vars pt1="+[sort[" pt2="+[!sort[" st="]]" btnClass="xp-aggrfilter-dynamic-btn">
<$reveal state=<<sortState>> type="nomatch" text="" animate="yes">
 
<$list filter="[<sortTiddler>search:text:literal<sortIndex>]" variable="ignore">
<$list filter="[<sortTiddler>get[text]prefix<pt1>]" variable="ignore">
<$button tooltip="Descending order" class=<<btnClass>>>
<$text text={{{ [<sortTiddler>get[text]removeprefix<pt1>removesuffix<st>] }}}/> ↓
<$action-setfield $tiddler=<<tempTableSort>> $index="hasnegate" $value="true"/>
<$action-setfield $tiddler=<<tempTableSort>> $index="negate" $value="!"/>
<$action-setfield $tiddler=<<sortTiddler>> text={{{ [<sortTiddler>get[text]search-replace[sort[],[!sort[]] }}}/>
</$button>
</$list>
<$list filter="[<sortTiddler>get[text]prefix<pt2>]" variable="ignore">
<$button tooltip="Ascending order" class=<<btnClass>>>
<$text text={{{ [<sortTiddler>get[text]removeprefix<pt2>removesuffix<st>] }}}/> ↑
<$action-setfield $tiddler=<<tempTableSort>> $index="hasnegate" $value="false"/>
<$action-setfield $tiddler=<<tempTableSort>> $index="negate" $value=""/>
<$action-setfield $tiddler=<<sortTiddler>> text={{{ [<sortTiddler>get[text]search-replace[!sort[],[sort[]] }}}/>
</$button>
</$list>
</$list>
<$button class=<<btnClass>>>
unsort
<$action-deletetiddler $filter="[<sortTiddler>] [<tempTableSort>]"/>
</$button>
</$reveal>
</$vars>
\end
\define toggleReadingMode()
\whitespace trim
<$reveal state=<<readingMode>> default="off" type="nomatch" text="on">
<$button tooltip="Turn on reading mode" class="tc-btn-invisible tc-btn-mini">
<$action-setfield $tiddler=<<readingMode>> text="on"/>
{{$:/xp/images/readingmode}}
</$button>
</$reveal>
<$reveal state=<<readingMode>> type="match" text="on">
<$button tooltip="Turn off reading mode" class="tc-btn-invisible tc-btn-mini">
<$action-deletetiddler $tiddler=<<readingMode>>/>
{{$:/xp/images/readingmode-on}}
</$button>
</$reveal>
\end
\define viewSource()
\whitespace trim
<$reveal state=<<readingMode>> type="match" text="on">
<$reveal state=<<sourceMode>> default="off" type="nomatch" text="on">
<$button tooltip="Display source code" class="tc-btn-invisible tc-btn-mini">
<$action-setfield $tiddler=<<sourceMode>> text="on"/>
{{$:/xp/images/sourcemode}}
</$button>
</$reveal>
<$reveal state=<<sourceMode>> type="match" text="on">
<$button tooltip="Turn off source mode" class="tc-btn-invisible tc-btn-mini">
<$action-deletetiddler $tiddler=<<sourceMode>>/>
{{$:/xp/images/sourcemode-on}}
</$button>
</$reveal>
</$reveal>
\end
\define tocSwitch()
\whitespace trim
<$reveal state=<<readingMode>> type="match" text="on">
<$reveal state=<<tocSwitchTid>> default="show" type="nomatch" text="hide">
<$button tooltip="Hide toc" class="tc-btn-invisible tc-btn-mini">
<$action-setfield $tiddler=<<tocSwitchTid>> text="hide"/>
{{$:/core/images/preview-open}}
</$button>
</$reveal>
<$reveal state=<<tocSwitchTid>> type="match" text="hide">
<$button tooltip="Show toc" class="tc-btn-invisible tc-btn-mini">
<$action-setfield $tiddler=<<tocSwitchTid>> text="show"/>
{{$:/core/images/preview-closed}}
</$button>
</$reveal>
</$reveal>
\end
\define target-filter-code(filter)
<$vars L="tag[" R="]" lb=" +[">
<$set filter="[list<filterState>addprefix<L>addsuffix<R>]+[join[]addprefix<lb>addprefix<__filter__>addsuffix<R>addsuffix<searchRun>addsuffix<timeRun>addsuffix<fieldRun>addsuffix<valueRun>addsuffix<sortRun>]" name="target" select=0>
<$text text=<<target>>/>
</$set>
</$vars>
\end
\define aggrfilteritem(item:"")
<$checkbox tiddler=<<qualify """$:/temp/$item$""">> field="status" checked="selected" checkactions=<<checkactions """$item$""">> uncheckactions=<<uncheckactions """$item$""">> default="closed"> <$text text=<<__item__>>/></$checkbox>
\end
\define checkactions(item:"")
<$action-listops $tiddler=<<filterState>> $subfilter="[[$item$]]"/>
<$action-listops $tiddler=<<filterState>> $field="checktiddler" $subfilter={{{ [<qualify """$:/temp/$item$""">format:titlelist[]] }}}/>
<$list filter="[list<filterState>!is[tag]]" variable="missingItem">
<$action-listops $tiddler=<<filterState>> $subfilter="-[<missingItem>]"/>
</$list>
\end
\define uncheckactions(item:"")
<$action-listops $tiddler=<<filterState>> $subfilter="-[[$item$]]"/>
<$list filter="[list<filterState>!is[tag]]" variable="missingItem">
<$action-listops $tiddler=<<filterState>> $subfilter="-[<missingItem>]"/>
</$list>
\end
\define deselectButton()
\whitespace trim
<$reveal default={{{ [list<filterState>count[]] }}} type="gt" text="1" animate="yes">
 <$button class="xp-aggrfilter-dynamic-btn">
<$action-deletetiddler $filter="[<filterState>get[checktiddler]enlist-input[]]"/>
<$action-deletefield $tiddler=<<filterState>> list/>
deselect all
</$button>
</$reveal>
\end
\define resetFieldButton()
\whitespace trim
<$list filter="[<fieldTiddler>has[text]] [<dateTiddler>is[tiddler]] [<filterState>has[filter]] +[limit[1]]">
 <$button class="xp-aggrfilter-dynamic-btn">
<$action-deletetiddler $filter="[<fieldTiddler>] [<dateTiddler>] [<valueTiddler>]"/>
<$action-deletefield $tiddler=<<filterState>> filter/>
reset
</$button>
</$list>
\end
\define input-accept-actions-date() <$action-setfield $tiddler=<<filterState>> filter={{{ [<dateTiddler>get[text]addprefix<pt>addsuffix<st>] }}}/>
\define input-cancel-actions-date() <$action-deletefield $tiddler=<<dateTiddler>> text/>
\define resetFieldsActions()
<$action-setfield $tiddler=<<fieldsTiddler>> text=<<__defaultFields__>> list=<<__defaultFields__>>/>
<$list filter="[subfilter<__filter__>] +[fields[]sort[]] -[enlist{$:/config/xp/aggregation/excluded-fields/dtable}] +[format:titlelist[]]" variable="listField">
<$action-listops $tiddler=<<fieldsTiddler>> $subfilter="+[append<listField>]"/>
</$list>
\end
\define updateFieldsActions()
<$action-setfield $tiddler=<<fieldsTiddler>> list={{{ [<fieldsTiddler>get[text]] }}}/>
<$list filter="[subfilter<__filter__>] +[fields[]sort[]] -[enlist{$:/config/xp/aggregation/excluded-fields/dtable}] +[format:titlelist[]]" variable="listField">
<$action-listops $tiddler=<<fieldsTiddler>> $subfilter="+[append<listField>]"/>
</$list>
\end
\define fields-checkactions()
<$action-listops $tiddler=<<targetTiddler>> $field="text" $subfilter="+[append<currentTiddler>]"/>
<<updateFieldsActions>>
\end
\define fields-uncheckactions()
<$action-listops $tiddler=<<targetTiddler>> $field="text" $subfilter="-[<currentTiddler>]"/>
<<updateFieldsActions>>
\end
\define tableFieldsButton()
\whitespace trim
<$reveal state=<<fieldsState>> default="no" type="nomatch" text="yes">
<$button tooltip="Select dynamic table fields" class="tc-btn-invisible tc-btn-mini">
<$action-setfield $tiddler=<<fieldsState>> text="yes"/>
<!-- 1st run: initialize data -->
<$reveal state=<<fieldsTiddler>> type="match" text="">
<<resetFieldsActions>>
<$list filter=<<__defaultFields__>> variable="listField">
<$action-setfield $tiddler=<<field-config-title>> text="show"/>
</$list>
</$reveal>
<!-- Subsequent runs -->
<$reveal state=<<fieldsTiddler>> type="nomatch" text="">
<$reveal
default={{{ [subfilter<__filter__>] +[fields[]] -[enlist<__defaultFields__>] -[enlist{$:/config/xp/aggregation/excluded-fields/dtable}] +[count[]] }}}
type="nomatch"
text={{{ [list<fieldsTiddler>] -[enlist<__defaultFields__>] +[count[]] }}}>
<<updateFieldsActions>>
</$reveal></$reveal>
{{$:/xp/images/dtable}}
</$button>
</$reveal>
<$reveal state=<<fieldsState>> type="match" text="yes">
<$button tooltip="Close selection panel" class="tc-btn-invisible tc-btn-mini">
<$action-setfield $tiddler=<<fieldsState>> text="no"/>
{{$:/xp/images/dtable-panel}}
</$button>
</$reveal>
\end
\define resetFieldsButton()
\whitespace trim
<$wikify name="defaultFieldsCount" text="<$count filter='[enlist<__defaultFields__>]'/>">
<$vars
comparingFields={{{ [enlist<__defaultFields__>] :filter[lookup<config-base>match[show]] +[count[]!match<defaultFieldsCount>] +[then[reset]] }}}
otherFields={{{ [subfilter<__filter__>] +[fields[]] -[enlist<__defaultFields__>] :filter[lookup<config-base>match[show]] +[then[reset]] }}}>
<$list filter="[<comparingFields>] [<otherFields>] +[match[reset]limit[1]]" variable="ignore">
 <$button class="xp-aggrfilter-dynamic-btn">
<!-- Delete config tiddlers -->
<$action-deletetiddler $filter="[regexp[TableFields/Visibility]prefix[$:/config/]prefix<fieldsTiddler>prefix<config-base>]"/>
<$list filter="[enlist<__defaultFields__>]" variable="listField">
<$action-setfield $tiddler=<<field-config-title>> text="show"/>
</$list>
<!-- Reset fields -->
<<resetFieldsActions>>
reset
</$button>
</$list>
</$vars>
</$wikify>
\end
\define updateFieldsButton()
\whitespace trim
<$reveal
default={{{ [subfilter<__filter__>] +[fields[]] -[enlist<__defaultFields__>] -[enlist{$:/config/xp/aggregation/excluded-fields/dtable}] +[count[]] }}}
type="nomatch"
text={{{ [list<fieldsTiddler>] -[enlist<__defaultFields__>] +[count[]] }}}>
<$button class="xp-aggrfilter-dynamic-btn">
<<updateFieldsActions>>
update
</$button>
</$reveal>
\end
\define aggregation-fields-draggable-config-title()
$(config-base)$$(currentTiddler)$
\end
\define aggregation-fields-draggable-drop-actions()
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
<$reveal state=<<aggregation-fields-draggable-config-title>> type="match" text="show">
<$action-listops $tiddler=<<targetTiddler>> $field="text" $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
</$reveal>
\end
\define aggregation-fields-draggable(tiddler,field:"list",exclude,emptyMessage,itemTemplate,elementTag:"div",storyview:"")
\whitespace trim
<$vars targetTiddler="""$tiddler$""" targetField="""$field$""">
<$list filter="[list[$tiddler$!!$field$]] -[enlist<__exclude__>]" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>
<$droppable actions=<<aggregation-fields-draggable-drop-actions>> enable=<<tv-enable-drag-and-drop>>>
<$elementTag$ class="tc-droppable-placeholder"/>
<$elementTag$>
<$transclude tiddler="""$itemTemplate$""">
<$link to={{!!title}}>
<$view field="title"/>
</$link>
</$transclude>
</$elementTag$>
</$droppable>
</$list>
<$tiddler tiddler="">
<$droppable actions=<<aggregation-fields-draggable-drop-actions>> tag="div" enable=<<tv-enable-drag-and-drop>>>
<$elementTag$ class="tc-droppable-placeholder"/>
<$elementTag$ style="height:0.5em;">
</$elementTag$>
</$droppable>
</$tiddler>
</$vars>
\end
\define aggregation-dtable-controls()
\whitespace trim
<<toggle-edit-view-trim>>
<span class="xp-controls" style="padding-left:.25em;">
<<tableFieldsButton>>
<$list filter="[<__paginationButton__>match[yes]]" variable=ignore>
<<toggle-pagination>>
</$list>
<$list filter="[<__rowsButton__>match[yes]]" variable=ignore>
<<footer-rows-button>>
</$list>
</span>
\end
\define aggregation-dtable(filter, fields:"tbl-expand title", indexes:"", sortOp:"sort", caption:"", class:"w-100", stateTiddler:"aggregation-state", editButton:"yes", paginationButton:"yes", rowsButton:"no", emptyMessage)
\import [[$:/tags/Table/Macro]tagging[]]
<!--above commands import utility macros-->
<$let
fieldsTiddler="""$:/config/xp/$stateTiddler$/TableFields"""
fieldsState="""$:/state/xp/$stateTiddler$/ModifyTableFields"""
pageTiddler="""$:/config/xp/$stateTiddler$/Pagination"""
rowsTiddler="""$:/config/xp/$stateTiddler$/FooterRows"""
rowsState="""$:/state/xp/$stateTiddler$/FooterRows"""
footerTiddler="""$:/keepstate/dynamictables/$stateTiddler$/footer"""
inputFilter="[subfilter<__filter__>!has[draft.of]]"
sortType=<<__sortOp__>>
pagination={{{ [<pageTiddler>is[tiddler]get[text]] ~no }}}
footerRows={{{ [<rowsTiddler>is[tiddler]get[text]] ~0 }}}
>
<$set name=currentTable value=<<__stateTiddler__>> emptyValue=<<currentTiddler>> >
<$reveal state=<<fieldsState>> type="match" text="yes" animate="yes">
<div class="xp-wrapper-aggrfilter">
<div style="position:relative;">
<div class="tc-tiddler-controls" style="position:absolute;right:0;">
<$button set=<<fieldsState>> setTo="" tooltip="Close panel" aria-label="select table fields" class="tc-btn-invisible">
{{$:/core/images/close-button}}
</$button>
</div>
</div>
<span class="tc-muted">Dynamic table Fields:</span> <<resetFieldsButton>><<updateFieldsButton>>
<div class="xp-aggrfilter-category">
<div class="xp-aggrfilter-category-item">
<$macrocall
$name="aggregation-fields-draggable"
tiddler=<<fieldsTiddler>>
itemTemplate="$:/aggregation/fields-smart-mode/ItemTemplate"
exclude={{$:/config/xp/aggregation/excluded-fields/dtable}}
/>
</div>
</div>
</div>
</$reveal>
<!-- check what type of columns are sent, fileds or indexes (data tiddlers as records) -->
<$set name=fieldOrIndex filter="[<__fields__>!is[blank]]" value="field" emptyValue="index">
<<check_tiddlers_type_for_table_from_indexes isEditable:"$editButton$">>
<$set name=columns filter="[<fieldOrIndex>]-index" value=<<__fields__>> emptyValue=<<__indexes__>> >
<!--check input filter parameter-->
<$list filter="[subfilter<inputFilter>limit[1]]" emptyMessage=<<__emptyMessage__>> variable=ignore>
<$set name=sortneg tiddler=<<tempTableSort>> index="negate">
<!--calculate the number of columns in edit and view mode -->
<$set name=ncols filter="[<tempTableEdit>getindex[mode]match[edit]]" value={{{ [subfilter<columnFilter>count[]] }}} emptyValue={{{ [subfilter<columnFilter>count[]subtract[1]] }}}>
<div class="tbl-container" style="max-width:100%;">
<table class=<<__class__>> style="caption-side:top">
<!-- reveal caption and edit button -------------------->
<caption style="text-align:left;">
<$list filter="[<__editButton__>match[yes]]" variable=ignore>
<span style="padding-right:5px;padding-left:3px;">
<<aggregation-dtable-controls>>
<<select-footer-rows>>
</span>
</$list>
<$reveal state=<<rowsState>> type="nomatch" text="yes" animate="yes">
$caption$
</$reveal></caption>
<!-- create header -------------------->
<thead>
<<confirm-delete>>
<tr>
<$list filter=<<columnFilter>> variable=currentColumn>
<$set name="headerLookup" filter="[all[tiddlers+shadows]tag[$:/tags/Table/HeaderTemplate]contains:tbl-column-list<currentColumn>limit[1]get[title]]" value=<<headerLookup>> emptyValue="$:/plugins/kookma/shiraz/templates/header/default">
<$transclude tiddler=<<headerLookup>> field="text" mode="inline"/>
</$set>
</$list>
</tr>
</thead>
<!-- create footer -------------------->
<$reveal type="gt" default=<<footerRows>> text="0" tag="tfoot" class="shiraz-dtable-footer">
<tr><td colspan=<<ncols>> style="font-weight:bold;background-color:transparent;">Numerical summary</td></tr>
<$list filter="[range<footerRows>addprefix[footer-]]" variable=footerRow>
<tr>
<$list filter=<<columnFilter>> variable=currentColumn>
<$set name="footerLookup" filter="[all[tiddlers+shadows]tag[$:/tags/Table/FooterTemplate]contains:tbl-column-list<currentColumn>limit[1]get[title]]" value=<<footerLookup>> emptyValue="$:/plugins/kookma/shiraz/templates/footer/default">
<$transclude tiddler=<<footerLookup>> field="text" mode="inline"/>
</$set>
</$list>
</tr>
</$list>
</$reveal>
<!-- reveal main body of table (generate records) -------------------->
<tbody>
<$set name=tableBody filter="[<fieldOrIndex>]-index" value="display_body_fields" emptyValue="display_body_indexes" >
<!-- setup pagination variables -->
<$vars total-entries={{{[subfilter<inputFilter>count[]] }}}
page-number={{{[<pageStateTiddler>get[text]] ~[[1]]}}}
entries-per-page={{{ [<entryPerPageStateTiddler>get[text]] ~[[25]] }}} >
<$vars low={{{ [<page-number>subtract[1]multiply<entries-per-page>] }}}
high={{{[<page-number>multiply<entries-per-page>] }}} >
<$macrocall $name=<<tableBody>> />
<!--on demand display the pagination row-->
<$reveal type="match" default=<<pagination>> text="yes" tag="tr" class="shiraz-dtable-page-footer">
<td colspan=<<ncols>> >
<<prev-button>>
Displaying <$text text={{{[<low>add[1]]}}}/> through <$text text={{{ [<high>compare:number:lt<total-entries>then<high>else<total-entries>] }}}/> of <<total-entries>> Results | <<limit-entries>>
<<next-button>>
</td>
</$reveal><!-- end of pagination ui -->
</$vars>
</$vars>
</$set>
</tbody>
</table>
</div><!-- container-->
</$set>
</$set>
</$list><!--check input filter parameter-->
</$set>
</$set>
</$set>
</$let>
\end
<pre><$view field="text"/></pre>
$:/aggregation/macros
created: 20230402014525104
modified: 20230402014525104
tags: $:/tags/Macro $:/tags/Macro/Aggregation $:/tags/XpPreview
title: $:/aggregation/macros
\define aggregation(filter,state:"aggregation-state", defaultFields:"tbl-expand title",class:"w-100",paginationButton:"yes",rowsButton:"no",viewButton:"yes",tiddler, searchClass:"xp-search-aggregation", cardTemplate:"$:/aggregation-card-template", tocTemplate, promptTiddler:"$:/aggregation/prompt")
\import $:/aggregation/macros/definitions
\whitespace trim
<$list filter="""$filter$ +[limit[1]]""" emptyMessage="{{$promptTiddler$}}" variable="ignore">
<span class="xp-search $searchClass$">
Search  
<$select
tiddler="""$:/config/xp/$state$/SearchScope"""
default="+[search<userInput>]"
tooltip="Choosing the Search Scope"
class="xp-aggregation-select">
<option value="+[search:*<userInput>]"> all fields</option>
<option value="+[search:*:literal,casesensitive<userInput>]"> all exact match</option>
<option value="+[search:-text,*<userInput>]"> all except text</option>
<option value="+[search<userInput>]"> title text tags</option>
<option value="+[search:title,caption<userInput>]"> title caption</option>
</$select>
<i class='tc-small-gap-left'/>
<$macrocall
$name="keyboard-driven-input"
tiddler="""$:/temp/search/$state$"""
type="search"
tag="input"
focus={{$:/config/xp/aggregation/SearchAutoFocus}}
inputCancelActions="""<$action-deletetiddler $filter="[[$:/state/filter/$state$]get[checktiddler]enlist-input[]]"/><$action-deletetiddler $filter="$:/temp/search/$state$ $:/state/filter/$state$ $:/temp/xp/$state$/Field $:/temp/xp/$state$/Date $:/temp/xp/$state$/FieldValue"/>"""
/>
</span>
<i class='tc-tiny-gap-left'/>
<$let userInput={{{ [[$:/temp/search/$state$]get[text]] }}}
searchRun={{{ [[$:/config/xp/$state$/SearchScope]has[text]get[text]] ~"+[search<userInput>]" }}}
timeRun={{{ [[$:/state/filter/$state$]get[filter]] }}}
sortRun={{{ [[$:/temp/xp/$state$/Sorting]is[tiddler]get[text]] }}}
fieldRun={{{ [[$:/temp/xp/$state$/Field]has[filter]get[filter]] }}}
valueRun={{{ [[$:/temp/xp/$state$/FieldValue]has[filter]get[filter]] }}}
resultCount="<$count filter=<<searchFilter>>/>"
sortState={{{ [[$:/state/dynamictables/$state$/sortby]has[title]] ~$:/temp/xp/$state$/Sorting }}}
tempTableSort="""$:/state/dynamictables/$state$/sortby"""
sortIndex={{{ [[$:/state/dynamictables/$state$/sortby]getindex[sortIndex]] }}}
storeTitle="""$:/temp/search/$state$"""
filterState="""$:/state/filter/$state$"""
fieldTiddler="""$:/temp/xp/$state$/Field"""
dateTiddler="""$:/temp/xp/$state$/Date"""
valueTiddler="""$:/temp/xp/$state$/FieldValue"""
sortTiddler="""$:/temp/xp/$state$/Sorting"""
defaultView="""$:/config/xp/$state$/DefaultView"""
readingMode="""$:/config/xp/$state$/ReadingMode"""
sourceMode="""$:/config/xp/$state$/SourceMode"""
tocSwitchTid="""$:/temp/xp/$state$/aggregation-toc"""
config-base="""$:/config/xp/$state$/TableFields/Visibility/"""
navTiddler={{{ [<__tiddler__>has[title]] ~[<currentTiddler>] }}}>
<span class="tc-search">
<$reveal state=<<filterState>> type="nomatch" text="yes">
<$button set=<<filterState>> setTo="yes" class="tc-btn-invisible">
{{$:/xp/images/filter}}
</$button>
</$reveal>
<$set name="stateTiddler" filter="[<storeTitle>!is[missing]has[text]]" value=<<storeTitle>> emptyValue=<<filterState>>>
<$reveal state=<<stateTiddler>> type="nomatch" text="">
<$button class="tc-btn-invisible">
<$action-deletetiddler $filter="[[$:/state/filter/$state$]get[checktiddler]enlist-input[]]"/>
<$action-deletetiddler $filter="$:/temp/search/$state$ $:/state/filter/$state$ $:/temp/xp/$state$/Field $:/temp/xp/$state$/Date $:/temp/xp/$state$/FieldValue"/>
<$action-sendmessage $message="tm-focus-selector" $param=""".$searchClass$ input"""/>
{{$:/core/images/close-button}}
</$button>
</$reveal>
</$set>
<$list filter="[<__viewButton__>match[yes]]" variable="ignore">
<$reveal state=<<readingMode>> type="nomatch" text="on">
<<toggleViewButton>>
</$reveal>
</$list>
<<sortingButton>>
<<toggleReadingMode>>
<<viewSource>>
<<tocSwitch>>
</span>
<$wikify text=<<target-filter-code>> name="targetFilter">
<$set name="searchFilter" filter="[<filterState>has[list]]" value=<<targetFilter>> emptyValue={{{ [<__filter__>addsuffix[ ]addsuffix<searchRun>addsuffix<timeRun>addsuffix<fieldRun>addsuffix<valueRun>addsuffix<sortRun>] }}}>
<$set name="stateTiddler" filter="[<storeTitle>!is[missing]get[text]!is[blank]]" value=<<storeTitle>> emptyValue=<<filterState>>>
<$reveal state=<<stateTiddler>> type="nomatch" text="">
<$reveal state=<<filterState>> type="nomatch" text="yes" animate="yes">
<span class="xp-search-results"><<lingo System/Matches>></span>
</$reveal>
</$reveal>
<$reveal state=<<filterState>> type="nomatch" text="yes" animate="yes">
<<unsortButton>>
</$reveal>
</$set>
<$reveal state=<<filterState>> type="match" text="yes" animate="yes">
<div class="xp-wrapper-aggrfilter">
Filtered by Tag: <<deselectButton>>
<div class="xp-aggrfilter-category">
<table>
<tbody>
<$list filter="""$filter$ +[tags[]!is[system]limit[1]]""" variable="ignore">
<tr>
<td><span class="xp-aggrfilter-category-title tc-muted">Tags</span></td>
<td>
<span class="xp-aggrfilter-category-item">
<$list filter="""$filter$ +[tags[]!is[system]sort[]]""" variable="currentItem">
<$macrocall $name="aggrfilteritem" item=<<currentItem>>/>
</$list>
</span>
</td>
</tr>
</$list>
<$list filter="""$filter$ +[tags[]is[system]limit[1]]""" variable="ignore">
<tr>
<td><span class="xp-aggrfilter-category-title tc-muted">$Tags</span></td>
<td>
<span class="xp-aggrfilter-category-item">
<$list filter="""$filter$ +[tags[]is[system]sort[]]""" variable="currentItem">
<$macrocall $name="aggrfilteritem" item=<<currentItem>>/>
</$list>
</span>
</td>
</tr>
</$list>
</tbody>
</table>
</div>
Filtered by Time / Field: <<resetFieldButton>>
<div class="xp-aggrfilter-category">
<table>
<tbody>
<tr>
<td>
<span class="xp-aggrfilter-category-title tc-muted">Time</span> 
<$select
tiddler=<<filterState>>
field="filter"
class="xp-aggregation-select"
actions="<$list filter='[<filterState>search:filter[regexp:created]]'><$action-setfield $tiddler=<<dateTiddler>> status='show'/></$list>">
<option value=""> All</option>
<option value="+[days:created[-1]]"> Past 24 hours</option>
<option value="+[days:created[-7]]"> Past week</option>
<option value="+[days:created[-30]]"> Past month</option>
<option value="+[days:created[-365]]"> Past year</option>
<option value="+[regexp:created[]]"> Enter a date</option>
</$select>
</td>
<$list filter="[<dateTiddler>is[tiddler]]">
<td>
<span class="xp-aggrfilter-category-title tc-muted">Date</span> 
<$vars pt=" +[regexp:created[^" st="]]">
<$macrocall
$name="keyboard-driven-input"
tiddler=<<dateTiddler>>
type="search"
tag="input"
size=7
focus="no"
inputCancelActions=<<input-cancel-actions-date>>
inputAcceptActions=<<input-accept-actions-date>>
/>
 
<$button> Enter
<<input-accept-actions-date>>
</$button>
</$vars>
</td>
</$list>
<$vars
getField={{{ [<fieldTiddler>is[tiddler]get[text]] }}}
getValue={{{ [<valueTiddler>is[tiddler]get[text]] }}}
pt1="+[has:field["
pt2="+["
st="]]"
st2="["
>
<td>
<span class="xp-aggrfilter-category-title tc-muted"> Field </span> 
<$select
tiddler=<<fieldTiddler>>
tooltip="Choosing the Field"
class="xp-aggregation-select"
actions="<$action-setfield $tiddler=<<fieldTiddler>> filter={{{ [<fieldTiddler>get[text]addprefix<pt1>addsuffix<st>] }}}/><$action-deletetiddler $tiddler=<<valueTiddler>>/>">
<$list filter="""$filter$ +[fields:exclude{$:/config/xp/aggregation/excluded-fields/filtering-button}]""">
<option><$view field="title"/></option>
</$list>
</$select>
</td>
<$list
filter="""$filter$ +[has<getField>limit[1]]"""
emptyMessage="<$list filter='[<fieldTiddler>has[text]]'><td><span class='xp-aggrfilter-category-title tc-muted'> No value for this field </span></td></$list>"
variable="ignore">
<td>
<span class="xp-aggrfilter-category-title tc-muted"> Value </span> 
<$select
tiddler=<<valueTiddler>>
tooltip="Choosing the Value"
class="xp-aggregation-select"
actions="""<$action-setfield $tiddler=<<valueTiddler>> filter={{{ [<getField>addprefix<pt2>addsuffix<st2>addsuffix{$:/temp/xp/$state$/FieldValue}addsuffix<st>] }}}/>""">
<$list filter="""$filter$ +[has<getField>each<getField>get<getField>!is[blank]]""">
<option><$view field="title"/></option>
</$list>
</$select>
</td>
</$list>
</$vars>
</tr>
</tbody>
</table>
</div>
</div>
</$reveal>
<$reveal state=<<filterState>> type="match" text="yes" animate="yes">
<<lingo System/Matches>>
<<unsortButton>>
</$reveal>
<$reveal state=<<readingMode>> type="nomatch" text="on" animate="yes">
<!-- Show table -->
<$reveal state=<<defaultView>> default="table" type="match" text="table" animate="yes">
<$wikify name="dtableFields" text="""<$list filter="[list[$:/config/xp/$state$/TableFields]]" variable="listField"><$reveal type="match" state=<<field-config-title>> text="show"> <$text text={{{ [<listField>format:titlelist[]] }}}/> </$reveal></$list>""">
<$set name="fields" filter="[<dtableFields>is[blank]]" value=<<__defaultFields__>> emptyValue=<<dtableFields>>>
<$macrocall
$name="aggregation-dtable"
filter=<<searchFilter>>
fields=<<fields>>
class=<<__class__>>
stateTiddler=<<__state__>>
paginationButton=<<__paginationButton__>>
rowsButton=<<__rowsButton__>>
/>
</$set>
</$wikify>
</$reveal>
<!-- Show card -->
<$reveal state=<<defaultView>> default="table" type="nomatch" text="table" animate="yes">
<div class="content" style="padding-top:10px;">
<$list
filter=<<searchFilter>>
template=<<__cardTemplate__>>
/>
</div>
</$reveal>
</$reveal>
<!-- Reading Mode -->
<$reveal state=<<readingMode>> type="match" text="on" animate="yes">
<$list filter="""$filter$ +[limit[1]]""" variable="ignore">
<$vars selectedTiddler="$:/temp/toc/selectedTiddler/$state$" template="" exclude="">
<div style="padding:10px 0;">
<$tiddler tiddler={{{ [<selectedTiddler>get[text]] }}}>
<div class="tc-tabbed-table-of-contents" style="">
<$list filter="[<tocSwitchTid>!text[hide]]" variable="ignore">
<$linkcatcher to=<<selectedTiddler>>>
<div class="tc-table-of-contents xp-aggregation-toc">
<$set name="excluded" filter="[enlist<exclude>]">
<ol class="tc-toc toc-selective-expandable">
<$list filter="[subfilter<searchFilter>] -[enlist<exclude>]">
<$macrocall $name="toc-linked-selective-expandable-body" itemClassFilter="[all[current]] -[<selectedTiddler>get[text]]" exclude=<<excluded>>/>
</$list>
</ol>
</$set>
</div>
</$linkcatcher>
</$list>
<div class="tc-tabbed-table-of-contents-content">
<$reveal stateTitle=<<selectedTiddler>> type="nomatch" text="">
<$transclude mode="block" tiddler=<<template>>>
<$reveal state=<<sourceMode>> type="nomatch" text="on">
<h1><$link><$transclude field="caption"><$view field="title"/></$transclude></$link> <span class="tc-tiddler-controls" style="font-size:0.73em !important;"><$list filter="$:/core/ui/Buttons/new-here $:/core/ui/Buttons/clone $:/core/ui/Buttons/delete $:/core/ui/Buttons/edit" variable="listItem"><$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]"><$transclude tiddler=<<listItem>>/></$set></$list></span></h1>
^^<i class="tc-muted"><$view field="modified" format="date" template="DDth MMM YYYY at 0hh:0mm">TBA</$view></i>^^
<$transclude mode="block"><p>Missing tiddler.</p></$transclude>
</$reveal>
<!-- Source Mode -->
<$reveal state=<<sourceMode>> type="match" text="on">
<h1><$link><$view field="title"/></$link> <span class="tc-tiddler-controls" style="font-size:0.73em !important;"><$list filter="$:/core/ui/Buttons/new-here $:/core/ui/Buttons/clone $:/core/ui/Buttons/delete $:/core/ui/Buttons/edit" variable="listItem"><$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]"><$transclude tiddler=<<listItem>>/></$set></$list></span></h1>
^^<i class="tc-muted"><$view field="modified" format="date" template="DDth MMM YYYY at 0hh:0mm">TBA</$view></i>^^
<$codeblock code={{{ [<currentTiddler>get[text]] }}}><p>Missing tiddler.</p></$codeblock>
</$reveal>
</$transclude>
<!-- Navigation -->
<div class="xp-aggregation-toc-navigation">
<$list filter="[subfilter<searchFilter>] -[enlist<exclude>] +[after<currentTiddler>]" variable="nextTiddler">
<$linkcatcher to=<<selectedTiddler>> actions="<$action-navigate $to=<<navTiddler>> $scroll='yes'/>">
''NEXT''
<div><$link to=<<nextTiddler>>><$text text=<<nextTiddler>>/></$link></div>
</$linkcatcher>
</$list>
<$list filter="[subfilter<searchFilter>] -[enlist<exclude>] +[before<currentTiddler>]" variable="prevTiddler">
<$linkcatcher to=<<selectedTiddler>> actions="<$action-navigate $to=<<navTiddler>> $scroll='yes'/>">
<div style="padding-top:7px;">
''PREVIOUS''
<div><$link to=<<prevTiddler>>><$text text=<<prevTiddler>>/></$link></div>
</div>
</$linkcatcher>
</$list>
</div>
</$reveal>
<$reveal stateTitle=<<selectedTiddler>> type="match" text="">
<p>Select a topic in the table of contents. Click the arrow to expand a topic.</p>
</$reveal>
</div>
</div>
</$tiddler>
</div>
</$vars>
</$list>
</$reveal>
</$set>
</$wikify>
</$let>
</$list>
\end
\define aggregation-filtersearch(fields:"tbl-expand title", class:"w-100", state:"aggregation-general", paginationButton:"yes", rowsButton:"no", viewButton:"yes", searchClass:"xp-search-aggregation", cardTemplate:"$:/aggregation-card-template", tocTemplate, promptTiddler:"$:/aggregation/prompt")
\import $:/aggregation/macros/general
\whitespace trim
<$list filter=<<aggr-has-tids>> emptyMessage="{{$promptTiddler$}}" variable="ignore">
<span class="xp-search $searchClass$">
Search   <<selectSearchScope>> <i class='tc-small-gap-right'/> <$macrocall $name="keyboard-driven-input"
tiddler="""$:/temp/search/$state$"""
type="search"
tag="input"
focus={{$:/config/xp/aggregation/SearchAutoFocus}}
inputCancelActions="""<$action-deletetiddler $filter="[[$:/state/filter/$state$]get[checktiddler]enlist-input[]]"/><$action-deletetiddler $filter="$:/temp/search/$state$ $:/state/filter/$state$ $:/temp/xp/$state$/Field $:/temp/xp/$state$/Date $:/temp/xp/$state$/FieldValue"/>"""/>
</span>
<i class='tc-tiny-gap-left'/>
<$vars userInput={{{ [[$:/temp/search/$state$]get[text]] }}}
timeRun={{{ [[$:/state/filter/$state$]get[filter]] }}}
sortRun={{{ [[$:/temp/xp/$state$/Sorting]is[tiddler]get[text]] }}}
fieldRun={{{ [[$:/temp/xp/$state$/Field]has[filter]get[filter]] }}}
valueRun={{{ [[$:/temp/xp/$state$/FieldValue]has[filter]get[filter]] }}}
resultCount="<$count filter=<<searchFilter>>/>"
sortState={{{ [[$:/state/dynamictables/$state$/sortby]is[tiddler]] ~$:/temp/xp/$state$/Sorting }}}
tempTableSort="""$:/state/dynamictables/$state$/sortby"""
sortIndex={{{ [[$:/state/dynamictables/$state$/sortby]getindex[sortIndex]] }}}
categoryPrefix="""$:/config/xp/$state$/category/"""
storeTitle="""$:/temp/search/$state$"""
filterState="""$:/state/filter/$state$"""
fieldTiddler="""$:/temp/xp/$state$/Field"""
dateTiddler="""$:/temp/xp/$state$/Date"""
valueTiddler="""$:/temp/xp/$state$/FieldValue"""
sortTiddler="""$:/temp/xp/$state$/Sorting"""
defaultView="""$:/config/xp/$state$/DefaultView"""
readingMode="""$:/config/xp/$state$/ReadingMode"""
sourceMode="""$:/config/xp/$state$/SourceMode"""
tocSwitchTid="""$:/temp/xp/$state$/aggregation-toc"""
config-base="""$:/config/xp/$state$/TableFields/Visibility/""">
<span class="tc-search">
<$reveal state=<<filterState>> type="nomatch" text="yes">
<$button class="tc-btn-invisible">
<$action-setfield $tiddler=<<filterState>> text="yes"/>
{{$:/xp/images/filter}}
</$button>
</$reveal>
<$set name="stateTiddler" filter="[<storeTitle>!is[missing]has[text]]" value=<<storeTitle>> emptyValue=<<filterState>>>
<$reveal state=<<stateTiddler>> type="nomatch" text="">
<$button class="tc-btn-invisible">
<$action-deletetiddler $filter="[[$:/state/filter/$state$]get[checktiddler]enlist-input[]]"/><$action-deletetiddler $filter="$:/temp/search/$state$ $:/state/filter/$state$ $:/temp/xp/$state$/Field $:/temp/xp/$state$/Date $:/temp/xp/$state$/FieldValue"/>
<$action-sendmessage $message="tm-focus-selector" $param=""".$searchClass$ input"""/>
{{$:/core/images/close-button}}
</$button>
</$reveal>
</$set>
<$list filter="[<__viewButton__>match[yes]]" variable="ignore">
<$reveal state=<<readingMode>> type="nomatch" text="on">
<<toggleViewButton>>
</$reveal>
</$list>
<<sortingButton>>
<<toggleReadingMode>>
<<viewSource>>
<<tocSwitch>>
</span>
<$wikify text=<<alltagsfilter>> name="alltagsfilterwikified">
<$set name="searchFilter" filter="[<filterState>has[list]]" value=<<alltagsfilterwikified>> emptyValue={{{ [<configTiddler>get[text]addsuffix<timeRun>addsuffix<fieldRun>addsuffix<valueRun>addsuffix<sortRun>] }}}>
<$set name="stateTiddler" filter="[<storeTitle>!is[missing]get[text]!is[blank]]" value=<<storeTitle>> emptyValue=<<filterState>>>
<$reveal state=<<stateTiddler>> type="nomatch" text="">
<$reveal state=<<filterState>> type="nomatch" text="yes" animate="yes">
<span class="xp-search-results"><<lingo System/Matches>></span>
</$reveal>
</$reveal>
<$reveal state=<<filterState>> type="nomatch" text="yes" animate="yes">
<<unsortButton>>
</$reveal>
</$set>
<$reveal state=<<filterState>> type="match" text="yes" animate="yes">
<div class="xp-wrapper-aggrfilter">
<<filtered-by-tag>>
Filtered by Time / Field: <<resetFieldButton>>
<div class="xp-aggrfilter-category">
<table>
<tbody>
<tr>
<<filtered-by-time>>
<$vars getField={{{ [<fieldTiddler>is[tiddler]get[text]] }}} getValue={{{ [<valueTiddler>is[tiddler]get[text]] }}}
pt1="+[has:field[" pt2="+[" st="]]" st2="[">
<td>
<span class="xp-aggrfilter-category-title tc-muted"> Field </span> 
<$select tiddler=<<fieldTiddler>> tooltip="Choosing the Field" class="xp-aggregation-select" actions="""<$action-setfield $tiddler=<<fieldTiddler>> filter={{{ [<fieldTiddler>get[text]addprefix<pt1>addsuffix<st>] }}}/><$action-deletetiddler $tiddler=<<valueTiddler>>/>""">
<$list filter="[tag<aggregationTag>fields:exclude{$:/config/xp/aggregation/excluded-fields/filtering-button}]">
<option><$view field="title"/></option>
</$list>
</$select>
</td>
<$list filter="[tag<aggregationTag>has{$:/temp/xp/$state$/Field}limit[1]]" emptyMessage="""<$list filter="[<fieldTiddler>has[text]]"><td><span class="xp-aggrfilter-category-title tc-muted"> No value for this field </span></td></$list>""" variable="ignore">
<td>
<span class="xp-aggrfilter-category-title tc-muted"> Value </span> 
<$select tiddler=<<valueTiddler>> tooltip="Choosing the Value" class="xp-aggregation-select" actions="""<$action-setfield $tiddler=<<valueTiddler>> filter={{{ [<getField>addprefix<pt2>addsuffix<st2>addsuffix{$:/temp/xp/$state$/FieldValue}addsuffix<st>] }}}/>""">
<$list filter="[tag<aggregationTag>has<getField>each<getField>get<getField>!is[blank]]">
<option><$view field="title"/></option>
</$list>
</$select>
</td>
</$list>
</$vars>
</tr>
</tbody>
</table>
</div>
</div>
</$reveal>
<$reveal state=<<filterState>> type="match" text="yes" animate="yes">
<<lingo System/Matches>>
<<unsortButton>>
</$reveal>
<$reveal state=<<readingMode>> type="nomatch" text="on" animate="yes">
<!-- Show table -->
<$reveal state=<<defaultView>> default="table" type="match" text="table" animate="yes">
<$macrocall
$name="aggr-table"
filter=<<searchFilter>>
fields=<<__fields__>>
class=<<__class__>>
stateTiddler=<<__state__>>
paginationButton=<<__paginationButton__>>
rowsButton=<<__rowsButton__>>
/>
</$reveal>
<!-- Show card -->
<$reveal state=<<defaultView>> default="table" type="nomatch" text="table" animate="yes">
<div class="content" style="padding-top:10px;">
<$list
filter=<<searchFilter>>
template=<<__cardTemplate__>>
/>
</div>
</$reveal>
</$reveal>
<!-- Reading Mode -->
<$reveal state=<<readingMode>> type="match" text="on" animate="yes">
<$list filter="[subfilter<searchFilter>limit[1]]" variable="ignore">
<$macrocall
$name="aggregation-toc"
filter=<<searchFilter>>
selectedTiddler="""$:/temp/toc/selectedTiddler/$state$"""
template=<<__tocTemplate__>>
sourceMode=<<sourceMode>>
tocSwitchTid=<<tocSwitchTid>>
/>
</$list>
</$reveal>
</$set>
</$wikify>
</$vars>
</$list>
\end
\define aggregation-table-dynamic(fields:"tbl-expand title tags",class:"w-100",state:"aggregation",storeTitle:"$:/temp/search/aggregation/dtable",searchClass:"xp-search-aggregation",promptTiddler:"$:/aggregation/prompt")
\import $:/aggregation/macros/general
\whitespace trim
<$list filter=<<aggr-has-tids>> emptyMessage="{{$promptTiddler$}}" variable="ignore">
<span class="xp-search $searchClass$">
Search   <<selectSearchScope>> <i class='tc-small-gap-right'/> <$macrocall $name="keyboard-driven-input"
tiddler=<<__storeTitle__>>
type="search"
tag="input"
focus={{$:/config/xp/aggregation/SearchAutoFocus}}
inputCancelActions=<<__cancel-search-actions__>>/>
<i class='tc-tiny-gap-left'/>
<$reveal state=<<__storeTitle__>> type="nomatch" text="">
<$button class="tc-btn-invisible">
<<cancel-search-actions>>
<$action-sendmessage $message="tm-focus-selector" $param=""".$searchClass$ input"""/>
{{$:/core/images/close-button}}
</$button>
</$reveal>
</span>
<$vars userInput={{{ [<__storeTitle__>get[text]] }}}
aggrFilter={{{ [<configTiddler>get[text]] }}}
resultCount="<$count filter=<<aggrFilter>>/>">
<$reveal state=<<__storeTitle__>> type="nomatch" text="">
<span class="xp-search-results"><<lingo System/Matches>></span>
</$reveal>
<$macrocall
$name="table-dynamic"
filter=<<aggrFilter>>
fields="$fields$"
class="$class$"
stateTiddler="$state$"
emptyMessage=" "
/>
</$vars>
</$list>
\end
\define aggregation-list-thumbnails(width:"220",height:"123",storeTitle:"$:/temp/search/aggregation/thumbnails",searchClass:"xp-search-aggregation",tagbar:"yes",promptTiddler:"$:/aggregation/prompt")
\import $:/aggregation/macros/general
\whitespace trim
<$list filter=<<aggr-has-tids>> emptyMessage="{{$promptTiddler$}}" variable="ignore">
<$reveal default="$tagbar$" type="nomatch" text="no">
<<aggrTagbar>>
</$reveal>
<span class="xp-search $searchClass$">
Search   <<selectSearchScope>> <i class='tc-small-gap-right'/> <$macrocall $name="keyboard-driven-input"
tiddler=<<__storeTitle__>>
type="search"
tag="input"
focus={{$:/config/xp/aggregation/SearchAutoFocus}}
inputCancelActions=<<__cancel-search-actions__>>/>
<i class='tc-tiny-gap-left'/>
<$reveal state=<<__storeTitle__>> type="nomatch" text="">
<$button class="tc-btn-invisible">
<<cancel-search-actions>>
<$action-sendmessage $message="tm-focus-selector" $param=""".$searchClass$ input"""/>
{{$:/core/images/close-button}}
</$button>
</$reveal>
</span>
<$vars userInput={{{ [<__storeTitle__>get[text]] }}}
aggrFilter={{{ [<configTiddler>get[text]] }}}
resultCount="<$count filter=<<aggrFilter>>/>">
<$reveal state=<<__storeTitle__>> type="nomatch" text="">
<span class="xp-search-results"><<lingo System/Matches>></span>
</$reveal>
<div style="font-size:0.7em;text-align:left;margin-top:2em;margin-bottom:2em;">
<$macrocall
$name="list-thumbnails"
filter=<<aggrFilter>>
width="$width$"
height="$height$"
/>
</div>
</$vars>
</$list>
\end
\define aggregation-list-links(storeTitle:"$:/temp/search/aggregation/links",searchClass:"xp-search-aggregation",tagbar:"yes",promptTiddler:"$:/aggregation/prompt")
\import $:/aggregation/macros/general
\whitespace trim
<$list filter=<<aggr-has-tids>> emptyMessage="{{$promptTiddler$}}" variable="ignore">
<$reveal default="$tagbar$" type="nomatch" text="no">
<<aggrTagbar>>
</$reveal>
<span class="xp-search $searchClass$">
Search   <<selectSearchScope>><i class='tc-small-gap-right'/> <$macrocall $name="keyboard-driven-input"
tiddler=<<__storeTitle__>>
type="search"
tag="input"
focus={{$:/config/xp/aggregation/SearchAutoFocus}}
inputCancelActions=<<__cancel-search-actions__>>/>
<i class='tc-tiny-gap-left'/>
<$reveal state=<<__storeTitle__>> type="nomatch" text="">
<$button class="tc-btn-invisible">
<<cancel-search-actions>>
<$action-sendmessage $message="tm-focus-selector" $param=""".$searchClass$ input"""/>
{{$:/core/images/close-button}}
</$button>
</$reveal>
</span>
<$vars userInput={{{ [<__storeTitle__>get[text]] }}}
aggrFilter={{{ [<configTiddler>get[text]] }}}
resultCount="<$count filter=<<aggrFilter>>/>">
<$reveal state=<<__storeTitle__>> type="nomatch" text="">
<span class="xp-search-results"><<lingo System/Matches>></span>
</$reveal>
<$reveal default=<<resultCount>> type="nomatch" text="0">
<p>{{$:/language/xp/aggregation/ClickPopup}}</p>
</$reveal>
<div class="twocolumns" style="padding:10px 28px;line-height:1.55;">
<$list filter=<<aggrFilter>> template="$:/templates/popup-caption-view"/>
</div>
</$vars>
</$list>
\end
总体上用tabs和toc代替了ppt,因为ppt时常展示不全就很麻烦。
但我发现条目里有文件夹层级,我先是在太微这边用标签处理了一下,然后也到文件夹层级那里调整了一下,但我感觉可能有些没调整好。