思源笔记折腾记录 - 嵌入块批量操作 - 批量删除

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

一、实现方式

首先引入依赖,惯例还是 esm.sh,没啥特殊需要就不要修改版本号了(siyuan-noob 我更新比较频繁,直接拉最新版容易有 bug)。

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

然后注册一个菜单项,这里就先不弄多语言啥的了,判定函数的意思是只有当块类型为嵌入块而且只有一个实例在显示的时候才会有这个菜单项:

自定义菜单.块标菜单.注册自定义菜单项({
	id:"嵌入块批量删除",
	文字:"批量删除所在文档",
	判定函数:()=>{
		return 自定义菜单.块标菜单.菜单状态.当前块类型=='NodeBlockQueryEmbed'
		&&
		!document.querySelectorAll(
			`div[data-node-id="${自定义菜单.块标菜单.菜单状态.当前块id}"]`
		)[1]

	},
	点击回调函数:(e)=>{
		let 当前块元素 = document.querySelector(`[data-node-id="${自定义菜单.块标菜单.菜单状态.当前块id}"]`)
		移除嵌入块所有文档(当前块元素)
	}
})

来实现一下那个移除嵌入块所有文档的函数

export async function  移除嵌入块所有文档(嵌入块元素){
		let 嵌入块内部元素id数组 = []
		嵌入块元素.querySelectorAll('div[data-node-id]:not([data-type="NodeBlockQueryEmbed"])').forEach(
		el=>嵌入块内部元素id数组.push(el.dataset.nodeId)
		)
		await 批量移除所在文档(嵌入块内部元素id数组)
		嵌入块元素.querySelector(
			'.protyle-action__reload'
		).click()
}

然后我们把这个数组里面所有没有子文档的文档全都删掉

export async function 批量移除所在文档(id数组){
	let sql=`select path from blocks where false `
	id数组.forEach(
		id=>{
			sql =sql+`or id='${id}'`
		}
	)
	let 文档路径数组=[];
	(await 核心api.sql({stmt:sql})).forEach(
		item=>{文档路径数组.push(item.path)}
	)
        文档路径数组=await 去除非空文件夹(文档路径数组)
        let confirmed =Iconfirm(`确认删除${文档路径数组.length}个文档?`)
	if(confirmed ){
		await 核心api.removeDocs({paths:文档路径数组})
	}
}

上面弄了个去除非空文件夹,避免把有子文档的也给删了,这个去除非空文件夹是这么实现的:

  export async function 去除非空文件夹(文档路径数组){
    let 过滤后数组=[]
    文档路径数组=Array.from(new Set(文档路径数组))

	for  await(let item of 文档路径数组){
		let sql = `select path 
				from blocks 
			 	where not path = '${item }' 
				and 
				path like '${item.replace('.sy','')}%'
                and type ='d'`
        let res = await 核心api.sql({stmt:sql})
        if(!res[0]){
            过滤后数组.push(item)
        }
    }
    return 过滤后数组
}

上面为了避免 electron 自己的确认框会造成窗口失去焦点,我们弄一个自己的确认框。

export function Iconfirm(str){
	let  _confirm
	let userAgent = navigator.userAgent.toLowerCase();
	if (window.require){
	            const { dialog } = require('@electron/remote');//修改默认对话框,修复electron弹出默认对话              框后页面失去焦点的bug
	            _confirm = function(str){
	                  var options = {
	                    type: 'warning',
	                    buttons: ["确认删除","取消删除"],
	                    defaultId: 0,
	                    cancelId:1,
	                    detail:'',
	                    message: str
	                  }
	                  var flag = dialog.showMessageBoxSync(null,options);
	                  if(flag==0){
	                      return true;
	                  }else{
	                      return false;
	                  }
	           }
	}else{
		_confirm=window.confirm
	}
	return _confirm(str)
}

//感谢:
//版权声明:本文为CSDN博主「modernk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/modernk/article/details/128131919

二、使用方法

直接把这篇文档弄到你本地(注意代码块是不是 js 嗷)使用之前我发的这个代码片段就可以了,就那个运行到代码片段。

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

image


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

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

  • 思源笔记

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

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

    18833 引用 • 70505 回帖 • 1 关注
1 操作
leolee 在 2023-04-08 03:28:33 更新了该帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 微软

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

    8 引用 • 44 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 3 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 172 关注
  • Jenkins

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

    51 引用 • 37 回帖 • 1 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 693 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 4 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 154 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖 • 1 关注
  • Quicker

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

    20 引用 • 74 回帖 • 2 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    1 引用 • 11 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖 • 1 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 410 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 428 关注
  • V2Ray
    1 引用 • 15 回帖 • 3 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 46 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 598 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 36 关注
  • 旅游

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

    85 引用 • 895 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 55 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 462 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 4 关注
  • abitmean

    有点意思就行了

    24 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 592 关注