-
[css] 字体样式排除下划线
2024-12-02 21:20在你的 css 里面加上下划线颜色
.protyle-wysiwyg [data-node-id].bq [data-type~=u]{ color: red; border-bottom-color:red; }
-
喜欢之前默认主题,想恢复,请教怎么弄?
2024-12-02 16:52只改了下背景色, 其他的看起来没啥改动
.protyle-wysiwyg .bq {background-color: var(--b3-theme-surface-light);}
-
[css] 字体样式排除下划线
2024-12-02 16:28颜色自己调
.protyle-wysiwyg span[data-type~=u] {border-bottom-color:#222222;}
-
有没有自定义表格样式的 css 代码
2024-12-02 14:50颜色自己调吧
/* 设置偶数行颜色*/ .protyle-wysiwyg table tr:nth-child(even) td{background-color: var(--b3-theme-background);} /* 设置表头边框颜色 */ .protyle-wysiwyg table th{border-color:red;} /* 设置表格边框颜色 */ .protyle-wysiwyg table td{border-color:red;}
-
建议给“未引用资源”加个“刷新”键
2024-11-29 11:48js 可以做, 可以等大佬做一下
方式一: 增加刷新按钮
监听
未引用的资源文件
, 有就增加刷新按钮(不太好处理, 感觉有点浪费性能)
方式二: 使用快捷键, 比较好做
触发流程
- 监听到刷新快捷键后
- 触发快捷键
alt+p
两次 - 点击
资源按钮
-
求助实现多个块的快速合并及折叠
2024-11-19 14:31选中后
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); } }); })()
-
求助集市分组以及隐藏引述块的角标
2024-11-14 19:12引述块, 超级块
[data-type="NodeBlockquote"], [data-type="NodeSuperBlock"]{ .protyle-attr--refcount.popover__block {display:none;} }
-
能不能通过 API 获取“当前活动文档的 ID”?
2024-11-14 10:19这个可以不?
// 打印显示内容的文档的id document.querySelectorAll('div.fn__flex-1.protyle:not(.fn__none) span.protyle-breadcrumb__item.protyle-breadcrumb__item--active').forEach( file_ele => console.log(file_ele.getAttribute("data-node-id")) ) // 打印所有页签文档的id document.querySelectorAll('div.fn__flex-1.protyle span.protyle-breadcrumb__item.protyle-breadcrumb__item--active').forEach( file_ele => console.log(file_ele.getAttribute("data-node-id")) )
-
有没有大佬帮忙做一个中键折叠的功能
2024-11-11 20:13这个, 应该能符合你的需求
备注
- 只会折叠标题, 感觉你这个需求挺有意思的, 后续可能会研究下怎么折叠其他种类的块
- 折叠之后, 马上再次点击不会生效(不会展开), 需要等待 1s(很短)后再次点击才会生效, 应该是思源本身的问题, 折叠的图标连续两次点击, 第二次也不会生效, 写味也有这个问题, 暂时先不管了
document.addEventListener('mousedown', function(event) { // 判断是否是中键点击 if (event.button === 1) { // 中键的 button 值为 1 let fold_ele = document.querySelector('.protyle-gutters:not(.fn__none)')?.querySelector('[data-type="fold"]'); if (fold_ele) { event.preventDefault(); // 阻止默认中键点击的行为 fold_ele.click() } } });
-
建议行级代码内备注不要阻断文本复制
2024-11-07 19:38最近刚做过这个, 光标在行级代码里面(不选中)的时候,
ctrl+c
复制的是这个行级代码的纯文本, 而不是整行, 可以看下备注: 里面还有替换复制图片的功能, 如果不需要, 就把这个删掉
handle_cp_img(element);