一、实现方式
首先还是引入依赖,毕竟手写菜单元素有点蛋疼
import 自定义菜单 from 'siyuan-noob/customMenu/index.js'
import 核心api from "siyuan-noob/utilKernel/kernelApi.js"
然后像思源笔记折腾记录 - 嵌入块批量操作 - 批量删除 - 链滴 (ld246.com)
里面的一样,我们注册一个菜单项给嵌入块
自定义菜单.块标菜单.注册自定义菜单项({
id:"嵌入块批量移动文档",
文字:"批量移动所在文档为子文档",
判定函数:()=>{
return 自定义菜单.块标菜单.菜单状态.当前块类型=='NodeBlockQueryEmbed'
&&
!document.querySelectorAll(
`div[data-node-id="${自定义菜单.块标菜单.菜单状态.当前块id}"]`
)[1]
},
点击回调函数:(e)=>{
let 当前块元素 = document.querySelector(`[data-node-id="${自定义菜单.块标菜单.菜单状态.当前块id}"]`)
移动嵌入块所有文档为子文档(当前块元素)
}
})
然后我们来实现一个移动方法:
export async function 移动嵌入块所有文档为子文档(嵌入块元素){
let 嵌入块内部元素id数组 = []
嵌入块元素.querySelectorAll('div[data-node-id]:not([data-type="NodeBlockQueryEmbed"])').forEach(
el=>嵌入块内部元素id数组.push(el.dataset.nodeId)
)
let 嵌入块属性=(await 从元素获取块属性(嵌入块元素))
await 批量移动所在文档到指定块所在文档(嵌入块内部元素id数组,嵌入块属性)
嵌入块元素.querySelector(
'.protyle-action__reload'
).click()
}
export async function 从元素获取块属性(块元素){
let id = 块元素.dataset.nodeId
let sql = `select * from blocks where id ='${id}'`
return (await 核心api.sql({stmt:sql}))[0]
}
然后需要实现移动所在文档了
export async function 批量移动所在文档到指定块所在文档(id数组,目标块属性){
let sql=`select path from blocks where false `
id数组.forEach(
id=>{
sql =sql+`or id='${id}'`
}
)
let 文档路径数组=[];
(await 核心api.sql({stmt:sql})).forEach(
item=>{文档路径数组.push(item.path)}
)
文档路径数组=Array.from(new Set(文档路径数组))
await 核心api.批量移动文档(
{
fromPaths:文档路径数组,
toNotebook:目标块属性.box,
toPath:目标块属性.path
}
)
}
这回就不加确认了,反正移动也不会出什么大问题的吧.
二、使用方法
需要依赖这个代码片段
思源笔记折腾记录 - 运行你的笔记 - 链滴 (ld246.com)
然后把这篇文章的内容剪藏到你的思源笔记里面就可以用了哒
这个是我的爱发电账号,如果觉得这个对你有用可以考虑请我们喝一杯咖啡~~
leolee9086 正在创作一些简单的技术教程和小工具,以及设计方面内容 | 爱发电 (afdian.net)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于