Don't check for only-emoji if there were none
We were still running the emojione regex on all messages to determine if they were *only* emoji (for the big emoji). This is pointless on messages that we already know don't have emoji. Also stop exporting unicodeToImage because it isn't used anywhere.
This commit is contained in:
parent
803e8f93e3
commit
bfedcd1ff0
1 changed files with 12 additions and 9 deletions
|
@ -58,10 +58,7 @@ export function containsEmoji(str) {
|
||||||
/* modified from https://github.com/Ranks/emojione/blob/master/lib/js/emojione.js
|
/* modified from https://github.com/Ranks/emojione/blob/master/lib/js/emojione.js
|
||||||
* because we want to include emoji shortnames in title text
|
* because we want to include emoji shortnames in title text
|
||||||
*/
|
*/
|
||||||
export function unicodeToImage(str) {
|
function unicodeToImage(str) {
|
||||||
// fast path
|
|
||||||
if (!containsEmoji(str)) return str;
|
|
||||||
|
|
||||||
let replaceWith, unicode, alt, short, fname;
|
let replaceWith, unicode, alt, short, fname;
|
||||||
const mappedUnicode = emojione.mapUnicodeToShort();
|
const mappedUnicode = emojione.mapUnicodeToShort();
|
||||||
|
|
||||||
|
@ -399,6 +396,8 @@ export function bodyToHtml(content, highlights, opts) {
|
||||||
var isHtml = (content.format === "org.matrix.custom.html");
|
var isHtml = (content.format === "org.matrix.custom.html");
|
||||||
let body = isHtml ? content.formatted_body : escape(content.body);
|
let body = isHtml ? content.formatted_body : escape(content.body);
|
||||||
|
|
||||||
|
let bodyHasEmoji = false;
|
||||||
|
|
||||||
var safeBody;
|
var safeBody;
|
||||||
// XXX: We sanitize the HTML whilst also highlighting its text nodes, to avoid accidentally trying
|
// XXX: We sanitize the HTML whilst also highlighting its text nodes, to avoid accidentally trying
|
||||||
// to highlight HTML tags themselves. However, this does mean that we don't highlight textnodes which
|
// to highlight HTML tags themselves. However, this does mean that we don't highlight textnodes which
|
||||||
|
@ -416,16 +415,20 @@ export function bodyToHtml(content, highlights, opts) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
safeBody = sanitizeHtml(body, sanitizeHtmlParams);
|
safeBody = sanitizeHtml(body, sanitizeHtmlParams);
|
||||||
safeBody = unicodeToImage(safeBody);
|
bodyHasEmoji = containsEmoji(body);
|
||||||
|
if (bodyHasEmoji) safeBody = unicodeToImage(safeBody);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
delete sanitizeHtmlParams.textFilter;
|
delete sanitizeHtmlParams.textFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let emojiBody = false;
|
||||||
|
if (bodyHasEmoji) {
|
||||||
EMOJI_REGEX.lastIndex = 0;
|
EMOJI_REGEX.lastIndex = 0;
|
||||||
let contentBodyTrimmed = content.body !== undefined ? content.body.trim() : '';
|
let contentBodyTrimmed = content.body !== undefined ? content.body.trim() : '';
|
||||||
let match = EMOJI_REGEX.exec(contentBodyTrimmed);
|
let match = EMOJI_REGEX.exec(contentBodyTrimmed);
|
||||||
let emojiBody = match && match[0] && match[0].length === contentBodyTrimmed.length;
|
emojiBody = match && match[0] && match[0].length === contentBodyTrimmed.length;
|
||||||
|
}
|
||||||
|
|
||||||
const className = classNames({
|
const className = classNames({
|
||||||
'mx_EventTile_body': true,
|
'mx_EventTile_body': true,
|
||||||
|
|
Loading…
Reference in a new issue