diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2021-06-01 14:35:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-01 14:35:49 +0200 |
commit | abd7b4636a4bda2454f1d30e7f87843d0c06dcbe (patch) | |
tree | 18242925539deec35f8411502077542ecf766f98 /app/javascript/mastodon | |
parent | aafac8dc71221c9535adddc031bb8353f553505d (diff) |
Add assets from Twemoji 13.1.0 (#16345)
* Add assets from Twemoji 13.1.0 * Update emoji-mart
Diffstat (limited to 'app/javascript/mastodon')
4 files changed, 54 insertions, 10 deletions
diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js index dc4f48060..4a87714e6 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components'; import Overlay from 'react-overlays/lib/Overlay'; import classNames from 'classnames'; @@ -12,7 +12,6 @@ import { assetHost } from 'mastodon/utils/config'; const messages = defineMessages({ emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' }, emoji_search: { id: 'emoji_button.search', defaultMessage: 'Search...' }, - emoji_not_found: { id: 'emoji_button.not_found', defaultMessage: 'No emojos!! (╯°□°)╯︵ ┻━┻' }, custom: { id: 'emoji_button.custom', defaultMessage: 'Custom' }, recent: { id: 'emoji_button.recent', defaultMessage: 'Frequently used' }, search_results: { id: 'emoji_button.search_results', defaultMessage: 'Search results' }, @@ -28,9 +27,26 @@ const messages = defineMessages({ let EmojiPicker, Emoji; // load asynchronously -const backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`; const listenerOptions = supportsPassiveEvents ? { passive: true } : false; +const backgroundImageFn = () => `${assetHost}/emoji/sheet_13.png`; + +const notFoundFn = () => ( + <div className='emoji-mart-no-results'> + <Emoji + emoji='sleuth_or_spy' + set='twitter' + size={32} + sheetSize={32} + backgroundImageFn={backgroundImageFn} + /> + + <div className='emoji-mart-no-results-label'> + <FormattedMessage id='emoji_button.not_found' defaultMessage='No matching emojis found' /> + </div> + </div> +); + class ModifierPickerMenu extends React.PureComponent { static propTypes = { @@ -182,7 +198,6 @@ class EmojiPickerMenu extends React.PureComponent { return { search: intl.formatMessage(messages.emoji_search), - notfound: intl.formatMessage(messages.emoji_not_found), categories: { search: intl.formatMessage(messages.search_results), recent: intl.formatMessage(messages.recent), @@ -263,7 +278,9 @@ class EmojiPickerMenu extends React.PureComponent { recent={frequentlyUsedEmojis} skin={skinTone} showPreview={false} + showSkinTones={false} backgroundImageFn={backgroundImageFn} + notFound={notFoundFn} autoFocus emojiTooltip /> diff --git a/app/javascript/mastodon/features/emoji/emoji_compressed.js b/app/javascript/mastodon/features/emoji/emoji_compressed.js index a8a5cff94..74b53ce5c 100644 --- a/app/javascript/mastodon/features/emoji/emoji_compressed.js +++ b/app/javascript/mastodon/features/emoji/emoji_compressed.js @@ -7,29 +7,38 @@ const { unicodeToFilename } = require('./unicode_to_filename'); 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 { 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 skins = ['🏻', '🏼', '🏽', '🏾', '🏿']; +const skinTones = ['🏻', '🏼', '🏽', '🏾', '🏿']; const shortcodeMap = {}; const shortCodesToEmojiData = {}; const emojisWithoutShortCodes = []; Object.keys(emojiIndex.emojis).forEach(key => { - shortcodeMap[emojiIndex.emojis[key].native] = emojiIndex.emojis[key].id; + let emoji = emojiIndex.emojis[key]; + + // Emojis with skin tone modifiers are stored like this + if (Object.prototype.hasOwnProperty.call(emoji, '1')) { + emoji = emoji['1']; + } + + shortcodeMap[emoji.native] = emoji.id; }); const stripModifiers = unicode => { - skins.forEach(tone => { + skinTones.forEach(tone => { unicode = unicode.replace(tone, ''); }); @@ -64,13 +73,22 @@ Object.keys(emojiMap).forEach(key => { if (!Array.isArray(shortCodesToEmojiData[shortcode])) { shortCodesToEmojiData[shortcode] = [[]]; } + shortCodesToEmojiData[shortcode][0].push(filenameData); } }); Object.keys(emojiIndex.emojis).forEach(key => { - const { native } = emojiIndex.emojis[key]; + let emoji = emojiIndex.emojis[key]; + + // Emojis with skin tone modifiers are stored like this + if (Object.prototype.hasOwnProperty.call(emoji, '1')) { + emoji = emoji['1']; + } + + const { native } = emoji; let { short_names, search, unified } = emojiMartData.emojis[key]; + if (short_names[0] !== key) { throw new Error('The compresser expects the first short_code to be the ' + 'key. It may need to be rewritten if the emoji change such that this ' + @@ -80,11 +98,16 @@ Object.keys(emojiIndex.emojis).forEach(key => { short_names = short_names.slice(1); // first short name can be inferred from the key const searchData = [native, short_names, search]; + if (unicodeToUnifiedName(native) !== unified) { // unified name can't be derived from unicodeToUnifiedName searchData.push(unified); } + if (!Array.isArray(shortCodesToEmojiData[key])) { + shortCodesToEmojiData[key] = [[]]; + } + shortCodesToEmojiData[key].push(searchData); }); diff --git a/app/javascript/mastodon/features/emoji/unicode_to_unified_name.js b/app/javascript/mastodon/features/emoji/unicode_to_unified_name.js index 808ac197e..d29550f12 100644 --- a/app/javascript/mastodon/features/emoji/unicode_to_unified_name.js +++ b/app/javascript/mastodon/features/emoji/unicode_to_unified_name.js @@ -2,16 +2,20 @@ function padLeft(str, num) { while (str.length < num) { str = '0' + str; } + return str; } exports.unicodeToUnifiedName = (str) => { let output = ''; + for (let i = 0; i < str.length; i += 2) { if (i > 0) { output += '-'; } + output += padLeft(str.codePointAt(i).toString(16).toUpperCase(), 4); } + return output; }; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index d67ad6862..0c3ce2f62 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -142,7 +142,7 @@ "emoji_button.food": "Food & Drink", "emoji_button.label": "Insert emoji", "emoji_button.nature": "Nature", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "No matching emojis found", "emoji_button.objects": "Objects", "emoji_button.people": "People", "emoji_button.recent": "Frequently used", |