Skip to content

Handle whitespace characters when pasting HTML#14849

Closed
TCOTC wants to merge 3 commits intosiyuan-note:devfrom
TCOTC:fix/14775
Closed

Handle whitespace characters when pasting HTML#14849
TCOTC wants to merge 3 commits intosiyuan-note:devfrom
TCOTC:fix/14775

Conversation

@TCOTC
Copy link
Copy Markdown
Contributor

@TCOTC TCOTC commented May 18, 2025

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 18, 2025

@ruin1990

@TCOTC TCOTC marked this pull request as draft May 19, 2025 18:32
@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 19, 2025

我发现前面很多工作都白费功夫了,从网页复制的时候浏览器自动处理了一部分空白符,粘贴到思源的时候不知道在哪里又处理掉了一部分空白符,还剩下了一小部分回车符和换行符的问题,所以核心修改只剩下了两行代码:

  1. 移除所有回车符
  2. 将所有换行符转换为 BR 标签

@TCOTC TCOTC marked this pull request as ready for review May 19, 2025 19:04
@Vanessa219
Copy link
Copy Markdown
Member

不能在这里进行处理。 html 不仅是网页端的,还有一些编辑器内部的格式,特殊情况下还会包含思源的。

@Vanessa219 Vanessa219 closed this May 22, 2025
@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 22, 2025

那咋处理呢

@Vanessa219
Copy link
Copy Markdown
Member

复制的时候处理,不要在粘贴的时候处理。

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 23, 2025

复制的时候咋处理,思源又不能控制用户的其他软件?

@ruin1990
Copy link
Copy Markdown
Contributor

ruin1990 commented May 23, 2025

@ruin1990

@TOTOC
之前这样做是因为几个例子里出问题的换行全都出在span上,其他的元素暂时没发现这种问题,想看看多等几个版本迭代看看是不是稳定了再说。倒是右键菜单复制到siyuan里应该可以加上这部分逻辑。
还有一个原因是当初我测试例子里面有几个带有latex的全部被影响到了,网页原文及剪藏后的笔记的公式内出现了换行,不过现在因为剪藏之后网页会被刷新,其实看不出来。但是笔记内的公式是有问题。
另外目前来看加粗和斜体以及SVG的实验性功能好像没有人报过问题(默认是关闭的我也不确定有没有人有开起来)

@Vanessa219
Copy link
Copy Markdown
Member

通过 siyuan-chrome

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 23, 2025

这个不是剪藏,是复制粘贴 HTML,要通用的

@Vanessa219
Copy link
Copy Markdown
Member

可以用插件复制

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 24, 2025

不合理,应该做到无论从哪里复制的HTML都有正确的换行

@Vanessa219
Copy link
Copy Markdown
Member

何为正确的?这没有一个标准,应该保持用户原有的输入意图。

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 25, 2025

如果原本看上去没换行,那复制粘贴到思源里也不应该换行;如果原本看上去有换行,那复制粘贴到思源里就应该换行;如果原本看上去有一个换行,那复制粘贴到思源里就不应该有两个换行……

以视觉呈现为标准。用户的意图跟用户看到的保持一致。

@Vanessa219
Copy link
Copy Markdown
Member

但是你这样修改的话,用户原本的换行会被移除。原本的 \n 会被替换为 br

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 25, 2025

不这样修改的话,原本的换行 \n 就转换为空格了,根本不合理嘛

video.webm

@Vanessa219
Copy link
Copy Markdown
Member

GitHub 也是这样的

image

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 27, 2025

你要看 white-space 属性。我说的是网页上的换行复制到思源里就变成空格了

@Vanessa219
Copy link
Copy Markdown
Member

@88250 "/api/lute/html2BlockDOM" 看上去是进过这个接口后换行就变为空格了。

@88250
Copy link
Copy Markdown
Member

88250 commented May 27, 2025

这是设计如此,否则会有其他问题 #6052

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 27, 2025

我试了一下发现只有 Word 会莫名奇妙的在没有换行的地方添加 \n,这里应该单独针对处理,否则其他地方的 \n 都会有问题

只有从 Word 复制的 HTML 才将换行转换为空格:(以 <html xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n 开头)

image

@88250
Copy link
Copy Markdown
Member

88250 commented May 27, 2025

动了这个地方的逻辑其他地方可能也会有影响,所以目前不考虑改动了。

@TCOTC
Copy link
Copy Markdown
Contributor Author

TCOTC commented May 27, 2025

现在其他地方的换行已经有影响了,我觉得还是出现不符合预期的情况再单独处理

@88250
Copy link
Copy Markdown
Member

88250 commented May 27, 2025

我的意思是除了 word 可能还有其他地方需要这样处理,所以最好是不要动,另外,这个动了可能还会影响分块,影响范围太大了。

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants