Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修正 ExpandMarker 规则,避免无法取消选中区域 #681

Closed
wants to merge 8 commits into from

Conversation

zTree
Copy link
Contributor

@zTree zTree commented Aug 4, 2020

此 Issue 涉及的模式: 即使渲染模式

Issue 现象:

当选中多行内容,且首行为 noteElement 时,鼠标单击选中区域内的任何位置,都不会取消选中内容。
ExpandMarker 001

经查找,是由于在解决 #615 这个 issue 后,引入的此 issue

补充说明:

在解决此问题时,发现不能仅仅在 setSelectionFocus(range); 之前 判断 range.collapsed ,还会有情况导致 展开的 Node 并不是当前点击的 Node
ExpandMarker 002

因为当 range.collapsed = false 时, click 事件触发的 event.target 会与 range 不符:

  1. 用鼠标进行多行选中时,会触发 click 事件,且 event.target 为 ir.element;
  2. 当前已经有多行选中时,单击选中区域内的任何位置,触发的 click 事件 event.target 为 实际目标,但 rang 依然为之前多行选中的情况,这时,继续按照 range.startContainer 来处理就有所不妥,从而导致操作的目标并不是实际 click 的目标;

探讨问题:

  1. expandMarker 方法中 处理 nextNode 和 previouseNode 部分的逻辑,我始终无法测试出来,不知道需要满足哪种情况才会进入这两个部分?因为不了解具体原因,所以这两个地方,没敢擅自修改为 与 event.target 关联。
  2. 是否可以考虑当鼠标选中多行时(即 range.collapsed = false 且 startContainer 和 endContainer 关联的 nodeElement 不是同一个时),不展开 range 范围内任何一个 nodeElement

    进一步引申,当选择多行时,对于 首行 的内容,尤其是 H1-H6 这种标题类型,虽然并没有选中开头的 标题定义“#”,但是在复制时,是否可以考虑人工添加进去,以保证一致性?

@Vanessa219
Copy link
Owner

  1. 当两个标记符号链接在一起时会处理 nextNode 和 previousNode

image

  1. 是的,这样也许更统一

  2. 复制的话可关注 IR 模式复制需要带 mark #688

@Vanessa219
Copy link
Owner

我 merge 了一下冲突,但是不太清楚这个要怎么弄
image

非常感谢,我手动合并好了。

@Vanessa219 Vanessa219 closed this Aug 5, 2020
@zTree
Copy link
Contributor Author

zTree commented Aug 5, 2020

奇怪,我提交的时候,还显示没有冲突的,合并正常就好

@Vanessa219 Vanessa219 added this to the 3.4 milestone Aug 5, 2020
@Vanessa219 Vanessa219 self-requested a review August 5, 2020 09:10
Vanessa219 added a commit that referenced this pull request Aug 5, 2020
@zTree
Copy link
Contributor Author

zTree commented Aug 6, 2020

今天同步代码过来,发现一个问题,我昨天也考虑欠妥,建议你不展开所有的 nodeElement,但 Vditor 里面的 nodeElement 不只是 H1-H6,代码段那些也是 nodeElement,现在的情况是 代码段都无法进行文本选中了。。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants