mirror of
https://github.com/mastodon/mastodon.git
synced 2025-01-10 04:06:27 +01:00
Refactor and improve emoji sanitization function
The emoji sanitization function has been refactored for better handling of emoji variations. New types have been imported from 'emoji-mart', allowing for a more precise type assignment for the emoji input and output. Bound checking operations have been adjusted to better accommodate and handle custom emojis and skin variations.
This commit is contained in:
parent
562c8778fb
commit
4845f5a50d
@ -1,6 +1,12 @@
|
|||||||
// This code is largely borrowed from:
|
// This code is largely borrowed from:
|
||||||
// https://github.com/missive/emoji-mart/blob/5f2ffcc/src/utils/index.js
|
// https://github.com/missive/emoji-mart/blob/5f2ffcc/src/utils/index.js
|
||||||
|
|
||||||
|
import type {
|
||||||
|
BaseEmoji,
|
||||||
|
CustomEmoji,
|
||||||
|
EmojiSkin,
|
||||||
|
PickerProps,
|
||||||
|
} from 'emoji-mart';
|
||||||
import type { Emoji } from 'emoji-mart/dist-es/utils/data';
|
import type { Emoji } from 'emoji-mart/dist-es/utils/data';
|
||||||
|
|
||||||
import * as data from './emoji_mart_data_light';
|
import * as data from './emoji_mart_data_light';
|
||||||
@ -46,22 +52,27 @@ function unifiedToNative(unified: Emoji['unified']) {
|
|||||||
return String.fromCodePoint(...codePoints);
|
return String.fromCodePoint(...codePoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* eslint-disable */
|
function sanitize(
|
||||||
|
emoji: BaseEmoji &
|
||||||
|
CustomEmoji &
|
||||||
|
Pick<Emoji, 'skin_variations'> &
|
||||||
|
Pick<PickerProps, 'custom'> & { skin_tone?: EmojiSkin },
|
||||||
|
):
|
||||||
|
| BaseEmoji
|
||||||
|
| (Omit<CustomEmoji, 'short_names'> & Pick<PickerProps, 'custom'>) {
|
||||||
|
const {
|
||||||
|
name = '',
|
||||||
|
short_names = [],
|
||||||
|
skin_tone,
|
||||||
|
skin_variations,
|
||||||
|
emoticons = [],
|
||||||
|
unified = '',
|
||||||
|
custom,
|
||||||
|
imageUrl,
|
||||||
|
} = emoji;
|
||||||
|
const id = emoji.id || short_names[0];
|
||||||
|
|
||||||
// @ts-expect-error
|
let colons = `:${id}:`;
|
||||||
function sanitize(emoji) {
|
|
||||||
let {
|
|
||||||
name,
|
|
||||||
short_names,
|
|
||||||
skin_tone,
|
|
||||||
skin_variations,
|
|
||||||
emoticons,
|
|
||||||
unified,
|
|
||||||
custom,
|
|
||||||
imageUrl,
|
|
||||||
} = emoji,
|
|
||||||
id = emoji.id || short_names[0],
|
|
||||||
colons = `:${id}:`;
|
|
||||||
|
|
||||||
if (custom) {
|
if (custom) {
|
||||||
return {
|
return {
|
||||||
@ -84,11 +95,13 @@ function sanitize(emoji) {
|
|||||||
colons,
|
colons,
|
||||||
emoticons,
|
emoticons,
|
||||||
unified: unified.toLowerCase(),
|
unified: unified.toLowerCase(),
|
||||||
skin: skin_tone || (skin_variations ? 1 : null),
|
skin: skin_tone ?? (skin_variations ? 1 : null),
|
||||||
native: unifiedToNative(unified),
|
native: unifiedToNative(unified),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
function getSanitizedData() {
|
function getSanitizedData() {
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
return sanitize(getData(...arguments));
|
return sanitize(getData(...arguments));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user