Closed TCOTC closed 2 weeks ago
这个目前可能无法规避,因为我没找到读当前光标所在块内容的方法,所以插件没办法判断你是不是在代码块内部。对于这个解决方法就是只能关掉自动识别,然后需要识别时候就用斜杠菜单来处理。
那就先这样吧,不过我发现这个保存不起作用,要手动重载才会生效:
这个有点怪,理论上每次粘贴都读一次插件存储的
这个目前可能无法规避,因为我没找到读当前光标所在块内容的方法,所以插件没办法判断你是不是在代码块内部。对于这个解决方法就是只能关掉自动识别,然后需要识别时候就用斜杠菜单来处理。
光标所在元素的class名称会多一个block-focus
,光标在代码块内的话,代码块元素的class会变成"code-block block-focus"
,所以可以通过document.getElementsByClassName("code-block block-focus")
这种方式来判断是否在代码块内
这个目前可能无法规避,因为我没找到读当前光标所在块内容的方法,所以插件没办法判断你是不是在代码块内部。对于这个解决方法就是只能关掉自动识别,然后需要识别时候就用斜杠菜单来处理。
光标所在元素的class名称会多一个
block-focus
,光标在代码块内的话,代码块元素的class会变成"code-block block-focus"
,所以可以通过document.getElementsByClassName("code-block block-focus")
这种方式来判断是否在代码块内
感谢大佬!我今天下午试一下
我这边根据这个css获取到的obj是这个,似乎没办法提取有用的信息
光标所在元素的 class 名称会多一个 block-focus
会吗?我这里没有
我提供一个不同的思路,看当前编辑器面包屑:
p.s. 但我刚刚发现如果是用键盘移动光标的话这个 icon 不会变
我这边根据这个css获取到的obj是这个,似乎没办法提取有用的信息
光标不在代码快内是没有内容的,光标在代码块内会返回该代码块的
光标不在代码快内是没有内容的,光标在代码块内会返回该代码块的
我这边尝试了如下操作: 光标在空代码块内部 光标在空块内部 光标在有内容的代码块内部 光标在空普通块内部 光标在有内容普通块内部 似乎都是一样的
我提供一个不同的思路,看当前编辑器面包屑:
p.s. 但我刚刚发现如果是用键盘移动光标的话这个 icon 不会变
确实,这个问题有点麻烦
光标不在代码快内是没有内容的,光标在代码块内会返回该代码块的
我这边尝试了如下操作: 光标在空代码块内部 光标在空块内部 光标在有内容的代码块内部 光标在空普通块内部 光标在有内容普通块内部 似乎都是一样的
不可能啊我都试过的,可惜现在手头没有电脑
@zxkmm 要不你看看打字机插件是怎么获取到当前焦点块的?
@choyy @TCOTC 感谢两位大佬,我再看看。因为这个粘贴事件是思源控制的,所以顺序可能有点难以处理(或者根本没法处理)我尽量看看
@zxkmm
我有个疑问啊,你的 .block-focus 是从哪来的?我这里最多也就是 .protyle-wysiwyg--select 和 .protyle-wysiwyg--hl
思源的代码里我也没找到 block-focus 。
https://github.com/user-attachments/assets/50191513-4a39-461a-8be1-680e0b8b7470
确实默认没有...才发现是主题自己加的,不过也发现选择光标所在的块也很简单,下面几行代码就能获得(block):
let block = window.getSelection()
&& window.getSelection().focusNode
&& window.getSelection().focusNode.parentElement; // 当前光标
while (block != null && block.dataset.nodeId == null) block = block.parentElement;