Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

进一步精简面包屑,去除无关、重复的内容 #448

Closed
EndlessXYZ opened this issue May 22, 2021 · 11 comments
Closed

进一步精简面包屑,去除无关、重复的内容 #448

EndlessXYZ opened this issue May 22, 2021 · 11 comments
Assignees

Comments

@EndlessXYZ
Copy link

EndlessXYZ commented May 22, 2021

看下面的例子:a9目前的面包屑的效果很不好

image.png

image.png

在反链悬浮窗里面要是看到这种面包屑,可以说是没有多大意义,对于展现上下文这一目标来说效果非常糟糕。

是因为层级太深了吗?并不是,如果改为标题,那不仅简短而且所有内容都得到了显示。

image.png

image.png

根本原因其实是面包屑里面有大量无关的或者重复的内容

image.png

当列表的内容稍微多一点,更是夸张(目测面包屑的长度随列表的深度指数增长)

现在的精简方法是对每个块都进行省略,不分轻重缓急,这是治标不治本的,只有从源头下手,去除面包屑里无关、重复的内容,才可能真正精简,留下真正有价值的信息。

image.png

改进方案:

  1. 任何一个块在面包屑里显示的文本优先使用其命名,没有命名就用别名,最后再用内容
  2. 所有的超级块、列表块、引述块都不显示文本,除非有命名、别名。(本来就只是容器,都是不包含信息的。另外虽然超级块可能用来给逻辑相关的内容分组,包含一定信息,但此时一般会命名而且引用的时候超级块就是被引用的块,在面包屑中也是在最后的)
  3. 列表项块在面包屑里显示的文本为第一个子块的内容(然后再看这个子块是不是唯一子块,若不是,在文本后面加省略号...
  4. 本块所显示文本为“本块”两字,或者直接不显示本块

本方案适用于大多数情况 ,对于少数特殊情况效果也不好,但是世界上没有十全十美的方案不是吗?而且总比现在几乎每个块都被省略要好吧。

再补充其他人的方案(#343

lfsjack:如果某个块的内容过长,可以只显示前几个字。如果路径过长,可以只显示最前面两级和最后面两级的内容。用省略号代表隐藏的内容,指向或点击时显示。另外,也可以在右侧加个下拉按钮,点击查看面包屑的完整路径名。

(补充:完整路径名里面超级块、列表块、引述块仍然都不显示文本)

@zhangzz66
Copy link

列表项块和列表块只显示图标就好了,这两个就没必要显示上下文了

@EndlessXYZ
Copy link
Author

列表项块和列表块只显示图标就好了,这两个就没必要显示上下文了

列表项块还是显示文本比较好吧,不然列表的面包屑上就只剩段落块了

@88250 88250 self-assigned this May 22, 2021
@zhangzz66
Copy link

列表项块和列表块只显示图标就好了,这两个就没必要显示上下文了

列表项块还是显示文本比较好吧,不然列表的面包屑上就只剩段落块了

是的,忘了列表嵌套的情况。那就只显示列表项块去除下级列表块之后的文本呢?列表块只显示图标就行了。因为列表项块的内容和段落块(或其它非列表块)是一样的。

@EndlessXYZ
Copy link
Author

EndlessXYZ commented May 23, 2021

列表项块和列表块只显示图标就好了,这两个就没必要显示上下文了

列表项块还是显示文本比较好吧,不然列表的面包屑上就只剩段落块了

是的,忘了列表嵌套的情况。那就只显示列表项块去除下级列表块之后的文本呢?列表块只显示图标就行了。因为列表项块的内容和段落块(或其它非列表块)是一样的。

列表项块用去除下级列表块之后的文本,或者用第一个子块的内容做文本,感觉前者显示更完整,后者更容易实现,看开发者选择了

@EndlessXYZ
Copy link
Author

列表项块用去除下级列表块之后的文本,或者用第一个子块的内容做文本,感觉前者显示更完整,后者更容易实现,看开发者选择了

去除下级列表块之后的文本显示更完整,可以用在完整路径里面(如果加了这个功能的话)
用第一个子块的内容做文本,比较精简,可以用在默认面包屑里面。而且用第一个子块的内容做文本还可以加一条规则完善一下:如果列表项块的下一级是第一个子块,则列表项块不显示文本,应对以下两种情形:
image

@Creling
Copy link

Creling commented May 23, 2021

我觉得没有必要设置过于复杂的“精简”规则 —— 规则越复杂,bug越多。只要限制遍历层级就可以了。

目前的面包屑逻辑上相当于一个遍历所有层级的深度优先遍历。这显然是没有必要的。一般的论文写作限制标题深度为3级,我觉得思源可以参考这个设定,将遍历深度设置为3就好。

比如对于@EndlessErrors的这幅图:

当遍历深度为3时,显示的节点是:

水工建筑物的特点 -> 工作条件复杂 -> 水工建筑物受到的作用 -> 地形、地质条件复杂。

可读性大大提升。

@EndlessXYZ
Copy link
Author

思源的列表大纲的结构很复杂(有列表项和列表块,中间还可能有标题),而且还有重复包含关系(本帖的主题),遍历深度设置为3,最后的效果如下:
image
我们是需要限制遍历深度的(比如只显示最前面两级和最后面两级的内容),但是如果不把重复包含关系解决掉,那仍然不行。精简和限制遍历层级都需要,就像人的两条腿一样缺一不可。

不过"如果列表项块的下一级是第一个子块,则列表项块不显示文本"这条规则确实有点复杂了。

@EndlessXYZ
Copy link
Author

至于这套精简规则会不会有问题(出BUG我觉得不至于,出问题指的是内容被精简得太厉害或者仍然精简不足有冗余),不是还有beta阶段吗?让用户试试水就行了。思源的“列表大纲”是史无前例的尝试,只能摸着石头过河。

@langzhou
Copy link

看了一下wf 和幕布,觉得它们面包屑有几个原则可以借鉴:

  1. 优先显示文档开头和临近的上下文详情:当层级过深时,中间内容可以忽略(以...显示,鼠标悬浮/点击后可查看详细)。这是因为与聚焦内容临近的上下文是作者最关注的,而相对较远的中间内容则没那么重要;
  2. 动态计算面包屑样式:当用户 zoom out 后由于层级变浅,可以考虑放出更多内容,即展开上文...里面的内容。目前思源v1.2版本好像并不会动态调整面包屑样式

@88250
Copy link
Member

88250 commented May 27, 2021

感谢各位讨论,在 v1.2.0 以后进行优化,方向大致按照 @langzhou 所述。

@88250
Copy link
Member

88250 commented Jul 1, 2021

siyuan-note/siyuan#2278 中改进。

@88250 88250 removed the 1.2.0 以后 label Jul 1, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants