tiddly-gittly / intention-tower-knowledge-graph

ITKG is a knowledge and task management framework for tiddlywiki.
https://tiddly-gittly.github.io/intention-tower-knowledge-graph/
MIT License
4 stars 1 forks source link

更新文档,整理了一下 #21

Closed dongrentianyu closed 1 year ago

dongrentianyu commented 1 year ago

image

总体上用tabs和toc代替了ppt,因为ppt时常展示不全就很麻烦。

但我发现条目里有文件夹层级,我先是在太微这边用标签处理了一下,然后也到文件夹层级那里调整了一下,但我感觉可能有些没调整好。

netlify[bot] commented 1 year ago

Deploy Preview for itkg ready!

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...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site settings.

dongrentianyu commented 1 year ago

好像概念没有放到concept文件夹下。上面的checks不通过不知道什么原因。

linonetwo commented 1 year ago

不通过是因为你没设置token,我也不知道咋搞。

所以现在是PPT还保留着,只不过是把首页换成新的结构了,对吧?

这样有时候别人演示的时候还可以用PPT,有人直接点进来翻看的时候可以看首页这款

dongrentianyu commented 1 year ago

https://github.com/github/docs/issues/14626

这里有提问,但感觉没提出解决办法。

dongrentianyu commented 1 year ago

找了一圈没找到合适的办法。我看有些提到应该要按https://[TOKEN]@github.com[USER]/[REPO]。我发现这是之前乱码的情况,原来里面的乱码就是token,但现在我可能要得重新申请一个token了。因为之前token只出现一个值的那个好像被我删除了。我想了想还是不搞了,万一等下又搞错了。还挺麻烦的。

PPT和文字稿都新建了条目放在index文件下面。这样别人想看文字稿或者要给别人讲用到PPT时就可以点开去查看。

梳理人生意义那块,有一部分ppt内容,我删除了,改用toc目录来实现。点击就看到内容了。

image

类似这样。

dongrentianyu commented 1 year ago

应该能合并吧,如果checks不通过不能合并的话,通知我一下,我再搞一搞这个token。这个token还挺麻烦的,搞半天都不知道怎么搞。我现在推送中文教程的内容,每次更新都会是带上token的,我要删除token然后重新配置才行,所以我现在不敢乱动这个token。

dongrentianyu commented 1 year ago

但我刚刚发现一个问题,就是好像放在usage文件夹里的,用TOC打开,好像就会移到tiddlers文件夹里去。当时确实没想到这个问题。

dongrentianyu commented 1 year ago

应该要先合并这个,我修改aggregation插件内容,才能提交pr吧?不然下次还是会带上这些修改的吧?不确定。

dongrentianyu commented 1 year ago

我忽然发现编辑文档应该用vscode编辑,不能用太记打开。不然太记老是会把文档移到其他文件夹里去。而且更重要的是看不到插件的内容了。因为插件内容放在外面去了。第一次提交时好像是在vscode里修改编辑的,所以就没问题。

linonetwo commented 1 year ago

对的,我一般是编辑完再手动挪回去。想自动挪可以写filesystempath,我懒得写哈哈

你都挪好了吗,可以合并了吗?

PPT版应该还是可以正常演示的对吧

linonetwo commented 1 year ago

你可以基于我的仓库master分支重新开个分支,这样就不会带上这个分支的内容了

dongrentianyu commented 1 year ago

可以合并,但ppt内容只有概念和设计思路。其他条目没做ppt版本。其实我一直觉得在太微里用ppt不够吸引人。直接用库克马那种形式才有小册子的感觉。而且ppt老是显示内容不全。

dongrentianyu commented 1 year ago

不能直接在太记里编辑还是有一点麻烦的。因为不看界面编辑,总感觉把握不准的样子。可能是还不习惯。

linonetwo commented 1 year ago

主要是说之前有几个PPT,现在就有几个就行,没删就好,也没删里面的页面就好

你这个现在有冲突了,你得先合并一下主分支

dongrentianyu commented 1 year ago

现在能合并吗?虽然checks并没有完全通过。

dongrentianyu commented 1 year ago

这个token真麻烦。先这样吧,等明天起来再看看是什么问题,不然真要崩溃了。

linonetwo commented 1 year ago

那个应该是github Actions设置的问题

https://github.com/actions/deploy-pages/issues/184

linonetwo commented 1 year ago

你看看demo网站再检测一下有没有别的问题

dongrentianyu commented 1 year ago

好像xp那个也一起带上去了。这样也好,不用再提交pr了。

image

image

但问题itonnote主题插件影响了旁边的排序按钮。不过我切换到其他主题也不能正常显示出来,比如图二的。所以这个问题还有待研究一下。

dongrentianyu commented 1 year ago

现在还有问题,我看还需要修复一下。因为时常会显示不出来。或者排序按钮没有。但我还找不到问题是什么。

dongrentianyu commented 1 year ago

找半天没找到问题。f12检查发现好像是样式隐藏了按钮,但没找到什么样式隐藏的。

dongrentianyu commented 1 year ago

找到问题了。问题挺复杂。

第一是安装插件时,不会附带安装其他插件。像xp的那个aggregation插件和日历插件好像都可能会没有附带安装上。这个不知道是为什么。

第二是当时xp作者给我的是一个json文件。我拖到wiki里就是三个条目。后面我是把这三个条目的tid文件导出放到插件里的。但我发现这样好像不起作用。还需要重新导入一遍json文件才行,不然按钮显示不了。所以是不是要删除这三个文件,直接附带一个json文件?

第三个问题就是itonnote主题插件会影响。去除排序按钮。因为这些按钮的class样式都是”tc-search“。

linonetwo commented 1 year ago

插件目前好像只会安装一个层级,不会无限层级安装,这个可以去核心反应一下bug,我其实一直知道这个,但还没去提issue,你要不去提一个看看,练练英文?

例子就是安装itkg插件的时候依赖了很多插件,他们还有依赖的插件就不会被装上。

linonetwo commented 1 year ago

理论上只要这几个条目正常加载,他们就会生效啊,太威力,你只要是笔记,而且带有正确的标签就会生效,可以看看他们是不是正确被加载了。

还有如果主题有问题的话,可以去改改那个主题。反正都适配一下挺好的,其实主题有很多地方要改的,比如说之前介绍那个挺好看的,krystal横向的布局主题,其实有空我也要去适配一下。

dongrentianyu commented 1 year ago

但现在有一个问题是,我刚试着修复了一下,但我需要提交上来才能看到修复有没有成功。我不能在本地看到我修复后的效果。因为没成功我就不提交了。

linonetwo commented 1 year ago

不用啊,你本地先 pnpm i 然后 pnpm dev

dongrentianyu commented 1 year ago

应该是没有生效。但我不明白为什么没有生效。

linonetwo commented 1 year ago

反正你开个新分支,新pr吧。

没生效的问题,实在不行就直接传json也无所谓。我觉得可能是有些元信息在你导出的时候丢失了但其实原来的这个json里面有

dongrentianyu commented 1 year ago

不用啊,你本地先 pnpm i 然后 pnpm dev

在命令行执行吗?执行”pnpm i“没有效果。

dongrentianyu commented 1 year ago

image

image

非常迷惑,我把xp插件放进去,把json文件也放进去了。这下直接不生效了。

dongrentianyu commented 1 year ago

image

image

可当我把那个json文件拖进去时一下子就生效了。没想明白是因为什么。

dongrentianyu commented 1 year ago

我大概是排查不出问题了。就不管是怎样处理,只要把json文件拖进去才能实现。直接放到插件里面都实现不了。或者直接把这个json文件放到demo里去,那也可以实现。或者把tid条目放到demo文件夹里去都可以实现。但唯独放到src文件夹里实现不了。我猜测这是因为插件最终会打包成一个json文件,但不明白的是为什么用tid条目放到src文件里不行。

linonetwo commented 1 year ago

首先你要装PnpM和node

json的问题,你把json和弄出来的tid都贴上来看看,就放代码块里,我们一眼可能就看出问题了。

dongrentianyu commented 1 year ago

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 &#32;\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>&#32;\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>&#32;\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&#32;\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>&#32;\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>&#32;\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>&emsp;<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>&emsp;<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 &#32; <<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>&#32;\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>&#32;\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 &#32; <<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 &#32; <<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 &#32; <<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\">&emsp;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&emsp;\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>] }}}/>&nbsp;&darr;\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>] }}}/>&nbsp;&uarr;\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&emsp;<$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&emsp;<$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&emsp;<$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&nbsp;<$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">&emsp;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">
&emsp;
<$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>] }}}/>&nbsp;&darr;
<$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>] }}}/>&nbsp;&uarr;
<$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">
&emsp;<$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]]">
&emsp;<$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">
&emsp;<$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[]] }}}>
&nbsp;<$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 &#32;
<$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>&#32;
<$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>&#32;
<$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>>
/>
&#32;
<$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>&#32;
<$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>&#32;
<$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>&emsp;<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>&emsp;<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 &#32; <<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>&#32;
<$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>&#32;
<$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 &#32; <<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 &#32; <<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 &#32; <<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