求助一个 quicker 动作、思源按钮或快捷键,手动选中思源笔记的连续多个块时,点击思源按钮或 quicker 动作,实现以下功能:
- 将选中的多个块转换成引述或超级块。
- 将这个整体的引述或超级块折叠。
求助一个 quicker 动作、思源按钮或快捷键,手动选中思源笔记的连续多个块时,点击思源按钮或 quicker 动作,实现以下功能:
选中后 ctrl+q
触发, 触发后会将选中的内容转换成引用, 过程中会有点卡顿, 因为不知道为啥, 延时低了就会报错, 所以只能先让 sleep 时间长一点
触发前, , 触发后,
(()=>{
// 延迟执行
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function press_once(keyInit, selector = null) {
keyInit["bubbles"] = true;
if (selector == null) {
selector = document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none) .protyle-wysiwyg.protyle-wysiwyg--attr')
}
else if (typeof selector === 'function') {
selector = selector()
}
else if (typeof selector === 'string') {
selector = document.querySelector(selector)
}
if (!selector) return
selector.dispatchEvent(new KeyboardEvent('keydown', keyInit));
selector.dispatchEvent(new KeyboardEvent('keyup', keyInit));
}
async function add_new_line_before() {
press_once({
key: 'Enter',
ctrlKey: true,
shiftKey: true,
keyCode: 13, // 不推荐使用,但某些情况下需要
});
}
function click_right(ele) {
// 创建一个右键点击的 MouseEvent
const rightClickEvent = new MouseEvent('contextmenu', {
bubbles: true,
cancelable: true,
view: window,
button: 2
});
ele.dispatchEvent(rightClickEvent);
}
// 获取光标所在的元素
function getElementAtCursor() {
const selection = window.getSelection();
if (selection.rangeCount > 0) {
const range = selection.getRangeAt(0);
const startContainer = range.startContainer;
// 如果是文本节点,获取其父元素
const element = startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;
return element;
}
return null; // 如果没有选中内容或光标位置无效
}
// 获取当前选中的文本
async function get_selected_data() {
// 触发 ctrl+c, 复制选中的块
document.execCommand('copy');
// 获取剪贴板文本
return await navigator.clipboard.readText();
}
// 设置文本
async function paste_data(data) {
// 将处理后的文本复制到剪贴板
await navigator.clipboard.writeText(data);
// 触发 ctrl+v, 粘贴处理后的内容
document.execCommand('paste');
await sleep(20)
}
// 清空选中的内容: 先剪切, 再增加空行
async function clear_selected_data() {
// 触发 ctrl+x, 剪切选中的块, 目的是删除原有内容
document.execCommand('cut');
await add_new_line_before()
}
// 转换引用 - 使用系统自带的转换功能
function convert_quote_from_sys(event) {
click_right(event.target)
// 创建 mouseover 事件
const mouseOverEvent = new MouseEvent('mouseover', {
view: window,
bubbles: true,
cancelable: true,
});
let turn_ele = document.querySelector('.b3-menu__items>[data-id="turnInto"]')
turn_ele?.dispatchEvent(mouseOverEvent);
turn_ele = turn_ele?.querySelector('.b3-menu__submenu>.b3-menu__items>[data-id="quote"]')
if (!turn_ele) return false
turn_ele.click()
return true
}
// 转换引用 - 使用自己实现的的转换功能
async function convert_quote_from_my(clipboardText) {
// 删除原有内容, 并增加空行
await clear_selected_data()
let clipboardTextRet = clipboardText
.split('\n')
.map(line => "> " + line)
.join('\n')
// 粘贴处理后的文本
await paste_data(clipboardTextRet);
}
async function fold_block() {
await sleep(300);
let ele = getElementAtCursor();
if (!ele) return
while (!ele.parentNode.classList.contains("protyle-wysiwyg--attr") && ele.getAttribute('data-type') != 'NodeBlockquote') {
ele = ele.parentNode
}
click_right(ele)
await sleep(300)
document.querySelector('.b3-menu__items>[data-id="fold"]')?.click()
}
// 合并选中的块
async function handle_merge(event) {
// 获取当前选中的文本
let clipboardText = await get_selected_data();
// 如果不需要处理, 则直接返回
if (clipboardText == "") {
console.log("不需要处理")
return;
}
if (convert_quote_from_sys(event)) {
console.log("系统转换成功")
}
else {
await convert_quote_from_my(clipboardText)
console.log("自定义转换成功")
}
await fold_block();
}
// 事件监听
document.addEventListener('keydown', async (event) => {
// 检查是否按下了 Ctrl + q
if (event.ctrlKey && event.key === 'q') {
// event.preventDefault(); // 防止快捷键默认行为
await handle_merge(event);
}
});
})()
Communication channel for makers and users.
知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。
Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。
安全永远都不是一个小问题。
Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。
PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。
Mobi.css is a lightweight, flexible CSS framework that focus on mobile.
DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。
又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。
深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。
一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
链滴是一个记录生活的地方。
记录生活,连接点滴
互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。
各种网址链接、内容导航。
BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。
笔记整理交给我,一心只读圣贤书。
TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。
Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。
Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。
Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。
域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。