思源笔记折腾记录 - 快速合并子文档到父文档

本贴最后更新于 710 天前,其中的信息可能已经时异事殊

首先实现一个函数, 用来把文档转换成目标文档的一个标题

import 自定义菜单 from 'siyuan-noob@1.3.33/customMenu/index.js' import 核心api from "siyuan-noob@1.3.33/utilKernel/kernelApi.js" import {Dialog} from "siyuan-noob@1.3.33/customDialog/index.js"

首先实现一下菜单:

自定义菜单.编辑器菜单.注册自定义菜单项({ id:"转换子文档为标题", 文字:"转换所有子文档为标题(前置)", 点击回调函数:async(e)=>{ let 当前块id=自定义菜单.编辑器菜单.菜单状态.当前块id 显示遮罩() await 转换所有子文档为标题(当前块id) 隐藏遮罩() window.location.reload() } }) 自定义菜单.编辑器菜单.注册自定义菜单项({ id:"转换子文档为标题后置", 文字:"转换所有子文档为标题(后置)", 点击回调函数:async(e)=>{ let 当前块id=自定义菜单.编辑器菜单.菜单状态.当前块id 显示遮罩() await 转换所有子文档为标题(当前块id,true) 隐藏遮罩() window.location.reload() } }) 自定义菜单.文档树菜单.注册自定义菜单项({ id:"转换子文档为标题", 文字:"转换所有子文档为标题(前置)", 点击回调函数:async(e)=>{ let 当前块id=自定义菜单.文档树菜单.菜单状态.当前文档id 显示遮罩() await 转换所有子文档为标题(当前块id) 隐藏遮罩() window.location.reload() } }) 自定义菜单.文档树菜单.注册自定义菜单项({ id:"转换子文档为标题后置", 文字:"转换所有子文档为标题(后置)", 点击回调函数:async(e)=>{ let 当前块id=自定义菜单.文档树菜单.菜单状态.当前文档id 显示遮罩() await 转换所有子文档为标题(当前块id,true) 隐藏遮罩() window.location.reload() } })

搞个遮罩防止编辑,因为转换过程还是要一会儿嘛

let dialog function 显示遮罩(){ dialog=new Dialog({ title: "正在执行操作", content: '<div id="custom-dialogContent"></div>', width: "90vw", destroyCallback: async () => { }, disableClose:true }); dialog.initElement(); dialog.show() dialog.appendMsg=(content)=>{ dialog.element.querySelector('.b3-dialog__form').innerHTML+=content } } function 隐藏遮罩(){ dialog.destroy() }

首先实现一个转换函数:

export async function 转换文档为目标文档标题(文档id, 目标文档id,后置,插入位置) { let 目标文档内容 = await 核心api.getDoc({ id: 目标文档id, size: 102400, }); let div = document.createElement("div"); div.innerHTML = 目标文档内容.content; let 目标块id = div .querySelector("[data-node-id]") .getAttribute("data-node-id"); if(后置){ 目标块id =Array.from(div .querySelectorAll("[data-node-id]:not(div[data-node-id] div[data-node-id])") ).pop() .getAttribute("data-node-id"); } let data = await 核心api.doc2Heading({ srcID: 文档id, after: 后置?true:false, targetID: 目标块id, }); dialog.appendMsg(` <label class="b3-label fn__flex"> <div class="fn__flex-1"> <div class="b3-label__text"> 转换文档${文档id}${目标文档id}内标题完成 </div> </div> <div class="fn__space"></div> `) }

然后我们来批处理一下

export async function 批量转换文档为标题(文档组,文档id,后置){ //这里为啥要倒一下 for await(let 文档属性 of !后置?文档组.reverse():文档组){ if(文档属性.subFileCount){ await 转换所有子文档为标题(文档属性.id,后置) } await 转换文档为目标文档标题(文档属性.id,文档id,后置) } }
export async function 转换所有子文档为标题(文档id,后置){ let 文档属性 = await 核心api.sql({stmt:`select * from blocks where id = '${文档id}'`}) let 子文档列表 = await 核心api.listDocsByPath( { notebook:文档属性[0].box, path: 文档属性[0].path, sort: window.siyuan.config.fileTree.sort } ) await 批量转换文档为标题(子文档列表.files,文档id,后置) }

使用方法

还是一样,你可以剪藏这篇笔记,通过:

思源笔记折腾记录 - 运行你的笔记 - 链滴 (ld246.com)

里面的代码片段来直接运行笔记内容就可以了.


水完收工,如果这玩意对你有用可以去爱发电给我买杯咖啡哒

leolee9086 正在创作一些简单的技术教程和小工具,以及设计方面内容 | 爱发电 (afdian.net)

  • 思源笔记

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

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

    24613 引用 • 100904 回帖
2 操作
leolee 在 2023-04-08 03:19:41 更新了该帖
leolee 在 2023-04-07 21:29:25 更新了该帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 5 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 548 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 2 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 226 回帖 • 137 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 415 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 3 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 817 关注
  • CSDN

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

    14 引用 • 155 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 2 关注
  • JRebel

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

    26 引用 • 78 回帖 • 678 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    267 引用 • 666 回帖 • 1 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 7 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 635 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 115 关注
  • 脑图

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

    31 引用 • 96 回帖 • 1 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 649 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    425 引用 • 1250 回帖 • 598 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Visio
    1 引用 • 2 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 490 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 589 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 2 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 660 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 524 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    78 引用 • 430 回帖