feat: try to load any 'valid' emoji

This commit is contained in:
Paul Makles 2022-07-10 13:53:19 +01:00
parent 2b65e98cd3
commit 0ec7e5e116
2 changed files with 24 additions and 8 deletions

2
external/lang vendored

@ -1 +1 @@
Subproject commit 58408da6c4090dd3a7808a663eaa95b8b1da7603 Subproject commit 8a5984ed8f336637e9aa60ef3934e2bc5b9023e9

View file

@ -1,5 +1,7 @@
import styled from "styled-components"; import styled from "styled-components";
import { useState } from "preact/hooks";
import { emojiDictionary } from "../../../assets/emojis"; import { emojiDictionary } from "../../../assets/emojis";
import { clientController } from "../../../controllers/client/ClientController"; import { clientController } from "../../../controllers/client/ClientController";
import { parseEmoji } from "../../common/Emoji"; import { parseEmoji } from "../../common/Emoji";
@ -12,34 +14,48 @@ const Emoji = styled.img`
width: var(--emoji-size); width: var(--emoji-size);
margin: 0 0.05em 0 0.1em; margin: 0 0.05em 0 0.1em;
vertical-align: -0.2em; vertical-align: -0.2em;
img:before {
content: " ";
display: block;
position: absolute;
height: 50px;
width: 50px;
background-image: url(ishere.jpg);
}
`; `;
export function RenderEmoji({ match }: CustomComponentProps) { export function RenderEmoji({ match }: CustomComponentProps) {
const [fail, setFail] = useState(false);
const url = const url =
match in emojiDictionary match in emojiDictionary
? parseEmoji(emojiDictionary[match as keyof typeof emojiDictionary]) ? parseEmoji(emojiDictionary[match as keyof typeof emojiDictionary])
: clientController.getAvailableClient().emojis!.get(match)! : `${
.imageURL; clientController.getAvailableClient().configuration?.features
.autumn.url
}/emojis/${match}`;
if (fail) return <span>{`:${match}:`}</span>;
return ( return (
<Emoji <Emoji
alt={match} alt={`:${match}:`}
loading="lazy" loading="lazy"
className="emoji" className="emoji"
draggable={false} draggable={false}
src={url} src={url}
onError={() => setFail(true)}
/> />
); );
} }
const RE_EMOJI = /:([a-zA-Z0-9_]+):/g; const RE_EMOJI = /:([a-zA-Z0-9_+]+):/g;
const RE_ULID = /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$/;
export const remarkEmoji = createComponent( export const remarkEmoji = createComponent(
"emoji", "emoji",
RE_EMOJI, RE_EMOJI,
(match) => (match) => match in emojiDictionary || RE_ULID.test(match),
match in emojiDictionary ||
clientController.getAvailableClient().emojis?.has(match),
); );
export function isOnlyEmoji(text: string) { export function isOnlyEmoji(text: string) {