Files
cinny/src/app/plugins/emoji.ts
T

105 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-06-12 21:15:23 +10:00
import { CompactEmoji } from 'emojibase';
import emojisData from 'emojibase-data/en/compact.json';
import joypixels from 'emojibase-data/en/shortcodes/joypixels.json';
import emojibase from 'emojibase-data/en/shortcodes/emojibase.json';
export type IEmoji = CompactEmoji & {
shortcode: string;
};
export enum EmojiGroupId {
People = 'People',
Nature = 'Nature',
Food = 'Food',
Activity = 'Activity',
Travel = 'Travel',
Object = 'Object',
Symbol = 'Symbol',
Flag = 'Flag',
}
export type IEmojiGroup = {
id: EmojiGroupId;
order: number;
emojis: IEmoji[];
};
export const emojiGroups: IEmojiGroup[] = [
{
id: EmojiGroupId.People,
order: 0,
emojis: [],
},
{
id: EmojiGroupId.Nature,
order: 1,
emojis: [],
},
{
id: EmojiGroupId.Food,
order: 2,
emojis: [],
},
{
id: EmojiGroupId.Activity,
order: 3,
emojis: [],
},
{
id: EmojiGroupId.Travel,
order: 4,
emojis: [],
},
{
id: EmojiGroupId.Object,
order: 5,
emojis: [],
},
{
id: EmojiGroupId.Symbol,
order: 6,
emojis: [],
},
{
id: EmojiGroupId.Flag,
order: 7,
emojis: [],
},
];
export const emojis: IEmoji[] = [];
function addEmojiToGroup(groupIndex: number, emoji: IEmoji) {
emojiGroups[groupIndex].emojis.push(emoji);
}
function getGroupIndex(emoji: IEmoji): number | undefined {
if (emoji.group === 0 || emoji.group === 1) return 0;
if (emoji.group === 3) return 1;
if (emoji.group === 4) return 2;
if (emoji.group === 6) return 3;
if (emoji.group === 5) return 4;
if (emoji.group === 7) return 5;
if (emoji.group === 8 || typeof emoji.group === 'undefined') return 6;
if (emoji.group === 9) return 7;
return undefined;
}
emojisData.forEach((emoji) => {
const myShortCodes = joypixels[emoji.hexcode] || emojibase[emoji.hexcode];
if (!myShortCodes) return;
if (Array.isArray(myShortCodes) && myShortCodes.length === 0) return;
const em: IEmoji = {
...emoji,
shortcode: Array.isArray(myShortCodes) ? myShortCodes[0] : myShortCodes,
shortcodes: Array.isArray(myShortCodes) ? myShortCodes : emoji.shortcodes,
};
const groupIndex = getGroupIndex(em);
if (groupIndex !== undefined) {
addEmojiToGroup(groupIndex, em);
emojis.push(em);
}
});