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

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

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

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)

  • 思源笔记

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

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

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 786 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 2 关注
  • SSL

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

    70 引用 • 193 回帖 • 412 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 2 关注
  • TensorFlow

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

    20 引用 • 19 回帖 • 1 关注
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖 • 1 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 570 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    588 引用 • 3538 回帖
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 3 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • 运维

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

    151 引用 • 257 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    95 引用 • 901 回帖
  • Access
    1 引用 • 3 回帖 • 2 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 643 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    57 引用 • 25 回帖 • 2 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 19 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 342 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 7 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    187 引用 • 318 回帖 • 256 关注
  • Latke

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

    71 引用 • 535 回帖 • 826 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 250 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 545 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 702 关注