场景: 将有道云笔记迁移到思源笔记
需要逐个笔记进行拷贝粘贴, 万恶的有道云笔记不支持图片的拷贝(大图片),需要保存为本地图片在插入到思源笔记。
当前的问题: 思源笔记插入图片的菜单比较远,需要二级菜单才能点到对应的功能,操作起来耗时费力。
期望:
方案 1: 添加“插入图片”的快捷键
方案 2: 在工具栏添加“插入图片”按钮
场景: 将有道云笔记迁移到思源笔记
需要逐个笔记进行拷贝粘贴, 万恶的有道云笔记不支持图片的拷贝(大图片),需要保存为本地图片在插入到思源笔记。
当前的问题: 思源笔记插入图片的菜单比较远,需要二级菜单才能点到对应的功能,操作起来耗时费力。
期望:
方案 1: 添加“插入图片”的快捷键
方案 2: 在工具栏添加“插入图片”按钮
我简单写了一个 js 片段, 不知道能否符合你的要求
// 增加按钮&快捷键实现: 插入图片或文件
// 修改有标记的配置 "[可修改]"
(async () => {
/*******************************自定义配置**************************************/
// 按钮id
const btn_e = {
/***********左上角**********/
// 返回按钮(左箭头)
barBack : "barBack",
// 前进按钮(右箭头)
barForward : "barForward",
// 同步按钮
barSync : "barSync",
// 皇冠图标
toolbarVIP : "toolbarVIP",
// 日历热力图插件
heatmap : "plugin_Calendar-heatmap_0",
/***********右上角**********/
// 搜索按钮
barSearch : "barSearch",
// 插件按钮
barPlugins : "barPlugins",
// 命令面板按钮
barCommand : "barCommand",
/***********左下角**********/
// 底栏中的隐藏侧栏按钮
barDock : "barDock",
/***********右下角**********/
// 底栏帮助按钮
statusHelp : "statusHelp",
}
// 插入位置
const position_e = {
// 插入位置: 目标元素前面
before : "beforebegin",
// 插入位置: 目标元素后面
after : "afterend",
}
// [可修改] 触发快捷键
const hotkey = "ctrl+alt+g"
// [可修改] 按钮 插入的位置 跟 哪个元素 有关
const btn_basic_id = btn_e.barForward
// [可修改] 按钮 插入到 元素 的前面还是后面
const btn_post = position_e.after
// [可修改] 按钮 的悬浮显示内容
const btn_tips = "插入图片或文件"
/*******************************代码分割线**************************************/
const icon_e = {
// 设置
setting : "iconSettings",
// 代码
code : "iconCode",
// 刷新
refresh : "iconRefresh",
// 调试
debug : "iconBug",
// 下方
after : "iconAfter",
// 下载
download : "iconDownload",
}
// 快捷键监听
document.addEventListener('keydown', event => {
console.log("hotkey")
if (checkShortcut(hotkey, event)) {
// 阻止默认行为,比如浏览器的保存网页操作
// event.preventDefault();
quickInsertImgFunc()
}
});
/* 重新加载会有延时, 所以需要等待1s之后再添加按钮 */
setTimeout(() => {
// 目标元素id, 插入位置, 新元素id, 显示内容, 图标, 点击回调
addElement(btn_basic_id, btn_post, "custom_quick_inser_img", btn_tips, icon_e.download, quickInsertImgFunc);
}, 1000);
function checkShortcut(hostkey, event) {
const keys = hostkey.split("+");
const key = event.key.toLowerCase();
const isCtrl = event.ctrlKey ? "ctrl+" : "";
const isAlt = event.altKey ? "alt+" : "";
const isShift = event.shiftKey ? "shift+" : "";
const combination = isAlt + isCtrl + isShift + key;
// console.log(keys.sort().join("+"))
// console.log(combination)
return keys.sort().join("+") === combination;
}
// 目标元素id, 插入位置, 新元素id, 显示内容, 图标, 点击回调
function addElement(targetId, position, newElementId, displayContent, icon, clickCallback) {
let barMode = document.getElementById(targetId);
if (barMode === null) {
return ""
}
barMode.insertAdjacentHTML(
position,
`<div id="${newElementId}" class="toolbar__item ariaLabel" aria-label="${displayContent}"></div>`
);
let newBtn = document.getElementById(newElementId);
if (newBtn === null) {
return ""
}
newBtn.innerHTML = `<svg><use xlink:href="#${icon}"></use></svg>`;
newBtn.addEventListener("click", clickCallback);
return newElementId
}
function quickInsertImgFunc() {
const more_btn = document.querySelector('.layout__center [data-type="more"]:not([data-menu]');
if (more_btn) {
more_btn.click();
setTimeout(() => {
const insert_btn = document.querySelector('#commonMenu > div.b3-menu__items > button:nth-child(1) > span > input');
if (insert_btn) {
insert_btn.click();
}
}, 200);
}
}
})()
InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。
安全 · 稳定 · 快速
为跨境从业人员提供专业的跨境浏览器
域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。
脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。
微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。
OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
为成为自由职业者在家办公而努力吧!
Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。
PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。
App(应用程序,Application 的缩写)一般指手机软件。
Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。
WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。
本标签主要用于分享网络空间安全专业的学习笔记
JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。
HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。
心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。
H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。
这是一个不能说的秘密。
Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。
Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。
FlowUs.息流 个人及团队的新一代生产力工具。
让复杂的信息管理更轻松、自由、充满创意。
PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于