Open
Description
提供闪卡交互API
In what scenarios do you need this feature?
目前的闪卡只提供了 正面-反面 制卡,对于大部分问答式场景来说足够使用,但有时候也有翻转的需求(一个内容提供 正-反,反-正两张卡片)。
更进一步来说,对于部分学习的场景下,可能有更复杂的模板制卡的需求(Anki的)。如英语单词,最基本的需要准备 英语、中文、发音 三块内容,对应的需要制成 英-中(知道意思),中-英(中文意思到英语单词),音-中(听力卡片) 三张卡片才能比较好的掌握该单词。
虽然Anki可以很方便的实现上述功能,但Anki的卡组没有笔记的逻辑性,在数据超过上千的时候,即使使用标签也非常混乱,不利于知识库的维护。
因此想增强一下思源的闪卡功能,目前本人愿意开发模板制卡的插件,希望能提供或更新一下闪卡的API,目前想出来的插件可能需要有如下的API:
- 闪卡创建API
从指定的块ID中创建卡片,不确定这个是不是已经有实现了?Line 316 in bdacf39
API/flashcard/addFlashcard
- parameters
{ “frontIDs”:["20210912214605-uhi5gco", ... ] // 允许多个块生成正面 "backIDs": ["20210912214605-uhi5gco", ... ] // 允许多个块生成反面 }
- return
{ "code": 0, "msg": "", "ID": "flashcard-2021xxxx" // 闪卡的ID值,方便后续追踪与管理? }
- 闪卡编辑API
编辑闪卡对应的正面内容和反面内容API/flashcard/setFlashcard
- parameters
{ “ID”:“flashcard-2021xxxx” // 闪卡ID “frontIDs”:["20210912214605-uhi5gco", ... ] // 允许多个块生成正面 "backIDs": ["20210912214605-uhi5gco", ...] // 允许多个块生成反面 }
- return
{ "code": 0, "msg": "", "data": null }
- 闪卡标记API
输入一个块ID,打上制卡的颜色提示(可选项,或后续再讨论)
上述API修改,将闪卡制卡不仅限于父子块,允许完全独立的块生成闪卡(方便闪卡模板插件生成对应的markdown模板进行管理)
使用示例(插件调用API实现,不需要官方下场,仅用来说明应用场景)
调用插件,制卡,会在文档中插入一个如下的 无序列表块 来提供闪卡模板 (仅作示例,用户可以在插件中自定义来生成更复杂的
模板):
对于整体的无序列表块,自定义如下属性:
来追踪和管理,这个生成了哪些闪卡。
对于上面的每一个字段列表项 (如 * 字段1 (field-1)
),有如下自定义属性:
用来引导下面的所有子块作为模板填充选项。
根据用户的闪卡生成设置(如这个例子,生成3张单词表闪卡):
- 英-中(知道意思)闪卡
正面是字段1 (field-1) 下面的所有子块,反面是 field-2 和field-3的所有子块 (用户可自定义) - 中-英(中文意思到英语单词)闪卡
正面是 field-2 下面的所有子块,反面是 field-1 和field-3的所有子块 (用户可自定义) - 音-中(听力卡片)
正面是 field-3 下面的所有子块,反面是 field-1 和field-2的所有子块 (用户可自定义)
Describe the optimal solution
官方实现翻转闪卡和用户自定义模板?感觉官方应该没有精力来搞
Describe the candidate solution
No response
Other information
No response
Metadata
Metadata
Assignees
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
suka233 commentedon Feb 29, 2024
双手支持,并且希望插件能提供闪卡复习界面的一些事件,来开发出更高级的功能。
基本需要有如下的事件 or Api:进入闪卡复习界面,离开闪卡复习界面,当前的闪卡,当前闪卡的状态(处于正面or反面),用户点击闪卡复习按钮的回调(beforeReview这种),获取昨日未复习的闪卡。
基于以上,可以实现例如闪卡自动发音(可能会有什么安全限制?这个待验证),闪卡支持正面手动输入答案,背面自动评分,自动推迟昨日到期闪卡等等高级功能。
以上的部分功能虽然可以通过前端的MutationObserver实现,但是需要考虑的东西太多,远不如官方提供准确的事件来的方便。
zxhd863943427 commentedon Feb 29, 2024
我觉得根本来说这是闪卡数据结构,还有类的设计问题。
用API来实现的话,之后扩展就比较麻烦。
关于双向闪卡,我个人的想法是最好把它视为更广泛一般闪卡的特殊情况,也就是一个块生成的多种闪卡中的一种,使用一种指定的方法,从块中抽取dom。
对于闪卡系统,我粗略的想法是这样的,前期插件可以通过注册闪卡类,扩产闪卡类型,后期可以由思源本体提供模板管理功能。
88250 commentedon Feb 29, 2024
@HowcanoeWang 一张闪卡只能对应一个块,否则编辑器会有问题,所以添加闪卡的时候也是一张闪卡对应一个块的;关于双向制卡和模板制卡我估计基于现有结构很难实现了……
HowcanoeWang commentedon Feb 29, 2024
@88250 闪卡和单块绑定感觉限制太大了(比如你说的,编辑器会出问题)
有没有可能把闪卡在数据库中独立出来一个数据结构+编辑UI?
从数据库来说,每张闪卡有一个独立的ID,然后记录正面卡面包含的所有块ID,和反面卡片包含的块ID。
闪卡编辑器成为一个独立的悬浮窗,展示的内容实际上是块嵌入的UI
@zxhd863943427 闪卡独立ID后,还能增加你上面提到的不同闪卡类型,然后思源闪卡UI就能根据类型来进行不同的UI渲染
一切的基础都是要把闪卡从单个块绑定剥离
HowcanoeWang commentedon Feb 29, 2024
@88250 @zxhd863943427 @luo-chuan 比如在数据库中,闪卡独立出来,拥有如下的数据结构:
<input>
', ...]这种数据结构,无缝兼容目前思源笔记所使用的闪卡和单个块绑定(把frontIDs改成绑定的单个块列表即可)
zxhd863943427 commentedon Feb 29, 2024
能详细说一下为什么一张闪卡只能对应一个块,否则编辑器会有问题?
我自己在捣鼓实现的时候,拿废弃的卡包当成分类依据,也实现了一块多卡的demo。
zxhd863943427 commentedon Feb 29, 2024
@HowcanoeWang
目前闪卡的具体结构不是这个样子的,参见这个:https://pkg.go.dev/github.com/open-spaced-repetition/go-fsrs#Card
我把它复制过来在下面方便看:
思源目前的实现差不多就是在这个包的基础上浅浅地套了一层皮,改成你这个数据结构其实改动并不小。
luo-chuan commentedon Feb 29, 2024
期待大佬们讨论出完美方案,我先围观。
HowcanoeWang commentedon Feb 29, 2024
@zxhd863943427 直接把哪些属性添加到上面数据结构表格的列就无缝对接了,但代码层面确实要改动不少。不过个人感觉赶紧把底层重新设计一下对拓展性来说更重要一点
HowcanoeWang commentedon Feb 29, 2024
类似的,可以参考Anki的数据结构:
Jiangshuon commentedon Feb 29, 2024
双向制卡的应用场景主要是背单词是吧,包括闪卡语音功能也是,我尚未想到其他应用场景。其实我觉得背单词这种需求为啥不用专门的背单词软件,欧路词典、墨墨背单词、百词斩一大堆功能丰富的。用anki记单词,自己复制释义、例句吗?
如果是英语翻译、改错、完形填空这种学习,也用不到双向吧
Jiangshuon commentedon Feb 29, 2024
话说其他笔记软件如logseq,obsidian插件怎么实现双向闪卡的呢?可以研究下吧
Jiangshuon commentedon Feb 29, 2024
你是说独立出一个类似anki的制卡和复习页面吗?其实思源的优势就是在做笔记、复习笔记的过程中非常方便地将重要内容制作闪卡,在复习闪卡时非常方便地修改闪卡以及查看闪卡上下文(退出聚焦),笔记为主、闪卡为辅。
思源闪卡其实没有正面、反面的概念,只有问题、答案的概念,一张闪卡绑定一个问题块,前端根据问题块类型(列表块、超级块、标题块…)的不同,以不同的展示方式展示答案。这个anki的逻辑有很大差别。
在制卡方面,思源可以参照下其他笔记软件,毕竟anki不是笔记软件
luo-chuan commentedon Feb 29, 2024
这两的闪卡功能不值一提。参考remnote才有意义。
148 remaining items
Qe9xU commentedon Nov 24, 2024
闪卡功能优化凉了吗?
TCOTC commentedon Nov 24, 2024
不急
kx1356 commentedon Nov 24, 2024
好事多磨吧
kx1356 commentedon Dec 1, 2024
今天算法已经更新了,Upgrade FSRS to v3.3.0 #13323,是否3.2不远了。
TCOTC commentedon Dec 1, 2024
其实还很遥远,可能要推迟
Qe9xU commentedon Dec 2, 2024
💔💔💔
luo-chuan commentedon Feb 17, 2025
希望重构时,能重写“标记”按钮,以解决现有的一个bug:挖空中出现带样式(粗体、斜体、公式等)的文字,单个挖空会被拆分成一串连续的多个挖空。

关联:
#14074
#10315
https://ld246.com/article/1707068293972
https://zhuanlan.zhihu.com/p/370217113
Jiangshuon commentedon Feb 17, 2025
哎。。。因为这个重构,闪卡管理的功能优化都卡住动不了,一个简单的暂停功能不知要等到什么时候。第10层的需求被第100层的需求卡着。从去年2月份到今年2月份,一年过去了,讨论了100多楼,各种设计实现图,结果雷声大雨点小,现在重构进度基本为0,这可真是个世纪大项目。
闪卡重构主导者,只是当时一时兴起然后现在没兴趣了,还是确实难度太大实现不了,能不能给个回复?如果不想做或者做不了希望及时告知一下,然后看一下D大如何安排(重构或者不重构或者推迟),被D大拖着也比像现在这样拖着好呀
luo-chuan commentedon Feb 17, 2025
开源软件是这样的,没有资金驱动,都是用爱发电。
TCOTC commentedon Feb 17, 2025
你关注一下Q群就知道进度了
TCOTC commentedon May 1, 2025
用户需求:
目前存在的问题:
Fsrs2333 commentedon Jun 16, 2025
摘录卡片和问答卡片的区分,这个很重要,没有摘录卡片的作为缓冲,会产生大量烂卡