signal-desktop/ts/quill/emoji/blot.tsx

39 lines
1,022 B
TypeScript

// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import Parchment from 'parchment';
import Quill from 'quill';
import { emojiToImage } from '../../components/emoji/lib';
const Embed: typeof Parchment.Embed = Quill.import('blots/embed');
// the DOM structure of this EmojiBlot should match the other emoji implementations:
// ts/components/conversation/Emojify.tsx
// ts/components/emoji/Emoji.tsx
export class EmojiBlot extends Embed {
static blotName = 'emoji';
static tagName = 'img';
static className = 'emoji-blot';
static create(emoji: string): Node {
const node = super.create(undefined) as HTMLElement;
node.dataset.emoji = emoji;
const image = emojiToImage(emoji);
node.setAttribute('src', image || '');
node.setAttribute('data-emoji', emoji);
node.setAttribute('title', emoji);
node.setAttribute('aria-label', emoji);
return node;
}
static value(node: HTMLElement): string | undefined {
return node.dataset.emoji;
}
}