siyuan-note / siyuan

A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang.
https://b3log.org/siyuan
GNU Affero General Public License v3.0
18.33k stars 1.36k forks source link

Flashcard support suspend #8832

Open gaoluji opened 1 year ago

gaoluji commented 1 year ago

请求闪卡功能增强,添加卡片管理(如暂停卡片功能)

In what scenarios do you need this feature?

希望添加卡片暂停功能、搁置功能(如anki一样) 闪卡编辑增强,不知是否能和remnote一样,通过添加特殊符号,制成不同卡片(也可参考logseq中的anki插件,制卡逻辑是通过添加标签来生成不同类型卡片(如渐进卡片),或者特殊符号,如::->、:<-、:<->

Describe the optimal solution

不知可以参考logseq以及remnote。 目前思源的功能相当好用,可以实现渐进阅读

Describe the candidate solution

No response

Other information

No response

zxhd863943427 commented 1 year ago

看看闪卡插件,目前支持标记制作挖空,? 制作列表和超级块。

88250 commented 1 year ago

能介绍一下暂停功能和搁置功能的区别吗?

符号制卡考虑通过插件扩展。

hackerhui commented 1 year ago

@gaoluji https://github.com/zxhd863943427/siyuan-plugin-flash-enhance

gaoluji commented 1 year ago

@88250 在anki中,使用卡片时,可以对卡片进行一些额外操作 image 同时,有可以管理这些卡片 image


暂停功能是停止使用这张卡片,而搁置卡片则是暂时不回答这张卡片,明天再进行学习这张卡片

88250 commented 1 year ago

感谢解释,我目前理解是:

卡片管理可以在文档树上右键的闪卡菜单或者左上角全局闪卡菜单中找到,目前只有简单的管理功能,主要是方便集中定位到块,并可以删除闪卡和块的关系。

88250 commented 1 year ago

@L-M-Sherlock 请教一下 “暂停” 如何实现,谢谢。

L-M-Sherlock commented 1 year ago

@L-M-Sherlock 请教一下 “暂停” 如何实现,谢谢。

可以给这张卡片打个标签,然后在安排复习的时候,把这个标签下的卡片过滤掉即可。

88250 commented 1 year ago

@L-M-Sherlock 明白了,感谢感谢。

zxhd863943427 commented 1 year ago

目前闪卡界面能否提供接口,就是传入id列表来生成复习?虽然目前提供的接口也可以实现自定义界面进行复习,不过官方要是能提供会轻松一点。

只是随口一提,这个功能要求并不急切。

88250 commented 1 year ago

@zxhd863943427 正式发布的接口估计一时半会不会有,以内部接口用的话应该没有问题。

gaoluji commented 1 year ago

@zxhd863943427 正式发布的接口估计一时半会不会有,以内部接口用的话应该没有问题。

@88250 搁置并不等于跳过,跳过是当下我不学,但我到后面学(只是单纯学习下一张卡片,但被跳过的卡片还是能继续学的)。而搁置大致类似于这张卡片我明天学

88250 commented 1 year ago

@gaoluji 那和暂停的区别是?

gaoluji commented 1 year ago

@gaoluji 那和暂停的区别是?

@88250 暂停是,这张卡在间隔重复练习时不再出现,但这张被暂停的闪卡仍然是闪卡,并且仍然可以以闪卡被检索到,我也可以将它取消暂停,重新回到间隔重复中

88250 commented 1 year ago

@gaoluji 好的,我明白了,等后面有空再看。

Jiangshuon commented 9 months ago

顶顶,暂停功能蛮重要的,主要用途:近期某些卡片不想复习,或者没必要复习,因此暂停,需要时再恢复

Jiangshuon commented 8 months ago

@88250 大佬,我最近在琢磨通过插件实现闪卡管理中的暂停、标记、筛选功能。 f3f1ed84fa0caee1872beffce090b88

有几个技术问题想请教下大佬:

1、旗标、暂停,其实就是给闪卡打个标签,这个是不是可以通过自定义属性就可以完成?通过调用接口添加自定义属性,然后筛选时判断自定义属性的值

2、我看了下源码,闪卡管理功能中的每页条数(固定20)是写死在后端代码中的,那这样没办法仅凭js实现筛选吧,还需要改下后端代码是吧?感觉有点麻烦呐,以后前端可以传一个sql语句实现筛选过滤吗?还是其他什么方式?

88250 commented 8 months ago

@Jiangshuon 自定义属性是一个思路,前端实现不了,获取到期卡的算法是内核中的 getDeckDueCards 函数实现的。大致思路有两个:

  1. 改底层 riff card 结构,加入标记等扩展字段
  2. 通过块自定义属性,在获取到期卡的时候过滤

    image

这两个方案暂时不确定优劣,待评估。

Jiangshuon commented 8 months ago

好的,也就是说目前无法通过插件实现闪卡管理,明白了,谢谢大佬!

zxhd863943427 commented 8 months ago

好的,也就是说目前无法通过插件实现闪卡管理,明白了,谢谢大佬!

可以看一下闪卡插件,在自定义界面中是可以进行过滤和暂停操作的。其实就是插件自己加入暂停的块属性。

Jiangshuon commented 8 months ago

好的,也就是说目前无法通过插件实现闪卡管理,明白了,谢谢大佬!

可以看一下闪卡插件,在自定义界面中是可以进行过滤和暂停操作的。其实就是插件自己加入暂停的块属性。

大佬没看到有这个功能呀

image

自定义界面是这个吗?

zxhd863943427 commented 8 months ago

打开增强闪卡界面后会增加一个在快捷键中自己设置的项目,用于进入自定义界面。

另外,这个界面没有做样式美化。

Jiangshuon commented 8 months ago

打开增强闪卡界面后会增加一个在快捷键中自己设置的项目,用于进入自定义界面。

另外,这个界面没有做样式美化。

大佬,似乎没法用,没看到有暂停按钮(还要有筛选功能),而且应该也不支持移动端 image

zxhd863943427 commented 8 months ago

mark后应该能在复习完闪卡后会进入到处理模式,这时候能进行暂停和删除操作。

筛选我记错了,确实还没正式上传,还在本地开发中。

移动端目前确实无法使用,未作适配。

Jiangshuon commented 8 months ago

@Jiangshuon 自定义属性是一个思路,前端实现不了,获取到期卡的算法是内核中的 getDeckDueCards 函数实现的。大致思路有两个:

  1. 改底层 riff card 结构,加入标记等扩展字段
  2. 通过块自定义属性,在获取到期卡的时候过滤

image

这两个方案暂时不确定优劣,待评估。

@zxhd863943427 大佬我不太理解,为什么要使用自定义界面做,而不是在官方的闪卡界面的基础上改呢?另外D大说,自定义属性前端无法做,但是闪卡增强插件不就是通过自定义属性做的吗?我搞糊涂了。

zxhd863943427 commented 8 months ago

官方的界面当然由官方来可以做,但是插件没法使用官方的界面做,因为不可能拦截到从后端返回的闪卡列表,进行过滤后在返回给官方的界面。

对于删除操作可以通过读取页面的id获取闪卡再进行删除,但暂停操作是做不了的,只能全程插件自己来。

另外D大说,自定义属性前端无法做,但是闪卡增强插件不就是通过自定义属性做的吗?我搞糊涂了。

这是D大的实现思路不同,他希望尽可能地提高性能,那最好就是后端直接返回过滤掉暂停的闪卡列表,而我的做法是进行了两遍查询,先获取全部到期闪卡,再使用id查询一遍带有暂停属性的闪卡,最后在把它过滤掉。这种做法的性能并不好,只不过在1000个量级以下不是太大问题。

Jiangshuon commented 8 months ago

官方的界面当然由官方来可以做,但是插件没法使用官方的界面做,因为不可能拦截到从后端返回的闪卡列表,进行过滤后在返回给官方的界面。

对于删除操作可以通过读取页面的id获取闪卡再进行删除,但暂停操作是做不了的,只能全程插件自己来。

另外D大说,自定义属性前端无法做,但是闪卡增强插件不就是通过自定义属性做的吗?我搞糊涂了。

这是D大的实现思路不同,他希望尽可能地提高性能,那最好就是后端直接返回过滤掉暂停的闪卡列表,而我的做法是进行了两遍查询,先获取全部到期闪卡,再使用id查询一遍带有暂停属性的闪卡,最后在把它过滤掉。这种做法的性能并不好,只不过在1000个量级以下不是太大问题。

哦哦,谢谢大佬,明白了,我看简单搜索插件是在原搜索界面基础上改的,我以为闪卡界面也行,原来不行吗 image

看来还是需要D大改后端代码

Jiangshuon commented 8 months ago

官方的界面当然由官方来可以做,但是插件没法使用官方的界面做,因为不可能拦截到从后端返回的闪卡列表,进行过滤后在返回给官方的界面。

对于删除操作可以通过读取页面的id获取闪卡再进行删除,但暂停操作是做不了的,只能全程插件自己来。

另外D大说,自定义属性前端无法做,但是闪卡增强插件不就是通过自定义属性做的吗?我搞糊涂了。

这是D大的实现思路不同,他希望尽可能地提高性能,那最好就是后端直接返回过滤掉暂停的闪卡列表,而我的做法是进行了两遍查询,先获取全部到期闪卡,再使用id查询一遍带有暂停属性的闪卡,最后在把它过滤掉。这种做法的性能并不好,只不过在1000个量级以下不是太大问题。

用插件实现太费劲了,还要通过自定义界面的方式,还要单独适配移动端(移动端也能用自定义界面吗?),“暂停”的筛选恢复都很麻烦。自己做的还和官方的有割裂感。感觉还是等D大有空完善更好

luo-chuan commented 7 months ago

关联: https://ld246.com/article/1706262636120 希望闪卡能有以文档为单位的暂停学习的选项

luo-chuan commented 7 months ago

对于暂停的闪卡,应通过颜色进行区分,方便管理。 貌似通过标签也行。

IAliceBobI commented 7 months ago

关联: #10293

88250 commented 6 months ago

@Jiangshuon https://github.com/siyuan-note/siyuan/issues/8832#issuecomment-1870244630 标签和旗标的区别是?

Jiangshuon commented 6 months ago

卧槽,终于要开始了吗,跪谢大佬!稍等,我梳理下

---Original--- From: @.> Date: Sat, Feb 24, 2024 11:07 AM To: @.>; Cc: @.**@.>; Subject: Re: [siyuan-note/siyuan] Flashcard support suspend (Issue #8832)

@Jiangshuon #8832 (comment) 标签和旗标的区别是?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

88250 commented 6 months ago

关联 https://ld246.com/article/1708749321873

88250 commented 6 months ago

https://github.com/siyuan-note/siyuan/issues/8832#issuecomment-1870280996

各位有空的时候可以讨论一下实现方案,是基于块自定义属性还是增加 riff card 字段?

IAliceBobI commented 6 months ago

要附加css效果,还是得有块属性

88250 commented 6 months ago

@IAliceBobI 有道理,感谢反馈。

zxhd863943427 commented 6 months ago

这涉及到单块制多卡打算怎么实现。如果暂停放在块属性的话,之后单块的不同卡该怎么暂停就会麻烦一点,或者现在就设计好。

Jiangshuon commented 6 months ago

这涉及到单块制多卡打算怎么实现。如果暂停放在块属性的话,之后单块的不同卡该怎么暂停就会麻烦一点,或者现在就设计好。

而且如果放在块属性里面,删除闪卡的代码实现也要考虑闪卡相关的块属性吧,应该不能留着吧,这样是不是逻辑有点复杂了

Jiangshuon commented 6 months ago

给暂停添加css效果的话,作用可能是在闪卡管理界面给暂停卡片做一个视觉上的区分吧,除此之外好像没有其他作用了。不过感觉视觉上有所区分也蛮重要的

88250 commented 6 months ago

@zxhd863943427 好像有道理……一个块如果制作多张卡,那么每张卡都可以独立设置暂停,这时候块属性可能不够用,因为是一对多的情况。

Jiangshuon commented 6 months ago

另外我突然想到,闪卡重置目前的实现是和闪卡删除绑定的。如果闪卡相关的都用块属性来做的话,闪卡重置后岂不是都没了。但是闪卡重置的目的只是重置学习进度而已,其他的不想变呀。。。

其实关于闪卡重置,我以为闪卡有个日期字段,重置就是将其改为今天就行。。

Jiangshuon commented 6 months ago

@88250 大佬我想问下,custom-riff-decks这个属性是干嘛用的,表示被制作成闪卡的块吗?可我sql查了下感觉数量对不上

luo-chuan commented 6 months ago

@zxhd863943427 好像有道理……一个块如果制作多张卡,那么每张卡都可以独立设置暂停,这时候块属性可能不够用,因为是一对多的情况。

不用把逻辑做这么复杂,要暂停就整个块一起暂停,整复杂了管理起来也心累。 (似乎这样不太妥,看楼下的讨论)

88250 commented 6 months ago

@88250 大佬我想问下,custom-riff-decks这个属性是干嘛用的,表示被制作成闪卡的块吗?可我sql查了下感觉数量对不上

是的,这个属性是块关联的卡包。

zxhd863943427 commented 6 months ago

不用把逻辑做这么复杂,要暂停就整个块一起暂停,整复杂了管理起来也心累。

这个算是个包容关系吧,做了单卡暂停做单块暂停不难,反过来就麻烦了。

luo-chuan commented 6 months ago

@zxhd863943427 好像有道理……一个块如果制作多张卡,那么每张卡都可以独立设置暂停,这时候块属性可能不够用,因为是一对多的情况。

D大,我又思考了一下,好像真得考虑到同一块内不同卡片独立设置。原因是为未来的双向卡片做预留。 先看我提出的实现双向卡片的方案: https://github.com/siyuan-note/siyuan/issues/7417#issuecomment-1913480518 https://ld246.com/article/1706425139441 注意这段文字:

正面到背面 为 ① 号卡片,背面到正面 为 ② 号卡片,无翻面 为 ③ 号卡片。 当 arrow 取值为 >(缺省值)时,① 号卡片生效,屏蔽 ②③ 号卡片; 当 arrow 取值为 < 时,② 号卡片生效,屏蔽 ①③ 号卡片; 当 arrow 取值为 <> 时,①② 号卡片生效,屏蔽 ③ 号卡片; 当 arrow 取值为 = 时,③ 号卡片生效,屏蔽 ①② 号卡片。 ① 号、② 号、③ 号卡片的复习进度独立记录,互不影响。

关于同一块内不同卡片独立设置,可以这样做。还是利用块属性,比如属性名为suspend,属性值为0代表暂停块内所有卡片,属性值为1,2代表暂停1号和2号卡片,如果不需要暂停任何卡片,就把属性值设为-1。 (如果觉得属性值为数字0-1不太直观的话,也可以同时支持allnone作为属性值) 上面讨论的是非双向卡。双向卡不需要suspend属性,由arrow来控制就行,不然冲突了。(双向卡指由超级块或无序列表块所产生的卡片)

还要考虑到,如果用户输入的属性值不合法怎么办?三种思路:

  1. 设计一个优先级,比如all大于卡片编号大于none,缺省值为none
  2. 属性值非法时,阻止该属性设置成功,并在右上角给出提示。
  3. 设计一个纯靠鼠标点击的UI界面来设置属性,比如suspend属性利用单选框来设置,arrow属性利用复选框来设置。(suspend属性如果设置为卡片编号,可能UI界面不是很好做,可以暂时就只给all(yes)和none(no)两个选项)

推荐第3种思路,即靠单选框/复选框来设置。suspend属性如果设置为卡片编号的UI界面进一步思考,两种方案:

  1. 给一个输入框,用户自己输入,数字之间用逗号隔开,属性值非法时,阻止该属性设置成功,并在右上角给出提示。
  2. 通过按钮添加、删除。这里用语言不好描述,我画个草图好了,如图。

图片

双向卡arrow属性的设置界面可以长这样:

图片

luo-chuan commented 6 months ago

不用把逻辑做这么复杂,要暂停就整个块一起暂停,整复杂了管理起来也心累。

这个算是个包容关系吧,做了单卡暂停做单块暂停不难,反过来就麻烦了。

是的,我刚刚意识到了。看我最新的回复。

HowcanoeWang commented 6 months ago

双向制卡和一对多的方案,可以移步这个issue:https://github.com/siyuan-note/siyuan/issues/10471

zxhd863943427 commented 6 months ago

闪卡功能投票:https://ld246.com/article/1709964739844

397334469 commented 1 week ago

大佬,请问一下,这个功能什么时候开始3.2.0的开发,这个功能等了好久,望眼欲穿~