When replying to plain email using the rich editor, convert quoted text to HTML #1853

This commit is contained in:
Ben Gotow 2020-04-26 01:51:41 -05:00
parent 01765c47da
commit 3a8d1b6f3f
2 changed files with 19 additions and 5 deletions

View file

@ -110,3 +110,10 @@ export function wrapPlaintextWithSelection(
selectionEnd: resultSelectionEnd,
};
}
export function convertPlaintextToHTML(plain: string) {
const div = document.createElement('div');
div.innerText = plain;
div.style.whiteSpace = 'pre-wrap';
return div.outerHTML;
}

View file

@ -16,7 +16,11 @@ import SanitizeTransformer from '../../services/sanitize-transformer';
import DOMUtils from '../../dom-utils';
import { Thread } from '../models/Thread';
import { convertToPlainText, convertFromHTML } from '../../components/composer-editor/conversion';
import { wrapPlaintext, deepenPlaintextQuote } from '../../components/composer-editor/plaintext';
import {
wrapPlaintext,
deepenPlaintextQuote,
convertPlaintextToHTML,
} from '../../components/composer-editor/plaintext';
let DraftStore: typeof import('./draft-store').default = null;
@ -31,18 +35,21 @@ class DraftFactory {
async prepareBodyForQuoting(message: Message) {
if (!this.useHTML()) {
return deepenPlaintextQuote(
message.plaintext ? message.body : convertToPlainText(convertFromHTML(message.body)).trim()
);
const content = message.plaintext
? message.body
: convertToPlainText(convertFromHTML(message.body)).trim();
return deepenPlaintextQuote(content);
}
const content = message.plaintext ? convertPlaintextToHTML(message.body) : message.body;
// TODO: Fix inline images
const cidRE = MessageUtils.cidRegexString;
const cidRegexp = new RegExp(`<img.*${cidRE}[\\s\\S]*?>`, 'igm');
// Be sure to match over multiple lines with [\s\S]*
// Regex explanation here: https://regex101.com/r/vO6eN2/1
let transformed = (message.body || '').replace(cidRegexp, '');
let transformed = (content || '').replace(cidRegexp, '');
transformed = await SanitizeTransformer.run(transformed, SanitizeTransformer.Preset.UnsafeOnly);
transformed = await InlineStyleTransformer.run(transformed);
return transformed;