diff --git a/app/assets/javascripts/pretty-text/emoji.js.es6 b/app/assets/javascripts/pretty-text/emoji.js.es6 index 0e424527917..49c5f15fe58 100644 --- a/app/assets/javascripts/pretty-text/emoji.js.es6 +++ b/app/assets/javascripts/pretty-text/emoji.js.es6 @@ -21,6 +21,14 @@ export function extendedEmojiList() { const emojiHash = {}; +const unicodeRegexp = new RegExp( + Object.keys(replacements) + .sort() + .reverse() + .join("|") + "|\\B:[^\\s:]+(?::t\\d)?:?\\B", + "g" +); + // add all default emojis emojis.forEach(code => (emojiHash[code] = true)); @@ -35,7 +43,7 @@ export function performEmojiUnescape(string, opts) { return; } - return string.replace(/[\u1000-\uFFFF]+|\B:[^\s:]+(?::t\d)?:?\B/g, m => { + return string.replace(unicodeRegexp, m => { const isEmoticon = !!translations[m]; const isUnicodeEmoticon = !!replacements[m]; let emojiVal; @@ -63,7 +71,7 @@ export function performEmojiUnescape(string, opts) { } export function performEmojiEscape(string) { - return string.replace(/[\u1000-\uFFFF]+|\B:[^\s:]+(?::t\d)?:?\B/g, m => { + return string.replace(unicodeRegexp, m => { if (!!translations[m]) { return ":" + translations[m] + ":"; } else if (!!replacements[m]) { diff --git a/test/javascripts/acceptance/topic-test.js.es6 b/test/javascripts/acceptance/topic-test.js.es6 index 6ba79ef8116..23dbf05ab11 100644 --- a/test/javascripts/acceptance/topic-test.js.es6 +++ b/test/javascripts/acceptance/topic-test.js.es6 @@ -188,7 +188,7 @@ QUnit.test("Updating the topic title with unicode emojis", async assert => { await visit("/t/internationalization-localization/280"); await click("#topic-title .d-icon-pencil-alt"); - await fillIn("#edit-title", "emojis title πŸ‘¨β€πŸŒΎ"); + await fillIn("#edit-title", "emojis title πŸ‘¨β€πŸŒΎπŸ™"); await click("#topic-title .submit-edit"); @@ -196,7 +196,7 @@ QUnit.test("Updating the topic title with unicode emojis", async assert => { find(".fancy-title") .html() .trim(), - `emojis title man_farmer`, + `emojis title man_farmerpray`, "it displays the new title with escaped unicode emojis" ); });