LincZero / obsidian-any-block

A Obsidian Plugin. You can flexibility to create a 'Block' by some means. It also provides some useful features, like `list to table`.
GNU Affero General Public License v3.0
125 stars 7 forks source link

[Extra] 建议:相同一大类功能的选择器收归到同一个模块接口,以免用户难于选择。 #13

Open Linzeal opened 1 year ago

Linzeal commented 1 year ago

1. 同大类的选择器收归到同一个模块接口,有助于用户使用

目前各选择器表现的很杂乱,如[list2table]、[2mdtable]、[2lt]、[2ut]、[2mdut]、[2tableT],其实就只是列表转表格这一功能的不同样式表现,但看上去就有六种功能之多,用户难以选择。

建议:相同一大类功能的选择器收归到同一个模块接口,同一大类下的各特殊样式用参数来表示。当用户参数输入不正确时调用默认参数来渲染。日后要增加新的样式时也无需新增加一个选择器,多一种参数即可。

像上面这些列表转表格都可全部收归为[2table],或用户使用更简洁的[2tb],然后通过参数来指定特殊样式,当参数不正确时调用默认接口来渲染,例如:

列表转表格 模块接口 用户默认入口 转树表格 转MD表格 转树形可折叠表格 ut方法 mdut方法 转置
当前 [list2table] [list2table] [2mdtable] [2lt] [2ut] [2mdut] [2tableT]
建议 [2table] [2tb]、[2tb()] [2tb]、[2tb()] [2tb(md)] [2tb(lt)] [2tb(ut)] [2tb(mdut)] [2tb(T)]

再如列表转各类图表,也可收归为一个接口:[2graph]:

列表转图 模块接口 用户默认入口 转流程图 转脑图
当前 [2mermaid] [2mermaid] [2mindmap]
建议 [2graph] [2gr]、[2gr()] [2gr(flow)] [2gr(mindmap)]

等等诸类。

2. 接口统一后的关键词有助于识别是否是选择器,有助于排除意外的错误渲染

接口统一之后,选择器就有了几个固定的关键词。这个也有助于识别是否是选择器,凡是[ ]里与关键词不匹配的,统统不是选择器。可以排除很多意外的错误渲染。

2

https://github.com/LincZero/obsidian-any-block/issues/2#issuecomment-1426576646

LincZero commented 1 year ago

列表转表格的种类

其实就三种,看正则

md标识的问题见 #12,等解决完 #12 我就将他弄掉。 T标识也是很有用的(其实功能没做全),不仅能转置表格、还能将流程图从左到右变为从上到下、能将标签tab从顶部变为左侧、能将overflow从上下溢出滚动变为左右溢出滚动

识别是否选择器

识别是否选择器,我原来的设计中有另一个方案解决

关于头部标识的使用,如果太复杂,不利于用户输入。如果太简单,则特征化程度低,容易误选,而且用户想一键清除所有头部样式时也会变得困难。

我倾向于输入简单的方案。 但可能会有人比较倾向于稳定、容易标识、导出时更容易去除头部标识的方案,相对会损失一点输入便捷度。

在我原构想中,是加入一个可选的空处理器ab来解决,这个处理器不会做任何事情,仅仅用于标识。 [ab|list2table][list2table],这个 ab 你加不加都行,如果加了就方便你自己筛选。 同时设置面板提供一个 严格模式 的选项,开启后如果头部标识不为 ab| 开头,则不选择……

自己还有很多做起来麻烦得一批的设计,issue也一堆……太累了,赶紧毁灭吧

你的方案

全局方案的话,我感觉有点长,其实如果是我自用的话,不考虑给你们用的话,我甚至想直接 l2t l2u l2lt。

但是一方面,这需要给不使用这个插件的人看得懂源码表达的是什么意思。所以头部信息要简明,不要太参数化(这又得考虑简明 和 简短及便于输入 之间的平衡,比如到底是 list2listtable 还是 list2lt,(我打算在下版中,修改为两种方式均能生效))

第二方面,无论是我想改成(l2t l2u l2lt)还是你想弄得比较长、参数化一点,虽然都可以通过自定义处理器解决,但还是需要一个比较适合大众综合使用的官方方案。感觉直接用一个独立的单词比较合适

Linzeal commented 1 year ago

1. 选择器的编排统一比是否输入简短更重要

在我原构想中,是加入一个可选的空处理器ab来解决,这个处理器不会做任何事情,仅仅用于标识。
[ab|list2table] 同 [list2table],这个 ab 你加不加都行,如果加了就方便你自己筛选。
同时设置面板提供一个 严格模式 的选项,开启后如果头部标识不为 ab| 开头,则不选择……

你这个可选的空处理器ab+严格模式选项是个不错的办法。

至于头部信息,我认为信息的明确和统一要比输入简短更为重要。一篇MD文件写下来,写几个AB选择器的打字输入量那几乎就可以忽略不计了。因此头部信息的格式编排更侧重于要让用户容易记住,不会混淆。比如,当需要列表要转表格,他能非常容易想起来是l2t。而不是要去AB官网或参考文件去看,是l2t,还是l2ut,还是l2lt。

现在AB插件刚起步,以后AB的API接口成熟了,谁知道日后它会发展出多少种转化渲染类型,现在只是列表转表格、列表转图表、列表转时间线、列表转标签栏等几种,难道以后就不会有列表、表格、图表、时间线、标签栏之间两两相互转化渲染吗,以及其他开发出来的奇奇怪怪越来越多的类型?

因此,你在定处理器时就要分类好,并在介绍里,尤其是FOR DEVELOPERS里就要分门别类,以免最终用户混乱。同一个转换类型,就要让选择器的编排及关键词看上去像同一个类型的,用户才容易记,不会乱。

独立工具类处理器:

转化类处理器(标记[X]为已实现): 两两轉化 关键词 列表 表格 图表 标签栏 时间线 代码块 引用
转列表 list
转表格 table [X]
转图表 graph [X]
转标签栏 tab [X]
转时间线 tline [X]
转代码块 code [X] [X]
转引用 quote [X] [X]

所以需要在AB没太多转化类型之前就给选择器定好格式化的写法,以便日后扩展以及API扩展。如: [源类型+2+转化类型+样式参数]

从用户角度,源类型往往需要省略掉,更应当由AB插件本身根据当前选择器的上下文来判断源类型,而不应该交由用户来定当前源类型是什么。这样变成: [2+转化类型+样式参数] (其实应该认为大部分Obsidian用户根本不清楚当前要操作的块是什么源类型,就算知道了,那在AB选择器里列表应该用什么字母表示,表格又要怎么表示?用户很头疼,根本不想知道。用户只想知道要转化的类型要怎么写。)

至于样式参数是否要像函数()参数那样的写法,就随便了,并不重要,反正只是你代码的处理方法不同,关键是看用户用哪种写的顺,用的顺。比如,列表转表格的可折叠样式,可以像2t(l)这样的参数化写法,你也可以直接去掉()用2tl这个写法,或加用-来方便辨识2t-l,等等,关键是2+转化类型要给用户固定体现出来,让用户易记不混淆,如下面这些写法都行:

2t开头 2t、2t(u)、2t(l) 个人觉得函数的这种()参数的写法最好,你代码好处理,用户更看的清楚明白,
没有什么特殊转化样式就想简单转表格的就简单写个2t
要特殊样式比如可折叠的就写2t(l)
若你实现了默认参数渲染,比如AB新版把2t(l)统一改2t(fold)了,那用户旧的2t(l)也能按默认的2t来渲染成简单的表格
2t开头 2t、2tu、2tl 这个与你现在的编排方案l2t、l2ut、l2lt很像,就是前后字母顺序改变了一下,使之有一个同样的开头,更统一,更容易被用户理解和记住,
2t开头 2t、2t-u、2t-l

2. 更好的办法是用户只需记住最简单的[2+转化类型],然后点开右上角的转换按钮去挑选想要的样式并设为默认

其实,让用户记样式参数也不是好办法。源类型和样式参数?他们不喜欢去记!这两样都应当交给AB插件代码本身去处理。用户只需记住简单的[2+转化类型],渲染后用户点开在右上角的转换按钮,按分类缩进列表弹出所有可转化渲染的样式,让用户可以切换挑选对比,当切换到某种样式觉得适合,就点该样式条目的勾选等类似的操作来设为默认,并由AB插件改写当前选择器变成[2+转化类型+样式参数]。这样,用户下次再次打开此MD文档,这个改写后的选择器[2+转化类型+样式参数]就能直接为用户渲染成想要的样式了。

所以,用户最喜欢的就是这个最简单的[2+转化类型]了,然后去右上角的转换按钮里去对比挑选他们想要的样式然后设为默认就行。

而懂代码的用户,他自然可以直接完整写[2+转化类型+样式参数]一步到位即可。

3. 统一编排后方便用默认样式来渲染,增加兼容性,减少AB插件更新换代的代价

这一套格式化下来,其实就是参数化,无非就是看用不用让用户写括号。不论你用何种编排方案,这些关键词一旦定下,用户开始使用后,后面就不好改来改去的了,不然新版AB不支持旧的处理器,用户以前所有操作过的文件就全部失效要全部重弄了。基于这一点,我前面有个建议:当用户参数输入不正确时调用默认参数来渲染。日后要增加新的样式时也无需新增加一个选择器,多一种参数即可。 若选择器编排统一了,就比如AB新版l2tu要改为l2tx了,那用户的旧文件的l2tu还能通过l2t来默认渲染。就像scroll处理器,没参数就按默认的460px参数来滚动。反之,若没统一,如l2ut要改l2xt了,那用户的旧文件的l2ut就只能失去渲染,用户只能全库查找替换旧选择器了。

4. 转置的T标识更适合独立出来让用户知道这是一个独立处理器T

T标识也是很有用的(其实功能没做全),不仅能转置表格、还能将流程图从左到右变为从上到下、能将标签tab从顶部变为左侧、能将overflow从上下溢出滚动变为左右溢出滚动

至于转置的T标识,我认为不要和l2t放一起好。你对T的规划,更适合像addClass、fold、scroll这样做为独立的处理器,因此要让用户知道这是一个独立处理器T。所以list2tableT应当变为 l2t|T,T独立出来使用。