Obsidian Dataview 插件的常用 DataviewJS 代码片段集合,可直接复制到笔记中使用。
分栏
将带有指定标签的页面按两列分栏嵌入显示,使用 ad-flex callout 实现并排布局。
const pages = dv.pages("#tool/type").sort(p => p.tool_type_id);
let counter = 0;
let output = "";
for (let page of pages) {
if (counter % 2 === 0) {
// 如果是偶数(包括0),开始一个新的 ad-flex 段落
if (counter > 0) {
output += "</div>\n</div>\n````\n\n";
}
output += "````ad-flex\n<div>\n";
} else {
// 如果是奇数,添加第二个 div
output += "</div>\n<div>\n";
}
output += `\n![[${page.file.path}]]\n`;
counter++;
}
// 处理最后一个 ad-flex 段落
if (counter > 0) {
output += "</div>\n</div>\n````\n";
}
dv.paragraph(output);利用 MetaEdit 添加按钮
结合 MetaEdit 和 Metadata Menu 插件,在 Dataview 表格中为每行生成可点击的评分按钮,点击后弹出选择器并自动更新 frontmatter 中的 grade 字段。
const { fieldModifier: f } = this.app.plugins.plugins["metadata-menu"].api;
const { update, autoprop, createYamlProperty } = this.app.plugins.plugins["metaedit"].api;
// 评级按钮
const gradeButton = (grade, file) => {
if (grade === undefined) {
grade = "⭐⭐⭐";
createYamlProperty("grade", `'${grade}'`, file.path);
}
const btn = this.container.createEl('button', { "text": grade });
btn.addEventListener('click', async (evt) => {
evt.preventDefault();
try {
const newGrade = await autoprop("grade");
if (grade !== newGrade) {
await update("grade", newGrade, file.path);
}
btn.textContent = newGrade;
} catch (error) {
console.error("更新评分时出错:", error);
new Notice("更新评分失败,请查看控制台以获取详细信息", 2000);
}
});
return btn;
}
const pages = dv.pages("#obsidian-plugin");
// 快捷工具
dv.table(["工具", "描述", "作者", "Github", "评分"], pages
.sort(p => p.grade, 'description')
.map(p => [
p.file.link,
p.description,
p.author,
p.github,
gradeButton(p.grade, p.file)
]));