Chats: strip HTML when copying message text to clipboard

This commit is contained in:
Alex Gleason 2022-09-29 11:23:49 -05:00
parent 7722ce5e68
commit 40b8bab7ab
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
2 changed files with 11 additions and 1 deletions

View File

@ -16,6 +16,7 @@ import { MediaGallery } from 'soapbox/features/ui/util/async-components';
import { useAppSelector, useAppDispatch, useOwnAccount } from 'soapbox/hooks'; import { useAppSelector, useAppDispatch, useOwnAccount } from 'soapbox/hooks';
import { chatKeys, IChat, IChatMessage, useChatActions, useChatMessages } from 'soapbox/queries/chats'; import { chatKeys, IChat, IChatMessage, useChatActions, useChatMessages } from 'soapbox/queries/chats';
import { queryClient } from 'soapbox/queries/client'; import { queryClient } from 'soapbox/queries/client';
import { stripHTML } from 'soapbox/utils/html';
import { onlyEmoji } from 'soapbox/utils/rich_content'; import { onlyEmoji } from 'soapbox/utils/rich_content';
import ChatMessageListIntro from './chat-message-list-intro'; import ChatMessageListIntro from './chat-message-list-intro';
@ -219,7 +220,8 @@ const ChatMessageList: React.FC<IChatMessageList> = ({ chat, autosize }) => {
const handleCopyText = (chatMessage: IChatMessage) => { const handleCopyText = (chatMessage: IChatMessage) => {
if (navigator.clipboard) { if (navigator.clipboard) {
navigator.clipboard.writeText(chatMessage.content); const text = stripHTML(chatMessage.content);
navigator.clipboard.writeText(text);
} }
}; };

View File

@ -27,3 +27,11 @@ export const stripCompatibilityFeatures = (html: string): string => {
return node.innerHTML; return node.innerHTML;
}; };
/** Convert HTML to plaintext. */
// https://stackoverflow.com/a/822486
export const stripHTML = (html: string) => {
const div = document.createElement('div');
div.innerHTML = html;
return div.textContent || div.innerText || '';
};