EmberSky
关注
124636 号成员,2024-01-05 18:44:41 加入
294
个人主页 浏览
360
帖子 + 回帖 + 评论
40h54m
在线时长
如果感觉我的回答对你有帮助, 请点击 感谢 支持一下, 谢谢!
  • 从思源代码块复制代码时, 不要删掉末尾换行

    2024-11-21 16:19

    末尾的空格也没了

    image.png

    image.png

  • 思源笔记能否设置标签点击进去默认是全局搜索而不是固定搜索?

    2024-11-19 16:44

    ctrl+shift+f 默认不就是全局搜索么?

  • 求助实现多个块的快速合并及折叠

    2024-11-19 14:31

    选中后 ctrl+q 触发, 触发后会将选中的内容转换成引用, 过程中会有点卡顿, 因为不知道为啥, 延时低了就会报错, 所以只能先让 sleep 时间长一点

    触发前, image.png, 触发后, image.png

    (()=>{
    // 延迟执行
    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-15 09:30

    你是开了什么主题么, 为什么我没有右上角这些内容

    image.png

  • 求助集市分组以及隐藏引述块的角标

    2024-11-14 21:07

    是只隐藏了计数

    备注不知道你要什么效果

    其他的功能我没用过, 没找到在哪使用 😂

  • 求助集市分组以及隐藏引述块的角标

    2024-11-14 19:12

    引述块, 超级块

    [data-type="NodeBlockquote"], [data-type="NodeSuperBlock"]{
    .protyle-attr--refcount.popover__block {display:none;}
    }
    
  • 图标隐藏

    2024-11-14 11:35

    .protyle-background__icon {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"))
    )
    
  • [js] 鼠标中键折叠块

    2024-11-13 09:38

    代码是通过模拟点击这个菜单里面的折叠 实现的

    必须有这个按钮之后, 中键才会生效, 我个人体验下来, 也感觉不是特别丝滑

    image.png

  • 有没有大佬帮忙做一个中键折叠的功能

    2024-11-12 10:51

    功能已更新, 可以去试下, 上面说的问题(短时间内第二次点击不生效)也解决了

    [js] 鼠标中键折叠块

  • 有没有大佬帮忙做一个中键折叠的功能

    2024-11-11 20:13

    这个, 应该能符合你的需求

    备注

    1. 只会折叠标题, 感觉你这个需求挺有意思的, 后续可能会研究下怎么折叠其他种类的块
    2. 折叠之后, 马上再次点击不会生效(不会展开), 需要等待 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()
            }
        }
    });
    
  • [js] 解决双击选取内容末尾带空格的问题

    2024-11-10 21:56

    像这种的, endOffset 会是负数, 导致代码报错

    image.png

  • [js] 解决双击选取内容末尾带空格的问题

    2024-11-10 19:43

    @JeffreyChen @fpxkHaj8dE 问题已经解决, 帖子的代码已经更新了

  • [js] 解决双击选取内容末尾带空格的问题

    2024-11-10 18:52

    截个图, 标记一下呗, 我这种看着没啥问题

    image.png

  • 建议行级代码内备注不要阻断文本复制

    2024-11-07 19:38

    最近刚做过这个, 光标在行级代码里面(不选中)的时候, ctrl+c 复制的是这个行级代码的纯文本, 而不是整行, 可以看下

    备注: 里面还有替换复制图片的功能, 如果不需要, 就把这个删掉

    handle_cp_img(element);

    [js] 复制行级代码或图片时, 替换原始复制

  • [js] 实现图片旋转 / 翻转后保存

    2024-11-07 19:21

    你不会被骂了吧, 哈哈, 这种专业的话术都能写出来

  • 表格边框颜色太浅

    2024-11-06 17:37

    不太懂 默认 是什么意思
    这个加了之后, 所有的表格都会变成这个颜色

  • 表格边框颜色太浅

    2024-11-04 10:22

    颜色, 粗细自己调

    th, td {
        border: 2px solid #4CAF50!important; /* 设置边框颜色为绿色 */
    }
    

    image.png

  • 合并块

    2024-11-02 20:52

    巧了,我刚刚做过这个

    可以参考这个帖子

    [js] 快捷键 合并和拆分块 -- 完善版

    如果有 bug,请再联系我

  • [js] 替换原始 跳转到开头和末尾 快捷键效果

    2024-11-02 12:22

    巧了, 驼峰看的我眼花

  • [js] 替换原始 跳转到开头和末尾 快捷键效果

    2024-11-02 12:02

    有没有一种可能, 这是 ai 写的

    我还是喜欢下划线, 看着直观, 但是 ai 生成的 js 代码, 都是驼峰, 我懒得改了

    所以现在是两种混在一起

  • 删除笔记的快捷键是什么?

    2024-11-02 11:38

    你是苹果系统么, 我 windows, 是 delete

    image.png

  • css 引述颜色修改怎么弄?

    2024-10-31 21:24
    1. 不知道你这个 .b3-typography blockquote 是干啥的, 就把他删了, 如有需要, 自行补充
    2. 需要几层就重复几次就行了, 颜色自己调

    image.png

    .protyle-wysiwyg [data-node-id].bq {
    border-left-color: #c7477c;
    }
    .protyle-wysiwyg [data-node-id].bq [data-node-id].bq {
    border-left-color: red;
    }
    .protyle-wysiwyg [data-node-id].bq [data-node-id].bq [data-node-id].bq{
    border-left-color: blue;
    }
    
    
    
  • [js] 复制行级代码或图片时, 替换原始复制

    2024-10-30 12:41

    复制行级代码时有 bug, 前缀会多一个空白字符

    需要将 handle_cp_line_code 函数修改成下面这个

    // 处理复制行级代码
    async function handle_cp_line_code(element) {
        if (!element) {
            return;
        }
        if (element.getAttribute('data-type') === 'code' && !hasSelectedText()) {
            // 如果是代码块,并且没有选中内容, 则复制代码块内容
            let content = element.textContent;
            if (content.startsWith('\u200B')) {
                content = content.slice(1); // 移除前面的零宽空格
            }
            await navigator.clipboard.writeText(content);
            await sleep(20)
        }
    }
    
  • 求助通过 js 模拟上键失效

    2024-10-25 16:24

    @88250 D 大, 可以帮忙看下么
    不能模拟上键的问题

  • 求助通过 js 模拟上键失效

    2024-10-25 14:15

    可以发下你测试的代码不, 我现在已经升到 3.1.10 了, 用这个测试, 是不行的

    (()=>{
    function press_once(keyInit) {
        keyInit["bubbles"] = true;
        let keydownEvent = new KeyboardEvent('keydown', keyInit);
        document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none) .protyle-wysiwyg.protyle-wysiwyg--attr')?.dispatchEvent(keydownEvent);
        let keyUpEvent = new KeyboardEvent('keyup', keyInit);
        document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none) .protyle-wysiwyg.protyle-wysiwyg--attr')?.dispatchEvent(keyUpEvent);
    }
    
    function press_enter() {
        press_once({
            key: 'Enter',
            keyCode: 13, // 不推荐使用,但某些情况下需要
        });
    }
    function press_up() {
        press_once({
            key: 'ArrowUp',
            keyCode: 38, // 不推荐使用,但某些情况下需要
        });
    }
    
    // 事件监听
    document.addEventListener('keydown', async (event) => {
        // 检查是否按下了 Ctrl + r
        if (event.ctrlKey && event.key === 'r') {
            // event.preventDefault(); // 防止快捷键默认行为
            // await handle_merge();
            console.log("123")
            press_up()
            console.log("123")
        }
    });
    
    })()
    
    
  • 大纲能设置字体大小吗,或者能自动换行吗?

    2024-10-21 17:23

    10px 自己调一下

    .layout__dockr ul>li>span.b3-list-item__text{font-size:10px;}