给Obsidian增加高亮Callout/Admonition中文字功能(用于一键中英对照&pdf回链)
背景
我看书/文章的时候经常采用翻译成中英对照的形式。而对于callout中的内容一点击就会打开,不能直接选择进行高亮,因此之前我的中英对照是只有英文在callout中(参考前面的文章)。因此增加点击callout不直接展开、选择callout中的文字可以进行高亮的功能。
效果
1. 一键从pdf到中英对照双列callout,并且附上pdf回链

2. 可以对callout中的文字&普通的文字进行高亮(可以在设置中自定义设置)

3. 双列callout可以轻松调整宽度(搭配Editor Width Slider)

4. 回链可以正常点击,跳转到pdf (这里可以是bookxnote、zotero、bookmaster等等)

实现
禁止callout的点击事件。注册mousedown事件,在立面判断是点击到callout元素,取消事件的默认行为、禁止事件冒泡
高亮文字。这里的关键是如何从选择的文字来修改原始文件内容,这里obsidian的editor接口无法直接获得在callout中选择的文字对应于文件内容的什么什么位置。如果采用获得选择的文字,然后对文件内容进行替换的话,无法处理所选择的文字在文中出现多次的问题。因此这里我采用的是通过docView来联系DOM元素与文件内容,获得所点击DOM元素在文件内容中的索引,然后获得所选文字在DOM元素中的offset,然后修改文件内容。