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

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

一、实现方式

首先引入依赖,惯例还是 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)

  • 思源笔记

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

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

    26115 引用 • 108426 回帖
1 操作
leolee 在 2023-04-08 03:28:33 更新了该帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 441 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖 • 3 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 10 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖
  • 生活

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

    230 引用 • 1432 回帖
  • Spark

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

    74 引用 • 46 回帖 • 568 关注
  • 创造

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

    186 引用 • 1021 回帖
  • RemNote
    2 引用 • 16 回帖 • 25 关注
  • HHKB

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

    5 引用 • 74 回帖 • 521 关注
  • TensorFlow

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

    20 引用 • 19 回帖 • 2 关注
  • Typecho

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

    12 引用 • 67 回帖 • 445 关注
  • AWS
    11 引用 • 28 回帖 • 8 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 2 关注
  • JRebel

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

    26 引用 • 78 回帖 • 677 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 68 关注
  • Anytype
    3 引用 • 31 回帖 • 28 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 4 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • HTML

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

    108 引用 • 295 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 507 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 7 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1396 回帖 • 245 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 405 关注
  • 宕机

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

    13 引用 • 82 回帖 • 74 关注