forked from cybrespace/mastodon
Update to emojimart 2.6.1 (#7746)
* Update to emojimart 2.6.1 WIP using local updated version. Sheet comes from emoji-data@4.0.4, file sheet_twitter_32_indexed_256.png. * Update to 2.6.1 and uncompress data if needed * Remove changes that were not needed * Fix yarn lock file * Match emojiToShowFilter behavior to new version of emoji-mart * Fix codeclimate issue * Match custom emoji behavior to new version of emoji-mart * Replace emoji without shortcode in tests * Fix code climate issues
This commit is contained in:
parent
2304d52599
commit
0c3ce41031
|
@ -51,7 +51,7 @@ describe('emoji', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does an emoji that has no shortcode', () => {
|
it('does an emoji that has no shortcode', () => {
|
||||||
expect(emojify('🕉️')).toEqual('<img draggable="false" class="emojione" alt="🕉️" title="" src="/emoji/1f549.svg" />');
|
expect(emojify('👁🗨')).toEqual('<img draggable="false" class="emojione" alt="👁🗨" title="" src="/emoji/1f441-200d-1f5e8.svg" />');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does an emoji whose filename is irregular', () => {
|
it('does an emoji whose filename is irregular', () => {
|
||||||
|
|
|
@ -44,6 +44,26 @@ describe('emoji_index', () => {
|
||||||
expect(emojiIndex.search('apple').map(trimEmojis)).toEqual(expected);
|
expect(emojiIndex.search('apple').map(trimEmojis)).toEqual(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('erases custom emoji if not passed again', () => {
|
||||||
|
const custom = [
|
||||||
|
{
|
||||||
|
id: 'mastodon',
|
||||||
|
name: 'mastodon',
|
||||||
|
short_names: ['mastodon'],
|
||||||
|
text: '',
|
||||||
|
emoticons: [],
|
||||||
|
keywords: ['mastodon'],
|
||||||
|
imageUrl: 'http://example.com',
|
||||||
|
custom: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
search('', { custom });
|
||||||
|
emojiIndex.search('', { custom });
|
||||||
|
const expected = [];
|
||||||
|
expect(search('masto').map(trimEmojis)).toEqual(expected);
|
||||||
|
expect(emojiIndex.search('masto').map(trimEmojis)).toEqual(expected);
|
||||||
|
});
|
||||||
|
|
||||||
it('handles custom emoji', () => {
|
it('handles custom emoji', () => {
|
||||||
const custom = [
|
const custom = [
|
||||||
{
|
{
|
||||||
|
@ -65,12 +85,12 @@ describe('emoji_index', () => {
|
||||||
custom: true,
|
custom: true,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
expect(search('masto').map(trimEmojis)).toEqual(expected);
|
expect(search('masto', { custom }).map(trimEmojis)).toEqual(expected);
|
||||||
expect(emojiIndex.search('masto').map(trimEmojis)).toEqual(expected);
|
expect(emojiIndex.search('masto', { custom }).map(trimEmojis)).toEqual(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should filter only emojis we care about, exclude pineapple', () => {
|
it('should filter only emojis we care about, exclude pineapple', () => {
|
||||||
const emojisToShowFilter = unified => unified !== '1F34D';
|
const emojisToShowFilter = emoji => emoji.unified !== '1F34D';
|
||||||
expect(search('apple', { emojisToShowFilter }).map((obj) => obj.id))
|
expect(search('apple', { emojisToShowFilter }).map((obj) => obj.id))
|
||||||
.not.toContain('pineapple');
|
.not.toContain('pineapple');
|
||||||
expect(emojiIndex.search('apple', { emojisToShowFilter }).map((obj) => obj.id))
|
expect(emojiIndex.search('apple', { emojisToShowFilter }).map((obj) => obj.id))
|
||||||
|
|
|
@ -9,7 +9,13 @@ const { unicodeToFilename } = require('./unicode_to_filename');
|
||||||
const { unicodeToUnifiedName } = require('./unicode_to_unified_name');
|
const { unicodeToUnifiedName } = require('./unicode_to_unified_name');
|
||||||
const emojiMap = require('./emoji_map.json');
|
const emojiMap = require('./emoji_map.json');
|
||||||
const { emojiIndex } = require('emoji-mart');
|
const { emojiIndex } = require('emoji-mart');
|
||||||
const { default: emojiMartData } = require('emoji-mart/dist/data');
|
const { uncompress: emojiMartUncompress } = require('emoji-mart/dist/utils/data');
|
||||||
|
let data = require('emoji-mart/data/all.json');
|
||||||
|
|
||||||
|
if(data.compressed) {
|
||||||
|
data = emojiMartUncompress(data);
|
||||||
|
}
|
||||||
|
const emojiMartData = data;
|
||||||
|
|
||||||
const excluded = ['®', '©', '™'];
|
const excluded = ['®', '©', '™'];
|
||||||
const skins = ['🏻', '🏼', '🏽', '🏾', '🏿'];
|
const skins = ['🏻', '🏼', '🏽', '🏾', '🏿'];
|
||||||
|
@ -88,6 +94,6 @@ module.exports = JSON.parse(JSON.stringify([
|
||||||
shortCodesToEmojiData,
|
shortCodesToEmojiData,
|
||||||
emojiMartData.skins,
|
emojiMartData.skins,
|
||||||
emojiMartData.categories,
|
emojiMartData.categories,
|
||||||
emojiMartData.short_names,
|
emojiMartData.aliases,
|
||||||
emojisWithoutShortCodes,
|
emojisWithoutShortCodes,
|
||||||
]));
|
]));
|
||||||
|
|
|
@ -8,6 +8,7 @@ let originalPool = {};
|
||||||
let index = {};
|
let index = {};
|
||||||
let emojisList = {};
|
let emojisList = {};
|
||||||
let emoticonsList = {};
|
let emoticonsList = {};
|
||||||
|
let customEmojisList = [];
|
||||||
|
|
||||||
for (let emoji in data.emojis) {
|
for (let emoji in data.emojis) {
|
||||||
let emojiData = data.emojis[emoji];
|
let emojiData = data.emojis[emoji];
|
||||||
|
@ -28,7 +29,18 @@ for (let emoji in data.emojis) {
|
||||||
originalPool[id] = emojiData;
|
originalPool[id] = emojiData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function clearCustomEmojis(pool) {
|
||||||
|
customEmojisList.forEach((emoji) => {
|
||||||
|
let emojiId = emoji.id || emoji.short_names[0];
|
||||||
|
|
||||||
|
delete pool[emojiId];
|
||||||
|
delete emojisList[emojiId];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function addCustomToPool(custom, pool) {
|
function addCustomToPool(custom, pool) {
|
||||||
|
if (customEmojisList.length) clearCustomEmojis(pool);
|
||||||
|
|
||||||
custom.forEach((emoji) => {
|
custom.forEach((emoji) => {
|
||||||
let emojiId = emoji.id || emoji.short_names[0];
|
let emojiId = emoji.id || emoji.short_names[0];
|
||||||
|
|
||||||
|
@ -37,10 +49,14 @@ function addCustomToPool(custom, pool) {
|
||||||
emojisList[emojiId] = getSanitizedData(emoji);
|
emojisList[emojiId] = getSanitizedData(emoji);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
customEmojisList = custom;
|
||||||
|
index = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
function search(value, { emojisToShowFilter, maxResults, include, exclude, custom = [] } = {}) {
|
function search(value, { emojisToShowFilter, maxResults, include, exclude, custom = [] } = {}) {
|
||||||
addCustomToPool(custom, originalPool);
|
if (customEmojisList !== custom)
|
||||||
|
addCustomToPool(custom, originalPool);
|
||||||
|
|
||||||
maxResults = maxResults || 75;
|
maxResults = maxResults || 75;
|
||||||
include = include || [];
|
include = include || [];
|
||||||
|
@ -143,7 +159,7 @@ function search(value, { emojisToShowFilter, maxResults, include, exclude, custo
|
||||||
|
|
||||||
if (results) {
|
if (results) {
|
||||||
if (emojisToShowFilter) {
|
if (emojisToShowFilter) {
|
||||||
results = results.filter((result) => emojisToShowFilter(data.emojis[result.id].unified));
|
results = results.filter((result) => emojisToShowFilter(data.emojis[result.id]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (results && results.length > maxResults) {
|
if (results && results.length > maxResults) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Picker from 'emoji-mart/dist-es/components/picker';
|
import Picker from 'emoji-mart/dist-es/components/picker/picker';
|
||||||
import Emoji from 'emoji-mart/dist-es/components/emoji';
|
import Emoji from 'emoji-mart/dist-es/components/emoji/emoji';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Picker,
|
Picker,
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.9 MiB After Width: | Height: | Size: 839 KiB |
|
@ -2304,8 +2304,8 @@ elliptic@^6.0.0:
|
||||||
minimalistic-crypto-utils "^1.0.0"
|
minimalistic-crypto-utils "^1.0.0"
|
||||||
|
|
||||||
emoji-mart@Gargron/emoji-mart#build:
|
emoji-mart@Gargron/emoji-mart#build:
|
||||||
version "2.1.4"
|
version "2.6.1"
|
||||||
resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/a5e1afe5ebcf2841e611d20d261b029581cbe051"
|
resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/227c56c8a1cd89a475d4cf8d9605096555e12484"
|
||||||
|
|
||||||
emoji-regex@^6.1.0:
|
emoji-regex@^6.1.0:
|
||||||
version "6.5.1"
|
version "6.5.1"
|
||||||
|
|
Loading…
Reference in New Issue