太记本地化实现包含维基
-
{ "description": "Basic client-server edition", "plugins": [], "themes": [], "languages": [], "includeWikis": [ { "path": "../Self-Organ", "read-only": true }, { "path": "../Listless", "read-only": true } ], "build": { "index": [ "--rendertiddler", "$:/core/save/all", "index.html", "text/plain" ], "externalimages": [ "--setfield", "[is[binary]] [type[application/msword]]", "_canonical_uri", "$:/core/templates/canonical-uri-external-image", "text/plain", "--setfield", "[is[binary]] [type[application/msword]]", "text", "", "text/plain", "--rendertiddler", "$:/core/save/all-external-js", "index.html", "text/plain" ], "readonlyexternalimages": [ "--setfield", "[is[binary]] [type[application/msword]]", "_canonical_uri", "$:/core/templates/canonical-uri-external-image", "text/plain", "--setfield", "[is[binary]] [type[application/msword]] [type[application/pdf]] [[$:/plugins/tiddlywiki/filesystem]] [[$:/plugins/tiddlywiki/tiddlyweb]] [[$:/plugins/twcloud/tiddlyweb-sse]] [[$:/plugins/linonetwo/source-control-management]] [[$:/plugins/linonetwo/super-tag]] [[$:/plugins/linonetwo/flow-chart]] [[$:/plugins/linonetwo/slate-write]] [[$:/plugins/linonetwo/smart-field]] [[$:/plugins/linonetwo/markdown-transformer]] [[$:/plugins/gt6796c/mermaid-tw5]] [[$:/plugins/linonetwo/tw-mobile-sync]] [[$:/plugins/linonetwo/zx-script]] [[$:/plugins/tiddlywiki/highlight]] [prefix[$:/plugins/tiddlywiki/codemirror]] [[$:/plugins/Gk0Wk/TW5-CodeMirror-Enhanced]] [[$:/plugins/flibbles/relink]] [[$:/plugins/kookma/commander]] [[$:/plugins/kookma/section]] [[$:/plugins/linonetwo/calendar]] [[$:/plugins/linonetwo/pinyin-fuzzy-search]]", "text", "", "text/plain", "--rendertiddler", "$:/core/save/all-external-js", "index.html", "text/plain" ], "externaljs": [ "--rendertiddler", "$:/core/templates/tiddlywiki5.js", "tiddlywiki5.js", "text/plain" ] }, "config": { "retain-original-tiddler-path": true } }
Great!!!
我想到了用途,就是可以一个wiki只存放自定义配置,而其他wiki则存放通常意义上交互产生的数据。
这里唯一要说明的是,
includeWikis
参数必须放在build
参数前面,不然就启动不了,会报错。 -
简单总结一下,可以使用includeWiki来进行导入外部维基。且推荐设置为只读模式,如果只读模式为FALSE,当前wiki可以直接修改或删除外部维基的条目,且不会有任何提示,这是很可怕的。
导入外部维基只能全部导入所有条目,不支持筛选器排除或者有选择地导入。
当前维基与外部维基和插件条目存在一个优先级问题。
以
$:/SiteTitle
为例,当前维基中存在该条目时,会显示当前维基的值。如果没有则会去查找导入维基是否有该条目,如果有则显示导入维基的值。如果有两个及以上的外部维基时,则取最后一个外部维基的值。当这个条目被删除时,则显示为插件条目的值。换言之,存在多个同名的条目,首先肯定是展示当前维基的。如果没有才是外部维基的,且只会有一个。并不是说删除了一个还可以显示上一个外部维基的。
在只读模式下,如果编辑外部维基的条目,会立即在当前维基创建一个条目。同样在只读模式下,如果新建一个条目,条目名中与外部维基已有的条目冲突,那么也会显示出来。如下图。
包含维基的用法
在太记和TiddlyWiki-App中都支持包含维基,一般的node.js启动TiddlyWiki也是支持的。
通过包含维基,我们可以新建一个自已日常使用的模板wiki,然后在里面维护样式,自己写的宏,插件版本和修改了的插件条目。然后其他wiki就只需要导入这个wiki就可以了。实现一个wiki,全体共用。
当其他wiki需要有新功能时,这个时候就需要有一个测试wiki,里面有测试相关的条目。当测试通过时,则把相应的文件放到模板wiki中。然后把测试wiki的条目删除或者用代码块封装起来。当然不管也可以,影响不大。
包含维基更新了,其他维基要使用更新后的内容,需要重启维基。注意是重启维基而不是刷新,刷新没有效果,背后需要重新执行node.js命令。类似于下面的效果。
理论上测试,要发布到github上的博客维基也是可以这样处理的。但具体还是等后面再补充吧。
另一个是,我猜测这种方式有助于改进性能。但具体未知。也许还是只有等MWS插件发布后才能真正改进吧,毕竟那个时候是用SQL数据库了。
理论上也可以实现文件管理,但我没有测试,因为我很少把文件放到TiddlyWiki里。
-
最后还是有些感慨的,其实2023年3月份的时候就知道这个东西了,当时还制作了一个B站视频,但那里只是用nodejs测试了一下,并没有真正想到可以在太记上使用。其实我的笔记中也写了,可以在太记中本地化使用。但其实不是本地化使用,而是所有数据都可以同步到github上,完全没问题的。
换言之,当时我离真正在太记中使用的想法只有一步,可那一步没有踏出去。如果不是今天偶然翻笔记库,翻到了这一条笔记,再尝试了一下且成功后,不然是怎么也不会再往前走一步了,那个时候就真的需要等MWS插件才来解决这个问题了。
最大的感慨还是TiddlyWiki超出想象,但因为没有足够多的人讨论,不然应该很早就开发出这种用法了。还是希望TiddlyWiki的圈子越大越好。
-
最好的解决办法是提供一个接口,可以直接判断出某一个条目来自于哪一个外部维基。但目前没有这个功能,估计只能等MWS插件来实现了。
因而目前的解决办法是对外部维基设置一个根条目,然后通过模板化语法去标记。如下面图片中,会对以
Forge
为根条目下的所有条目有一个标记,表示来自Forge。同时点开编辑时也会有一个提示。如果后期要公开成仓库的话,就需要设置一下里面的链接。目前没有这个打算就不管了。这里其实还有一个问题,TiddlyWiki有一个更好的机制,可以使用类似级联的操作方式给条目设置背景颜色。然后我发现虽然设置了,但css的优先级不是最高的,被其他条目覆盖了。而且这方面的示例又比较少,就没用。感觉还是应该再调整一下css。
$:/tags/ClassFilters/TiddlerTemplate