Skip to content

etchnight/siyuan-plugin-custom-interface

Repository files navigation

自定义界面插件

一系列改变界面的功能合集,涉及改变编辑器内容等危险操作,目前无上架插件市场计划。

  • 将反向链接以嵌入块形式插入文档(刷新生效)
  • 大纲显示反链内容(todo)

❗ 理解本插件的运行流程对鉴定其安全性至关重要,如对本插件安全性存在疑问,请阅读运行流程部分并自行决定是否使用(仅列出与监听及修改 dom 、修改全局数据有关内容)。

将反向链接指向块插入文档

❗❗ 直接使用嵌入块可以在绝大多数情况下解决问题,如非必要,不要开启此功能

目前思源笔记查看反向链接有两种方式,一是反链面板,二是在悬浮窗口中查看;本插件提供了一种更为直接的方式,即将反向链接指向的块直接插入文档 dom 中(但是并不更改笔记源文件内容,仅提供一种视图方式)。

使用方法

示例

上图中虚线框即为反向链接指向的块,点击其将跳转到所在块。

运行流程

  1. 监听文档初次加载以及动态加载 eventBus 事件,触发后查找当前编辑器内带有反链的块
  2. 在第 1 步查找到的块下添加一个嵌入块元素(不与后端通信)
  3. 对第 2 步创建的嵌入块加入一个 MutationObserver 监听器,每当其更新时,移除更新 SQL按钮(否则会触发思源笔记错误,提示重建索引)
  4. 模拟触发点击刷新按钮,由思源笔记自行对其进行刷新,以获取反向链接块并对嵌入块元素进行渲染
  5. 监听打开菜单 eventBus 事件,如果检测到触发菜单的块是插件添加的嵌入块,启动另一个 MutationObserver 监听器,开始对菜单的监听(否则关闭监听)
  6. 当监听到菜单中元素变化时,仅保留与嵌入块有关的几个按钮,其余按钮全部设置为只读

将嵌入块放入大纲

嵌入块有时还有标题,这些标题在原有情况下不会出现在大纲中,该功能就是将其所含的标题也放入大纲,但是点击该大纲并不会跳转到嵌入块,而是嵌入块指向的块。

使用方法

运行流程

  1. 对大纲元素添加一个 MutationObserver 监听器,每当其更新时,执行如下步骤
  2. 关闭监听器(防止无限循环)
  3. 修改 window.siyuan.layout.rightDock/leftDock.data.outline 上的数据,修改完成后使用 outline 实例中的 update 方法对大纲进行更新
  4. 重新打开监听器