场景: 将有道云笔记迁移到思源笔记
需要逐个笔记进行拷贝粘贴, 万恶的有道云笔记不支持图片的拷贝(大图片),需要保存为本地图片在插入到思源笔记。
当前的问题: 思源笔记插入图片的菜单比较远,需要二级菜单才能点到对应的功能,操作起来耗时费力。
期望:
方案 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);
}
}
})()
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。
子曰:“工欲善其事,必先利其器。”
代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。
用户在该标签下分享代码片段时需在帖子标题前添加 [css]
或 [js]
用于区分代码片段类型。
webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。
提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。
希望你我能在旅途中找到人生的下一站。
SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
即用的 Vim-IDE。
IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。
开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。
FreeMarker 是一款好用且功能强大的 Java 模版引擎。
JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。
用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖。
用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/
Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。
React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。
V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。
禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。
FlowUs.息流 个人及团队的新一代生产力工具。
让复杂的信息管理更轻松、自由、充满创意。
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。
NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。
Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。
面试造航母,上班拧螺丝。多面试,少加班。
Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于