思源笔记折腾记录 - 简单挂件 - 显示更多的属性

本贴最后更新于 853 天前,其中的信息可能已经时移世改

一、实现目的:

思源笔记折腾记录-简单挂件-文章修改时间 - 知乎 (zhihu.com)

思源笔记折腾记录 - 简单挂件 - 文章修改时间 - 链滴 (ld246.com)

的基础上,显示更多的文章属性。

二、实现方法

1、思源笔记的块属性有哪些

我们之前实现的那个挂件可以显示 updated 属性,但是思源的每一个块(不只是文档),其实都有更多的属性。

把之前的文章修改时间挂件里 index.html 内容改成这样:

<!DOCTYPE html> <html> <head> <script id = "获取属性并修改文档内容"> let 块id = window.frameElement.parentElement.parentElement.dataset.nodeId let 获取修改时间 = ()=> fetch("/api/query/sql",{ method:"post", body:JSON.stringify({ stmt:`select * from blocks where id in (select root_id from blocks where id = "${块id}")` }) }).then( res=>{ return res.json() } ).then( json=>{ let data = json.data[0] console.log(data) document.getElementById('content').innerHTML="当前文章修改于"+ data.updated.substring(0,4)+"年"+ data.updated.substring(4,6)+"月"+ data.updated.substring(6,8)+"日"+ data.updated.substring(8,10)+"时"+ data.updated.substring(10,12)+"分"+ data.updated.substring(12,14)+"秒" } ) 获取修改时间() </script> </head> <body> <div id="content"> 当前文章修改于2022年11月20号. </div> </body> </html>

这时插入挂件之后, 在右下角找到image问号图标,然后image点击开发者工具,你应该可以在控制台一栏里面看到这样的输出

image

点击前面的小三角,就可以看到所有的属性了

image

挨个解释一下

{ //别名 "alias": "", //笔记本的id "box": "20221119002557-ge4j9d8", //内容,对于文档块来说,就是文档的标题 "content": "思源笔记折腾记录-简单挂件-显示更多的属性", //创建时间,不是文件的,而是块的。 "created": "20221120015012", //聚焦内容,暂时可以不用管 "fcontent": "思源笔记折腾记录-简单挂件-显示更多的属性", //哈希值,暂时可以不用管 "hash": "7ab346b", //可读路径,就是用人能看得懂的形式表达这个笔记在哪里 "hpath": "/思源笔记折腾记录-简单挂件-显示更多的属性", //kramdown格式的内联属性表,暂时不用管,用另一种格式显示的属性 "ial": "{: id=\"20221120015012-nhycifh\" title=\"思源笔记折腾记录-简单挂件-显示更多的属性\" updated=\"20221120015505\"}", //每个块都独一无二的 属性,可以用来找到任何一个具体的块 "id": "20221120015012-nhycifh", //内容长度 "length": 21, //markdown内容,文档块会是空的 "markdown": "", //块备注内容,没备注所以没有 "memo": "", //块命名内容,没命名所以没有 "name": "", //父块id,没命名所以没有 "parent_id": "", //路径,id形式的,这个你绝对看不懂 "path": "/20221120015012-nhycifh.sy", //根块id,其实就是文档id,对于文档块来说,几个id都一样 "root_id": "20221120015012-nhycifh", //排序用的,暂时不用管 "sort": 0, //子类型,很多块的大类下还有子类,暂时不用管 "subtype": "", //标签,暂时不用管 "tag": "", //类型,对于文档块来说,暂时不用管 "type": "d", //修改时间 "updated": "20221120015505" }

把属性显示到挂件并且自动刷新

复制一份文档修改时间那个文件夹,改名叫文档属性

然后把它里面的 index.html 改成这样:

<!DOCTYPE html> <html> <head> <script id = "获取属性并修改文档内容"> let 块id = window.frameElement.parentElement.parentElement.dataset.nodeId let 获取修改时间 = ()=> fetch("/api/query/sql",{ method:"post", body:JSON.stringify({ stmt:`select * from blocks where id in (select root_id from blocks where id = "${块id}")` }) }).then( res=>{ return res.json() } ).then( json=>{ let data = json.data[0] if(data){ document.getElementById('content').innerHTML=JSON.stringify(data,null,2) } } ) setInterval(获取修改时间,1000) </script> </head> <body> <pre id="content"> </pre> </body> </html>

这个时候,它就会显示出文档的所有属性

image

而且每隔一秒钟,他就会自己刷新。

让属性显示得更好看一点

上面我们直接使用了 pre 标签来原样显示属性,但是我们一般都会让属性显示得更美观一点,所以我们再修改一下 html,就像这样

<!DOCTYPE html> <html> <head> <script id="获取属性并修改文档内容"> let 块id = window.frameElement.parentElement.parentElement.dataset.nodeId let 获取修改时间 = () => fetch("/api/query/sql", { method: "post", body: JSON.stringify({ stmt: `select * from blocks where id in (select root_id from blocks where id = "${块id}")` }) }).then( res => { return res.json() } ).then( json => { let data = json.data[0] if (data) { (Object.keys(data)).forEach( 属性名 => { let 容器 = document.getElementById(属性名) if(容器){ 容器.innerHTML = data[属性名] } } ) } } ) setInterval(获取修改时间, 1000) </script> <style> label{ min-width: 100px; display: inline-block; } </style> </head> <body> <div class="custom-attr__add"> <div> <label >命 名</label><span id="name"></span> </div> <div> <label>别 名</label><span id="alias"></span> </div> <div> <label>备 注</label><span id="memo"></span> </div> <div> <label>标 签</label><span id="tag"></span> </div> <div> <label>路 径</label><span id="hpath"></span> </div> <div> <label>修改时间</label><span id="updated"></span> </div> <div> <label>创建时间</label><span id="created"></span> </div> </div> </body> </html>

image

这样它就能够显示你想要的属性了。

或者你可以使用 tabel 来让它显示成表格。

有关 table 标签的用法参考:

HTML <table> 标签 | 菜鸟教程 (runoob.com)

image

<!DOCTYPE html> <html> <head> <script id="获取属性并修改文档内容"> let 块id = window.frameElement.parentElement.parentElement.dataset.nodeId let 获取修改时间 = () => fetch("/api/query/sql", { method: "post", body: JSON.stringify({ stmt: `select * from blocks where id in (select root_id from blocks where id = "${块id}")` }) }).then( res => { return res.json() } ).then( json => { let data = json.data[0] if (data) { (Object.keys(data)).forEach( 属性名 => { let 容器 = document.getElementById(属性名) if(容器){ 容器.innerHTML = data[属性名] } } ) } } ) setInterval(获取修改时间, 1000) </script> <style> label{ min-width: 100px; display: inline-block; } </style> </head> <body> <table border="1"> <tr> <th >属性名</th><th>属性值</th> </tr> <tr> <td >命 名</td><td ><span id="name"></span></td> </tr> <tr> <td>别 名</td><td ><span id="alias"></span></td> </tr> <tr> <td>备 注</td><td ><span id="memo"></span></td> </tr> <tr> <td>标 签</td><td ><span id="tag"></span></td> </tr> <tr> <td>路 径</td><td ><span id="hpath"></span></td> </tr> <tr> <td>修改时间</td><td ><span id="updated"></span></td> </tr> <tr> <td>创建时间</td><td ><span id="created"></span></td> </tr> </div> </body> </html>

本文使用思源笔记编辑生成,更新于:2022-11-20。

协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24807 引用 • 102041 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...