声明命令
命令在mnaddon.json 的 cardCommands 字段中声明。
mnaddon.json
id是命令的标识,模板依据它引用这条命令。title是命令在菜单中显示的文字。可以为字符串或键值分别为语言和内容的字典,字典的键为zh-Hans、zh-Hant、en等。when用来限定这条命令出现在哪些卡片上。该字段可以不写,不写时每张卡片都会出现这条命令。
when 条件与组合条件
when 决定了命令是否在菜单中显示。判断过程不会执行插件的页面代码,因此其中只能使用卡片上的既有数据,以及插件先前存入卡片的字段。可用的条件分以下几类。
判断插件存入卡片的字段,使用 addonValue。它可以比较字段的值,也可以判断字段是否存在:
addonValue的添加参见下文 特殊处理hashtag判断卡片上是否带有指定的标签hasTitle判断卡片是否有标题hasChildren判断卡片在脑图上是否有子卡。hasExcerpt判断卡片是否带着从文档摘来的内容,其含义与batch-get返回的sourceAnchor.hasExcerpt相同。
parent、child 与 descendant,它们分别表示父卡、子卡、任意一张下层卡 满足里面的条件。
关系组合
条件可以用and、or 与 not 组合起来:and 要求数组中的条件全部成立;or 只要求其中一个成立;not 表示不能满足某个条件。其中and 与 or 接受一个条件数组。这几种组合可以互相嵌套,一个数组里的某一条条件本身也可以是另一种组合。
例1
以下面branch 命令为例,它要求卡片本身既不带 #practice/question 标签,也不带 #practice/answer 标签,并且它的子卡同样不带 #practice/answer 标签。
mnaddon.json
例2
以下面choose_sense 命令为例,两种情况满足其中一项时才会出现:卡片的 status 字段等于 pending,或者卡片没有 status 字段并带有 #VocabPending 标签:
mnaddon.json
特殊处理
如果判断依据不属于以上任何一项,可以先将结论存成卡片字段,菜单再依据这个字段来判断:在菜单中添加命令
命令在插件中声明之后,还需要由模板将其添加到菜单中。模板的selectionMenu 字段登记了 MN 的各个弹出菜单。
cards为卡片菜单,在脑图或大纲中点击一张卡片时弹出。documents为文档上的卡片菜单,点击完成摘录的文档中的卡片时弹出。text为选中文本的菜单,在文档中选中一段文字时弹出。
addon.<插件id>.<命令id>: 添加到对应项的值列表中,末尾的冒号不能省略:
template.json
接收命令
页面不需要在events 中登记 cardCommand,直接在页面代码中监听即可:
index.html
用户点击命令时,如果插件面板完全关闭,MN 会先以
mini 模式打开面板,再推送命令事件。