之前我们搞了一下能够快速输入文字片段和快速设置样式的小玩意
现在给它弄点别的小功能,先从设置文档属性开始吧嘿嘿嘿
下面是菜单的主体部分, 可以看到基本上跟之前弄设置样式属性的没什么两样(有些人可能已经想到这个能够再抽象一层,然后再有多的一起框框 A 了,但是先不说这个)
import { 注册表 } from "siyuan-noob/commonStruct";
import 核心api from "siyuan-noob/utilKernel/kernelApi";
let 关键词注册表 = new 注册表("自定义关键词菜单");
let 当前菜单状态;
let 当前属性对象;
关键词注册表.注册({
id: "快捷块属性",
行内关键词判断函数: (菜单状态) => {
当前菜单状态 = 菜单状态;
if (
菜单状态.当前节点 &&
(菜单状态.当前节点.wholeText || 菜单状态.当前节点.textContent).indexOf(
"@doc"
) > -1
) {
let wholeText = 菜单状态.当前节点.wholeText;
try {
当前属性对象 = new Function(
`"use strict";return (${wholeText.split("@doc").pop()})`
)();
return true;
} catch (e) {
return false;
}
}
},
文字: "设置文档属性",
图标: "#iconFile",
点击回调函数: () => {
let element = 当前菜单状态.当前节点.parentElement;
设置文档属性(当前菜单状态);
当前菜单状态.当前节点.parentElement.innerText=当前菜单状态.当前节点.wholeText.slice(
0,
当前菜单状态.当前节点.wholeText.lastIndexOf("@doc")
);
element.insertAdjacentHTML("beforeend", "<wbr>");
element.innerHTML=element.innerHTML
var range = document.createRange();
let wbr = element.querySelector("wbr");
range.selectNodeContents(wbr);
range.collapse(false);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
wbr.remove();
window.siyuan.menus.menu.remove();
},
});
然后我们来弄一下那个设置文档属性
function 设置文档属性(菜单状态) {
let 当前块id = 菜单状态.当前块id;
核心api.sql(
{
stmt: `select * from blocks where id='${当前块id}'`,
},
"",
(data) => {
核心api.setBlockAttrs({
id: data[0].root_id,
attrs: 当前属性对象,
});
}
);
}
这样之后就可以用 @doc{name:'想要设置的文档名称'}
的形式来设置文档的属性了.
安装方式
这还是一个可运行代码片段,可以使用这个代码片段来进行安装
思源笔记折腾记录 - 运行你的笔记 - 链滴 (ld246.com)
但是这个东西还要依赖另一个笔记,所以这个也要安装(啊,说安装笔记总感觉怪怪的)
思源笔记折腾记录 - 快速输入 - 链滴 (ld246.com)
直接剪藏这篇笔记之后,用运行到代码片段功能安装到代码片段就可以了。
如果这玩意对你有用可以去爱发电给我买杯咖啡
leolee9086 正在创作一些简单的技术教程和小工具,以及设计方面内容 | 爱发电 (afdian.net)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于