summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorたいち ひ <taichi221228@icloud.com>2023-10-24 17:06:14 +0900
committerGitHub <noreply@github.com>2023-10-24 08:06:14 +0000
commit948281070335c61657783702ef7d19e49909bed5 (patch)
tree8f022570ba6903d5d48187b0e3bd725a1646b394
parente93a75f1a11d6dfdcbd39dbdc22526c5508ad881 (diff)
Rewrite `emoji_unicode_mapping_light` to TS (#25444)
Co-authored-by: taichi.fukuda ひ <taichi.fukuda@systemi.co.jp>
-rw-r--r--app/javascript/mastodon/components/autosuggest_emoji.jsx2
-rw-r--r--app/javascript/mastodon/features/emoji/emoji.js2
-rw-r--r--app/javascript/mastodon/features/emoji/emoji_compressed.d.ts15
-rw-r--r--app/javascript/mastodon/features/emoji/emoji_mart_data_light.ts15
-rw-r--r--app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.js37
-rw-r--r--app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts60
-rw-r--r--app/javascript/mastodon/features/getting_started/components/announcements.jsx2
7 files changed, 76 insertions, 57 deletions
diff --git a/app/javascript/mastodon/components/autosuggest_emoji.jsx b/app/javascript/mastodon/components/autosuggest_emoji.jsx
index 5fa946f7077..28f628b4ac9 100644
--- a/app/javascript/mastodon/components/autosuggest_emoji.jsx
+++ b/app/javascript/mastodon/components/autosuggest_emoji.jsx
@@ -3,7 +3,7 @@ import { PureComponent } from 'react';
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 {
diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js
index c11ef458c74..dd51dc621ea 100644
--- a/app/javascript/mastodon/features/emoji/emoji.js
+++ b/app/javascript/mastodon/features/emoji/emoji.js
@@ -4,7 +4,7 @@ import { assetHost } from 'mastodon/utils/config';
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));
diff --git a/app/javascript/mastodon/features/emoji/emoji_compressed.d.ts b/app/javascript/mastodon/features/emoji/emoji_compressed.d.ts
index 9f0feba06c8..bd41e5b8387 100644
--- a/app/javascript/mastodon/features/emoji/emoji_compressed.d.ts
+++ b/app/javascript/mastodon/features/emoji/emoji_compressed.d.ts
@@ -13,15 +13,20 @@ export type Search = string;
* 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}.
*/
-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 =
| EmojiData['id']
| BaseEmoji['native']
| keyof NimbleEmojiIndex['emojis'];
-export type SearchData = [
+type SearchData = [
BaseEmoji['native'],
Emoji['short_names'],
Search,
@@ -32,9 +37,9 @@ export type ShortCodesToEmojiData = Record<
ShortCodesToEmojiDataKey,
[FilenameData, SearchData]
>;
-export type EmojisWithoutShortCodes = FilenameData[];
+type EmojisWithoutShortCodes = FilenameData;
-export type EmojiCompressed = [
+type EmojiCompressed = [
ShortCodesToEmojiData,
Skins,
Category[],
diff --git a/app/javascript/mastodon/features/emoji/emoji_mart_data_light.ts b/app/javascript/mastodon/features/emoji/emoji_mart_data_light.ts
index 142605b4bc2..ffca1f8b063 100644
--- a/app/javascript/mastodon/features/emoji/emoji_mart_data_light.ts
+++ b/app/javascript/mastodon/features/emoji/emoji_mart_data_light.ts
@@ -30,22 +30,13 @@ const emojis: Emojis = {};
// decompress
Object.keys(shortCodesToEmojiData).forEach((shortCode) => {
const [_filenameData, searchData] = shortCodesToEmojiData[shortCode];
- const native = searchData[0];
- let short_names = searchData[1];
- const search = searchData[2];
- let unified = searchData[3];
+ const [native, short_names, search, unified] = searchData;
- if (!unified) {
- // unified name can be derived from unicodeToUnifiedName
- unified = unicodeToUnifiedName(native);
- }
-
- if (short_names) short_names = [shortCode].concat(short_names);
emojis[shortCode] = {
native,
search,
- short_names,
- unified,
+ short_names: short_names ? [shortCode].concat(short_names) : undefined,
+ unified: unified ?? unicodeToUnifiedName(native),
};
});
diff --git a/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.js b/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.js
deleted file mode 100644
index 3e3834580d3..00000000000
--- a/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.js
+++ /dev/null
@@ -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;
diff --git a/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts b/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts
new file mode 100644
index 00000000000..191419496fb
--- /dev/null
+++ b/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts
@@ -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 };
diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.jsx b/app/javascript/mastodon/features/getting_started/components/announcements.jsx
index 4182e5c9327..a3f379eceea 100644
--- a/app/javascript/mastodon/features/getting_started/components/announcements.jsx
+++ b/app/javascript/mastodon/features/getting_started/components/announcements.jsx
@@ -18,7 +18,7 @@ import { AnimatedNumber } from 'mastodon/components/animated_number';
import { Icon } from 'mastodon/components/icon';
import { IconButton } from 'mastodon/components/icon_button';
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 { assetHost } from 'mastodon/utils/config';
import { WithRouterPropTypes } from 'mastodon/utils/react_router';