最近突然又开始用上了标签功能,不过思源内置的标签查看有点难用,就自己用 Query View 写了一个。
作用是点击查看所有的标签,标签块的渲染默认使用了表格组件,
//!js const useButton = (title, onclick) => { let button = document.createElement('button'); button.className = 'b3-button b3-button--text'; button.innerText = title; button.onclick = onclick; return button; } const query = async () => { let dv = Query.DataView(protyle, item, top); dv.render(); let tags = await Query.request('/api/tag/getTag', { sort: 4 }); tags = tags.sort((a, b) => - a.count + b.count); const onclick = (tag) => { Query.tag(tag.label).then(async (blocks) => { if (blocks.length == 0) return; blocks = blocks.sorton('created'); blocks = await Query.prune(blocks, 'leaf'); blocks = await Query.fb2p(blocks); const table = dv.table(blocks, {fullwidth: true} ); dv.replaceView(main.dataset.id, table); }); } const createTagButtons = (tags) => { const buttons = []; tags.forEach(tag => { const button = useButton(`#${tag.label} (${tag.count})`, () => { onclick(tag); }); button.style.margin = '5px'; buttons.push(button); // Recursively process children tags if (tag.children && tag.children.length > 0) { const childButtons = createTagButtons(tag.children); buttons.push(...childButtons); } }); return buttons; } const tagButtons = createTagButtons(tags); const allTagsList = document.createElement('div'); allTagsList.style.display = 'flex'; allTagsList.style.flexWrap = 'wrap'; tagButtons.forEach(tagElement => { allTagsList.appendChild(tagElement); }); dv.addele(allTagsList); dv.addmd('---'); let main = dv.addele('') } return query();
效果如下:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于