思源笔记折腾记录 - 任务列表的序号

今天看到知乎上有人说了一嘴这个

(3 封私信) 思源和 Obsidian 哪个更适合做笔记? - 知乎 (zhihu.com)

然后想了一下,好像可以做一下试试

生成任务列表序号()
setTimeout(生成任务列表序号,1000)
document.head.insertAdjacentHTML(
    "beforeEnd",
    `<style>
    .protyle-wysiwyg [data-node-id].li[data-subtype="t"] .protyle-action.protyle-action--task:before {
        content:var(--custom-index) ;  
    }
    </style>`
  );
  
async function 生成任务列表序号(){
    let 任务列表元素数组 = document.querySelectorAll('.protyle-wysiwyg [data-type="NodeList"]:has([data-subtype="t"])')
    任务列表元素数组.forEach(
        (任务列表元素)=>{
            同步生成序号(任务列表元素)
        }
    )
    let 聚焦任务列表项元素数组 = document.querySelectorAll('.protyle-wysiwyg [data-subtype="t"]:not(.list .li)')
    聚焦任务列表项元素数组.forEach(
        任务列表项元素=>{
            异步生成序号(任务列表项元素)
        }
    ) 
    setTimeout(生成任务列表序号,1000)

}
function 同步生成序号(任务列表元素){
    let 元素id= 任务列表元素.getAttribute('data-node-id')

    let 任务选框数组 = 任务列表元素.querySelectorAll(`[data-node-id="${元素id}"]>div>.protyle-action.protyle-action--task`)
    任务选框数组.forEach(
        (任务选框,下标)=>{
            任务选框.setAttribute("style", `--custom-index :"${下标+1}."`)
        }
    )
}
async function 异步生成序号(任务列表项元素){
    let 元素id= 任务列表项元素.getAttribute('data-node-id')
    let 响应 = await fetch('/api/query/sql',{
        method:'post',
        body:JSON.stringify({
            stmt:`select * from blocks where id = (select parent_id from blocks where id ='${元素id}') `
        })
    })
    let data = await 响应.json()
    let 父块内容 = await(await fetch('/api/filetree/getDoc',{
        method:'post',
        body:JSON.stringify({
            id:data.data[0].id,
            size:102400
        })
    })).json()
    let div = document.createElement('div')
    div.innerHTML=父块内容.data.content
    div.querySelectorAll('.li').forEach(
        (元素,下标)=>{
            if(元素.getAttribute('data-node-id')===元素id){
                任务列表项元素.querySelector('.protyle-action.protyle-action--task').setAttribute("style", `--custom-index :"${下标+1}."`)
            }
        }
    )
}

可能有些奇怪为什么不用 css 的计数器来做,其实是因为聚焦还有动态加载的时候用纯 css 来做编号会有问题,算了先就这样把,其实这个不自动刷新的话弄个按钮性能会更好。

效果就像这样:

image.png

第一个元素的编号是 2 是因为它确实是第二个,只不过是聚焦了。

上面 sql 之类绕了一大圈就是解决这个问题的。

image.png

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 1995hanjian
    订阅者

    666

  • 其他回帖
  • soltus
    捐赠者 订阅者

    好家伙

推荐标签 标签

  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 127 回帖 • 5 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 3 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 143 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    83 引用 • 333 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    280 引用 • 4473 回帖 • 618 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    203 引用 • 2015 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    102 引用 • 151 回帖 • 150 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    7 引用 • 31 回帖 • 286 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    142 引用 • 256 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    20 引用 • 57 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    15 引用 • 42 回帖 • 618 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    515 引用 • 671 回帖
  • CodeMirror
    1 引用 • 2 回帖 • 60 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 252 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    162 引用 • 797 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 578 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 579 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    260 引用 • 1427 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 12 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    5 引用 • 11 回帖 • 2 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 138 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    23 引用 • 187 回帖 • 25 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    4713 引用 • 21602 回帖 • 365 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    53 引用 • 91 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    3 引用 • 16 回帖