forked from treehouse/mastodon
feat(emoji): Add back title attribute (#4253)
parent
767117f9b0
commit
72108b20e2
|
@ -1,7 +1,7 @@
|
||||||
import { unicodeToFilename } from './emojione_light';
|
import { unicodeMapping } from './emojione_light';
|
||||||
import Trie from 'substring-trie';
|
import Trie from 'substring-trie';
|
||||||
|
|
||||||
const trie = new Trie(Object.keys(unicodeToFilename));
|
const trie = new Trie(Object.keys(unicodeMapping));
|
||||||
|
|
||||||
function emojify(str) {
|
function emojify(str) {
|
||||||
// This walks through the string from start to end, ignoring any tags (<p>, <br>, etc.)
|
// This walks through the string from start to end, ignoring any tags (<p>, <br>, etc.)
|
||||||
|
@ -19,10 +19,10 @@ function emojify(str) {
|
||||||
insideTag = true;
|
insideTag = true;
|
||||||
} else if (!insideTag && (match = trie.search(str.substring(i)))) {
|
} else if (!insideTag && (match = trie.search(str.substring(i)))) {
|
||||||
const unicodeStr = match;
|
const unicodeStr = match;
|
||||||
if (unicodeStr in unicodeToFilename) {
|
if (unicodeStr in unicodeMapping) {
|
||||||
const filename = unicodeToFilename[unicodeStr];
|
const [filename, shortCode] = unicodeMapping[unicodeStr];
|
||||||
const alt = unicodeStr;
|
const alt = unicodeStr;
|
||||||
const replacement = `<img draggable="false" class="emojione" alt="${alt}" src="/emoji/${filename}.svg" />`;
|
const replacement = `<img draggable="false" class="emojione" alt="${alt}" title=":${shortCode}:" src="/emoji/${filename}.svg" />`;
|
||||||
str = str.substring(0, i) + replacement + str.substring(i + unicodeStr.length);
|
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
|
i += (replacement.length - unicodeStr.length); // jump ahead the length we've added to the string
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ const emojione = require('emojione');
|
||||||
|
|
||||||
const mappedUnicode = emojione.mapUnicodeToShort();
|
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 => [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), { });
|
.reduce((x, y) => Object.assign(x, y), { });
|
||||||
|
|
|
@ -22,23 +22,23 @@ describe('emojify', () => {
|
||||||
|
|
||||||
it('does unicode', () => {
|
it('does unicode', () => {
|
||||||
expect(emojify('\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66')).to.equal(
|
expect(emojify('\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66')).to.equal(
|
||||||
'<img draggable="false" class="emojione" alt="👩👩👦👦" src="/emoji/1f469-1f469-1f466-1f466.svg" />');
|
'<img draggable="false" class="emojione" alt="👩👩👦👦" title=":family_wwbb:" src="/emoji/1f469-1f469-1f466-1f466.svg" />');
|
||||||
expect(emojify('\uD83D\uDC68\uD83D\uDC69\uD83D\uDC67\uD83D\uDC67')).to.equal(
|
expect(emojify('\uD83D\uDC68\uD83D\uDC69\uD83D\uDC67\uD83D\uDC67')).to.equal(
|
||||||
'<img draggable="false" class="emojione" alt="👨👩👧👧" src="/emoji/1f468-1f469-1f467-1f467.svg" />');
|
'<img draggable="false" class="emojione" alt="👨👩👧👧" title=":family_mwgg:" src="/emoji/1f468-1f469-1f467-1f467.svg" />');
|
||||||
expect(emojify('\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66')).to.equal('<img draggable="false" class="emojione" alt="👩👩👦" src="/emoji/1f469-1f469-1f466.svg" />');
|
expect(emojify('\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66')).to.equal('<img draggable="false" class="emojione" alt="👩👩👦" title=":family_wwb:" src="/emoji/1f469-1f469-1f466.svg" />');
|
||||||
expect(emojify('\u2757')).to.equal(
|
expect(emojify('\u2757')).to.equal(
|
||||||
'<img draggable="false" class="emojione" alt="❗" src="/emoji/2757.svg" />');
|
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" />');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does multiple unicode', () => {
|
it('does multiple unicode', () => {
|
||||||
expect(emojify('\u2757 #\uFE0F\u20E3')).to.equal(
|
expect(emojify('\u2757 #\uFE0F\u20E3')).to.equal(
|
||||||
'<img draggable="false" class="emojione" alt="❗" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" src="/emoji/0023-20e3.svg" />');
|
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/0023-20e3.svg" />');
|
||||||
expect(emojify('\u2757#\uFE0F\u20E3')).to.equal(
|
expect(emojify('\u2757#\uFE0F\u20E3')).to.equal(
|
||||||
'<img draggable="false" class="emojione" alt="❗" src="/emoji/2757.svg" /><img draggable="false" class="emojione" alt="#️⃣" src="/emoji/0023-20e3.svg" />');
|
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /><img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/0023-20e3.svg" />');
|
||||||
expect(emojify('\u2757 #\uFE0F\u20E3 \u2757')).to.equal(
|
expect(emojify('\u2757 #\uFE0F\u20E3 \u2757')).to.equal(
|
||||||
'<img draggable="false" class="emojione" alt="❗" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" src="/emoji/0023-20e3.svg" /> <img draggable="false" class="emojione" alt="❗" src="/emoji/2757.svg" />');
|
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/0023-20e3.svg" /> <img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" />');
|
||||||
expect(emojify('foo \u2757 #\uFE0F\u20E3 bar')).to.equal(
|
expect(emojify('foo \u2757 #\uFE0F\u20E3 bar')).to.equal(
|
||||||
'foo <img draggable="false" class="emojione" alt="❗" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" src="/emoji/0023-20e3.svg" /> bar');
|
'foo <img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/0023-20e3.svg" /> bar');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('ignores unicode inside of tags', () => {
|
it('ignores unicode inside of tags', () => {
|
||||||
|
|
Loading…
Reference in New Issue