Rewrite `emoji_unicode_mapping_light` to TS (#25444)
Co-authored-by: taichi.fukuda ひ <taichi.fukuda@systemi.co.jp>
This commit is contained in:
parent
e93a75f1a1
commit
9482810703
|
@ -3,7 +3,7 @@ import { PureComponent } from 'react';
|
||||||
|
|
||||||
import { assetHost } from 'mastodon/utils/config';
|
import { assetHost } from 'mastodon/utils/config';
|
||||||
|
|
||||||
import unicodeMapping from '../features/emoji/emoji_unicode_mapping_light';
|
import { unicodeMapping } from '../features/emoji/emoji_unicode_mapping_light';
|
||||||
|
|
||||||
export default class AutosuggestEmoji extends PureComponent {
|
export default class AutosuggestEmoji extends PureComponent {
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { assetHost } from 'mastodon/utils/config';
|
||||||
|
|
||||||
import { autoPlayGif } from '../../initial_state';
|
import { autoPlayGif } from '../../initial_state';
|
||||||
|
|
||||||
import unicodeMapping from './emoji_unicode_mapping_light';
|
import { unicodeMapping } from './emoji_unicode_mapping_light';
|
||||||
|
|
||||||
const trie = new Trie(Object.keys(unicodeMapping));
|
const trie = new Trie(Object.keys(unicodeMapping));
|
||||||
|
|
||||||
|
|
|
@ -13,15 +13,20 @@ export type Search = string;
|
||||||
* This could be a potential area of refactoring or error handling.
|
* This could be a potential area of refactoring or error handling.
|
||||||
* The non-existence of 'skins' property is evident at [this location]{@link app/javascript/mastodon/features/emoji/emoji_compressed.js:121}.
|
* The non-existence of 'skins' property is evident at [this location]{@link app/javascript/mastodon/features/emoji/emoji_compressed.js:121}.
|
||||||
*/
|
*/
|
||||||
export type Skins = null;
|
type Skins = null;
|
||||||
|
|
||||||
export type FilenameData = string[] | string[][];
|
type Filename = string;
|
||||||
|
type UnicodeFilename = string;
|
||||||
|
export type FilenameData = [
|
||||||
|
filename: Filename,
|
||||||
|
unicodeFilename?: UnicodeFilename,
|
||||||
|
][];
|
||||||
export type ShortCodesToEmojiDataKey =
|
export type ShortCodesToEmojiDataKey =
|
||||||
| EmojiData['id']
|
| EmojiData['id']
|
||||||
| BaseEmoji['native']
|
| BaseEmoji['native']
|
||||||
| keyof NimbleEmojiIndex['emojis'];
|
| keyof NimbleEmojiIndex['emojis'];
|
||||||
|
|
||||||
export type SearchData = [
|
type SearchData = [
|
||||||
BaseEmoji['native'],
|
BaseEmoji['native'],
|
||||||
Emoji['short_names'],
|
Emoji['short_names'],
|
||||||
Search,
|
Search,
|
||||||
|
@ -32,9 +37,9 @@ export type ShortCodesToEmojiData = Record<
|
||||||
ShortCodesToEmojiDataKey,
|
ShortCodesToEmojiDataKey,
|
||||||
[FilenameData, SearchData]
|
[FilenameData, SearchData]
|
||||||
>;
|
>;
|
||||||
export type EmojisWithoutShortCodes = FilenameData[];
|
type EmojisWithoutShortCodes = FilenameData;
|
||||||
|
|
||||||
export type EmojiCompressed = [
|
type EmojiCompressed = [
|
||||||
ShortCodesToEmojiData,
|
ShortCodesToEmojiData,
|
||||||
Skins,
|
Skins,
|
||||||
Category[],
|
Category[],
|
||||||
|
|
|
@ -30,22 +30,13 @@ const emojis: Emojis = {};
|
||||||
// decompress
|
// decompress
|
||||||
Object.keys(shortCodesToEmojiData).forEach((shortCode) => {
|
Object.keys(shortCodesToEmojiData).forEach((shortCode) => {
|
||||||
const [_filenameData, searchData] = shortCodesToEmojiData[shortCode];
|
const [_filenameData, searchData] = shortCodesToEmojiData[shortCode];
|
||||||
const native = searchData[0];
|
const [native, short_names, search, unified] = searchData;
|
||||||
let short_names = searchData[1];
|
|
||||||
const search = searchData[2];
|
|
||||||
let unified = searchData[3];
|
|
||||||
|
|
||||||
if (!unified) {
|
|
||||||
// unified name can be derived from unicodeToUnifiedName
|
|
||||||
unified = unicodeToUnifiedName(native);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (short_names) short_names = [shortCode].concat(short_names);
|
|
||||||
emojis[shortCode] = {
|
emojis[shortCode] = {
|
||||||
native,
|
native,
|
||||||
search,
|
search,
|
||||||
short_names,
|
short_names: short_names ? [shortCode].concat(short_names) : undefined,
|
||||||
unified,
|
unified: unified ?? unicodeToUnifiedName(native),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
// A mapping of unicode strings to an object containing the filename
|
|
||||||
// (i.e. the svg filename) and a shortCode intended to be shown
|
|
||||||
// as a "title" attribute in an HTML element (aka tooltip).
|
|
||||||
|
|
||||||
import emojiCompressed from './emoji_compressed';
|
|
||||||
import { unicodeToFilename } from './unicode_to_filename';
|
|
||||||
|
|
||||||
const [
|
|
||||||
shortCodesToEmojiData,
|
|
||||||
_skins,
|
|
||||||
_categories,
|
|
||||||
_short_names,
|
|
||||||
emojisWithoutShortCodes,
|
|
||||||
] = emojiCompressed;
|
|
||||||
|
|
||||||
// decompress
|
|
||||||
const unicodeMapping = {};
|
|
||||||
|
|
||||||
function processEmojiMapData(emojiMapData, shortCode) {
|
|
||||||
let [ native, filename ] = emojiMapData;
|
|
||||||
if (!filename) {
|
|
||||||
// filename name can be derived from unicodeToFilename
|
|
||||||
filename = unicodeToFilename(native);
|
|
||||||
}
|
|
||||||
unicodeMapping[native] = {
|
|
||||||
shortCode: shortCode,
|
|
||||||
filename: filename,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.keys(shortCodesToEmojiData).forEach((shortCode) => {
|
|
||||||
let [ filenameData ] = shortCodesToEmojiData[shortCode];
|
|
||||||
filenameData.forEach(emojiMapData => processEmojiMapData(emojiMapData, shortCode));
|
|
||||||
});
|
|
||||||
emojisWithoutShortCodes.forEach(emojiMapData => processEmojiMapData(emojiMapData));
|
|
||||||
|
|
||||||
export default unicodeMapping;
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
// A mapping of unicode strings to an object containing the filename
|
||||||
|
// (i.e. the svg filename) and a shortCode intended to be shown
|
||||||
|
// as a "title" attribute in an HTML element (aka tooltip).
|
||||||
|
|
||||||
|
import type {
|
||||||
|
FilenameData,
|
||||||
|
ShortCodesToEmojiDataKey,
|
||||||
|
} from './emoji_compressed';
|
||||||
|
import emojiCompressed from './emoji_compressed';
|
||||||
|
import { unicodeToFilename } from './unicode_to_filename';
|
||||||
|
|
||||||
|
type UnicodeMapping = {
|
||||||
|
[key in FilenameData[number][0]]: {
|
||||||
|
shortCode: ShortCodesToEmojiDataKey;
|
||||||
|
filename: FilenameData[number][number];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const [
|
||||||
|
shortCodesToEmojiData,
|
||||||
|
_skins,
|
||||||
|
_categories,
|
||||||
|
_short_names,
|
||||||
|
emojisWithoutShortCodes,
|
||||||
|
] = emojiCompressed;
|
||||||
|
|
||||||
|
// decompress
|
||||||
|
const unicodeMapping: UnicodeMapping = {};
|
||||||
|
|
||||||
|
function processEmojiMapData(
|
||||||
|
emojiMapData: FilenameData[number],
|
||||||
|
shortCode?: ShortCodesToEmojiDataKey,
|
||||||
|
) {
|
||||||
|
const [native, _filename] = emojiMapData;
|
||||||
|
let filename = emojiMapData[1];
|
||||||
|
if (!filename) {
|
||||||
|
// filename name can be derived from unicodeToFilename
|
||||||
|
filename = unicodeToFilename(native);
|
||||||
|
}
|
||||||
|
unicodeMapping[native] = {
|
||||||
|
shortCode,
|
||||||
|
filename,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.keys(shortCodesToEmojiData).forEach(
|
||||||
|
(shortCode: ShortCodesToEmojiDataKey) => {
|
||||||
|
if (shortCode === undefined) return;
|
||||||
|
const [filenameData, _searchData] = shortCodesToEmojiData[shortCode];
|
||||||
|
filenameData.forEach((emojiMapData) => {
|
||||||
|
processEmojiMapData(emojiMapData, shortCode);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
emojisWithoutShortCodes.forEach((emojiMapData) => {
|
||||||
|
processEmojiMapData(emojiMapData);
|
||||||
|
});
|
||||||
|
|
||||||
|
export { unicodeMapping };
|
|
@ -18,7 +18,7 @@ import { AnimatedNumber } from 'mastodon/components/animated_number';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import { IconButton } from 'mastodon/components/icon_button';
|
import { IconButton } from 'mastodon/components/icon_button';
|
||||||
import EmojiPickerDropdown from 'mastodon/features/compose/containers/emoji_picker_dropdown_container';
|
import EmojiPickerDropdown from 'mastodon/features/compose/containers/emoji_picker_dropdown_container';
|
||||||
import unicodeMapping from 'mastodon/features/emoji/emoji_unicode_mapping_light';
|
import { unicodeMapping } from 'mastodon/features/emoji/emoji_unicode_mapping_light';
|
||||||
import { autoPlayGif, reduceMotion, disableSwiping, mascot } from 'mastodon/initial_state';
|
import { autoPlayGif, reduceMotion, disableSwiping, mascot } from 'mastodon/initial_state';
|
||||||
import { assetHost } from 'mastodon/utils/config';
|
import { assetHost } from 'mastodon/utils/config';
|
||||||
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
|
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
|
||||||
|
|
Loading…
Reference in New Issue