Frontend: Display missing emoji as raw text
This commit is contained in:
parent
c3e7791b3e
commit
10bddd886e
|
@ -1,6 +1,6 @@
|
||||||
|
import type { VNode } from "vue";
|
||||||
import { defineComponent, h } from "vue";
|
import { defineComponent, h } from "vue";
|
||||||
import * as mfm from "mfm-js";
|
import * as mfm from "mfm-js";
|
||||||
import type { VNode } from "vue";
|
|
||||||
import MkUrl from "@/components/global/MkUrl.vue";
|
import MkUrl from "@/components/global/MkUrl.vue";
|
||||||
import MkLink from "@/components/MkLink.vue";
|
import MkLink from "@/components/MkLink.vue";
|
||||||
import MagMention from "@/components/MagMention.vue";
|
import MagMention from "@/components/MagMention.vue";
|
||||||
|
@ -11,12 +11,11 @@ import MkSparkle from "@/components/MkSparkle.vue";
|
||||||
import MkA from "@/components/global/MkA.vue";
|
import MkA from "@/components/global/MkA.vue";
|
||||||
import { host } from "@/config";
|
import { host } from "@/config";
|
||||||
import { reducedMotion } from "@/scripts/reduced-motion";
|
import { reducedMotion } from "@/scripts/reduced-motion";
|
||||||
import { defaultStore } from "@/store";
|
|
||||||
import MagEmoji from "@/components/global/MagEmoji.vue";
|
import MagEmoji from "@/components/global/MagEmoji.vue";
|
||||||
import {
|
import {
|
||||||
magConvertReaction,
|
magConvertReaction,
|
||||||
|
magIsMissingEmoji,
|
||||||
magReactionEquals,
|
magReactionEquals,
|
||||||
magReactionToLegacy,
|
|
||||||
magTransProperty,
|
magTransProperty,
|
||||||
} from "@/scripts-mag/mag-util";
|
} from "@/scripts-mag/mag-util";
|
||||||
|
|
||||||
|
@ -542,25 +541,32 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
|
|
||||||
case "emojiCode": {
|
case "emojiCode": {
|
||||||
|
const shortcode = `:${token.props.name}:`;
|
||||||
|
const emoji = magConvertReaction(
|
||||||
|
shortcode,
|
||||||
|
(name, host) =>
|
||||||
|
this.customEmojis.find((e) =>
|
||||||
|
magReactionEquals(
|
||||||
|
magConvertReaction(
|
||||||
|
`:${magTransProperty(
|
||||||
|
e,
|
||||||
|
"shortcode",
|
||||||
|
"name"
|
||||||
|
)}:`
|
||||||
|
),
|
||||||
|
{ name, host, url: null! }
|
||||||
|
)
|
||||||
|
)?.url ?? null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (magIsMissingEmoji(emoji)) {
|
||||||
|
return [shortcode];
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
h(MagEmoji, {
|
h(MagEmoji, {
|
||||||
key: Math.random(),
|
key: Math.random(),
|
||||||
emoji: magConvertReaction(
|
emoji,
|
||||||
`:${token.props.name}:`,
|
|
||||||
(name, host) =>
|
|
||||||
this.customEmojis.find((e) =>
|
|
||||||
magReactionEquals(
|
|
||||||
magConvertReaction(
|
|
||||||
`:${magTransProperty(
|
|
||||||
e,
|
|
||||||
"shortcode",
|
|
||||||
"name"
|
|
||||||
)}:`
|
|
||||||
),
|
|
||||||
{ name, host, url: null! }
|
|
||||||
)
|
|
||||||
)?.url ?? null
|
|
||||||
),
|
|
||||||
normal: this.plain,
|
normal: this.plain,
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
|
@ -226,6 +226,10 @@ export function magIsCustomEmoji(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function magIsMissingEmoji(emoji: types.Reaction): boolean {
|
||||||
|
return magIsCustomEmoji(emoji) && !emoji["url"];
|
||||||
|
}
|
||||||
|
|
||||||
export function magIsUnicodeEmoji(
|
export function magIsUnicodeEmoji(
|
||||||
emoji: types.Reaction
|
emoji: types.Reaction
|
||||||
): emoji is types.ReactionUnicode {
|
): emoji is types.ReactionUnicode {
|
||||||
|
|
Loading…
Reference in New Issue