场景: 将有道云笔记迁移到思源笔记
需要逐个笔记进行拷贝粘贴, 万恶的有道云笔记不支持图片的拷贝(大图片),需要保存为本地图片在插入到思源笔记。
当前的问题: 思源笔记插入图片的菜单比较远,需要二级菜单才能点到对应的功能,操作起来耗时费力。
期望:
方案 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);
}
}
})()
RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
Quicker 您的指尖工具箱!操作更少,收获更多!
有什么新发现就分享给大家吧!
IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。
Communication channel for makers and users.
面试造航母,上班拧螺丝。多面试,少加班。
为成为自由职业者在家办公而努力吧!
jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。
知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。
生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。
一些有用的避坑指南。
沉迷游戏伤身,强撸灰飞烟灭。
持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。
JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。
Logseq 是一个隐私优先、开源的知识库工具。
Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.
星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网
gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。
资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。
BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。
笔记整理交给我,一心只读圣贤书。
OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于