//!js
// 过滤笔记名,不支持模糊匹配
const boxName = ""
//过滤路径,注意这个路径不包括笔记名,支持模糊匹配,相当于SQL里的like
const path = ""
const getBoxByName = (name)=> {
return Array.from(document.querySelectorAll("ul.b3-list[data-url]"))
.filter(book=>book.querySelector("li[data-type='navigation-root'] span.b3-list-item__text")?.innerText === name)[0]?.getAttribute("data-url") || ""
}
const query = async (path, boxName)=>{
// 数据查询
let dq = DV.DataQuery()
// sql 内容可以按需查询
path = path ? `and hpath like '%${path}%'` : ""
const box = boxName ? `and box = '${getBoxByName(boxName)}'` : ""
let sql = `select * from blocks where type IN ('l', 'b', 'p') ${path} ${box} and markdown <> '' and parent_id in (select id from blocks where type = 'd') order by updated desc`
let blocks = await dq.sql(sql).query()
// 返回列表块
// 引用块其实就是一个 html 片段,返回的字符串列表,只需要返回 html 片段即可达到生成双向链接类似的效果
let dv = new DV(protyle,item,top)
let days = []
let boxes = {}
blocks.map(b=>{
// 获取笔记名
const box = b.sqlData.box
if(!boxes[box]){
boxes[box] = document.querySelector("ul.b3-list[data-url='"+box+"'] li[data-type='navigation-root'] span.b3-list-item__text")?.innerText || "";
}
// 格式化日期
let day = b.sqlData.updated.substring(0,8)
day = day = day.substr(0, 4) + "-" + day.substr(4, 2) + "-" + day.substr(6, 2)
if(!days.includes(day)) {
days.push(day);
dv.addElement(`
${day}
`)
}
// 生成块内容
dv.addElement(`
${boxes[box]}${b.sqlData.hpath}
`)
dv.addElement(`
${b.blockItem.block.content}
`)
})
dv.show()
}
return query(path, boxName)