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

Content Not Refreshed Correctly for pasteEventHasPlainTextOnly Special Case #1103

Open
chadrschroeder opened this issue Oct 19, 2023 · 3 comments · May be fixed by #1107
Open

Content Not Refreshed Correctly for pasteEventHasPlainTextOnly Special Case #1103

chadrschroeder opened this issue Oct 19, 2023 · 3 comments · May be fixed by #1107

Comments

@chadrschroeder
Copy link

Say I create a paste handler that is going to change the incoming text like:

elem = document.querySelector('trix-editor')
elem.addEventListener('trix-paste', function() {
  length = elem.editor.getDocument().toString().length
  elem.editor.setSelectedRange([0, length])
  elem.editor.activateAttribute('bold')
})

If I paste text from an application like Microsoft Word, the clipboardData types will include "text/plain", "text/html", "text/rtf" and "Files". The Trix editor will show the text in bold after pasting.

If I paste text from a plain text editor like TextEdit, the clipboardData types will only include "text/plain". We'll get into the special pasteEventHasPlainTextOnly handling. The Trix editor won't show the text in bold after pasting. It will switch the pasted content to bold if you type another character into the editor which seems to indicate that this special handling isn't correctly refreshing the editor after the trix-paste event is done.

This doesn't affect Trix version 1.3.1 that is running at https://trix-editor.org/.

Do we still need the workaround that was added back in 2019 here? The code comment near the pasteEventHasPlainTextOnly handling says:

// Handle paste event to work around beforeinput.insertFromPaste browser bugs.
// Safe to remove each condition once fixed upstream.

The Chromium bug report is now marked as fixed. Can the workaround be removed now since it's breaking the paste behavior for plain text editors?

Details
  • Trix version: 2.0.5
@chadrschroeder
Copy link
Author

If it helps any, the issue appears to be fixed if I change this statement from render() to requestRender() which matches what is done here.

chadrschroeder added a commit to chadrschroeder/trix that referenced this issue Oct 30, 2023
…aste and trix-change callbacks are refreshed in the editor when pasting plain text
@danielnc
Copy link

@chadrschroeder any workaround until this get fixed?
Is there a way to manually call requestRender after trix-paste event is called?

@chadrschroeder
Copy link
Author

Unfortunately, I don't think there's a clean way to work around this other than to serve a customized version of the Trix JavaScript where the Trix.controllers.Level2InputController.events.paste function has been adjusted. It would be nice if #1107 were reviewed.

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 a pull request may close this issue.

2 participants