确实,我把list想得太抽象了。
后来我发现,即使我要判断,但因为我的节点丸和根目录是放在一起的,所以实际上我只要判断节点丸就可以了。并不需要判断那么多根目录。因为节点丸也足矣构成上下文内容。
Forum wide moderators
确实,我把list想得太抽象了。
后来我发现,即使我要判断,但因为我的节点丸和根目录是放在一起的,所以实际上我只要判断节点丸就可以了。并不需要判断那么多根目录。因为节点丸也足矣构成上下文内容。
目前还不算卡,用起来的时候也影响不大。
我把上面根目录的筛选器改成了用list微件的形式。
<$list filter="[tag[wikis]]" variable="root-name">
<$transclude $variable="context-root" tiddler=<<showTiddler>> name=<<root-name>> tid-name=<<root-name>> use-true="true" limit="15" />
</$list>
感觉能增加点筛选使用效率。
但要做条件判断就不好处理了。因为孤立条目只能是无硬式链接条目,但有些有反向嵌入的也应该要排查出来。
我尝试了一下,目前还是解决不了,就先放着了。
总结来说,就是TiddlyWiki的底层机制是怎样的。怎么处理复杂的渲染,刷新,状态管理。能承受的上限是什么。
我最近折腾的小东西,感觉很吃渲染,虽然没有明显的卡顿,但能感觉到是卡了一下的。当然我写的wikitext肯定也不够好。
没有往英文论坛那边发,是感觉这个东西还没说清楚。可能下次有机会我演示一下就好了。
最近我做了一些小东西,其中一个工具是,在条目页面上有一个按钮,点开后会显示一个弹窗,弹窗里有一些关于这个条目的内容。
其中一个是上下文的内容,包括两个方面,一个方面是此条目所属的根目录,并构建一个面包屑。一个方面是关于此条目下面的子条目,链接和嵌入等内容。如下图所示。
此条目的根目录在WENAI,包含一个链接,一个标签,一个嵌入内容。
因为之前使用TiddlyWiki是好几个wiki,所以现在我的根目录有好几个,并不只有一个。
ok,现在问题来了,如果我建立一个条目,这个条目不存在那几个根目录之下,且没有链接,也没有标签,也没有嵌入。那么这个条件判断应该怎样写呢?
我知道其实这个问题并没有太大的实际用处,因为正常来说,一个什么上下文信息都不包含的条目没有查看的必要。
但因为旁边我还有其他功能,比如可以快速修改标签或字段的功能,所以我才会想着当打开一个条目,没有任何上下文时,展示出一段文字。(当然更好的做法是直接切换到其他页面去,但同样我也不知道怎么做。)
如果我要解决这个问题,也同样是从上述两方面入手。
面包屑我是使用in-Tag-tree-of,包装的宏代码里有下面这个初始判断。即判断当前条目是否属于某个给定的根目录。
<$list filter="[[$tiddler$]!prefix[$:/]in-tagtree-of:inclusive[$name$]]">
但因为我有好几个根目录,所以这个list判断应该要写好几个,且需要嵌套,因为可能需要一些循环方式,在TiddlyWiki里写循环就是用list,可惜在这一步我就不会了。
第二个方面则是关于此条目的内容,这里我是用自己之前修改kookma的宏,所构建的节点丸。
$:/plugins/mabuqian/gumo-customisation/node-explorer-colorful
\import $:/plugins/mabuqian/gumo-customisation/node-explorer
\define subtiddler-pattern() $(currentTiddler)$
\define type-class() badge p-1 badge-$(type)$
<$list filter="[all[current]get[node-explorer]!match[hide]] [all[current]!has[node-explorer]] :and[!is[system]]" variable=null>
<$list filter=<<mainFilter>> variable="currentRecord">
<$let type={{{
[all[current]links[]match<currentRecord>then[info text-white]]
[all[current]backlinks[]match<currentRecord>then[danger text-white]]
[all[current]tagging[]match<currentRecord>then[warning text-dark]]
[all[current]tags[]match<currentRecord>then[success text-white]]
[<currentRecord>prefix<subtiddler-pattern>then[primary text-white]]
:else[<currentRecord>search:text<currentTiddler>then[secondary text-white]else[dark text-white]]
}}} >
<$link to=<<currentRecord>> class=<<type-class>> />
</$let>
</$list>
</$list>
可以从代码中看到,里面做了很多的判断条件。
那如何判断一个条目,没有标签也没有链接也没有其他类似的项目呢?难道又把上面的代码都改一遍?
更何况,这不是一个页面按钮,而是经常会用的按钮。换言之,我会经常在新建条目时,点开这个按钮。
所以每当这个条目什么上下文都没有,但上面的筛选器都要跑一遍的时候,我已经能想象到筛选器炸了或者卡了的状况了。
当然我对TiddlyWiki的底层机制不了解,所以也可能存在着更好的方式和解决办法。但一时我也没有想到。
我记得TiddlyWiki的官网好像就是这样做的,文档和开发者文档都是放在一个仓库里,然后构建了好几个网站,想知道这个是怎么处理的。
感觉这种方式会比布局简单好用。不用特意切换,只要用按钮控制就可以了。
css还好,主要是wikitext,写复杂了就看得麻烦了。也因为代码总是修改,并不是那种一下子就写好的,所以才会不好调整。
就平常自己使用时就大概类似这样,直接把样式写在条目里面。因为其他地方一般也用不到。但因为代码经常是从其他地方复制过来的,所以没有一个统一的格式。自己又懒得调整了。
我在trello那边也提了一下,不知道@Sttot 还有没有维护。
经常自定义TiddlyWiki时,就只是在TiddlyWiki里创建和测试。里面有很多代码,有wikitext的,也有html和css的。我习惯是某一个条目使用就直接写在这个条目里面。但感觉实在不够美观,所以如果有这种整齐代码的功能就好了。
【Noteey标签系统 | 高效分类与整理,让你的数据井井有条!】https://www.bilibili.com/video/BV1WdZbY3EXn
比如上面的视频中,noteey这款软件大量使用类似的操作来获得更大的交互空间。
在TiddlyWiki就是使用tm-modal来实现。
我稍微改了改,做了一个侧边栏面板,这个面板会比侧边栏要宽很多,使用体验感觉更好。