diff --git a/app/javascript/mastodon/emoji.js b/app/javascript/mastodon/emoji.js index 1de41f572..9b58cacf5 100644 --- a/app/javascript/mastodon/emoji.js +++ b/app/javascript/mastodon/emoji.js @@ -1,7 +1,7 @@ -import { unicodeToFilename } from './emojione_light'; +import { unicodeMapping } from './emojione_light'; import Trie from 'substring-trie'; -const trie = new Trie(Object.keys(unicodeToFilename)); +const trie = new Trie(Object.keys(unicodeMapping)); function emojify(str) { // This walks through the string from start to end, ignoring any tags (
,
, etc.)
@@ -19,10 +19,10 @@ function emojify(str) {
insideTag = true;
} else if (!insideTag && (match = trie.search(str.substring(i)))) {
const unicodeStr = match;
- if (unicodeStr in unicodeToFilename) {
- const filename = unicodeToFilename[unicodeStr];
+ if (unicodeStr in unicodeMapping) {
+ const [filename, shortCode] = unicodeMapping[unicodeStr];
const alt = unicodeStr;
- const replacement = ``;
+ const replacement = ``;
str = str.substring(0, i) + replacement + str.substring(i + unicodeStr.length);
i += (replacement.length - unicodeStr.length); // jump ahead the length we've added to the string
}
diff --git a/app/javascript/mastodon/emojione_light.js b/app/javascript/mastodon/emojione_light.js
index c75e10a98..985e9dbcb 100644
--- a/app/javascript/mastodon/emojione_light.js
+++ b/app/javascript/mastodon/emojione_light.js
@@ -5,7 +5,7 @@ const emojione = require('emojione');
const mappedUnicode = emojione.mapUnicodeToShort();
-module.exports.unicodeToFilename = Object.keys(emojione.jsEscapeMap)
+module.exports.unicodeMapping = Object.keys(emojione.jsEscapeMap)
.map(unicodeStr => [unicodeStr, mappedUnicode[emojione.jsEscapeMap[unicodeStr]]])
- .map(([unicodeStr, shortCode]) => ({ [unicodeStr]: emojione.emojioneList[shortCode].fname }))
+ .map(([unicodeStr, shortCode]) => ({ [unicodeStr]: [emojione.emojioneList[shortCode].fname, shortCode.slice(1, shortCode.length - 1)] }))
.reduce((x, y) => Object.assign(x, y), { });
diff --git a/spec/javascript/components/emojify.test.js b/spec/javascript/components/emojify.test.js
index 2874bb56d..e165b4519 100644
--- a/spec/javascript/components/emojify.test.js
+++ b/spec/javascript/components/emojify.test.js
@@ -22,23 +22,23 @@ describe('emojify', () => {
it('does unicode', () => {
expect(emojify('\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66')).to.equal(
- '');
+ '');
expect(emojify('\uD83D\uDC68\uD83D\uDC69\uD83D\uDC67\uD83D\uDC67')).to.equal(
- '');
- expect(emojify('\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66')).to.equal('');
+ '');
+ expect(emojify('\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66')).to.equal('');
expect(emojify('\u2757')).to.equal(
- '');
+ '');
});
it('does multiple unicode', () => {
expect(emojify('\u2757 #\uFE0F\u20E3')).to.equal(
- ' ');
+ ' ');
expect(emojify('\u2757#\uFE0F\u20E3')).to.equal(
- '');
+ '');
expect(emojify('\u2757 #\uFE0F\u20E3 \u2757')).to.equal(
- ' ');
+ ' ');
expect(emojify('foo \u2757 #\uFE0F\u20E3 bar')).to.equal(
- 'foo bar');
+ 'foo bar');
});
it('ignores unicode inside of tags', () => {