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

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

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

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)

  • 思源笔记

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

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

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    178 引用 • 997 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 370 关注
  • 开源中国

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

    7 引用 • 86 回帖
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    5 引用 • 107 回帖
  • 思源笔记

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

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

    23025 引用 • 92624 回帖
  • Webswing

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

    1 引用 • 15 回帖 • 637 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 724 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 29 关注
  • BookxNote

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

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

    1 引用 • 1 回帖 • 1 关注
  • DNSPod

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

    6 引用 • 26 回帖 • 518 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 364 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    86 引用 • 122 回帖 • 626 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 160 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 745 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 483 关注
  • 游戏

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

    177 引用 • 816 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    121 引用 • 604 回帖 • 1 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • 音乐

    你听到信仰的声音了么?

    61 引用 • 511 回帖
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    34 引用 • 148 回帖
  • 自由行
    4 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 3 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 159 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    105 引用 • 127 回帖 • 370 关注