ListKeymap Delete 可以跨越隔离的节点边界,并从不同的帧中加入内容
受影响包
列表 Keymap
QQ 微调版本
3.30.5(但我相信所有版本)
QQ 浏览器已使用
颜色
发生了什么事?
ListKeymap 删除处理器会以孤立方式跨越祖先:在列表项末尾删除时为真。
我有一个自定义框架节点:
{ 内容 : “ block+” , 孤立:是的, }
和一页里面的多个相框兄弟姐妹。
鉴于这份文件: 页 次 QQ 框架( 孤立: 真) 命令列表 列表项目 QQ 段落("你好") QQ 段落 ("世界") │ QQ 框架( 孤立: 真) QQ 段落 ("whoops") Cursor在"你好"的结尾
按下删除 * 只应在第一个框架内操作, 因为框架已隔离: true 。 特别是,紧接清单之后的段落应该是相关的前行内容,在被按下删除时,它应产生一个有"你好世界"的列表项目;第二个框架绝不应被修改.
不过,在启用ListKeymap后,删除横跨隔离框架边界并生成: 框架 1 命令列表 QQ 列表项目 ("你好") QQ 段落( “ worldwhoops ” ) 第二帧被完全删除。
• 预期行为
隔离:真正的边界应防止删除操作从第一个框架跨入第二个框架。
对于正常的编辑行为,当Cursor处于最后列表项的结尾,并且在同一框中,列表后立即有一段,该段应当被合并入最后列表项,而不是从后来使用的框中的内容.
在绝对最少情况下,操作不应修改或去掉第二个帧.
QQ 可复制示例 URL (可选)
无回复( N)
附加上下文(可选)
我计划的重要部分就是: = 节点创建({ 名称:“框架”, 内容 : “ block+” , 孤立:是的, ) (中文(简体) ).
Const Page = 节点. create ({ 名称:“页”, 内容 : “ frame* ” , ● `
最小复制量
最小的概念文件是: 页 次 [隔离] 命令列表 列表项目 QQ 段落 ("A") QQ 段落 ("B") │ [隔离] QQ 第( C)段
按"删除"A结尾. ** 预期:** 框架1完好无损 框架2未受影响 B组合并为A组
** 实际:** 框2被删除 "C"被合并为"B"
问题似乎来自特定列表的“删除”路径。
ListKeymap 删除处理最终调用项目Forward () 。 该命令使用ProseMirror的 jointPoint () 来寻找祖先等级中的接合点 。
重要的问题是,这种祖先搜索似乎并没有像ProseMirror的正常结构删除命令那样将NodeSpec.隔离作为一个边界.
相反,ProseMiror的孤立文件说:
“这种类型的节点的侧面算作正常编辑操作,如回放或起放不会跨越的边界。”
内容来源: ueberdosis/tiptap